Skip to content

Commit ef9cd5c

Browse files
authored
Correctly export ros_gz_bridge for downstream targets (gazebosim#503)
Signed-off-by: Michael Carroll <[email protected]>
1 parent db6053d commit ef9cd5c

File tree

4 files changed

+117
-13
lines changed

4 files changed

+117
-13
lines changed

ros_gz_bridge/CMakeLists.txt

+24-13
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ add_custom_command(
100100
COMMENT "Generating factories for interface types")
101101

102102
set(bridge_lib
103-
ros_gz_bridge_lib
103+
ros_gz_bridge
104104
)
105105

106106
add_library(${bridge_lib}
@@ -130,8 +130,12 @@ ament_target_dependencies(${bridge_lib}
130130
)
131131

132132
target_include_directories(${bridge_lib}
133-
PUBLIC include
134-
PRIVATE src ${generated_path}
133+
PUBLIC
134+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
135+
"$<INSTALL_INTERFACE:include/${PROJECT_NAME}>"
136+
PRIVATE
137+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>"
138+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/generated>"
135139
)
136140

137141
target_link_libraries(${bridge_lib}
@@ -144,19 +148,16 @@ rclcpp_components_register_node(
144148
PLUGIN ros_gz_bridge::RosGzBridge
145149
EXECUTABLE bridge_node)
146150

147-
install(TARGETS ${bridge_lib}
151+
install(TARGETS ${bridge_lib} EXPORT export_${PROJECT_NAME}
148152
ARCHIVE DESTINATION lib
149153
LIBRARY DESTINATION lib
150154
RUNTIME DESTINATION bin)
151155

152156
install(
153157
DIRECTORY include/
154-
DESTINATION include
158+
DESTINATION include/${PROJECT_NAME}
155159
)
156160

157-
ament_export_include_directories(include)
158-
ament_export_libraries(${bridge_lib})
159-
160161
set(bridge_executables
161162
parameter_bridge
162163
static_bridge
@@ -175,7 +176,7 @@ foreach(bridge ${bridge_executables})
175176
${BRIDGE_MESSAGE_TYPES}
176177
)
177178
install(TARGETS ${bridge}
178-
DESTINATION lib/${PROJECT_NAME}
179+
RUNTIME DESTINATION lib/${PROJECT_NAME}
179180
)
180181
endforeach()
181182

@@ -330,9 +331,19 @@ if(BUILD_TESTING)
330331

331332
endif()
332333

333-
ament_export_dependencies(
334-
rclcpp
335-
${BRIDGE_MESSAGE_TYPES}
336-
)
334+
# Export old-style CMake variables
335+
ament_export_include_directories("include/${PROJECT_NAME}")
336+
ament_export_libraries(${bridge_lib})
337+
338+
# Export modern CMake targets
339+
ament_export_targets(export_${PROJECT_NAME})
340+
341+
# specific order: dependents before dependencies
342+
ament_export_dependencies(rclcpp)
343+
ament_export_dependencies(rclcpp_components)
344+
ament_export_dependencies(${GZ_TARGET_PREFIX}-msgs${GZ_MSGS_VER})
345+
ament_export_dependencies(${GZ_TARGET_PREFIX}-transport${GZ_TRANSPORT_VER})
346+
ament_export_dependencies(yaml_cpp_vendor)
347+
ament_export_dependencies(${BRIDGE_MESSAGE_TYPES})
337348

338349
ament_package()

test_ros_gz_bridge/CMakeLists.txt

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
3+
project(test_ros_gz_bridge)
4+
5+
# Default to C++14
6+
if(NOT CMAKE_CXX_STANDARD)
7+
set(CMAKE_CXX_STANDARD 17)
8+
endif()
9+
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
10+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
11+
endif()
12+
13+
find_package(ament_cmake REQUIRED)
14+
find_package(ros_gz_bridge REQUIRED)
15+
16+
17+
if(BUILD_TESTING)
18+
find_package(ament_lint_auto REQUIRED)
19+
ament_lint_auto_find_test_dependencies()
20+
21+
find_package(ament_cmake_gtest REQUIRED)
22+
find_package(launch_testing_ament_cmake REQUIRED)
23+
ament_find_gtest()
24+
25+
ament_add_gtest(test_ros_gz_bridge src/test_ros_gz_bridge.cpp)
26+
target_link_libraries(test_ros_gz_bridge ros_gz_bridge::ros_gz_bridge)
27+
endif()
28+
29+
ament_package()

test_ros_gz_bridge/package.xml

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0"?>
2+
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
3+
<package format="3">
4+
<name>test_ros_gz_bridge</name>
5+
<version>0.246.0</version>
6+
<description>Bridge communication between ROS and Gazebo Transport</description>
7+
<maintainer email="[email protected]">Aditya Pande</maintainer>
8+
<maintainer email="[email protected]">Alejandro Hernandez</maintainer>
9+
10+
<license>Apache 2.0</license>
11+
12+
<author>Michael Carroll</author>
13+
14+
<buildtool_depend>ament_cmake</buildtool_depend>
15+
16+
<depend>ros_gz_bridge</depend>
17+
18+
<test_depend>ament_cmake_gtest</test_depend>
19+
<test_depend>ament_lint_auto</test_depend>
20+
<test_depend>ament_lint_common</test_depend>
21+
<test_depend>launch_testing_ament_cmake</test_depend>
22+
<test_depend>launch_ros</test_depend>
23+
<test_depend>launch_testing</test_depend>
24+
25+
<export>
26+
<build_type>ament_cmake</build_type>
27+
</export>
28+
</package>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Copyright 2024 Open Source Robotics Foundation, Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
#include <gtest/gtest.h>
16+
17+
#include <ros_gz_bridge/ros_gz_bridge.hpp>
18+
19+
class test_ros_gz_bridge : public ::testing::Test
20+
{
21+
public:
22+
static void SetUpTestCase()
23+
{
24+
rclcpp::init(0, nullptr);
25+
}
26+
27+
static void TearDownTestCase()
28+
{
29+
rclcpp::shutdown();
30+
}
31+
};
32+
33+
TEST_F(test_ros_gz_bridge, SpawnNode)
34+
{
35+
ros_gz_bridge::RosGzBridge node;
36+
}

0 commit comments

Comments
 (0)