Skip to content

Commit 576bf36

Browse files
committed
[CMake] clean: keep minimal required instructions
1 parent e1addc9 commit 576bf36

File tree

2 files changed

+119
-169
lines changed

2 files changed

+119
-169
lines changed

CMakeLists.txt

Lines changed: 59 additions & 163 deletions
Original file line numberDiff line numberDiff line change
@@ -1,207 +1,103 @@
11
# Copyright (C) 2008-2020 LAAS-CNRS, JRL AIST-CNRS.
22
#
3-
# Author: Florent Lamiraux, Nirmal Giftsun
3+
# Author: Florent Lamiraux, Nirmal Giftsun, Guilhem Saurel
44
#
55

6-
cmake_minimum_required(VERSION 3.1)
6+
CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
77

8-
set(PROJECT_ORG stack-of-tasks)
9-
set(PROJECT_NAME dynamic_graph_bridge)
10-
set(PROJECT_DESCRIPTION "Dynamic graph bridge library")
11-
set(PROJECT_URL "https://github.com/${PROJECT_ORG}/${PROJECT_NAME}")
12-
set(PROJECT_SUFFIX "-v3")
8+
# Project properties
9+
SET(PROJECT_ORG stack-of-tasks)
10+
SET(PROJECT_NAME dynamic_graph_bridge)
11+
SET(PROJECT_DESCRIPTION "Dynamic graph bridge library")
12+
SET(PROJECT_URL "https://github.com/${PROJECT_ORG}/${PROJECT_NAME}")
13+
SET(PROJECT_SUFFIX "-v3")
1314

14-
OPTION (BUILD_PYTHON_INTERFACE "Build the python binding" ON)
15+
# Project options
16+
OPTION(BUILD_PYTHON_INTERFACE "Build the python bindings" ON)
1517

16-
set(CUSTOM_HEADER_DIR dynamic_graph_bridge)
18+
# Project configuration
19+
SET(PROJECT_USE_CMAKE_EXPORT TRUE)
20+
SET(CUSTOM_HEADER_DIR ${PROJECT_NAME})
21+
set(CXX_DISABLE_WERROR FALSE)
1722
SET(DOXYGEN_USE_MATHJAX YES)
1823
SET(CATKIN_ENABLE_TESTING OFF)
19-
set(CXX_DISABLE_WERROR False)
2024

21-
include(cmake/base.cmake)
22-
include(cmake/boost.cmake)
23-
include(cmake/ros.cmake)
24-
include(cmake/python.cmake)
25+
# JRL-cmakemodule setup
26+
INCLUDE(cmake/base.cmake)
27+
INCLUDE(cmake/boost.cmake)
28+
INCLUDE(cmake/python.cmake)
29+
INCLUDE(cmake/ros.cmake)
2530

26-
CMAKE_POLICY(SET CMP0048 OLD)
27-
project(${PROJECT_NAME} CXX)
31+
# Project definition
32+
COMPUTE_PROJECT_ARGS(PROJECT_ARGS LANGUAGES CXX)
33+
PROJECT(${PROJECT_NAME} ${PROJECT_ARGS})
2834

35+
# Project dependencies
2936
SET(CATKIN_REQUIRED_COMPONENTS roscpp std_msgs message_generation std_srvs geometry_msgs sensor_msgs tf2_ros)
30-
SET(CATKIN_DEPENDS_LIBRARIES ros_bridge sot_loader)
3137

3238
IF(BUILD_PYTHON_INTERFACE)
3339
FINDPYTHON()
3440
STRING(REGEX REPLACE "-" "_" PY_NAME ${PROJECT_NAME})
35-
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS})
36-
ADD_REQUIRED_DEPENDENCY("dynamic-graph-python >= 3.0.0")
41+
ADD_PROJECT_DEPENDENCY(dynamic-graph-python REQUIRED
42+
PKG_CONFIG_REQUIRES dynamic-graph-python)
3743
SET(CATKIN_REQUIRED_COMPONENTS ${CATKIN_REQUIRED_COMPONENTS} rospy)
38-
SET(CATKIN_DEPENDS_LIBRARIES ${CATKIN_DEPENDS_LIBRARIES} ros_interpreter)
44+
SET(BOOST_COMPONENTS ${BOOST_COMPONENTS} python)
3945
ENDIF(BUILD_PYTHON_INTERFACE)
4046

4147
find_package(catkin REQUIRED COMPONENTS ${CATKIN_REQUIRED_COMPONENTS})
4248
find_package(realtime_tools)
4349

44-
set(${PROJECT_NAME}_HEADERS
45-
include/dynamic_graph_bridge/ros_init.hh
46-
include/dynamic_graph_bridge/sot_loader.hh
47-
include/dynamic_graph_bridge/sot_loader_basic.hh
48-
)
49-
50-
IF(BUILD_PYTHON_INTERFACE)
51-
set(${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_HEADERS}
52-
include/dynamic_graph_bridge/ros_interpreter.hh )
53-
ENDIF(BUILD_PYTHON_INTERFACE)
54-
5550
SEARCH_FOR_BOOST()
5651

57-
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
58-
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
59-
set(CMAKE_INSTALL_RPATH "${LIBRARY_OUTPUT_PATH}")
60-
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_PATH}")
61-
62-
# Add dependency to SoT specific packages.
63-
SET(SOT_PKGNAMES
64-
dynamic_graph_bridge_msgs)
65-
6652
add_required_dependency(roscpp)
6753
add_required_dependency(tf2_ros)
6854
add_required_dependency("realtime_tools >= 1.8")
6955

70-
ADD_REQUIRED_DEPENDENCY("dynamic-graph >= 3.0.0")
71-
ADD_REQUIRED_DEPENDENCY("sot-core >= 3.0.0")
56+
ADD_PROJECT_DEPENDENCY(sot-core REQUIRED PKG_CONFIG_REQUIRES sot-core)
7257

7358
add_required_dependency(dynamic_graph_bridge_msgs)
7459

75-
foreach(sot_pkgname ${SOT_PKGNAMES})
76-
add_required_dependency(${sot_pkgname})
77-
pkg_check_modules(SOT_${sot_pkgname} REQUIRED ${sot_pkgname})
78-
endforeach(sot_pkgname)
79-
80-
81-
# Build ros_bridge library
82-
add_library(ros_bridge
60+
# Main Library
61+
set(${PROJECT_NAME}_HEADERS
62+
include/dynamic_graph_bridge/ros_init.hh
63+
include/dynamic_graph_bridge/sot_loader.hh
64+
include/dynamic_graph_bridge/sot_loader_basic.hh
65+
include/dynamic_graph_bridge/ros_interpreter.hh
8366
src/converter.hh
84-
include/dynamic_graph_bridge/ros_init.hh src/ros_init.cpp
85-
src/sot_to_ros.hh src/sot_to_ros.cpp
67+
src/sot_to_ros.hh
8668
)
87-
pkg_config_use_dependency(ros_bridge dynamic_graph_bridge_msgs)
88-
install(TARGETS ros_bridge DESTINATION lib)
89-
90-
# Add ros_bridge in the dynamic-graph-bridge pkg-config file.
91-
9269

93-
# Make sure rpath are preserved during the install as ROS dependencies
94-
# are not installed.
95-
set_target_properties(ros_bridge PROPERTIES BUILD_WITH_INSTALL_RPATH True
96-
LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
97-
98-
macro(compile_plugin NAME)
99-
message(lib path ${LIBRARY_OUTPUT_PATH})
100-
file(MAKE_DIRECTORY "${LIBRARY_OUTPUT_PATH}/dynamic_graph/ros/${NAME}")
101-
add_library(${NAME} SHARED src/${NAME}.cpp src/${NAME}.hh)
102-
pkg_config_use_dependency(${NAME} dynamic-graph)
103-
pkg_config_use_dependency(${NAME} sot-core)
104-
pkg_config_use_dependency(${NAME} dynamic_graph_bridge_msgs)
105-
add_dependencies(${NAME} ros_bridge)
106-
target_link_libraries(${NAME} ros_bridge)
107-
set_target_properties(${NAME} PROPERTIES BUILD_WITH_INSTALL_RPATH True)
108-
set_target_properties(${NAME} PROPERTIES PREFIX "")
109-
install(TARGETS ${NAME} DESTINATION lib/plugin)
110-
endmacro()
111-
112-
# Build Sot Entities
113-
set(listplugins ros_publish ros_subscribe ros_queued_subscribe ros_tf_listener ros_time)
114-
115-
foreach(aplugin ${listplugins})
116-
compile_plugin(${aplugin})
117-
endforeach()
118-
119-
target_link_libraries(ros_publish ros_bridge)
70+
SET(${PROJECT_NAME}_SOURCES
71+
src/ros_init.cpp
72+
src/sot_to_ros.cpp
73+
)
12074

121-
IF(BUILD_PYTHON_INTERFACE)
122-
foreach(NAME ${listplugins})
123-
dynamic_graph_python_module("ros/${NAME}"
124-
${NAME}
125-
ros/${NAME}/wrap
126-
)
127-
128-
PKG_CONFIG_USE_DEPENDENCY(ros/${NAME}/wrap realtime_tools)
129-
PKG_CONFIG_USE_DEPENDENCY(ros/${NAME}/wrap dynamic_graph)
130-
PKG_CONFIG_USE_DEPENDENCY(ros/${NAME}/wrap sot-core)
131-
PKG_CONFIG_USE_DEPENDENCY(ros/${NAME}/wrap dynamic_graph_bridge_msgs)
132-
PKG_CONFIG_USE_DEPENDENCY(ros/${NAME}/wrap tf2_ros)
133-
endforeach()
134-
135-
# ros_interperter library.
136-
137-
add_library(ros_interpreter src/ros_interpreter.cpp)
138-
pkg_config_use_dependency(ros_interpreter dynamic-graph)
139-
pkg_config_use_dependency(ros_interpreter sot-core)
140-
pkg_config_use_dependency(ros_interpreter roscpp)
141-
pkg_config_use_dependency(ros_interpreter dynamic_graph_bridge_msgs)
142-
pkg_config_use_dependency(ros_interpreter dynamic-graph-python)
143-
144-
add_dependencies(ros_interpreter ros_bridge)
145-
target_link_libraries(ros_interpreter ros_bridge)
146-
set_target_properties(ros_interpreter PROPERTIES BUILD_WITH_INSTALL_RPATH True
147-
LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
148-
message(cmakeinstalllibdir " is ${CMAKE_INSTALL_LIBDIR} ")
149-
install(TARGETS ros_interpreter
150-
EXPORT ${TARGETS_EXPORT_NAME}
151-
DESTINATION lib)
75+
ADD_LIBRARY(ros_bridge SHARED
76+
${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS})
77+
TARGET_INCLUDE_DIRECTORIES(ros_bridge SYSTEM PUBLIC ${catkin_INCLUDE_DIRS})
78+
TARGET_INCLUDE_DIRECTORIES(ros_bridge PUBLIC $<INSTALL_INTERFACE:include>)
79+
TARGET_LINK_LIBRARIES(ros_bridge ${catkin_LIBRARIES} sot-core::sot-core)
80+
pkg_config_use_dependency(ros_bridge dynamic_graph_bridge_msgs)
15281

153-
ENDIF(BUILD_PYTHON_INTERFACE)
82+
IF(SUFFIX_SO_VERSION)
83+
SET_TARGET_PROPERTIES(ros_bridge PROPERTIES SOVERSION ${PROJECT_VERSION})
84+
ENDIF(SUFFIX_SO_VERSION)
15485

155-
# Stand alone embedded intepreter with a robot controller.
156-
add_executable(geometric_simu src/geometric_simu.cpp src/sot_loader.cpp src/sot_loader_basic.cpp)
157-
pkg_config_use_dependency(geometric_simu tf2_ros)
158-
pkg_config_use_dependency(geometric_simu roscpp)
159-
pkg_config_use_dependency(geometric_simu dynamic-graph)
160-
target_link_libraries(geometric_simu ros_bridge tf2_ros ${Boost_LIBRARIES} ${CMAKE_DL_LIBS})
161-
162-
# Sot loader library
163-
add_library(sot_loader src/sot_loader.cpp src/sot_loader_basic.cpp)
164-
pkg_config_use_dependency(sot_loader dynamic-graph)
165-
pkg_config_use_dependency(sot_loader sot-core)
166-
target_link_libraries(sot_loader ${Boost_LIBRARIES} roscpp ros_bridge tf2_ros)
167-
install(TARGETS sot_loader
168-
EXPORT ${TARGETS_EXPORT_NAME}
169-
DESTINATION lib)
86+
IF(NOT INSTALL_PYTHON_INTERFACE_ONLY)
87+
INSTALL(TARGETS ros_bridge EXPORT ${TARGETS_EXPORT_NAME} DESTINATION lib)
88+
ENDIF(NOT INSTALL_PYTHON_INTERFACE_ONLY)
17089

17190
add_subdirectory(src)
17291
add_subdirectory(tests)
17392

174-
# This is necessary so that the pc file generated by catking is similar to the on
175-
# done directly by jrl-cmake-modules
176-
catkin_package(INCLUDE_DIRS include CATKIN_DEPENDS message_runtime roscpp realtime_tools ${SOT_PKGNAMES} tf2_ros
177-
LIBRARIES ${CATKIN_DEPENDS_LIBRARIES}
178-
)
179-
180-
# Add libraries in pc file generated by cmake submodule
181-
PKG_CONFIG_APPEND_LIBS(ros_bridge sot_loader)
182-
183-
IF(BUILD_PYTHON_INTERFACE)
184-
PKG_CONFIG_APPEND_LIBS(ros_interpreter)
185-
186-
#install ros executables
187-
install(PROGRAMS
188-
${CMAKE_SOURCE_DIR}/scripts/robot_pose_publisher
189-
${CMAKE_SOURCE_DIR}/scripts/run_command
190-
${CMAKE_SOURCE_DIR}/scripts/tf_publisher
191-
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
192-
)
193-
194-
ENDIF(BUILD_PYTHON_INTERFACE)
195-
196-
message(cmake_install_bindir " is ${CMAKE_INSTALL_BINDIR} ")
197-
198-
# Install the geometrical simulation node
199-
install(TARGETS geometric_simu
200-
EXPORT ${TARGETS_EXPORT_NAME}
201-
DESTINATION
202-
${CATKIN_PACKAGE_SHARE_DESTINATION})
93+
#install ros executables
94+
install(PROGRAMS
95+
scripts/robot_pose_publisher
96+
scripts/run_command
97+
scripts/tf_publisher
98+
DESTINATION share/${PROJECT_NAME}
99+
)
203100

204101
# Install package information
205-
install(FILES manifest.xml
206-
DESTINATION
207-
${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/)
102+
install(FILES manifest.xml package.xml DESTINATION share/${PROJECT_NAME})
103+
PKG_CONFIG_APPEND_LIBS(ros_bridge sot_loader)

src/CMakeLists.txt

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,62 @@
1+
SET(plugins
2+
ros_publish
3+
ros_subscribe
4+
ros_queued_subscribe
5+
ros_tf_listener
6+
ros_time
7+
)
8+
9+
FOREACH(plugin ${plugins})
10+
GET_FILENAME_COMPONENT(LIBRARY_NAME ${plugin} NAME)
11+
ADD_LIBRARY(${LIBRARY_NAME} SHARED ${plugin}.cpp ${plugin}.hh)
12+
13+
IF(SUFFIX_SO_VERSION)
14+
SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION})
15+
ENDIF(SUFFIX_SO_VERSION)
16+
17+
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ros_bridge ${${LIBRARY_NAME}_deps})
18+
19+
IF(NOT INSTALL_PYTHON_INTERFACE_ONLY)
20+
INSTALL(TARGETS ${LIBRARY_NAME} EXPORT ${TARGETS_EXPORT_NAME}
21+
DESTINATION ${DYNAMIC_GRAPH_PLUGINDIR})
22+
ENDIF(NOT INSTALL_PYTHON_INTERFACE_ONLY)
23+
24+
IF(BUILD_PYTHON_INTERFACE)
25+
STRING(REPLACE - _ PYTHON_LIBRARY_NAME ${LIBRARY_NAME})
26+
DYNAMIC_GRAPH_PYTHON_MODULE("ros/${PYTHON_LIBRARY_NAME}"
27+
${LIBRARY_NAME} ${PROJECT_NAME}-${PYTHON_LIBRARY_NAME}-wrap)
28+
29+
PKG_CONFIG_USE_DEPENDENCY(${PROJECT_NAME}-${PYTHON_LIBRARY_NAME}-wrap realtime_tools)
30+
PKG_CONFIG_USE_DEPENDENCY(${PROJECT_NAME}-${PYTHON_LIBRARY_NAME}-wrap tf2_ros)
31+
ENDIF(BUILD_PYTHON_INTERFACE)
32+
ENDFOREACH(plugin)
33+
34+
target_link_libraries(ros_publish ros_bridge)
35+
136
IF(BUILD_PYTHON_INTERFACE)
2-
INSTALL(FILES
3-
"dynamic_graph/ros/__init__.py"
4-
"dynamic_graph/ros/ros.py"
5-
"dynamic_graph/ros/dgcompleter.py"
6-
DESTINATION "${PYTHON_SITELIB}/dynamic_graph/ros"
7-
)
37+
PYTHON_INSTALL_ON_SITE("dynamic_graph/ros" "__init__.py")
38+
PYTHON_INSTALL_ON_SITE("dynamic_graph/ros" "ros.py")
39+
PYTHON_INSTALL_ON_SITE("dynamic_graph/ros" "dgcompleter.py")
40+
41+
# ros_interperter library.
42+
add_library(ros_interpreter ros_interpreter.cpp)
43+
TARGET_LINK_LIBRARIES(ros_interpreter ros_bridge
44+
dynamic-graph-python::dynamic-graph-python)
45+
pkg_config_use_dependency(ros_interpreter roscpp)
46+
47+
install(TARGETS ros_interpreter
48+
EXPORT ${TARGETS_EXPORT_NAME}
49+
DESTINATION lib)
850
ENDIF(BUILD_PYTHON_INTERFACE)
51+
52+
# Stand alone embedded intepreter with a robot controller.
53+
add_executable(geometric_simu geometric_simu.cpp sot_loader.cpp sot_loader_basic.cpp)
54+
pkg_config_use_dependency(geometric_simu roscpp)
55+
target_link_libraries(geometric_simu ros_bridge tf2_ros ${Boost_LIBRARIES} ${CMAKE_DL_LIBS})
56+
install(TARGETS geometric_simu EXPORT ${TARGETS_EXPORT_NAME}
57+
DESTINATION bin)
58+
59+
# Sot loader library
60+
add_library(sot_loader sot_loader.cpp sot_loader_basic.cpp)
61+
target_link_libraries(sot_loader ${Boost_LIBRARIES} roscpp ros_bridge tf2_ros)
62+
install(TARGETS sot_loader EXPORT ${TARGETS_EXPORT_NAME} DESTINATION lib)

0 commit comments

Comments
 (0)