From 8754c01a238b3d02f6be47fb79e2f653549315c9 Mon Sep 17 00:00:00 2001 From: Dominique Hunziker Date: Fri, 2 Jun 2017 10:23:48 +0200 Subject: [PATCH 01/12] reorganize how files & dependencies are split between catkin & catkin-runtime --- classes/catkin.bbclass | 14 ++++- recipes-ros/catkin/catkin-runtime_0.6.19.bb | 10 +++- recipes-ros/catkin/catkin.inc | 13 ----- recipes-ros/catkin/catkin_0.6.19.bb | 18 ++++-- ...ORKSPACES-Don-t-require-.catkin-file.patch | 56 ------------------- 5 files changed, 36 insertions(+), 75 deletions(-) delete mode 100644 recipes-ros/catkin/files/0001-CATKIN_WORKSPACES-Don-t-require-.catkin-file.patch diff --git a/classes/catkin.bbclass b/classes/catkin.bbclass index 9fa086e..9d83929 100644 --- a/classes/catkin.bbclass +++ b/classes/catkin.bbclass @@ -6,17 +6,29 @@ ROS_USE_PYTHON3 ??= "no" inherit cmake ${@'distutils3-base' if bb.utils.to_boolean(d.getVar('ROS_USE_PYTHON3', True)) else 'distutils-base'} ros faulty-solibs -DEPENDS_prepend = "${@'' if (d.getVar('BPN', True) == 'catkin') or (d.getVar('BPN', True) == 'catkin-runtime') else 'catkin-native '}" +# Prepend build dependency on "catkin-runtime" and "catkin-native" +# if the package is not "catkin" or "catkin-runtime" +DEPENDS =+ "${@'' if d.getVar('BPN', True) in ('catkin', 'catkin-runtime') else 'catkin-runtime catkin-native'}" + +# Prepend run dependency on "catkin-runtime" for base packages +# if the package is not "catkin" or "catkin-runtime" +RDEPENDS_${PN} =+ "${@'' if d.getVar('BPN', True) in ('catkin', 'catkin-runtime') else 'catkin-runtime'}" + +# Prepend run dependency on "catkin" for dev packages +# if the package is not "catkin" or "catkin-runtime" +RDEPENDS_${PN}-dev =+ "${@'' if d.getVar('BPN', True) in ('catkin', 'catkin-runtime') else 'catkin'}" EXTRA_OECMAKE_CATKIN = "\ -DCMAKE_PREFIX_PATH='${STAGING_DIR_HOST}${ros_prefix};${STAGING_DIR_HOST}${prefix};${STAGING_DIR_NATIVE}${ros_prefix};${STAGING_DIR_NATIVE}${prefix}' \ -DCMAKE_INSTALL_PREFIX:PATH='${ros_prefix}' \ + -DCATKIN_DEVEL_PREFIX='${WORKDIR}/devel' \ " EXTRA_OECMAKE_CATKIN_class-native = "\ -DCMAKE_PREFIX_PATH='${ros_prefix}' \ -DCMAKE_INSTALL_PREFIX:PATH='${ros_prefix}' \ -DRT_LIBRARY=${libdir_native} \ + -DCATKIN_DEVEL_PREFIX='${WORKDIR}/devel' \ " EXTRA_OECMAKE_prepend = "\ diff --git a/recipes-ros/catkin/catkin-runtime_0.6.19.bb b/recipes-ros/catkin/catkin-runtime_0.6.19.bb index 2f5256c..634a203 100644 --- a/recipes-ros/catkin/catkin-runtime_0.6.19.bb +++ b/recipes-ros/catkin/catkin-runtime_0.6.19.bb @@ -11,7 +11,8 @@ S = "${WORKDIR}/catkin-${PV}" # This package includes ONLY the python packages AND catkin_find # The catkin_${PV} package includes all other files # from the catkin tool. -FILES_${PN} = "${PYTHON_SITEPACKAGES_DIR} ${ros_bindir}/catkin_find" +FILES_${PN} = "${PYTHON_SITEPACKAGES_DIR} ${ros_bindir}/catkin_find ${ros_prefix}/.catkin" +FILES_${PN}-dev = "" RDEPENDS_${PN}_class-native = "" RDEPENDS_${PN} = "\ @@ -26,6 +27,13 @@ do_install_append() { rm ${D}${ros_bindir}/catkin_make rm -rf ${D}${ros_datadir} rm -rf ${D}${ros_libdir}/pkgconfig + + # Manually add the marker file + touch ${D}${ros_prefix}/.catkin +} + +catkin_sysroot_preprocess_append() { + install -m 644 -t ${SYSROOT_DESTDIR}${ros_prefix} ${D}${ros_prefix}/.catkin } BBCLASSEXTEND += "native" diff --git a/recipes-ros/catkin/catkin.inc b/recipes-ros/catkin/catkin.inc index 157c931..b128a94 100644 --- a/recipes-ros/catkin/catkin.inc +++ b/recipes-ros/catkin/catkin.inc @@ -10,7 +10,6 @@ SRC_URI[md5sum] = "d58460cc9112812d8c4e6ecf98bbcc85" SRC_URI[sha256sum] = "90a639d67db7f9039487af555e432a5b4b6e339f22892d75d03b823b3f38c947" 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 \ @@ -18,15 +17,3 @@ SRC_URI += "\ " inherit catkin - -FILES_${PN}-dev += "\ - ${ros_datadir}/eigen/cmake \ - ${ros_datadir}/ros/cmake \ - ${ros_datadir}/.catkin \ - ${ros_prefix}/.catkin \ - ${ros_prefix}/.rosinstall \ - ${ros_prefix}/_setup_util.py \ - ${ros_prefix}/env.sh \ - ${ros_prefix}/setup.* \ - " - diff --git a/recipes-ros/catkin/catkin_0.6.19.bb b/recipes-ros/catkin/catkin_0.6.19.bb index c74f998..ecb5785 100644 --- a/recipes-ros/catkin/catkin_0.6.19.bb +++ b/recipes-ros/catkin/catkin_0.6.19.bb @@ -2,15 +2,25 @@ require catkin.inc DEPENDS_class-native += "catkin-runtime" -RDEPENDS_${PN}_class-native = "${PYTHON_PN}-catkin-pkg" -RDEPENDS_${PN} = "cmake make binutils binutils-symlinks gcc gcc-symlinks g++ g++-symlinks \ - catkin-runtime" - # The files in ${PYTHON_SITEPACKAGES_DIR} and catkin_find are # installed by the catkin-runtime package. Therefore, we remove # them here so that they are not installed. # Moreover: the ${ros_libdir}/python2.7 is empty. We need to # remove it, otherwise the QA error [installed-vs-shipped] will hit on us. +FILES_${PN} = "\ + ${ros_bindir}/catkin_*_* \ + ${ros_bindir}/catkin_make \ + ${ros_libdir}/pkgconfig \ + ${ros_datadir} \ + ${ros_sysconfdir} \ + ${ros_stackdir} \ + " +FILES_${PN}-dev = "" + +RDEPENDS_${PN}_class-native = "${PYTHON_PN}-catkin-pkg" +RDEPENDS_${PN} = "cmake make binutils binutils-symlinks gcc gcc-symlinks g++ g++-symlinks \ + catkin-runtime ${PYTHON_PN}-empy" + do_install_append() { rm ${D}${ros_bindir}/catkin_find rm -rf ${D}${PYTHON_SITEPACKAGES_DIR} diff --git a/recipes-ros/catkin/files/0001-CATKIN_WORKSPACES-Don-t-require-.catkin-file.patch b/recipes-ros/catkin/files/0001-CATKIN_WORKSPACES-Don-t-require-.catkin-file.patch deleted file mode 100644 index 07d7127..0000000 --- a/recipes-ros/catkin/files/0001-CATKIN_WORKSPACES-Don-t-require-.catkin-file.patch +++ /dev/null @@ -1,56 +0,0 @@ -From a34e7d9d7f77c123cb8cbf464ead628f97e42fd4 Mon Sep 17 00:00:00 2001 -From: Stefan Herbrechtsmeier -Date: Wed, 13 Mar 2013 11:49:17 +0100 -Subject: [PATCH] CATKIN_WORKSPACES: Don't require .catkin file - -Upstream-Status: Inappropriate [only for our setup] - -Signed-off-by: Stefan Herbrechtsmeier ---- - cmake/all.cmake | 8 +++----- - cmake/list_insert_in_workspace_order.cmake | 9 ++++----- - 2 files changed, 7 insertions(+), 10 deletions(-) - -diff --git a/cmake/all.cmake b/cmake/all.cmake -index 83da965..a5f9df9 100644 ---- a/cmake/all.cmake -+++ b/cmake/all.cmake -@@ -44,11 +44,9 @@ set(CMAKE_PREFIX_PATH_AS_IS ${CMAKE_PREFIX_PATH}) - # list of unique catkin workspaces based on CMAKE_PREFIX_PATH - set(CATKIN_WORKSPACES "") - foreach(path ${CMAKE_PREFIX_PATH}) -- if(EXISTS "${path}/.catkin") -- list(FIND CATKIN_WORKSPACES ${path} _index) -- if(_index EQUAL -1) -- list(APPEND CATKIN_WORKSPACES ${path}) -- endif() -+ list(FIND CATKIN_WORKSPACES ${path} _index) -+ if(_index EQUAL -1) -+ list(APPEND CATKIN_WORKSPACES ${path}) - endif() - endforeach() - if(CATKIN_WORKSPACES) -diff --git a/cmake/list_insert_in_workspace_order.cmake b/cmake/list_insert_in_workspace_order.cmake -index 57ade4a..46887af 100644 ---- a/cmake/list_insert_in_workspace_order.cmake -+++ b/cmake/list_insert_in_workspace_order.cmake -@@ -4,12 +4,11 @@ - set(CATKIN_ORDERED_SPACES "") - foreach(_space ${CATKIN_DEVEL_PREFIX} ${CATKIN_WORKSPACES}) - list(APPEND CATKIN_ORDERED_SPACES ${_space}) -- if(NOT EXISTS "${_space}/.catkin") -- message(FATAL_ERROR "The path '${_space}' is in CATKIN_WORKSPACES but does not have a .catkin file") -+ if(EXISTS "${_space}/.catkin") -+ # prepend to existing list of sourcespaces -+ file(READ "${_space}/.catkin" _sourcespaces) -+ list(APPEND CATKIN_ORDERED_SPACES ${_sourcespaces}) - endif() -- # prepend to existing list of sourcespaces -- file(READ "${_space}/.catkin" _sourcespaces) -- list(APPEND CATKIN_ORDERED_SPACES ${_sourcespaces}) - endforeach() - - debug_message(10 "CATKIN_ORDERED_SPACES ${CATKIN_ORDERED_SPACES}") --- -1.7.0.4 - From 78015372a5a10c21376b00d9a58ae65a8c17b8f5 Mon Sep 17 00:00:00 2001 From: Dominique Hunziker Date: Fri, 2 Jun 2017 11:52:35 +0200 Subject: [PATCH 02/12] python-catkin-pkg: add missing run dependency on python-unixadmin catkin_create_pkg depends on getpass which is part of python-unixadmin. --- recipes-devtools/python/python-catkin-pkg.inc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/recipes-devtools/python/python-catkin-pkg.inc b/recipes-devtools/python/python-catkin-pkg.inc index 72ea002..72260e6 100644 --- a/recipes-devtools/python/python-catkin-pkg.inc +++ b/recipes-devtools/python/python-catkin-pkg.inc @@ -9,4 +9,7 @@ SRC_URI[sha256sum] = "d4d069eaeb29d6a9ee71773b20c41515b6e0feb9ea2765ebaf3e599d0c inherit pypi +RDEPENDS_${PN} = "${PYTHON_PN}-unixadmin" +RDEPENDS_${PN}_class-native = "" + BBCLASSEXTEND = "native" From 63e8d471f138f770424d3ca65a9da37c5304f2e5 Mon Sep 17 00:00:00 2001 From: Dominique Hunziker Date: Fri, 2 Jun 2017 11:57:54 +0200 Subject: [PATCH 03/12] roslib: use Python provided by environment in environment hook --- .../0001-use-env-to-get-python-exec.patch | 21 +++++++++++++++++++ recipes-ros/ros/roslib_1.11.14.bb | 2 ++ 2 files changed, 23 insertions(+) create mode 100644 recipes-ros/ros/files/0001-use-env-to-get-python-exec.patch diff --git a/recipes-ros/ros/files/0001-use-env-to-get-python-exec.patch b/recipes-ros/ros/files/0001-use-env-to-get-python-exec.patch new file mode 100644 index 0000000..32bc417 --- /dev/null +++ b/recipes-ros/ros/files/0001-use-env-to-get-python-exec.patch @@ -0,0 +1,21 @@ +diff -u -r new/env-hooks/10.ros.sh.em old/env-hooks/10.ros.sh.em +--- old/env-hooks/10.ros.sh.em 2016-03-04 23:20:35.255706716 +0100 ++++ new/env-hooks/10.ros.sh.em 2016-03-04 23:19:24.727707608 +0100 +@@ -1,7 +1,7 @@ + # generated from ros/env-hooks/10.ros.sh.em + + # scrub old ROS bin dirs, to avoid accidentally finding the wrong executables +-export PATH="`@(PYTHON_EXECUTABLE) -c \"import os; print(os.pathsep.join([x for x in \\\"$PATH\\\".split(os.pathsep) if not any([d for d in ['cturtle', 'diamondback', 'electric', 'fuerte'] if d in x])]))\"`" ++export PATH="`/usr/bin/env python -c \"import os; print(os.pathsep.join([x for x in \\\"$PATH\\\".split(os.pathsep) if not any([d for d in ['cturtle', 'diamondback', 'electric', 'fuerte'] if d in x])]))\"`" + + if [ -n "$ROS_DISTRO" -a "$ROS_DISTRO" != "indigo" ]; then + echo "ROS_DISTRO was set to '$ROS_DISTRO' before. Please make sure that the environment does not mix paths from different distributions." +@@ -30,7 +30,7 @@ + print(os.pathsep.join(paths)) + EOF + ) +-export ROS_PACKAGE_PATH="`@(PYTHON_EXECUTABLE) -c \"$PYTHON_CODE_BUILD_ROS_PACKAGE_PATH\"`" ++export ROS_PACKAGE_PATH="`/usr/bin/env python -c \"$PYTHON_CODE_BUILD_ROS_PACKAGE_PATH\"`" + + @[if DEVELSPACE]@ +# env variables in develspace diff --git a/recipes-ros/ros/roslib_1.11.14.bb b/recipes-ros/ros/roslib_1.11.14.bb index 6438d61..626304d 100644 --- a/recipes-ros/ros/roslib_1.11.14.bb +++ b/recipes-ros/ros/roslib_1.11.14.bb @@ -9,4 +9,6 @@ require ros.inc ROS_PKG_SUBDIR = "core" +SRC_URI += "file://0001-use-env-to-get-python-exec.patch" + RDEPENDS_${PN} = "${PYTHON_PN}-rospkg catkin-runtime" From bc89dbf4ea24cb28cb400852a961b7bdf4521b5c Mon Sep 17 00:00:00 2001 From: Dominique Hunziker Date: Fri, 2 Jun 2017 12:12:33 +0200 Subject: [PATCH 04/12] catkin: swap cross-compilation patch --- classes/catkin.bbclass | 2 +- recipes-ros/catkin/catkin.inc | 3 +- ...ng-host-s-paths-when-cross-compiling.patch | 76 --------- .../catkin/files/0001-cross-compilation.patch | 145 ++++++++++++++++++ ...endency-s-headers-to-current-sysroot.patch | 80 ---------- 5 files changed, 147 insertions(+), 159 deletions(-) delete mode 100644 recipes-ros/catkin/files/0001-avoid-using-host-s-paths-when-cross-compiling.patch create mode 100644 recipes-ros/catkin/files/0001-cross-compilation.patch delete mode 100644 recipes-ros/catkin/files/0001-relocate-dependency-s-headers-to-current-sysroot.patch diff --git a/classes/catkin.bbclass b/classes/catkin.bbclass index 9d83929..d0bb606 100644 --- a/classes/catkin.bbclass +++ b/classes/catkin.bbclass @@ -25,7 +25,7 @@ EXTRA_OECMAKE_CATKIN = "\ " EXTRA_OECMAKE_CATKIN_class-native = "\ - -DCMAKE_PREFIX_PATH='${ros_prefix}' \ + -DCMAKE_PREFIX_PATH='${STAGING_DIR_NATIVE}${ros_prefix}' \ -DCMAKE_INSTALL_PREFIX:PATH='${ros_prefix}' \ -DRT_LIBRARY=${libdir_native} \ -DCATKIN_DEVEL_PREFIX='${WORKDIR}/devel' \ diff --git a/recipes-ros/catkin/catkin.inc b/recipes-ros/catkin/catkin.inc index b128a94..24c7fcf 100644 --- a/recipes-ros/catkin/catkin.inc +++ b/recipes-ros/catkin/catkin.inc @@ -11,8 +11,7 @@ SRC_URI[sha256sum] = "90a639d67db7f9039487af555e432a5b4b6e339f22892d75d03b823b3f SRC_URI += "\ 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 \ + file://0001-cross-compilation.patch \ ${@'file://0001-python.cmake-look-for-python3-first.patch' if d.getVar('PYTHON_PN', True) == 'python3' else ''} \ " diff --git a/recipes-ros/catkin/files/0001-avoid-using-host-s-paths-when-cross-compiling.patch b/recipes-ros/catkin/files/0001-avoid-using-host-s-paths-when-cross-compiling.patch deleted file mode 100644 index 35d0dfe..0000000 --- a/recipes-ros/catkin/files/0001-avoid-using-host-s-paths-when-cross-compiling.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 1aa4eeea5b693e67f41e59cf1b0019f45d3a8976 Mon Sep 17 00:00:00 2001 -From: Dmitry Rozhkov -Date: Mon, 6 Feb 2017 16:15:16 +0200 -Subject: [PATCH 1/2] avoid using host's paths when cross-compiling - -This patch makes catkin to look for libraries only under Yocto's -sysroots and if a library is found the actual directory is used -for that library. Not the one that was provided to CMake's -find_library() command. - -For better insights please refer to this WONTFIX'ed issue -https://github.com/ros/catkin/issues/379 - -Upstream-Status: Inappropriate [suitable for Yocto only] - -Signed-off-by: Dmitry Rozhkov - ---- - cmake/catkin_package.cmake | 10 ++++++++-- - cmake/templates/pkgConfig.cmake.in | 4 ++-- - 2 files changed, 10 insertions(+), 4 deletions(-) - -diff --git a/cmake/catkin_package.cmake b/cmake/catkin_package.cmake -index 7d56edf..71f700f 100644 ---- a/cmake/catkin_package.cmake -+++ b/cmake/catkin_package.cmake -@@ -104,6 +104,9 @@ function(_catkin_package) - message(FATAL_ERROR "catkin_package() called with unused arguments: ${PROJECT_UNPARSED_ARGUMENTS}") - endif() - -+ # cmake.bbclass always sets $STAGING_DIR as the first value of CMAKE_FIND_ROOT_PATH -+ list(GET CMAKE_FIND_ROOT_PATH 0 ROOT_PATH) -+ - if(NOT ${PROJECT_NAME} STREQUAL "catkin") - list(FIND ${PROJECT_NAME}_BUILDTOOL_DEPENDS "catkin" _index) - if(_index EQUAL -1) -@@ -231,7 +234,8 @@ function(_catkin_package) - # get library paths from all workspaces - set(lib_paths "") - foreach(workspace ${CATKIN_WORKSPACES}) -- list_append_unique(lib_paths ${workspace}/lib) -+ string(REPLACE ${ROOT_PATH} "" tweaked_ws ${workspace}) -+ list_append_unique(lib_paths ${tweaked_ws}/lib) - endforeach() - - # merge explicitly listed libraries and libraries from non-catkin but find_package()-ed packages -@@ -250,7 +254,9 @@ function(_catkin_package) - catkin_pack_libraries_with_build_configuration(_PKG_CONFIG_LIBRARIES ${_PKG_CONFIG_LIBRARIES}) - set(PKG_CONFIG_LIBRARIES "") - foreach(library ${_PKG_CONFIG_LIBRARIES}) -- list_append_deduplicate(PKG_CONFIG_LIBRARIES ${library}) -+ string(REPLACE ${ROOT_PATH} "" newlib ${library}) -+ get_filename_component(newlib ${newlib} NAME) -+ list_append_deduplicate(PKG_CONFIG_LIBRARIES ${newlib}) - endforeach() - catkin_unpack_libraries_with_build_configuration(PKG_CONFIG_LIBRARIES ${PKG_CONFIG_LIBRARIES}) - -diff --git a/cmake/templates/pkgConfig.cmake.in b/cmake/templates/pkgConfig.cmake.in -index d99b811..c692108 100644 ---- a/cmake/templates/pkgConfig.cmake.in -+++ b/cmake/templates/pkgConfig.cmake.in -@@ -125,9 +125,9 @@ foreach(library ${libraries}) - foreach(path @PKG_CONFIG_LIB_PATHS@) - find_library(lib ${library} - PATHS ${path} -- NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) -+ NO_DEFAULT_PATH ONLY_CMAKE_FIND_ROOT_PATH) - if(lib) -- set(lib_path ${path}) -+ get_filename_component(lib_path ${lib} DIRECTORY) - break() - endif() - endforeach() --- -2.7.4 - diff --git a/recipes-ros/catkin/files/0001-cross-compilation.patch b/recipes-ros/catkin/files/0001-cross-compilation.patch new file mode 100644 index 0000000..76c3644 --- /dev/null +++ b/recipes-ros/catkin/files/0001-cross-compilation.patch @@ -0,0 +1,145 @@ +diff --git a/cmake/all.cmake b/cmake/all.cmake +index 6910906..e421b76 100644 +--- a/cmake/all.cmake ++++ b/cmake/all.cmake +@@ -118,6 +118,7 @@ foreach(filename + catkin_metapackage + catkin_package + catkin_package_xml ++ catkin_strip_root_path + catkin_workspace + debug_message + em_expand +diff --git a/cmake/catkin_package.cmake b/cmake/catkin_package.cmake +index 07613ce..2b13edc 100644 +--- a/cmake/catkin_package.cmake ++++ b/cmake/catkin_package.cmake +@@ -441,6 +441,14 @@ function(_catkin_package) + # package cmake dir is the folder where the generated pkgConfig.cmake is located + set(PKG_CMAKE_DIR "\${${PROJECT_NAME}_DIR}") + ++ if(CMAKE_CROSSCOMPILING) ++ catkin_strip_root_path(PROJECT_CMAKE_CONFIG_INCLUDE_DIRS UNIQUE) ++ catkin_strip_root_path(PROJECT_PKG_CONFIG_INCLUDE_DIRS UNIQUE) ++ catkin_strip_root_path(PKG_CONFIG_LIBRARIES) ++ catkin_strip_root_path(PKG_CONFIG_LIBRARIES_WITH_PREFIX) ++ catkin_strip_root_path(PKG_CONFIG_LIB_PATHS UNIQUE) ++ endif() ++ + if(NOT PROJECT_SKIP_PKG_CONFIG_GENERATION) + # ensure that output folder exists + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/installspace) +diff --git a/cmake/catkin_strip_root_path.cmake b/cmake/catkin_strip_root_path.cmake +new file mode 100644 +index 0000000..ca5c453 +--- /dev/null ++++ b/cmake/catkin_strip_root_path.cmake +@@ -0,0 +1,32 @@ ++# ++# Strip CMAKE_FIND_ROOT_PATH prefixes from each path in the list ``var``. ++# ++# .. note:: Used for cross-compilation. ++# ++# :param var: the input / output variable name ++# :type var: string ++# :param UNIQUE: if specified the stripped list will contain unique paths, i.e., ++# duplicate paths are not appended a second time ++# :type UNIQUE: option ++# ++function(catkin_strip_root_path var) ++ cmake_parse_arguments(ARG "UNIQUE" "" "" ${ARGN}) ++ set(output) ++ foreach(element ${${var}}) ++ if(IS_ABSOLUTE ${element}) ++ foreach(root_path ${CMAKE_FIND_ROOT_PATH}) ++ if(element MATCHES "^${root_path}/") ++ string(LENGTH ${root_path} root_path_length) ++ string(SUBSTRING ${element} ${root_path_length} -1 element) ++ break() ++ endif() ++ endforeach() ++ endif() ++ if(ARG_UNIQUE) ++ list_append_unique(output ${element}) ++ else() ++ list(APPEND output ${element}) ++ endif() ++ endforeach() ++ set(${var} ${output} PARENT_SCOPE) ++endfunction() +diff --git a/cmake/templates/pkgConfig.cmake.in b/cmake/templates/pkgConfig.cmake.in +index 4677100..d3b7067 100644 +--- a/cmake/templates/pkgConfig.cmake.in ++++ b/cmake/templates/pkgConfig.cmake.in +@@ -78,6 +78,15 @@ else() + set(@PROJECT_NAME@_PREFIX ${@PROJECT_NAME@_INSTALL_PREFIX}) + endif() + ++if(CMAKE_CROSSCOMPILING) ++ if("@DEVELSPACE@" STREQUAL "TRUE") ++ # can not disable host filesystem altogether; otherwise files in src/devel are no longer found ++ set(_find_root_path_both CMAKE_FIND_ROOT_PATH_BOTH) ++ else() ++ set(_find_root_path_both) ++ endif() ++endif() ++ + # warn when using a deprecated package + if(NOT "@PROJECT_DEPRECATED@" STREQUAL "") + set(_msg "WARNING: package '@PROJECT_NAME@' is deprecated") +@@ -102,7 +111,19 @@ if(NOT "@PROJECT_CMAKE_CONFIG_INCLUDE_DIRS@ " STREQUAL " ") + set(_report "Report the problem to the maintainer '@PROJECT_MAINTAINER@' and request to fix the problem.") + endif() + foreach(idir ${_include_dirs}) +- if(IS_ABSOLUTE ${idir} AND IS_DIRECTORY ${idir}) ++ if(IS_ABSOLUTE ${idir} AND CMAKE_CROSSCOMPILING) ++ get_filename_component(idir_path ${idir} DIRECTORY) ++ get_filename_component(idir_name ${idir} NAME) ++ set(include_dir_path "include_dir_path-NOTFOUND") ++ # use find_path to locate absolute path nested under potential root path ++ find_path(include_dir_path ${idir_name} ++ PATHS ${idir_path} ++ NO_DEFAULT_PATH ${_find_root_path_both}) ++ if(NOT include_dir_path) ++ message(FATAL_ERROR "Project '@PROJECT_NAME@' specifies '${idir}' as an include dir, which is not found. It does not exist in any of the root filesystems. Ask the maintainer '@PROJECT_MAINTAINER@' to fix it.") ++ endif() ++ set(include "${include_dir_path}/${idir_name}") ++ elseif(IS_ABSOLUTE ${idir} AND IS_DIRECTORY ${idir}) + set(include ${idir}) + elseif("${idir} " STREQUAL "@CATKIN_GLOBAL_INCLUDE_DESTINATION@ ") + get_filename_component(include "${@PROJECT_NAME@_DIR}/../../../@CATKIN_GLOBAL_INCLUDE_DESTINATION@" ABSOLUTE) +@@ -123,18 +144,31 @@ foreach(library ${libraries}) + list(APPEND @PROJECT_NAME@_LIBRARIES ${library}) + elseif(TARGET ${library}) + list(APPEND @PROJECT_NAME@_LIBRARIES ${library}) ++ elseif(IS_ABSOLUTE ${library} AND CMAKE_CROSSCOMPILING) ++ get_filename_component(lib_path ${library} DIRECTORY) ++ get_filename_component(lib_name ${library} NAME) ++ set(lib "lib-NOTFOUND") ++ # use find_library to locate library given by absolute path nested under potential root path ++ find_library(lib ${lib_name} ++ PATHS ${lib_path} ++ NO_DEFAULT_PATH ${_find_root_path_both}) ++ if(NOT lib) ++ message(FATAL_ERROR "Project '${PROJECT_NAME}' tried to find library '${library}'. The library is neither a target nor built/installed properly. Did you compile project '@PROJECT_NAME@'? Did you find_package() it before the subdirectory containing its code is included?") ++ endif() ++ _list_append_unique(@PROJECT_NAME@_LIBRARY_DIRS ${lib_path}) ++ list(APPEND @PROJECT_NAME@_LIBRARIES ${lib}) + elseif(IS_ABSOLUTE ${library}) + list(APPEND @PROJECT_NAME@_LIBRARIES ${library}) + else() + set(lib_path "") +- set(lib "${library}-NOTFOUND") ++ set(lib "lib-NOTFOUND") + # since the path where the library is found is returned we have to iterate over the paths manually + foreach(path @PKG_CONFIG_LIB_PATHS@) + find_library(lib ${library} + PATHS ${path} +- NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) ++ NO_DEFAULT_PATH ${_find_root_path_both}) + if(lib) +- set(lib_path ${path}) ++ get_filename_component(lib_path ${lib} DIRECTORY) + break() + endif() + endforeach() 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 deleted file mode 100644 index 4370787..0000000 --- a/recipes-ros/catkin/files/0001-relocate-dependency-s-headers-to-current-sysroot.patch +++ /dev/null @@ -1,80 +0,0 @@ -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 - From 9f6f30d174ebbe668e077ff4162066d6c67d3eb2 Mon Sep 17 00:00:00 2001 From: Dominique Hunziker Date: Sat, 3 Jun 2017 08:17:33 +0200 Subject: [PATCH 05/12] catkin: add support for SDK --- recipes-devtools/python/python-catkin-pkg.inc | 2 +- recipes-devtools/python/python-empy.inc | 2 +- recipes-ros/catkin/catkin-runtime_0.6.19.bb | 16 +++++++++++++++- recipes-ros/catkin/catkin_0.6.19.bb | 12 +++++++++++- recipes-ros/catkin/files/environment.d-catkin.sh | 10 ++++++++++ 5 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 recipes-ros/catkin/files/environment.d-catkin.sh diff --git a/recipes-devtools/python/python-catkin-pkg.inc b/recipes-devtools/python/python-catkin-pkg.inc index 72260e6..206185d 100644 --- a/recipes-devtools/python/python-catkin-pkg.inc +++ b/recipes-devtools/python/python-catkin-pkg.inc @@ -12,4 +12,4 @@ inherit pypi RDEPENDS_${PN} = "${PYTHON_PN}-unixadmin" RDEPENDS_${PN}_class-native = "" -BBCLASSEXTEND = "native" +BBCLASSEXTEND = "native nativesdk" diff --git a/recipes-devtools/python/python-empy.inc b/recipes-devtools/python/python-empy.inc index 3a94a95..97bb8e1 100644 --- a/recipes-devtools/python/python-empy.inc +++ b/recipes-devtools/python/python-empy.inc @@ -10,4 +10,4 @@ SRC_URI[sha256sum] = "99f016af2770c48ab57a65df7aae251360dc69a1514c15851458a71d4d S = "${WORKDIR}/${SRCNAME}-${PV}" -BBCLASSEXTEND = "native" +BBCLASSEXTEND = "native nativesdk" diff --git a/recipes-ros/catkin/catkin-runtime_0.6.19.bb b/recipes-ros/catkin/catkin-runtime_0.6.19.bb index 634a203..28815f6 100644 --- a/recipes-ros/catkin/catkin-runtime_0.6.19.bb +++ b/recipes-ros/catkin/catkin-runtime_0.6.19.bb @@ -32,8 +32,22 @@ do_install_append() { touch ${D}${ros_prefix}/.catkin } +# Append environment hook for SDK +do_install_append_class-nativesdk() { + mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d + + script=${D}${SDKPATHNATIVE}/environment-setup.d/catkin-runtime.sh + echo "export ROSDISTRO=${ROSDISTRO}" >> $script + echo "export PATH=\$PATH:\${OECORE_NATIVE_SYSROOT}/opt/ros/\${ROSDISTRO}/bin" >> $script + echo "export PYTHONPATH=\${OECORE_NATIVE_SYSROOT}/opt/ros/\${ROSDISTRO}/lib/python2.7/site-packages" >> $script + echo "export ROS_ROOT=\${OECORE_TARGET_SYSROOT}/opt/ros/\${ROSDISTRO}/share/ros" >> $script + echo "export CMAKE_PREFIX_PATH=\${OECORE_TARGET_SYSROOT}/opt/ros/\${ROSDISTRO}:\${OECORE_NATIVE_SYSROOT}/opt/ros/${ROSDISTRO}" >> $script +} + +FILES_${PN}_append_class-nativesdk = " ${SDKPATHNATIVE}" + catkin_sysroot_preprocess_append() { install -m 644 -t ${SYSROOT_DESTDIR}${ros_prefix} ${D}${ros_prefix}/.catkin } -BBCLASSEXTEND += "native" +BBCLASSEXTEND += "native nativesdk" diff --git a/recipes-ros/catkin/catkin_0.6.19.bb b/recipes-ros/catkin/catkin_0.6.19.bb index ecb5785..e4a4ba2 100644 --- a/recipes-ros/catkin/catkin_0.6.19.bb +++ b/recipes-ros/catkin/catkin_0.6.19.bb @@ -1,5 +1,7 @@ require catkin.inc +SRC_URI += "file://environment.d-catkin.sh" + DEPENDS_class-native += "catkin-runtime" # The files in ${PYTHON_SITEPACKAGES_DIR} and catkin_find are @@ -27,4 +29,12 @@ do_install_append() { rmdir ${D}${ros_libdir}/${PYTHON_DIR} } -BBCLASSEXTEND += "native" +# Append environment hook for SDK +do_install_append_class-nativesdk() { + mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d + install -m 644 ${WORKDIR}/environment.d-catkin.sh ${D}${SDKPATHNATIVE}/environment-setup.d/catkin.sh +} + +FILES_${PN}_append_class-nativesdk = " ${SDKPATHNATIVE}" + +BBCLASSEXTEND += "native nativesdk" diff --git a/recipes-ros/catkin/files/environment.d-catkin.sh b/recipes-ros/catkin/files/environment.d-catkin.sh new file mode 100644 index 0000000..5c31049 --- /dev/null +++ b/recipes-ros/catkin/files/environment.d-catkin.sh @@ -0,0 +1,10 @@ +alias catkin_make=" \ + catkin_make \ + -DCMAKE_TOOLCHAIN_FILE=$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake \ + -DSETUPTOOLS_DEB_LAYOUT=OFF \ +" +alias catkin_make_isolated=" \ + catkin_make_isolated \ + -DCMAKE_TOOLCHAIN_FILE=$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake \ + -DSETUPTOOLS_DEB_LAYOUT=OFF \ +" From 67214880a7280150e35e40628ae0a9bfa18bd577 Mon Sep 17 00:00:00 2001 From: Dominique Hunziker Date: Thu, 22 Jun 2017 10:18:38 +0200 Subject: [PATCH 06/12] orocos-kdl: strip STAGING_DIR_TARGET prefix from cmake config file --- recipes-extended/kdl/orocos-kdl_1.3.0.bb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/recipes-extended/kdl/orocos-kdl_1.3.0.bb b/recipes-extended/kdl/orocos-kdl_1.3.0.bb index 5051c08..dba512d 100644 --- a/recipes-extended/kdl/orocos-kdl_1.3.0.bb +++ b/recipes-extended/kdl/orocos-kdl_1.3.0.bb @@ -11,6 +11,10 @@ do_install_append() { # remove sysroot library path from pkgconfig files sed -i -e 's#${STAGING_INCDIR}#${includedir}#g' \ ${D}${libdir}/pkgconfig/*.pc + + # remove sysroot library path from cmake config files + sed -i -e 's#${STAGING_DIR_TARGET}##g' \ + ${D}${datadir}/orocos_kdl/*.cmake } FILES_${PN}-dev += "${datadir}/orocos_kdl/*" From d188d3f5e7ffe250e57e3d9b7d2dbe335df5a398 Mon Sep 17 00:00:00 2001 From: Dominique Hunziker Date: Thu, 22 Jun 2017 10:19:34 +0200 Subject: [PATCH 07/12] sophus: strip STAGING_DIR_TARGET prefix from cmake config file --- recipes-extended/sophus/sophus_0.9.1.bb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/recipes-extended/sophus/sophus_0.9.1.bb b/recipes-extended/sophus/sophus_0.9.1.bb index ef5e50b..906ecf6 100644 --- a/recipes-extended/sophus/sophus_0.9.1.bb +++ b/recipes-extended/sophus/sophus_0.9.1.bb @@ -15,3 +15,9 @@ inherit cmake # CXXFLAGS are needed to compile eigen 3.3.1 headers properly CXXFLAGS += "-Wno-deprecated-declarations -Wno-misleading-indentation -Wno-int-in-bool-context -Wno-ignored-attributes" + +do_install_append() { + # remove sysroot library path from cmake config files + sed -i -e 's#${STAGING_DIR_TARGET}##g' \ + ${D}${datadir}/sophus/*.cmake +} From 764f760bb15060d8529a4c608563eccceeefa34d Mon Sep 17 00:00:00 2001 From: Lukas Bulwahn Date: Sun, 15 Apr 2018 08:36:18 +0200 Subject: [PATCH 08/12] refresh patches after rebasing pull request --- recipes-ros/catkin/catkin.inc | 2 +- ...roper-cross-compilation-with-catkin.patch} | 44 ++++++++++++++++--- ...ARY_PATH-set-in-environment_cache.py.patch | 6 +-- ...-python.cmake-look-for-python3-first.patch | 6 +-- ...ded-by-environment-instead-of-the-ge.patch | 8 ++-- .../0001-use-env-to-get-python-exec.patch | 21 ++++++--- recipes-ros/ros/roslib_1.11.14.bb | 2 +- 7 files changed, 62 insertions(+), 27 deletions(-) rename recipes-ros/catkin/files/{0001-cross-compilation.patch => 0001-allow-proper-cross-compilation-with-catkin.patch} (80%) diff --git a/recipes-ros/catkin/catkin.inc b/recipes-ros/catkin/catkin.inc index 24c7fcf..1039be1 100644 --- a/recipes-ros/catkin/catkin.inc +++ b/recipes-ros/catkin/catkin.inc @@ -11,7 +11,7 @@ SRC_URI[sha256sum] = "90a639d67db7f9039487af555e432a5b4b6e339f22892d75d03b823b3f SRC_URI += "\ file://0001-use-python-provided-by-environment-instead-of-the-ge.patch \ - file://0001-cross-compilation.patch \ + file://0001-allow-proper-cross-compilation-with-catkin.patch \ ${@'file://0001-python.cmake-look-for-python3-first.patch' if d.getVar('PYTHON_PN', True) == 'python3' else ''} \ " diff --git a/recipes-ros/catkin/files/0001-cross-compilation.patch b/recipes-ros/catkin/files/0001-allow-proper-cross-compilation-with-catkin.patch similarity index 80% rename from recipes-ros/catkin/files/0001-cross-compilation.patch rename to recipes-ros/catkin/files/0001-allow-proper-cross-compilation-with-catkin.patch index 76c3644..0309579 100644 --- a/recipes-ros/catkin/files/0001-cross-compilation.patch +++ b/recipes-ros/catkin/files/0001-allow-proper-cross-compilation-with-catkin.patch @@ -1,3 +1,30 @@ +From e6179255b99264a51f8733f52d92ca579fbacb61 Mon Sep 17 00:00:00 2001 +From: Lukas Bulwahn +Date: Sun, 15 Apr 2018 02:11:42 +0200 +Subject: [PATCH] allow proper cross-compilation with catkin + +The original patch is: + +From: Dominique Hunziker +Date: Fri, 2 Jun 2017 12:12:33 +0200 + +I just re-applied it to the current version 0.6.19 and adjusted +the context of the patch as reaction to bitbake warning: + +WARNING: catkin-runtime-0.6.19-r0 do_patch: +Some of the context lines in patches were ignored. This can lead to incorrectly applied patches. + +Upstream-Status: Pending + +Signed-off-by: Lukas Bulwahn +--- + cmake/all.cmake | 1 + + cmake/catkin_package.cmake | 8 ++++++++ + cmake/catkin_strip_root_path.cmake | 32 +++++++++++++++++++++++++++++ + cmake/templates/pkgConfig.cmake.in | 42 ++++++++++++++++++++++++++++++++++---- + 4 files changed, 79 insertions(+), 4 deletions(-) + create mode 100644 cmake/catkin_strip_root_path.cmake + diff --git a/cmake/all.cmake b/cmake/all.cmake index 6910906..e421b76 100644 --- a/cmake/all.cmake @@ -11,10 +38,10 @@ index 6910906..e421b76 100644 debug_message em_expand diff --git a/cmake/catkin_package.cmake b/cmake/catkin_package.cmake -index 07613ce..2b13edc 100644 +index 8ef6c48..d6bc68f 100644 --- a/cmake/catkin_package.cmake +++ b/cmake/catkin_package.cmake -@@ -441,6 +441,14 @@ function(_catkin_package) +@@ -432,6 +432,14 @@ function(_catkin_package) # package cmake dir is the folder where the generated pkgConfig.cmake is located set(PKG_CMAKE_DIR "\${${PROJECT_NAME}_DIR}") @@ -68,7 +95,7 @@ index 0000000..ca5c453 + set(${var} ${output} PARENT_SCOPE) +endfunction() diff --git a/cmake/templates/pkgConfig.cmake.in b/cmake/templates/pkgConfig.cmake.in -index 4677100..d3b7067 100644 +index d99b811..3af5c71 100644 --- a/cmake/templates/pkgConfig.cmake.in +++ b/cmake/templates/pkgConfig.cmake.in @@ -78,6 +78,15 @@ else() @@ -87,9 +114,9 @@ index 4677100..d3b7067 100644 # warn when using a deprecated package if(NOT "@PROJECT_DEPRECATED@" STREQUAL "") set(_msg "WARNING: package '@PROJECT_NAME@' is deprecated") -@@ -102,7 +111,19 @@ if(NOT "@PROJECT_CMAKE_CONFIG_INCLUDE_DIRS@ " STREQUAL " ") - set(_report "Report the problem to the maintainer '@PROJECT_MAINTAINER@' and request to fix the problem.") - endif() +@@ -95,7 +104,19 @@ if(NOT "@PROJECT_CMAKE_CONFIG_INCLUDE_DIRS@ " STREQUAL " ") + set(@PROJECT_NAME@_INCLUDE_DIRS "") + set(_include_dirs "@PROJECT_CMAKE_CONFIG_INCLUDE_DIRS@") foreach(idir ${_include_dirs}) - if(IS_ABSOLUTE ${idir} AND IS_DIRECTORY ${idir}) + if(IS_ABSOLUTE ${idir} AND CMAKE_CROSSCOMPILING) @@ -108,7 +135,7 @@ index 4677100..d3b7067 100644 set(include ${idir}) elseif("${idir} " STREQUAL "@CATKIN_GLOBAL_INCLUDE_DESTINATION@ ") get_filename_component(include "${@PROJECT_NAME@_DIR}/../../../@CATKIN_GLOBAL_INCLUDE_DESTINATION@" ABSOLUTE) -@@ -123,18 +144,31 @@ foreach(library ${libraries}) +@@ -116,18 +137,31 @@ foreach(library ${libraries}) list(APPEND @PROJECT_NAME@_LIBRARIES ${library}) elseif(TARGET ${library}) list(APPEND @PROJECT_NAME@_LIBRARIES ${library}) @@ -143,3 +170,6 @@ index 4677100..d3b7067 100644 break() endif() endforeach() +-- +2.7.4 + diff --git a/recipes-ros/catkin/files/0001-ignore-LD_LIBRARY_PATH-set-in-environment_cache.py.patch b/recipes-ros/catkin/files/0001-ignore-LD_LIBRARY_PATH-set-in-environment_cache.py.patch index 0721315..2985667 100644 --- a/recipes-ros/catkin/files/0001-ignore-LD_LIBRARY_PATH-set-in-environment_cache.py.patch +++ b/recipes-ros/catkin/files/0001-ignore-LD_LIBRARY_PATH-set-in-environment_cache.py.patch @@ -1,4 +1,4 @@ -From f58947cf910ec4de1a9f093b4eb1fe68e6cfd602 Mon Sep 17 00:00:00 2001 +From 64d33f250beaeb375cc1c93226c2b45a746d51c2 Mon Sep 17 00:00:00 2001 From: Dmitry Rozhkov Date: Thu, 27 Apr 2017 11:04:27 +0300 Subject: [PATCH] ignore LD_LIBRARY_PATH set in environment_cache.py @@ -26,6 +26,7 @@ by bitbake. Upstream-Status: Inappropriate [upstream doesn't use bitbake and the change may break on-target development] Signed-off-by: Dmitry Rozhkov + --- python/catkin/environment_cache.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) @@ -43,6 +44,3 @@ index 3defa52..dba2c50 100755 + code.append('export %s="%s"' % (key, value)) else: code.append('set %s=%s' % (key, value)) --- -2.9.3 - diff --git a/recipes-ros/catkin/files/0001-python.cmake-look-for-python3-first.patch b/recipes-ros/catkin/files/0001-python.cmake-look-for-python3-first.patch index 36455eb..ced1b54 100644 --- a/recipes-ros/catkin/files/0001-python.cmake-look-for-python3-first.patch +++ b/recipes-ros/catkin/files/0001-python.cmake-look-for-python3-first.patch @@ -1,4 +1,4 @@ -From 224186a1af40cd3b7efb4f0648a3a4ca6ca1e7fa Mon Sep 17 00:00:00 2001 +From a429081b23223b1d6729da2c9087318bc08a808c Mon Sep 17 00:00:00 2001 From: Dmitry Rozhkov Date: Thu, 6 Apr 2017 15:25:13 +0300 Subject: [PATCH] python.cmake: look for python3 first @@ -6,6 +6,7 @@ Subject: [PATCH] python.cmake: look for python3 first Upstream-Status: Inappropriate [the patch overrides ROS's default to python2] Signed-off-by: Dmitry Rozhkov + --- cmake/python.cmake | 1 + 1 file changed, 1 insertion(+) @@ -22,6 +23,3 @@ index 70f3d26..38f8320 100644 find_package(PythonInterp REQUIRED) message(STATUS "Using PYTHON_EXECUTABLE: ${PYTHON_EXECUTABLE}") --- -2.9.3 - diff --git a/recipes-ros/catkin/files/0001-use-python-provided-by-environment-instead-of-the-ge.patch b/recipes-ros/catkin/files/0001-use-python-provided-by-environment-instead-of-the-ge.patch index df8fbd1..56dd7a9 100644 --- a/recipes-ros/catkin/files/0001-use-python-provided-by-environment-instead-of-the-ge.patch +++ b/recipes-ros/catkin/files/0001-use-python-provided-by-environment-instead-of-the-ge.patch @@ -1,4 +1,4 @@ -From 431739f10027022b6e3d2cd75cffa04c848cd14d Mon Sep 17 00:00:00 2001 +From 7894487c0d749124c3b0d82fcebff2309a84024a Mon Sep 17 00:00:00 2001 From: Lukas Bulwahn Date: Tue, 31 May 2016 15:38:05 +0200 Subject: [PATCH] use python provided by environment instead of the generated @@ -13,12 +13,13 @@ bf12b40c2 [1]. We revert this change here to address the issue #384 [2]. Upstream-Status: Inappropriate [only for our setup] Signed-off-by: Lukas Bulwahn + --- cmake/templates/_setup_util.py.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/templates/_setup_util.py.in b/cmake/templates/_setup_util.py.in -index cace21c..ff2c6b4 100755 +index 1949c4c..f8807f3 100755 --- a/cmake/templates/_setup_util.py.in +++ b/cmake/templates/_setup_util.py.in @@ -1,4 +1,4 @@ @@ -27,6 +28,3 @@ index cace21c..ff2c6b4 100755 # -*- coding: utf-8 -*- # Software License Agreement (BSD License) --- -1.9.1 - diff --git a/recipes-ros/ros/files/0001-use-env-to-get-python-exec.patch b/recipes-ros/ros/files/0001-use-env-to-get-python-exec.patch index 32bc417..bc228c0 100644 --- a/recipes-ros/ros/files/0001-use-env-to-get-python-exec.patch +++ b/recipes-ros/ros/files/0001-use-env-to-get-python-exec.patch @@ -1,6 +1,17 @@ -diff -u -r new/env-hooks/10.ros.sh.em old/env-hooks/10.ros.sh.em ---- old/env-hooks/10.ros.sh.em 2016-03-04 23:20:35.255706716 +0100 -+++ new/env-hooks/10.ros.sh.em 2016-03-04 23:19:24.727707608 +0100 +From 4254977bbfc67a3083e3881a56b50b729bf57d9f Mon Sep 17 00:00:00 2001 +From: Dominique Hunziker +Date: Fri, 2 Jun 2017 11:57:54 +0200 + +Upstream-Status: Pending + +--- + core/roslib/env-hooks/10.ros.sh.em | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/core/roslib/env-hooks/10.ros.sh.em b/core/roslib/env-hooks/10.ros.sh.em +index caed342..1c64fc4 100644 +--- a/core/roslib/env-hooks/10.ros.sh.em ++++ b/core/roslib/env-hooks/10.ros.sh.em @@ -1,7 +1,7 @@ # generated from ros/env-hooks/10.ros.sh.em @@ -10,7 +21,7 @@ diff -u -r new/env-hooks/10.ros.sh.em old/env-hooks/10.ros.sh.em if [ -n "$ROS_DISTRO" -a "$ROS_DISTRO" != "indigo" ]; then echo "ROS_DISTRO was set to '$ROS_DISTRO' before. Please make sure that the environment does not mix paths from different distributions." -@@ -30,7 +30,7 @@ +@@ -30,7 +30,7 @@ for workspace in workspaces: print(os.pathsep.join(paths)) EOF ) @@ -18,4 +29,4 @@ diff -u -r new/env-hooks/10.ros.sh.em old/env-hooks/10.ros.sh.em +export ROS_PACKAGE_PATH="`/usr/bin/env python -c \"$PYTHON_CODE_BUILD_ROS_PACKAGE_PATH\"`" @[if DEVELSPACE]@ -# env variables in develspace + # env variables in develspace diff --git a/recipes-ros/ros/roslib_1.11.14.bb b/recipes-ros/ros/roslib_1.11.14.bb index 626304d..9919e1e 100644 --- a/recipes-ros/ros/roslib_1.11.14.bb +++ b/recipes-ros/ros/roslib_1.11.14.bb @@ -9,6 +9,6 @@ require ros.inc ROS_PKG_SUBDIR = "core" -SRC_URI += "file://0001-use-env-to-get-python-exec.patch" +SRC_URI += "file://0001-use-env-to-get-python-exec.patch;striplevel=3" RDEPENDS_${PN} = "${PYTHON_PN}-rospkg catkin-runtime" From 4250b063085ec819addca744d23cbbab8f8663da Mon Sep 17 00:00:00 2001 From: Dominique Hunziker Date: Sat, 5 May 2018 21:43:30 +0200 Subject: [PATCH 09/12] add image for testing SDK --- recipes-core/images/ros-sdk-test.bb | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 recipes-core/images/ros-sdk-test.bb diff --git a/recipes-core/images/ros-sdk-test.bb b/recipes-core/images/ros-sdk-test.bb new file mode 100644 index 0000000..72a4762 --- /dev/null +++ b/recipes-core/images/ros-sdk-test.bb @@ -0,0 +1,11 @@ +DESCRIPTION = "Image for testing meta-ros' SDK feature" + +IMAGE_INSTALL = "packagegroup-core-boot ${CORE_IMAGE_EXTRA_INSTALL}" + +inherit core-image + +IMAGE_ROOTFS_SIZE = "8192" + +IMAGE_INSTALL += "sshd roslaunch rostopic roscpp-dev std-msgs-dev" + +TOOLCHAIN_HOST_TASK += "nativesdk-cmake nativesdk-catkin" From cd5934f6ccd8fff5f354a2f12861f260894ee731 Mon Sep 17 00:00:00 2001 From: Dominique Hunziker Date: Sat, 5 May 2018 21:44:10 +0200 Subject: [PATCH 10/12] add patch for cmake recipe By default the toolchain file for the SDK is placed in nativesdk-cmake-dev; however, the installed environment hook (which depends on the toolchain file) is placed in nativesdk-cmake. Therefore, this patch overwrites the default filter from cmake.bbclass such that all files are located in nativesdk-cmake. --- recipes-devtools/cmake/cmake_%.bbappend | 1 + 1 file changed, 1 insertion(+) create mode 100644 recipes-devtools/cmake/cmake_%.bbappend diff --git a/recipes-devtools/cmake/cmake_%.bbappend b/recipes-devtools/cmake/cmake_%.bbappend new file mode 100644 index 0000000..f39be49 --- /dev/null +++ b/recipes-devtools/cmake/cmake_%.bbappend @@ -0,0 +1 @@ +FILES_${PN}-dev_class-nativesdk = "" From c017174e78a347c3bf37186781b2ae516fb64678 Mon Sep 17 00:00:00 2001 From: Dominique Hunziker Date: Sat, 5 May 2018 21:48:00 +0200 Subject: [PATCH 11/12] fix faulty PR #581 PYTHON_PN is not equal to 'python2' for Python 2 but 'python'. --- recipes-ros/catkin/catkin-runtime_0.6.19.bb | 2 +- recipes-ros/ros-comm/roslaunch_1.11.21.bb | 2 +- recipes-ros/rospack/rospack_2.2.8.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/recipes-ros/catkin/catkin-runtime_0.6.19.bb b/recipes-ros/catkin/catkin-runtime_0.6.19.bb index 28815f6..aea433d 100644 --- a/recipes-ros/catkin/catkin-runtime_0.6.19.bb +++ b/recipes-ros/catkin/catkin-runtime_0.6.19.bb @@ -18,7 +18,7 @@ RDEPENDS_${PN}_class-native = "" RDEPENDS_${PN} = "\ ${PYTHON_PN}-catkin-pkg ${PYTHON_PN}-misc ${PYTHON_PN}-multiprocessing \ ${PYTHON_PN}-shell ${PYTHON_PN}-xml ${PYTHON_PN}-pkgutil \ - ${@'python-argparse python-subprocess' if d.getVar('PYTHON_PN', True) == 'python2' else ''}" + ${@'python-argparse python-subprocess' if d.getVar('PYTHON_PN', True) == 'python' else ''}" # Delete everything but the python packages in order to avoid # that the QA error [installed-vs-shipped] hits on us. diff --git a/recipes-ros/ros-comm/roslaunch_1.11.21.bb b/recipes-ros/ros-comm/roslaunch_1.11.21.bb index 2b49148..069d675 100644 --- a/recipes-ros/ros-comm/roslaunch_1.11.21.bb +++ b/recipes-ros/ros-comm/roslaunch_1.11.21.bb @@ -16,7 +16,7 @@ SRC_URI += "file://0001-increase-rosmaster-timeout.patch;patchdir=../.. \ ROS_PKG_SUBDIR = "tools" RDEPENDS_${PN} = "\ - ${@'python-textutils' if d.getVar('PYTHON_PN', True) == 'python2' else ''} \ + ${@'python-textutils' if d.getVar('PYTHON_PN', True) == 'python' else ''} \ ${PYTHON_PN}-logging \ ${PYTHON_PN}-threading \ ${PYTHON_PN}-rospkg \ diff --git a/recipes-ros/rospack/rospack_2.2.8.bb b/recipes-ros/rospack/rospack_2.2.8.bb index 80a7fed..e07e214 100644 --- a/recipes-ros/rospack/rospack_2.2.8.bb +++ b/recipes-ros/rospack/rospack_2.2.8.bb @@ -14,4 +14,4 @@ SRC_URI[sha256sum] = "a8fecbe03f9757510fe47137642e39a7c31b823d5bf7fa7890acc11691 inherit catkin RDEPENDS_${PN} = "${PYTHON_PN}-rosdep \ - ${@'python-subprocess' if d.getVar('PYTHON_PN', True) == 'python2' else ''}" + ${@'python-subprocess' if d.getVar('PYTHON_PN', True) == 'python' else ''}" From 808dcb3a1ed8cb63784a3a972c01d36267fae54c Mon Sep 17 00:00:00 2001 From: Dominique Hunziker Date: Mon, 7 May 2018 22:37:25 +0200 Subject: [PATCH 12/12] some preliminary fixes to make the SDK feature test work with latest changes to boost --- .../0001-make-implicit-cast-explicit.patch | 22 ++++++++++++++++ recipes-ros/ros-comm/roscpp_1.11.21.bb | 4 ++- .../files/0001-remove-implicit-cast.patch | 26 +++++++++++++++++++ recipes-ros/roscpp-core/rostime_0.5.8.bb | 2 ++ 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 recipes-ros/ros-comm/roscpp/0001-make-implicit-cast-explicit.patch create mode 100644 recipes-ros/roscpp-core/files/0001-remove-implicit-cast.patch diff --git a/recipes-ros/ros-comm/roscpp/0001-make-implicit-cast-explicit.patch b/recipes-ros/ros-comm/roscpp/0001-make-implicit-cast-explicit.patch new file mode 100644 index 0000000..895dee6 --- /dev/null +++ b/recipes-ros/ros-comm/roscpp/0001-make-implicit-cast-explicit.patch @@ -0,0 +1,22 @@ +diff --git a/clients/roscpp/src/libros/callback_queue.cpp b/clients/roscpp/src/libros/callback_queue.cpp +index cd2f4f8..fa600d5 100644 +--- a/clients/roscpp/src/libros/callback_queue.cpp ++++ b/clients/roscpp/src/libros/callback_queue.cpp +@@ -229,7 +229,7 @@ CallbackQueue::CallOneResult CallbackQueue::callOne(ros::WallDuration timeout) + { + if (!timeout.isZero()) + { +- condition_.timed_wait(lock, boost::posix_time::microseconds(timeout.toSec() * 1000000.0f)); ++ condition_.timed_wait(lock, boost::posix_time::microseconds(static_cast(timeout.toSec() * 1000000.0f))); + } + + if (callbacks_.empty()) +@@ -305,7 +305,7 @@ void CallbackQueue::callAvailable(ros::WallDuration timeout) + { + if (!timeout.isZero()) + { +- condition_.timed_wait(lock, boost::posix_time::microseconds(timeout.toSec() * 1000000.0f)); ++ condition_.timed_wait(lock, boost::posix_time::microseconds(static_cast(timeout.toSec() * 1000000.0f))); + } + + if (callbacks_.empty() || !enabled_) diff --git a/recipes-ros/ros-comm/roscpp_1.11.21.bb b/recipes-ros/ros-comm/roscpp_1.11.21.bb index 04e3b61..b878e5a 100644 --- a/recipes-ros/ros-comm/roscpp_1.11.21.bb +++ b/recipes-ros/ros-comm/roscpp_1.11.21.bb @@ -10,7 +10,9 @@ DEPENDS = "cpp-common message-generation rosconsole roscpp-serialization roscpp- require ros-comm.inc -SRC_URI += "file://0001-roscpp-add-missing-header-for-writev.patch;striplevel=3" +SRC_URI += "\ + file://0001-roscpp-add-missing-header-for-writev.patch;striplevel=3\ + file://0001-make-implicit-cast-explicit.patch;striplevel=3" ROS_PKG_SUBDIR = "clients" diff --git a/recipes-ros/roscpp-core/files/0001-remove-implicit-cast.patch b/recipes-ros/roscpp-core/files/0001-remove-implicit-cast.patch new file mode 100644 index 0000000..f367160 --- /dev/null +++ b/recipes-ros/roscpp-core/files/0001-remove-implicit-cast.patch @@ -0,0 +1,26 @@ +diff --git a/rostime/include/ros/impl/duration.h b/rostime/include/ros/impl/duration.h +index 2ca2f5b..7ebd202 100644 +--- a/rostime/include/ros/impl/duration.h ++++ b/rostime/include/ros/impl/duration.h +@@ -179,7 +179,7 @@ namespace ros { + #if defined(BOOST_DATE_TIME_HAS_NANOSECONDS) + return bt::seconds(sec) + bt::nanoseconds(nsec); + #else +- return bt::seconds(sec) + bt::microseconds(nsec/1000.0); ++ return bt::seconds(sec) + bt::microseconds(nsec/1000); + #endif + } + } +diff --git a/rostime/include/ros/impl/time.h b/rostime/include/ros/impl/time.h +index ec991e6..61b686c 100644 +--- a/rostime/include/ros/impl/time.h ++++ b/rostime/include/ros/impl/time.h +@@ -167,7 +167,7 @@ namespace ros + #if defined(BOOST_DATE_TIME_HAS_NANOSECONDS) + return pt::from_time_t(sec) + pt::nanoseconds(nsec); + #else +- return pt::from_time_t(sec) + pt::microseconds(nsec/1000.0); ++ return pt::from_time_t(sec) + pt::microseconds(nsec/1000); + #endif + } + diff --git a/recipes-ros/roscpp-core/rostime_0.5.8.bb b/recipes-ros/roscpp-core/rostime_0.5.8.bb index 51dd349..40ad83a 100644 --- a/recipes-ros/roscpp-core/rostime_0.5.8.bb +++ b/recipes-ros/roscpp-core/rostime_0.5.8.bb @@ -6,3 +6,5 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc DEPENDS = "boost cpp-common" require roscpp-core.inc + +SRC_URI += "file://0001-remove-implicit-cast.patch;striplevel=2"