Merge pull request #590 from bulwahn/rebased-pull-request-519

support nativesdk (refurnished #519)
This commit is contained in:
Lukas Bulwahn 2018-05-14 07:00:34 +02:00 committed by GitHub
commit 8a9faf90c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 373 additions and 255 deletions

View File

@ -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 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 = "\ 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_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}' \ -DCMAKE_INSTALL_PREFIX:PATH='${ros_prefix}' \
-DCATKIN_DEVEL_PREFIX='${WORKDIR}/devel' \
" "
EXTRA_OECMAKE_CATKIN_class-native = "\ EXTRA_OECMAKE_CATKIN_class-native = "\
-DCMAKE_PREFIX_PATH='${ros_prefix}' \ -DCMAKE_PREFIX_PATH='${STAGING_DIR_NATIVE}${ros_prefix}' \
-DCMAKE_INSTALL_PREFIX:PATH='${ros_prefix}' \ -DCMAKE_INSTALL_PREFIX:PATH='${ros_prefix}' \
-DRT_LIBRARY=${libdir_native} \ -DRT_LIBRARY=${libdir_native} \
-DCATKIN_DEVEL_PREFIX='${WORKDIR}/devel' \
" "
EXTRA_OECMAKE_prepend = "\ EXTRA_OECMAKE_prepend = "\

View File

@ -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"

View File

@ -0,0 +1 @@
FILES_${PN}-dev_class-nativesdk = ""

View File

@ -9,4 +9,7 @@ SRC_URI[sha256sum] = "d4d069eaeb29d6a9ee71773b20c41515b6e0feb9ea2765ebaf3e599d0c
inherit pypi inherit pypi
BBCLASSEXTEND = "native" RDEPENDS_${PN} = "${PYTHON_PN}-unixadmin"
RDEPENDS_${PN}_class-native = ""
BBCLASSEXTEND = "native nativesdk"

View File

@ -10,4 +10,4 @@ SRC_URI[sha256sum] = "99f016af2770c48ab57a65df7aae251360dc69a1514c15851458a71d4d
S = "${WORKDIR}/${SRCNAME}-${PV}" S = "${WORKDIR}/${SRCNAME}-${PV}"
BBCLASSEXTEND = "native" BBCLASSEXTEND = "native nativesdk"

View File

@ -11,6 +11,10 @@ do_install_append() {
# remove sysroot library path from pkgconfig files # remove sysroot library path from pkgconfig files
sed -i -e 's#${STAGING_INCDIR}#${includedir}#g' \ sed -i -e 's#${STAGING_INCDIR}#${includedir}#g' \
${D}${libdir}/pkgconfig/*.pc ${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/*" FILES_${PN}-dev += "${datadir}/orocos_kdl/*"

View File

@ -15,3 +15,9 @@ inherit cmake
# CXXFLAGS are needed to compile eigen 3.3.1 headers properly # 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" 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
}

View File

@ -11,13 +11,14 @@ S = "${WORKDIR}/catkin-${PV}"
# This package includes ONLY the python packages AND catkin_find # This package includes ONLY the python packages AND catkin_find
# The catkin_${PV} package includes all other files # The catkin_${PV} package includes all other files
# from the catkin tool. # 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}_class-native = ""
RDEPENDS_${PN} = "\ RDEPENDS_${PN} = "\
${PYTHON_PN}-catkin-pkg ${PYTHON_PN}-misc ${PYTHON_PN}-multiprocessing \ ${PYTHON_PN}-catkin-pkg ${PYTHON_PN}-misc ${PYTHON_PN}-multiprocessing \
${PYTHON_PN}-shell ${PYTHON_PN}-xml ${PYTHON_PN}-pkgutil \ ${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 # Delete everything but the python packages in order to avoid
# that the QA error [installed-vs-shipped] hits on us. # that the QA error [installed-vs-shipped] hits on us.
@ -26,6 +27,27 @@ do_install_append() {
rm ${D}${ros_bindir}/catkin_make rm ${D}${ros_bindir}/catkin_make
rm -rf ${D}${ros_datadir} rm -rf ${D}${ros_datadir}
rm -rf ${D}${ros_libdir}/pkgconfig rm -rf ${D}${ros_libdir}/pkgconfig
# Manually add the marker file
touch ${D}${ros_prefix}/.catkin
} }
BBCLASSEXTEND += "native" # 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 nativesdk"

View File

@ -10,23 +10,9 @@ SRC_URI[md5sum] = "d58460cc9112812d8c4e6ecf98bbcc85"
SRC_URI[sha256sum] = "90a639d67db7f9039487af555e432a5b4b6e339f22892d75d03b823b3f38c947" SRC_URI[sha256sum] = "90a639d67db7f9039487af555e432a5b4b6e339f22892d75d03b823b3f38c947"
SRC_URI += "\ 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-use-python-provided-by-environment-instead-of-the-ge.patch \
file://0001-avoid-using-host-s-paths-when-cross-compiling.patch \ file://0001-allow-proper-cross-compilation-with-catkin.patch \
file://0001-relocate-dependency-s-headers-to-current-sysroot.patch \
${@'file://0001-python.cmake-look-for-python3-first.patch' if d.getVar('PYTHON_PN', True) == 'python3' else ''} \ ${@'file://0001-python.cmake-look-for-python3-first.patch' if d.getVar('PYTHON_PN', True) == 'python3' else ''} \
" "
inherit catkin 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.* \
"

View File

@ -1,20 +1,40 @@
require catkin.inc require catkin.inc
DEPENDS_class-native += "catkin-runtime" SRC_URI += "file://environment.d-catkin.sh"
RDEPENDS_${PN}_class-native = "${PYTHON_PN}-catkin-pkg" DEPENDS_class-native += "catkin-runtime"
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 # The files in ${PYTHON_SITEPACKAGES_DIR} and catkin_find are
# installed by the catkin-runtime package. Therefore, we remove # installed by the catkin-runtime package. Therefore, we remove
# them here so that they are not installed. # them here so that they are not installed.
# Moreover: the ${ros_libdir}/python2.7 is empty. We need to # Moreover: the ${ros_libdir}/python2.7 is empty. We need to
# remove it, otherwise the QA error [installed-vs-shipped] will hit on us. # 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() { do_install_append() {
rm ${D}${ros_bindir}/catkin_find rm ${D}${ros_bindir}/catkin_find
rm -rf ${D}${PYTHON_SITEPACKAGES_DIR} rm -rf ${D}${PYTHON_SITEPACKAGES_DIR}
rmdir ${D}${ros_libdir}/${PYTHON_DIR} 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"

View File

@ -1,56 +0,0 @@
From a34e7d9d7f77c123cb8cbf464ead628f97e42fd4 Mon Sep 17 00:00:00 2001
From: Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
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 <stefan@herbrechtsmeier.net>
---
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

View File

@ -0,0 +1,175 @@
From e6179255b99264a51f8733f52d92ca579fbacb61 Mon Sep 17 00:00:00 2001
From: Lukas Bulwahn <lukas.bulwahn@gmail.com>
Date: Sun, 15 Apr 2018 02:11:42 +0200
Subject: [PATCH] allow proper cross-compilation with catkin
The original patch is:
From: Dominique Hunziker <dominique.hunziker@gmail.com>
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 <lukas.bulwahn@gmail.com>
---
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
+++ 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 8ef6c48..d6bc68f 100644
--- a/cmake/catkin_package.cmake
+++ b/cmake/catkin_package.cmake
@@ -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}")
+ 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 d99b811..3af5c71 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")
@@ -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)
+ 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)
@@ -116,18 +137,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()
--
2.7.4

View File

@ -1,76 +0,0 @@
From 1aa4eeea5b693e67f41e59cf1b0019f45d3a8976 Mon Sep 17 00:00:00 2001
From: Dmitry Rozhkov <dmitry.rozhkov@linux.intel.com>
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 <dmitry.rozhkov@linux.intel.com>
---
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

View File

@ -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 <dmitry.rozhkov@linux.intel.com> From: Dmitry Rozhkov <dmitry.rozhkov@linux.intel.com>
Date: Thu, 27 Apr 2017 11:04:27 +0300 Date: Thu, 27 Apr 2017 11:04:27 +0300
Subject: [PATCH] ignore LD_LIBRARY_PATH set in environment_cache.py 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] Upstream-Status: Inappropriate [upstream doesn't use bitbake and the change may break on-target development]
Signed-off-by: Dmitry Rozhkov <dmitry.rozhkov@linux.intel.com> Signed-off-by: Dmitry Rozhkov <dmitry.rozhkov@linux.intel.com>
--- ---
python/catkin/environment_cache.py | 3 ++- python/catkin/environment_cache.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-) 1 file changed, 2 insertions(+), 1 deletion(-)
@ -43,6 +44,3 @@ index 3defa52..dba2c50 100755
+ code.append('export %s="%s"' % (key, value)) + code.append('export %s="%s"' % (key, value))
else: else:
code.append('set %s=%s' % (key, value)) code.append('set %s=%s' % (key, value))
--
2.9.3

View File

@ -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 <dmitry.rozhkov@linux.intel.com> From: Dmitry Rozhkov <dmitry.rozhkov@linux.intel.com>
Date: Thu, 6 Apr 2017 15:25:13 +0300 Date: Thu, 6 Apr 2017 15:25:13 +0300
Subject: [PATCH] python.cmake: look for python3 first 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] Upstream-Status: Inappropriate [the patch overrides ROS's default to python2]
Signed-off-by: Dmitry Rozhkov <dmitry.rozhkov@linux.intel.com> Signed-off-by: Dmitry Rozhkov <dmitry.rozhkov@linux.intel.com>
--- ---
cmake/python.cmake | 1 + cmake/python.cmake | 1 +
1 file changed, 1 insertion(+) 1 file changed, 1 insertion(+)
@ -22,6 +23,3 @@ index 70f3d26..38f8320 100644
find_package(PythonInterp REQUIRED) find_package(PythonInterp REQUIRED)
message(STATUS "Using PYTHON_EXECUTABLE: ${PYTHON_EXECUTABLE}") message(STATUS "Using PYTHON_EXECUTABLE: ${PYTHON_EXECUTABLE}")
--
2.9.3

View File

@ -1,80 +0,0 @@
From b0ad0d6e6a7872c59180596d29ac5f52723c4317 Mon Sep 17 00:00:00 2001
From: Dmitry Rozhkov <dmitry.rozhkov@linux.intel.com>
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 <dmitry.rozhkov@linux.intel.com>
---
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

View File

@ -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 <lukas.bulwahn@bmw-carit.de> From: Lukas Bulwahn <lukas.bulwahn@bmw-carit.de>
Date: Tue, 31 May 2016 15:38:05 +0200 Date: Tue, 31 May 2016 15:38:05 +0200
Subject: [PATCH] use python provided by environment instead of the generated 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] Upstream-Status: Inappropriate [only for our setup]
Signed-off-by: Lukas Bulwahn <lukas.bulwahn@oss.bmw-carit.de> Signed-off-by: Lukas Bulwahn <lukas.bulwahn@oss.bmw-carit.de>
--- ---
cmake/templates/_setup_util.py.in | 2 +- cmake/templates/_setup_util.py.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmake/templates/_setup_util.py.in b/cmake/templates/_setup_util.py.in 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 --- a/cmake/templates/_setup_util.py.in
+++ b/cmake/templates/_setup_util.py.in +++ b/cmake/templates/_setup_util.py.in
@@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
@ -27,6 +28,3 @@ index cace21c..ff2c6b4 100755
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Software License Agreement (BSD License) # Software License Agreement (BSD License)
--
1.9.1

View File

@ -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 \
"

View File

@ -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<int64_t>(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<int64_t>(timeout.toSec() * 1000000.0f)));
}
if (callbacks_.empty() || !enabled_)

View File

@ -10,7 +10,9 @@ DEPENDS = "cpp-common message-generation rosconsole roscpp-serialization roscpp-
require ros-comm.inc 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" ROS_PKG_SUBDIR = "clients"

View File

@ -16,7 +16,7 @@ SRC_URI += "file://0001-increase-rosmaster-timeout.patch;patchdir=../.. \
ROS_PKG_SUBDIR = "tools" ROS_PKG_SUBDIR = "tools"
RDEPENDS_${PN} = "\ 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}-logging \
${PYTHON_PN}-threading \ ${PYTHON_PN}-threading \
${PYTHON_PN}-rospkg \ ${PYTHON_PN}-rospkg \

View File

@ -0,0 +1,32 @@
From 4254977bbfc67a3083e3881a56b50b729bf57d9f Mon Sep 17 00:00:00 2001
From: Dominique Hunziker <dominique.hunziker@gmail.com>
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
# 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 @@ for workspace in workspaces:
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

View File

@ -9,4 +9,6 @@ require ros.inc
ROS_PKG_SUBDIR = "core" ROS_PKG_SUBDIR = "core"
SRC_URI += "file://0001-use-env-to-get-python-exec.patch;striplevel=3"
RDEPENDS_${PN} = "${PYTHON_PN}-rospkg catkin-runtime" RDEPENDS_${PN} = "${PYTHON_PN}-rospkg catkin-runtime"

View File

@ -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
}

View File

@ -6,3 +6,5 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc
DEPENDS = "boost cpp-common" DEPENDS = "boost cpp-common"
require roscpp-core.inc require roscpp-core.inc
SRC_URI += "file://0001-remove-implicit-cast.patch;striplevel=2"

View File

@ -14,4 +14,4 @@ SRC_URI[sha256sum] = "a8fecbe03f9757510fe47137642e39a7c31b823d5bf7fa7890acc11691
inherit catkin inherit catkin
RDEPENDS_${PN} = "${PYTHON_PN}-rosdep \ 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 ''}"