ROS2 packaging for the Simple Open EtherCAT Master Library (SOEM)
The upstream library is imported via FetchContent from the SOEM repository and packaged in a ROS compatible way.
This package is licensed under BSD 3-Clause license.
SOEM itself is licensed under GPLv2 with an exception for static and dynamic linking.
NOTE: This is only true until version 1.4.0 of SOEM. With version 2.0.0 SOEM is now licensed under GPLv3. Therefore this package uses version 1.4.0
In the CMakeList we prefix the include statements for all SOEM headers in the export headers with soem_vendor. Otherwise compilation of downstream packages will fail.
Background: The reason this workaround is needed is that SOEM does not package its headers into a project specific subfolder as you'd expect it from most modern cmake and ROS packages. When you access SOEM from your project you would want to write statements such as:
#include <soem_vendor/a_soem_header.h>
On the contrary the headers themselves directly include each other:
#include <a_soem_header.h>
Without adding the soem_vendor include directory to your CMakeLists the compilation will fail because the headers are not found. With this workaround this step is not needed anymore and allows you to write a default ROS2 CMakeLists.txt.