Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Install includes to include/${PROJECT_NAME} #1194

Closed
elfenpiff opened this issue Mar 2, 2022 · 1 comment · Fixed by #1189 or #1232
Closed

Install includes to include/${PROJECT_NAME} #1194

elfenpiff opened this issue Mar 2, 2022 · 1 comment · Fixed by #1189 or #1232

Comments

@elfenpiff
Copy link
Contributor

Brief feature description

Adds a CMake option APPEND_PROJECT_NAME_TO_INCLUDEDIR defaulting to ON
that appends ${PROJECT_NAME} to the directory headers are installed. This is to support ros2/ros2#1150.

Pretty similar to eclipse-cyclonedds/cyclonedds#1169

When using ROS 2 and Colcon it's possible to have two versions of a package installed: typically one from the debian packages (like ros-[rosdistro]-iceoryx-binding-c) and another in a from-source workspace. In Colcon terms this is called "overriding a package", and the /opt/ros/[rosdistro] folder would be called the underlay while the from-source workspace would be called the overlay. A user would do this when they want to try a newer version of a package without building everything from source.

When two or more packages install their headers to the same directory in an underlay, it becomes possible for packages in the overlay to accidentally find the headers of an overridden package in the underlay. This can cause build failures or undefined behavior at runtime depending on the differences between the headers in the overridden and overriding packages. The exact conditions this happens are a little complicated, so I'll skip writing it out here. In ROS 2 we're solving the issue by making every package install its headers to a unique folder using ${PROJECT_NAME}.

@elfenpiff
Copy link
Contributor Author

FYI: @sloretz

sloretz added a commit to sloretz/iceoryx that referenced this issue Mar 2, 2022
Adds a CMake option APPEND_PROJECT_NAME_TO_INCLUDEDIR defaulting to ON
that appends ${PROJECT_NAME} to the directory headers are installed.
This is to support ros2/ros2#1150.

See also: eclipse-cyclonedds/cyclonedds#1169

When using ROS 2 and Colcon it's possible to have two versions of a
package installed: typically one from the debian packages (like
ros-[rosdistro]-iceoryx-binding-c) and another in a from-source
workspace. In Colcon terms this is called "overriding a package", and
the /opt/ros/[rosdistro] folder would be called the underlay while the
from-source workspace would be called the overlay. A user would do this
when they want to try a newer version of a package without building
everything from source.

When two or more packages install their headers to the same directory
in an underlay, it becomes possible for packages in the overlay to
accidentally find the headers of an overridden package in the underlay.
This can cause build failures or undefined behavior at runtime
depending on the differences between the headers in the overridden and
overriding packages. The issue is avoided if a package installs its
headers to a unique folder using ${PROJECT_NAME}.

Signed-off-by: Shane Loretz <shane.loretz@gmail.com>
sloretz added a commit to sloretz/iceoryx that referenced this issue Mar 3, 2022
This installs headers to a unique include directory by default. The
directory name is `include/vX.Y.Z` where `X.Y.Z` is the current version
of iceoryx.

The behavior is controllable using a new CMake option
MAKE_UNIQUE_INCLUDEDIR. When `ON` the new behavior is used. When `OFF`
headers are installed to `include` as they were before.

Signed-off-by: Shane Loretz <shane.loretz@gmail.com>
sloretz added a commit to sloretz/iceoryx that referenced this issue Mar 3, 2022
Signed-off-by: Shane Loretz <shane.loretz@gmail.com>
dkroenke added a commit to ApexAI/iceoryx that referenced this issue Mar 4, 2022
…teway

Signed-off-by: Dietrich Krönke <dietrich.kroenke@apex.ai>
elBoberido added a commit that referenced this issue Mar 4, 2022
…ct_name

iox-#1194 Install includes to include/${PROJECT_NAME}
@elBoberido elBoberido reopened this Mar 4, 2022
dkroenke added a commit that referenced this issue Mar 4, 2022
…que-dds-gateway-introspection

iox-#1194 Unique include path for introspection dds gateway
mossmaurice added a commit to ApexAI/iceoryx that referenced this issue Jul 16, 2022
Signed-off-by: Simon Hoinkis <simon.hoinkis@apex.ai>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants