diff --git a/src/bar_ros/CMakeLists.txt b/src/bar_ros/CMakeLists.txt
new file mode 100644
index 0000000..4da5033
--- /dev/null
+++ b/src/bar_ros/CMakeLists.txt
@@ -0,0 +1,13 @@
+cmake_minimum_required(VERSION 3.5.0)
+project(bar_ros)
+
+find_package(catkin QUIET)
+find_package(ament_cmake QUIET)
+
+if (catkin_FOUND)
+ include(ros1/ros.cmake)
+elseif(ament_cmake_FOUND)
+ include(ros2/ros.cmake)
+else()
+ message(FATAL_ERROR "ROS build tool not found.")
+endif()
diff --git a/src/bar_ros/package.xml b/src/bar_ros/package.xml
new file mode 100644
index 0000000..bebd58f
--- /dev/null
+++ b/src/bar_ros/package.xml
@@ -0,0 +1,24 @@
+
+
+ bar_ros
+ 0.0.1
+ The bar package
+
+ rre
+ BSD
+
+ catkin
+ roscpp
+
+ ament_cmake
+ rclcpp
+ ament_lint_auto
+ ament_lint_common
+
+ lib_foo
+
+
+ catkin
+ ament_cmake
+
+
diff --git a/src/bar_ros/ros1/ros.cmake b/src/bar_ros/ros1/ros.cmake
new file mode 100644
index 0000000..e28e46d
--- /dev/null
+++ b/src/bar_ros/ros1/ros.cmake
@@ -0,0 +1,29 @@
+find_package(catkin REQUIRED COMPONENTS
+ roscpp
+)
+
+find_package(lib_foo REQUIRED)
+
+catkin_package(
+# INCLUDE_DIRS include
+# LIBRARIES bar_ros1
+# CATKIN_DEPENDS lib_foo roscpp
+# DEPENDS system_lib
+)
+
+include_directories(
+# include
+ ${catkin_INCLUDE_DIRS}
+ ${lib_foo_INCLUDE_DIRS}
+)
+
+add_executable(${PROJECT_NAME}_node ros1/src/bar_node.cpp)
+target_link_libraries(${PROJECT_NAME}_node
+ ${catkin_LIBRARIES}
+ ${lib_foo_LIBRARIES}
+)
+install(TARGETS ${PROJECT_NAME}_node
+ ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+ LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+ RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+)
diff --git a/src/bar_ros1/src/bar_node.cpp b/src/bar_ros/ros1/src/bar_node.cpp
similarity index 100%
rename from src/bar_ros1/src/bar_node.cpp
rename to src/bar_ros/ros1/src/bar_node.cpp
diff --git a/src/bar_ros/ros2/ros.cmake b/src/bar_ros/ros2/ros.cmake
new file mode 100644
index 0000000..74ab6fa
--- /dev/null
+++ b/src/bar_ros/ros2/ros.cmake
@@ -0,0 +1,39 @@
+# Default to C99
+if(NOT CMAKE_C_STANDARD)
+ set(CMAKE_C_STANDARD 99)
+endif()
+
+# Default to C++14
+if(NOT CMAKE_CXX_STANDARD)
+ set(CMAKE_CXX_STANDARD 14)
+endif()
+
+if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ add_compile_options(-Wall -Wextra -Wpedantic)
+endif()
+
+# find dependencies
+find_package(ament_cmake REQUIRED)
+find_package(rclcpp REQUIRED)
+find_package(lib_foo REQUIRED)
+
+include_directories(include ${lib_foo_INCLUDE_DIRS})
+
+add_executable(${PROJECT_NAME}_node ros2/src/bar_node.cpp)
+ament_target_dependencies(${PROJECT_NAME}_node rclcpp)
+target_link_libraries(${PROJECT_NAME}_node ${lib_foo_LIBRARIES})
+
+install(TARGETS ${PROJECT_NAME}_node DESTINATION lib/${PROJECT_NAME})
+
+if(BUILD_TESTING)
+ find_package(ament_lint_auto REQUIRED)
+ # the following line skips the linter which checks for copyrights
+ # uncomment the line when a copyright and license is not present in all source files
+ #set(ament_cmake_copyright_FOUND TRUE)
+ # the following line skips cpplint (only works in a git repo)
+ # uncomment the line when this package is not in a git repo
+ #set(ament_cmake_cpplint_FOUND TRUE)
+ ament_lint_auto_find_test_dependencies()
+endif()
+
+ament_package()
diff --git a/src/bar_ros2/src/bar_node.cpp b/src/bar_ros/ros2/src/bar_node.cpp
similarity index 100%
rename from src/bar_ros2/src/bar_node.cpp
rename to src/bar_ros/ros2/src/bar_node.cpp
diff --git a/src/bar_ros1/CMakeLists.txt b/src/bar_ros1/CMakeLists.txt
deleted file mode 100644
index ef32c60..0000000
--- a/src/bar_ros1/CMakeLists.txt
+++ /dev/null
@@ -1,205 +0,0 @@
-cmake_minimum_required(VERSION 2.8.3)
-project(bar_ros1)
-
-## Compile as C++11, supported in ROS Kinetic and newer
-# add_compile_options(-std=c++11)
-
-## Find catkin macros and libraries
-## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
-## is used, also find other catkin packages
-find_package(catkin QUIET COMPONENTS
- roscpp
-)
-
-if (catkin_FOUND)
-
- ## System dependencies are found with CMake's conventions
- # find_package(Boost REQUIRED COMPONENTS system)
-
- find_package(lib_foo REQUIRED)
-
- ## Uncomment this if the package has a setup.py. This macro ensures
- ## modules and global scripts declared therein get installed
- ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
- # catkin_python_setup()
-
- ################################################
- ## Declare ROS messages, services and actions ##
- ################################################
-
- ## To declare and build messages, services or actions from within this
- ## package, follow these steps:
- ## * Let MSG_DEP_SET be the set of packages whose message types you use in
- ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
- ## * In the file package.xml:
- ## * add a build_depend tag for "message_generation"
- ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
- ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
- ## but can be declared for certainty nonetheless:
- ## * add a exec_depend tag for "message_runtime"
- ## * In this file (CMakeLists.txt):
- ## * add "message_generation" and every package in MSG_DEP_SET to
- ## find_package(catkin REQUIRED COMPONENTS ...)
- ## * add "message_runtime" and every package in MSG_DEP_SET to
- ## catkin_package(CATKIN_DEPENDS ...)
- ## * uncomment the add_*_files sections below as needed
- ## and list every .msg/.srv/.action file to be processed
- ## * uncomment the generate_messages entry below
- ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
-
- ## Generate messages in the 'msg' folder
- # add_message_files(
- # FILES
- # Message1.msg
- # Message2.msg
- # )
-
- ## Generate services in the 'srv' folder
- # add_service_files(
- # FILES
- # Service1.srv
- # Service2.srv
- # )
-
- ## Generate actions in the 'action' folder
- # add_action_files(
- # FILES
- # Action1.action
- # Action2.action
- # )
-
- ## Generate added messages and services with any dependencies listed here
- # generate_messages(
- # DEPENDENCIES
- # std_msgs # Or other packages containing msgs
- # )
-
- ################################################
- ## Declare ROS dynamic reconfigure parameters ##
- ################################################
-
- ## To declare and build dynamic reconfigure parameters within this
- ## package, follow these steps:
- ## * In the file package.xml:
- ## * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
- ## * In this file (CMakeLists.txt):
- ## * add "dynamic_reconfigure" to
- ## find_package(catkin REQUIRED COMPONENTS ...)
- ## * uncomment the "generate_dynamic_reconfigure_options" section below
- ## and list every .cfg file to be processed
-
- ## Generate dynamic reconfigure parameters in the 'cfg' folder
- # generate_dynamic_reconfigure_options(
- # cfg/DynReconf1.cfg
- # cfg/DynReconf2.cfg
- # )
-
- ###################################
- ## catkin specific configuration ##
- ###################################
- ## The catkin_package macro generates cmake config files for your package
- ## Declare things to be passed to dependent projects
- ## INCLUDE_DIRS: uncomment this if your package contains header files
- ## LIBRARIES: libraries you create in this project that dependent projects also need
- ## CATKIN_DEPENDS: catkin_packages dependent projects also need
- ## DEPENDS: system dependencies of this project that dependent projects also need
- catkin_package(
- # INCLUDE_DIRS include
- # LIBRARIES bar_ros1
- # CATKIN_DEPENDS lib_foo roscpp
- # DEPENDS system_lib
- )
-
- ###########
- ## Build ##
- ###########
-
- ## Specify additional locations of header files
- ## Your package locations should be listed before other locations
- include_directories(
- # include
- ${catkin_INCLUDE_DIRS}
- ${lib_foo_INCLUDE_DIRS}
- )
-
- ## Declare a C++ library
- # add_library(${PROJECT_NAME}
- # src/${PROJECT_NAME}/bar.cpp
- # )
-
- ## Add cmake target dependencies of the library
- ## as an example, code may need to be generated before libraries
- ## either from message generation or dynamic reconfigure
- # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
-
- ## Declare a C++ executable
- ## With catkin_make all packages are built within a single CMake context
- ## The recommended prefix ensures that target names across packages don't collide
- add_executable(${PROJECT_NAME}_node src/bar_node.cpp)
-
- ## Rename C++ executable without prefix
- ## The above recommended prefix causes long target names, the following renames the
- ## target back to the shorter version for ease of user use
- ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
- # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
-
- ## Add cmake target dependencies of the executable
- ## same as for the library above
- # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
-
- ## Specify libraries to link a library or executable target against
- target_link_libraries(${PROJECT_NAME}_node
- ${catkin_LIBRARIES}
- ${lib_foo_LIBRARIES}
- )
-
- #############
- ## Install ##
- #############
-
- # all install targets should use catkin DESTINATION variables
- # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
-
- ## Mark executable scripts (Python etc.) for installation
- ## in contrast to setup.py, you can choose the destination
- # install(PROGRAMS
- # scripts/my_python_script
- # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
- # )
-
- ## Mark executables and/or libraries for installation
- # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node
- # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
- # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
- # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
- # )
-
- ## Mark cpp header files for installation
- # install(DIRECTORY include/${PROJECT_NAME}/
- # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
- # FILES_MATCHING PATTERN "*.h"
- # PATTERN ".svn" EXCLUDE
- # )
-
- ## Mark other files for installation (e.g. launch and bag files, etc.)
- # install(FILES
- # # myfile1
- # # myfile2
- # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
- # )
-
- #############
- ## Testing ##
- #############
-
- ## Add gtest based cpp test target and link libraries
- # catkin_add_gtest(${PROJECT_NAME}-test test/test_bar.cpp)
- # if(TARGET ${PROJECT_NAME}-test)
- # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
- # endif()
-
- ## Add folders to be run by python nosetests
- # catkin_add_nosetests(test)
-else()
- message("catkin not found so skipping this package")
-endif()
\ No newline at end of file
diff --git a/src/bar_ros1/package.xml b/src/bar_ros1/package.xml
deleted file mode 100644
index 61c103c..0000000
--- a/src/bar_ros1/package.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
- bar_ros1
- 0.0.1
- The bar package
-
-
-
-
- rre
-
-
-
-
-
- BSD
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- catkin
- lib_foo
- roscpp
-
-
-
-
-
-
-
diff --git a/src/bar_ros2/CMakeLists.txt b/src/bar_ros2/CMakeLists.txt
deleted file mode 100644
index 7f07081..0000000
--- a/src/bar_ros2/CMakeLists.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-cmake_minimum_required(VERSION 3.5)
-project(bar_ros2)
-
-# Default to C99
-if(NOT CMAKE_C_STANDARD)
- set(CMAKE_C_STANDARD 99)
-endif()
-
-# Default to C++14
-if(NOT CMAKE_CXX_STANDARD)
- set(CMAKE_CXX_STANDARD 14)
-endif()
-
-if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- add_compile_options(-Wall -Wextra -Wpedantic)
-endif()
-
-# find dependencies
-find_package(ament_cmake QUIET)
-
-if(ament_cmake_FOUND)
- find_package(rclcpp REQUIRED)
- find_package(lib_foo REQUIRED)
-
- include_directories(include ${lib_foo_INCLUDE_DIRS})
-
- add_executable(${PROJECT_NAME}_node src/bar_node.cpp)
- ament_target_dependencies(${PROJECT_NAME}_node rclcpp)
- target_link_libraries(${PROJECT_NAME}_node ${lib_foo_LIBRARIES})
-
- install(TARGETS ${PROJECT_NAME}_node DESTINATION lib/${PROJECT_NAME})
-
- if(BUILD_TESTING)
- find_package(ament_lint_auto REQUIRED)
- # the following line skips the linter which checks for copyrights
- # uncomment the line when a copyright and license is not present in all source files
- #set(ament_cmake_copyright_FOUND TRUE)
- # the following line skips cpplint (only works in a git repo)
- # uncomment the line when this package is not in a git repo
- #set(ament_cmake_cpplint_FOUND TRUE)
- ament_lint_auto_find_test_dependencies()
- endif()
-
- ament_package()
-else()
- message("ament_cmake not found so skipping this package")
-endif()
\ No newline at end of file
diff --git a/src/bar_ros2/package.xml b/src/bar_ros2/package.xml
deleted file mode 100644
index 1f244b7..0000000
--- a/src/bar_ros2/package.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
- bar_ros2
- 0.0.0
- TODO: Package description
- rre
- TODO: License declaration
-
- ament_cmake
-
- rclcpp
- lib_foo
-
- ament_lint_auto
- ament_lint_common
-
-
- ament_cmake
-
-
diff --git a/src/lib_foo/package.xml b/src/lib_foo/package.xml
index 131cfea..479057a 100644
--- a/src/lib_foo/package.xml
+++ b/src/lib_foo/package.xml
@@ -5,8 +5,6 @@
A dummy lib to make pure CMake lib to work woth ROS 1 and ROS 2
rre
BSD
- catkin
- ament_cmake
cmake