Skip to content

Commit 685dd25

Browse files
committed
create nav2_generate_tree_nodes_xml function
This cmake function takes care of generating and installing TreeNodesModel xml file suitable for use by groot. Signed-off-by: Mike Wake <macwake@gmail.com> sq
1 parent 8377c76 commit 685dd25

File tree

6 files changed

+104
-65
lines changed

6 files changed

+104
-65
lines changed

nav2_behavior_tree/CMakeLists.txt

Lines changed: 14 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,6 @@ set(GENERATED_DIR ${CMAKE_CURRENT_BINARY_DIR}/gen)
248248
set(TREENODES_FILE nav2_tree_nodes.xml)
249249
configure_file(plugins_list.hpp.in ${GENERATED_DIR}/plugins_list.hpp)
250250

251-
# create a text file listing plugin names, one per line
252-
string(REPLACE ";" "\n" plugin_libs_one_per_line "${plugin_libs}")
253-
configure_file(plugins_list.txt.in ${GENERATED_DIR}/plugins_list.txt)
254-
255251
add_executable(generate_nav2_tree_nodes_xml src/generate_nav2_tree_nodes_xml.cpp)
256252
target_link_libraries(generate_nav2_tree_nodes_xml PRIVATE
257253
behaviortree_cpp::behaviortree_cpp
@@ -261,10 +257,17 @@ target_link_libraries(generate_nav2_tree_nodes_xml PRIVATE
261257
target_include_directories(generate_nav2_tree_nodes_xml PRIVATE ${GENERATED_DIR})
262258

263259
add_executable(generate_tree_nodes_xml_cli src/generate_tree_nodes_xml_cli.cpp)
260+
add_executable(nav2_behavior_tree::generate_tree_nodes_xml_cli ALIAS generate_tree_nodes_xml_cli)
264261
target_link_libraries(generate_tree_nodes_xml_cli PRIVATE
265262
behaviortree_cpp::behaviortree_cpp
266263
nav2_util::nav2_util_core
267264
)
265+
266+
include(cmake/generate_tree_nodes_xml.cmake)
267+
nav2_generate_tree_nodes_xml(
268+
PLUGIN_LIBS ${plugin_libs}
269+
)
270+
268271
install(TARGETS generate_nav2_tree_nodes_xml generate_tree_nodes_xml_cli
269272
EXPORT ${library_name}
270273
DESTINATION lib/${PROJECT_NAME})
@@ -277,35 +280,13 @@ install(DIRECTORY test/utils/
277280
DESTINATION include/${PROJECT_NAME}/nav2_behavior_tree/test/utils
278281
)
279282

280-
add_custom_command(
281-
OUTPUT ${GENERATED_DIR}/${TREENODES_FILE}
282-
COMMAND ${CMAKE_COMMAND} -E env LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}:$ENV{LD_LIBRARY_PATH}
283-
$<TARGET_FILE:generate_tree_nodes_xml_cli>
284-
${GENERATED_DIR}/plugins_list.txt
285-
${GENERATED_DIR}/${TREENODES_FILE}
286-
POST_BUILD
287-
DEPENDS
288-
${plugin_libs}
289-
$<TARGET_FILE:generate_tree_nodes_xml_cli>
290-
#generate_tree_nodes_xml_cli
291-
${GENERATED_DIR}/plugins_list.txt
292-
COMMENT "Generating groot tree nodes description file"
293-
VERBATIM
283+
install(DIRECTORY cmake
284+
DESTINATION share/${PROJECT_NAME}
294285
)
295286

296-
add_custom_target(gen_tree_nodes_xml ALL
297-
DEPENDS
298-
generate_tree_nodes_xml_cli
299-
${GENERATED_DIR}/plugins_list.txt
300-
${GENERATED_DIR}/${TREENODES_FILE}
301-
)
302-
303-
#NOTE: Still using manually managed ${TREENODES_FILE} in source directory
304-
#install(FILES ${GENERATED_DIR}/${TREENODES_FILE} DESTINATION share/${PROJECT_NAME})
305-
install(FILES ${TREENODES_FILE} DESTINATION share/${PROJECT_NAME})
306-
287+
#NOTE: Still using manually managed nav2_tree_nodes.xml in source directory
288+
install(FILES nav2_tree_nodes.xml DESTINATION share/${PROJECT_NAME})
307289
install(FILES ${GENERATED_DIR}/plugins_list.hpp DESTINATION include/${PROJECT_NAME}/${PROJECT_NAME})
308-
install(FILES ${GENERATED_DIR}/plugins_list.txt DESTINATION share/${PROJECT_NAME})
309290

310291
if(BUILD_TESTING)
311292
find_package(ament_lint_auto REQUIRED)
@@ -342,4 +323,6 @@ ament_export_dependencies(
342323
)
343324
ament_export_targets(${library_name})
344325

345-
ament_package()
326+
ament_package(
327+
CONFIG_EXTRAS "nav2_behavior_tree-extras.cmake"
328+
)
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
function(nav2_generate_tree_nodes_xml)
2+
# Validate arguments
3+
cmake_parse_arguments(
4+
ARG
5+
"SKIP_INSTALL"
6+
"GENERATED_DIR;TREENODES_FILE;PLUGIN_LIST_TEMPLATE_FILE;INSTALL_PATH"
7+
"PLUGIN_LIBS"
8+
${ARGN}
9+
)
10+
if(NOT ARG_GENERATED_DIR)
11+
set(ARG_GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/gen")
12+
endif()
13+
if(NOT ARG_TREENODES_FILE)
14+
set(ARG_TREENODES_FILE "${PROJECT_NAME}_tree_nodes.xml")
15+
endif()
16+
if(NOT ARG_PLUGIN_LIST_TEMPLATE_FILE)
17+
if(NOT nav2_behavior_tree_DIR)
18+
set(ARG_PLUGIN_LIST_TEMPLATE_FILE "${CMAKE_SOURCE_DIR}/cmake/plugin_list.txt.in")
19+
else()
20+
set(ARG_PLUGIN_LIST_TEMPLATE_FILE "${nav2_behavior_tree_DIR}/plugin_list.txt.in")
21+
endif()
22+
endif()
23+
if(NOT ARG_INSTALL_PATH)
24+
set(ARG_INSTALL_PATH "share/${PROJECT_NAME}")
25+
endif()
26+
27+
# Make sure the templates to use are available
28+
if(NOT EXISTS "${ARG_PLUGIN_LIST_TEMPLATE_FILE}")
29+
message(FATAL_ERROR "Can't find ${ARG_PLUGIN_LIST_TEMPLATE_FILE}. Maybe reinstall nav2_behavior_tree package.")
30+
endif()
31+
32+
if(NOT ARG_PLUGIN_LIBS)
33+
message(FATAL_ERROR "PLUGIN_LIBS option is required.")
34+
endif()
35+
list(SORT ARG_PLUGIN_LIBS)
36+
37+
# retrieve version information from <package>.xml file
38+
if(NOT _AMENT_PACKAGE_NAME)
39+
ament_package_xml()
40+
endif()
41+
string(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
42+
set(VERSION_STR ${${PROJECT_NAME}_VERSION})
43+
44+
# parse version information from the version string
45+
if(NOT VERSION_STR MATCHES "([0-9]+)\.([0-9]+)\.([0-9]+)")
46+
message(FATAL_ERROR "Version string must be of format MAJOR.MINOR.PATCH")
47+
endif()
48+
set(VERSION_MAJOR ${CMAKE_MATCH_1})
49+
set(VERSION_MINOR ${CMAKE_MATCH_2})
50+
set(VERSION_PATCH ${CMAKE_MATCH_3})
51+
52+
set(GENERATED_TREENODES_FILE "${ARG_GENERATED_DIR}/${ARG_TREENODES_FILE}")
53+
54+
string(REPLACE ";" "\n" plugin_libs_one_per_line "${ARG_PLUGIN_LIBS}")
55+
configure_file(${ARG_PLUGIN_LIST_TEMPLATE_FILE} ${GENERATED_DIR}/plugins_list.txt @ONLY)
56+
57+
add_custom_command(
58+
OUTPUT "${GENERATED_TREENODES_FILE}"
59+
COMMAND ${CMAKE_COMMAND} -E env LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}:$ENV{LD_LIBRARY_PATH}
60+
$<TARGET_FILE:nav2_behavior_tree::generate_tree_nodes_xml_cli>
61+
"${ARG_GENERATED_DIR}/plugins_list.txt"
62+
"${GENERATED_TREENODES_FILE}"
63+
POST_BUILD
64+
DEPENDS
65+
nav2_behavior_tree::generate_tree_nodes_xml_cli
66+
"${ARG_PLUGIN_LIBS}"
67+
"${GENERATED_DIR}/plugins_list.txt"
68+
COMMENT "Generating groot tree nodes description file ${GENERATED_TREENODES_FILE}, using ${ARG_GENERATED_DIR}/plugins_list.txt"
69+
)
70+
71+
add_custom_target("nav2_generate_treenodes_file__${PROJECT_NAME}" ALL
72+
DEPENDS
73+
nav2_behavior_tree::generate_tree_nodes_xml_cli
74+
"${GENERATED_DIR}/plugins_list.txt"
75+
"${GENERATED_TREENODES_FILE}"
76+
)
77+
78+
if(NOT ARG_SKIP_INSTALL)
79+
install(FILES
80+
"${GENERATED_TREENODES_FILE}"
81+
"${GENERATED_DIR}/plugins_list.txt"
82+
DESTINATION "${ARG_INSTALL_PATH}")
83+
endif()
84+
endfunction()
85+

nav2_behavior_tree/plugins_list.txt.in renamed to nav2_behavior_tree/cmake/plugin_list.txt.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# This file was automatically generated by cmake
2+
# project_name: @PROJECT_NAME@
3+
# version: @VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_PATCH@
24
# Start @PROJECT_NAME@ plugin_libs
35

46
@plugin_libs_one_per_line@
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
include("${nav2_behavior_tree_DIR}/generate_tree_nodes_xml.cmake")

nav2_docking/opennav_docking_bt/CMakeLists.txt

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -45,36 +45,10 @@ target_link_libraries(opennav_undock_action_bt_node PUBLIC
4545
${nav2_msgs_TARGETS}
4646
)
4747

48-
set(GENERATED_DIR ${CMAKE_CURRENT_BINARY_DIR}/gen)
49-
set(TREENODES_FILE opennav_docking_tree_nodes.xml)
50-
string(REPLACE ";" "\n" plugin_libs_one_per_line "${plugin_libs}")
51-
configure_file(plugins_list.txt.in ${GENERATED_DIR}/plugins_list.txt)
52-
53-
add_custom_command(
54-
OUTPUT ${GENERATED_DIR}/${TREENODES_FILE}
55-
COMMAND ${CMAKE_COMMAND} -E env LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}:$ENV{LD_LIBRARY_PATH}
56-
$<TARGET_FILE:nav2_behavior_tree::generate_tree_nodes_xml_cli>
57-
${GENERATED_DIR}/plugins_list.txt
58-
${GENERATED_DIR}/${TREENODES_FILE}
59-
POST_BUILD
60-
DEPENDS
61-
${plugin_libs}
62-
nav2_behavior_tree::generate_tree_nodes_xml_cli
63-
${GENERATED_DIR}/plugins_list.txt
64-
COMMENT "Generating groot tree nodes description file - ${plugin_libs}"
65-
VERBATIM
66-
)
67-
68-
add_custom_target(gen_tree_nodes_xml ALL
69-
DEPENDS
70-
nav2_behavior_tree::generate_tree_nodes_xml_cli
71-
${GENERATED_DIR}/plugins_list.txt
72-
${GENERATED_DIR}/${TREENODES_FILE}
48+
nav2_generate_tree_nodes_xml(
49+
PLUGIN_LIBS ${plugin_libs}
7350
)
7451

75-
install(FILES ${GENERATED_DIR}/${TREENODES_FILE} DESTINATION share/${PROJECT_NAME})
76-
install(FILES ${GENERATED_DIR}/plugins_list.txt DESTINATION share/${PROJECT_NAME})
77-
7852
install(TARGETS opennav_dock_action_bt_node opennav_undock_action_bt_node
7953
EXPORT ${PROJECT_NAME}
8054
ARCHIVE DESTINATION lib

nav2_docking/opennav_docking_bt/plugins_list.txt.in

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)