After a long, long wait, release 2.6.4 is out. There are a lot of changes. The biggest changes are not feature changes.
This release has a lot in it. First many thanks to the contributors who did all the hard work: Heath, wegel, Dominik and ptsOSL! I think I caught all of you. If I missed someone, please tell me!
This contains:
- Smarter handling for OMRON. Better support for multi-request packets. To really finish this we will need to add some level of tag metadata retrieval to the OMRON code.
- ab_server changes (mostly thanks to contributors listed above!):
- Multithreading!
- Index handling now mirrors what real Rockwell PLCs do.
- Fixes for double free and use after free issues.
- More sanity checks for packets. Incoming packets are more carefully checked.
- A fix for [497](
https://github.com/libplctag/libplctag/issues/497) that was found by user EchoHowardLam-GTS. This started a lot of refactoring and rethinking.
- A huge refactor of how CMake config is set up. Most of it is broken out into individual files and is much, much easier to understand. But it is not all finished.
- The example binaries are now linked statically to libplctag to make those executables easier to run. I am aiming for fully static linking eventually but getting this release out had priority.
- Reorganization of the source tree into more meaningful subdirectories. This and the CMake refactoring go together. This is part of a longer process to refactor out common elements and reduce code duplication.
- Many compiler warnings fixed. At least with Clang and GCC warnings. MSVC is fairly happy now too. There are still some warnings. Over the next couple of releases I aim to have zero compiler warnings.
- The base release configuration has changed to MinSizeRel in CMake. This is a build configuration that optimizes for binary size (smaller). Very few, if any, parts of libplctag are CPU bound. Having small code is better for users that are working with smaller devices and lower memory requirements.
Known issues:
- MinGW is not working. This will be coming in another drop. Hopefully 2.6.5.
- Changes on the GitHub CI runners have made it much, much harder to build binaries for 32-bit ARM Windows. I have spent too many days delaying the release trying to track this down. So ARM 32-bit builds for Windows are removed for now. File an issue if you really need 32-bit ARM Windows binaries.
- The Zip files are much larger because the examples are mostly statically linked.
- The contributed CLI tool is currently not being built. That will come as soon as I get MinGW working. It has suffered some bit-rot and needs to be updated to avoid a lot of compiler warnings and potentially unsafe code.
Going forward there will be more refactoring. There are many areas where code can be combined and/or simplified. I will continue to simplify the CMake use so that it can be much more generic and use the defaults most of the time. The end goal is to make feature additions and bug fixes take much less time.
I will be releasing updates in the future to fix the missing MinGW support and CLI build. All my attempts to build 32-bit ARM Windows binaries end up trying to use MinGW, so that needs to work before I can fix that.