diff --git a/recipes-ros/catkin/catkin.inc b/recipes-ros/catkin/catkin.inc index 0395e10..4fd8c3d 100644 --- a/recipes-ros/catkin/catkin.inc +++ b/recipes-ros/catkin/catkin.inc @@ -13,6 +13,7 @@ SRC_URI += "\ file://0001-CATKIN_WORKSPACES-Don-t-require-.catkin-file.patch \ file://0001-use-python-provided-by-environment-instead-of-the-ge.patch \ file://0001-avoid-using-host-s-paths-when-cross-compiling.patch \ + file://0001-relocate-dependency-s-headers-to-current-sysroot.patch \ " inherit catkin diff --git a/recipes-ros/catkin/files/0001-relocate-dependency-s-headers-to-current-sysroot.patch b/recipes-ros/catkin/files/0001-relocate-dependency-s-headers-to-current-sysroot.patch new file mode 100644 index 0000000..4370787 --- /dev/null +++ b/recipes-ros/catkin/files/0001-relocate-dependency-s-headers-to-current-sysroot.patch @@ -0,0 +1,80 @@ +From b0ad0d6e6a7872c59180596d29ac5f52723c4317 Mon Sep 17 00:00:00 2001 +From: Dmitry Rozhkov +Date: Wed, 22 Feb 2017 13:48:37 +0200 +Subject: [PATCH] relocate dependency's headers to current sysroot + +If a package (A) depends on another package (B) and the package +B depends on Boost then it might happen that B produces BConfig.cmake +file where absolute paths to Boost's headers are put (because CMake's +standard FindBoost.cmake module reports absolute paths). In case of +Yocto it means that BConfig.cmake will contain something like +/path/to/build/tmp-glibc/work/i586/package_B/0.0.1/recipe-sysroot/usr/include. +The path may not exist at the moment when the package A is being built. +And that leads to the failure of the check this patch switches off. + +The problem has been reported to catkin's issue tracker: +https://github.com/ros/catkin/issues/851 + +This patch "relocates" required headers from dependencies' sysroots +to the current sysroot by removing sysroot prefix from include dirs +in *Config.cmake files at the moment the files get created and +by prepending the include dirs again with the current sysroot prefix. + +Upstream-Status: Inappropriate [suitable for Yocto's RSS feature only] + +Signed-off-by: Dmitry Rozhkov + +--- + cmake/catkin_package.cmake | 5 ++++- + cmake/templates/pkgConfig.cmake.in | 10 +++++++--- + 2 files changed, 11 insertions(+), 4 deletions(-) + +diff --git a/cmake/catkin_package.cmake b/cmake/catkin_package.cmake +index 71f700f..818ccd9 100644 +--- a/cmake/catkin_package.cmake ++++ b/cmake/catkin_package.cmake +@@ -161,7 +161,10 @@ function(_catkin_package) + if(NOT ${${depend_name}_FOUND}) + message(FATAL_ERROR "catkin_package() DEPENDS on '${depend_name}' which must be find_package()-ed before. If it is a catkin package it can be declared as CATKIN_DEPENDS instead without find_package()-ing it.") + endif() +- list(APPEND PROJECT_DEPENDENCIES_INCLUDE_DIRS ${${depend_name}_INCLUDE_DIRS}) ++ foreach(incdir ${${depend_name}_INCLUDE_DIRS}) ++ string(REPLACE ${ROOT_PATH} "" tweaked_idir ${incdir}) ++ list_append_deduplicate(PROJECT_DEPENDENCIES_INCLUDE_DIRS ${tweaked_idir}) ++ endforeach() + list(APPEND PROJECT_DEPENDENCIES_LIBRARIES ${${depend_name}_LIBRARIES}) + endif() + endforeach() +diff --git a/cmake/templates/pkgConfig.cmake.in b/cmake/templates/pkgConfig.cmake.in +index c692108..683ef67 100644 +--- a/cmake/templates/pkgConfig.cmake.in ++++ b/cmake/templates/pkgConfig.cmake.in +@@ -94,18 +94,22 @@ set(@PROJECT_NAME@_FOUND_CATKIN_PROJECT TRUE) + if(NOT "@PROJECT_CMAKE_CONFIG_INCLUDE_DIRS@ " STREQUAL " ") + set(@PROJECT_NAME@_INCLUDE_DIRS "") + set(_include_dirs "@PROJECT_CMAKE_CONFIG_INCLUDE_DIRS@") ++ list(GET CMAKE_FIND_ROOT_PATH 0 root_path) + foreach(idir ${_include_dirs}) ++ if(IS_ABSOLUTE ${idir} AND NOT "${idir}" MATCHES "^${root_path}.*") ++ set(idir "${root_path}${idir}") ++ endif() + if(IS_ABSOLUTE ${idir} AND IS_DIRECTORY ${idir}) +- set(include ${idir}) ++ _list_append_unique(@PROJECT_NAME@_INCLUDE_DIRS ${idir}) + elseif("${idir} " STREQUAL "@CATKIN_GLOBAL_INCLUDE_DESTINATION@ ") + get_filename_component(include "${@PROJECT_NAME@_DIR}/../../../@CATKIN_GLOBAL_INCLUDE_DESTINATION@" ABSOLUTE) + if(NOT IS_DIRECTORY ${include}) + message(FATAL_ERROR "Project '@PROJECT_NAME@' specifies '${idir}' as an include dir, which is not found. It does not exist in '${include}'. Ask the maintainer '@PROJECT_MAINTAINER@' to fix it.") + endif() ++ _list_append_unique(@PROJECT_NAME@_INCLUDE_DIRS ${include}) + else() +- message(FATAL_ERROR "Project '@PROJECT_NAME@' specifies '${idir}' as an include dir, which is not found. It does neither exist as an absolute directory nor in '@PKG_INCLUDE_PREFIX@/${idir}'. Ask the maintainer '@PROJECT_MAINTAINER@' to fix it.") ++ message(WARNING "Project '@PROJECT_NAME@' specifies '${idir}' as an include dir, which is not found. It does neither exist as an absolute directory nor in '@PKG_INCLUDE_PREFIX@/${idir}'. Ask the maintainer '@PROJECT_MAINTAINER@' to fix it.") + endif() +- _list_append_unique(@PROJECT_NAME@_INCLUDE_DIRS ${include}) + endforeach() + endif() + +-- +2.7.4 +