diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..84e9a7d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 3.14) +project("ROS2 Master") + +# usually I put this in a separate file include("/opt/ros/_common/Colcon.cmake") +function(colcon_add_subdirectories) + cmake_parse_arguments(PARSE_ARGV 0 "ARG" "" "BUILD_BASE;BASE_PATHS" "") + + message("search criteria: ${ARGV}") + + execute_process(COMMAND colcon list + --paths-only + --base-paths ${ARG_BASE_PATHS} + --topological-order + ${ARG_UNPARSED_ARGUMENTS} + OUTPUT_VARIABLE paths) + string(STRIP "${paths}" paths) + string(REPLACE "\n" ";" paths "${paths}") + + MESSAGE("colcon shows paths ${paths}") + + foreach(path IN LISTS paths) + message("...examining ${path}") + # if(EXISTS "${path}/CMakeLists.txt") + execute_process(COMMAND colcon info --paths "${path}" OUTPUT_VARIABLE package_info) + if(NOT "${package_info}" MATCHES "type:[ \t]+(cmake|ros.ament_cmake|ros.cmake)") + message("skipping non-cmake project") + elseif(NOT "${package_info}" MATCHES "name:[ \t]+([^ \r\n\t]*)") + message(WARNING "could not identify package at ${path}") + else() + set(name "${CMAKE_MATCH_1}") + message("...adding package ${name} from path ${path}") + MESSAGE("package info: ${package_info}") + + get_filename_component(BUILD_PATH "${name}" ABSOLUTE BASE_DIR "${ARG_BUILD_BASE}") + + add_subdirectory("${path}" "${BUILD_PATH}") + endif() + endforeach() +endfunction() + +colcon_add_subdirectories( + BUILD_BASE "${PROJECT_SOURCE_DIR}/build" + BASE_PATHS "${PROJECT_SOURCE_DIR}/src/" + --packages-select modelec_utils +) \ No newline at end of file diff --git a/test.zsh b/test.zsh new file mode 100644 index 0000000..2f3dd65 --- /dev/null +++ b/test.zsh @@ -0,0 +1,6 @@ +ros_env="AMENT_PREFIX_PATH CMAKE_PREFIX_PATH COLCON_PREFIX_PATH PKG_CONFIG_PATH PYTHONPATH LD_LIBRARY_PATH PATH ROS_DISTRO ROS_PYTHON_VERSION ROS_LOCALHOST_ONLY ROS_VERSION" + +for e in ${=ros_env}; do + # In Zsh, ${(P)e} performs the indirect expansion + echo "$e=${(P)e}" +done \ No newline at end of file