From e9ec1fc08907551135b2f6407c7159b12e30e294 Mon Sep 17 00:00:00 2001
From: "Peter S. Housel" <housel@acm.org>
Date: Thu, 14 Aug 2014 12:29:02 -0700
Subject: [PATCH] classes: locate packages in /opt/ros/${ROSDISTRO}

Following standard convention, place ROS/Catkin packages under the
prefix /opt/ros/${ROSDISTRO} (exported as ${ros_prefix}) rather than in
the usual ${prefix}.
---
 classes/catkin.bbclass |  9 ++++---
 classes/ros.bbclass    | 61 ++++++++++++++++++++++++++++++++++++++----
 2 files changed, 61 insertions(+), 9 deletions(-)

diff --git a/classes/catkin.bbclass b/classes/catkin.bbclass
index 5286c4e..b22b19e 100644
--- a/classes/catkin.bbclass
+++ b/classes/catkin.bbclass
@@ -7,11 +7,13 @@ inherit cmake distutils-base ros faulty-solibs
 DEPENDS_prepend = "${@['catkin-native ', ''][d.getVar('BPN', True) == 'catkin']}"
 
 EXTRA_OECMAKE_CATKIN = "\
-    -DCMAKE_PREFIX_PATH='${STAGING_DIR_HOST}/usr;${STAGING_DIR_NATIVE}/usr' \
+    -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}' \
     "
 
 EXTRA_OECMAKE_CATKIN_class-native = "\
-    -DCMAKE_PREFIX_PATH=${STAGING_DIR_NATIVE}/usr \
+    -DCMAKE_PREFIX_PATH='${ros_prefix}' \
+    -DCMAKE_INSTALL_PREFIX:PATH='${ros_prefix}' \
     -DRT_LIBRARY=${libdir_native} \
     "
 
@@ -29,7 +31,6 @@ export BUILD_SYS
 export HOST_SYS
 
 SYSROOT_PREPROCESS_FUNCS += "catkin_sysroot_preprocess"
-
 catkin_sysroot_preprocess () {
-    sysroot_stage_dir ${D}${prefix}/etc ${SYSROOT_DESTDIR}${prefix}/etc
+    sysroot_stage_dir ${D}${ros_sysconfdir} ${SYSROOT_DESTDIR}${ros_sysconfdir}
 }
diff --git a/classes/ros.bbclass b/classes/ros.bbclass
index 4e181ba..3b016a4 100644
--- a/classes/ros.bbclass
+++ b/classes/ros.bbclass
@@ -7,20 +7,55 @@ ROS_BPN = "${@d.getVar('BPN', True).replace('-', '_')}"
 ROS_SPN ?= "${ROS_BPN}"
 ROS_SP = "${ROS_SPN}-${PV}"
 
+export ros_prefix = "/opt/ros/${ROSDISTRO}"
+ros_prefix_virtclass-native = "${STAGING_DIR_NATIVE}/opt/ros/${ROSDISTRO}"
+
+export ros_bindir = "${ros_prefix}/bin"
+export ros_libdir = "${ros_prefix}/${baselib}"
+export ros_libexecdir = "${ros_libdir}/${ROS_BPN}"
+export ros_includedir = "${ros_prefix}/include"
+export ros_datadir = "${ros_prefix}/share"
+export ros_sysconfdir = "${ros_prefix}/etc"
+export ros_stacksdir = "${ros_prefix}/stacks"
+
+PREPROCESS_RELOCATE_DIRS += " \
+    ${ros_bindir} \
+    ${ros_libdir} \
+"
+
+PKG_CONFIG_PATH .= ":${PKG_CONFIG_DIR}:${STAGING_DIR_HOST}${ros_libdir}/pkgconfig:${STAGING_DATADIR}/pkgconfig"
+PYTHON_SITEPACKAGES_DIR = "${ros_libdir}/${PYTHON_DIR}/site-packages"
+export PYTHONPATH = "${STAGING_DIR_NATIVE}${PYTHON_SITEPACKAGES_DIR}"
+PYTHONPATH_virtclass-native = "${PYTHON_SITEPACKAGES_DIR}"
+
 FILES_${PN} += "\
-    ${prefix}/etc \
-    ${datadir}/ros/config/${ROS_BPN}.config \
-    ${datadir}/ros/core/${ROS_BPN} \
-    ${datadir}/${ROS_BPN} \
+    ${ros_bindir}/* ${ros_libexecdir}/* ${ros_libdir}/lib*.so \
+    ${PYTHON_SITEPACKAGES_DIR} \
+    ${ros_datadir} \
+    ${ros_sysconfdir} \
+    ${ros_stacksdir} \
     "
 
 FILES_${PN}-dev += "\
+    ${ros_includedir} \
+    ${ros_libdir}/pkgconfig \
+    ${PYTHON_SITEPACKAGES_DIR}/*.la \
+    ${ros_datadir}/${ROS_BPN}/cmake \
     ${datadir}/${ROS_BPN}/cmake \
     ${datadir}/${ROS_BPN}/*.template \
     "
 
 FILES_${PN}-dbg += "\
-    ${libdir}/${ROS_BPN}/.debug/* \
+    ${ros_bindir}/.debug ${ros_libexecdir}/.debug ${ros_libdir}/.debug \
+    ${ros_datadir}/*/bin/.debug \
+    ${PYTHON_SITEPACKAGES_DIR}/.debug \
+    ${PYTHON_SITEPACKAGES_DIR}/*/.debug \
+    ${PYTHON_SITEPACKAGES_DIR}/*/*/.debug \
+    "
+
+FILES_${PN}-staticdev += "\
+    ${ros_libdir}/*.a \
+    ${ros_libdir}/${BPN}/*.a \
     "
 
 PACKAGES += "${PN}-commonlisp"
@@ -28,3 +63,19 @@ PACKAGES += "${PN}-commonlisp"
 FILES_${PN}-commonlisp += " \
     ${datadir}/common-lisp/ \
     "
+
+SYSROOT_PREPROCESS_FUNCS += "ros_sysroot_preprocess"
+ros_sysroot_preprocess () {
+    sysroot_stage_dir ${D}${ros_includedir} ${SYSROOT_DESTDIR}${ros_includedir}
+    if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then
+        sysroot_stage_dir ${D}${ros_bindir} ${SYSROOT_DESTDIR}${ros_bindir}
+        sysroot_stage_dir ${D}${ros_sysconfdir} ${SYSROOT_DESTDIR}${ros_sysconfdir}
+    fi
+    if [ -d ${D}${ros_libdir} ]; then
+        sysroot_stage_libdir ${D}${ros_libdir} ${SYSROOT_DESTDIR}${ros_libdir}
+    fi
+    sysroot_stage_dir ${D}${ros_datadir} ${SYSROOT_DESTDIR}${ros_datadir}
+    if [ -d ${D}${ros_stacksdir} ]; then
+        sysroot_stage_dir ${D}${ros_stacksdir} ${SYSROOT_DESTDIR}${ros_stacksdir}
+    fi
+}
-- 
GitLab