ros2-gbp/libg2o-release

local_setup files aren't generated

Opened this issue · 0 comments

The local_setup* files that are supposed to be located in install/libg2o/share/libg2o aren't generated in at least the humble version of this package.

My fix for that (without looking too deep into the ROS2 build package-relationships) would be to add

# at the beginning of the file
find_package(ament_cmake REQUIRED)
[..]
# and this at the end
ament_package()

However, since the CMakeLists.txt sets project(g2o), while the package.xml sets <name>libg2o</name>, this alone doesn't work and ament is complaining about the name miss match.

I would guess the best solution would be to change the name used in the package.xml back to g2o, as it is in the used upstream name. However that would probably be a breaking change for packages, depending on this package.

Since I wanted to stay with the name used in the humble release, the full diff of the CMakeLists.txt adapting all other variables is therefore a bit longer.

The full diff
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0f754ff..bc3cc92 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,9 @@
 cmake_minimum_required(VERSION 3.14)
 set(CMAKE_LEGACY_CYGWIN_WIN32 0)
 
-project(g2o)
+project(libg2o)
+
+find_package(ament_cmake REQUIRED)
 
 include(CPack)
 include(GNUInstallDirs)
@@ -9,8 +11,8 @@ include(GNUInstallDirs)
 # The library prefix
 set(LIB_PREFIX g2o_)
 
-set(g2o_C_FLAGS)
-set(g2o_CXX_FLAGS)
+set(libg2o_C_FLAGS)
+set(libg2o_CXX_FLAGS)
 
 # default built type
 if(NOT CMAKE_BUILD_TYPE)
@@ -61,15 +63,15 @@ if(APPLE)
 endif(APPLE)
 
 # Set the output directory for the build executables and libraries
-set(g2o_RUNTIME_OUTPUT_DIRECTORY ${g2o_SOURCE_DIR}/bin CACHE PATH "Target for the binaries")
+set(g2o_RUNTIME_OUTPUT_DIRECTORY ${libg2o_SOURCE_DIR}/bin CACHE PATH "Target for the binaries")
 if(WIN32)
-  set(g2o_LIBRARY_OUTPUT_DIRECTORY ${g2o_SOURCE_DIR}/bin CACHE PATH "Target for the libraries")
+  set(libg2o_LIBRARY_OUTPUT_DIRECTORY ${libg2o_SOURCE_DIR}/bin CACHE PATH "Target for the libraries")
 else(WIN32)
-  set(g2o_LIBRARY_OUTPUT_DIRECTORY ${g2o_SOURCE_DIR}/lib CACHE PATH "Target for the libraries")
+  set(libg2o_LIBRARY_OUTPUT_DIRECTORY ${libg2o_SOURCE_DIR}/lib CACHE PATH "Target for the libraries")
 endif(WIN32)
-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${g2o_LIBRARY_OUTPUT_DIRECTORY})
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${g2o_LIBRARY_OUTPUT_DIRECTORY})
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${g2o_RUNTIME_OUTPUT_DIRECTORY})
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${libg2o_LIBRARY_OUTPUT_DIRECTORY})
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${libg2o_LIBRARY_OUTPUT_DIRECTORY})
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${libg2o_RUNTIME_OUTPUT_DIRECTORY})
 
 # Set standard installation directories
 set(RUNTIME_DESTINATION ${CMAKE_INSTALL_BINDIR})
@@ -80,7 +82,7 @@ set(INCLUDES_INSTALL_DIR ${INCLUDES_DESTINATION}/g2o)
 
 # Set search directory for looking for our custom CMake scripts to
 # look for SuiteSparse, QGLViewer, and Eigen3.
-list(APPEND CMAKE_MODULE_PATH ${g2o_SOURCE_DIR}/cmake_modules)
+list(APPEND CMAKE_MODULE_PATH ${libg2o_SOURCE_DIR}/cmake_modules)
 
 # Detect OS and define macros appropriately
 if(WIN32)
@@ -157,8 +159,8 @@ if(G2O_USE_OPENMP)
   find_package(OpenMP)
   if(OPENMP_FOUND)
     set (G2O_OPENMP 1)
-    set(g2o_C_FLAGS "${g2o_C_FLAGS} ${OpenMP_C_FLAGS}")
-    set(g2o_CXX_FLAGS "${g2o_CXX_FLAGS} -DEIGEN_DONT_PARALLELIZE ${OpenMP_CXX_FLAGS}")
+    set(libg2o_C_FLAGS "${libg2o_C_FLAGS} ${OpenMP_C_FLAGS}")
+    set(libg2o_CXX_FLAGS "${libg2o_CXX_FLAGS} -DEIGEN_DONT_PARALLELIZE ${OpenMP_CXX_FLAGS}")
     message(STATUS "Compiling with OpenMP support")
   endif(OPENMP_FOUND)
 endif(G2O_USE_OPENMP)
@@ -358,8 +360,8 @@ endif()
 option(BUILD_CODE_COVERAGE "Enable coverage reporting" OFF)
 if(BUILD_CODE_COVERAGE AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
   message(STATUS "Enabling coverage compiler flags")
-  set(g2o_C_FLAGS "${g2o_C_FLAGS} --coverage")
-  set(g2o_CXX_FLAGS "${g2o_CXX_FLAGS} --coverage")
+  set(libg2o_C_FLAGS "${libg2o_C_FLAGS} --coverage")
+  set(libg2o_CXX_FLAGS "${libg2o_CXX_FLAGS} --coverage")
 endif()
 
 # Compiler specific options for gcc
@@ -390,8 +392,8 @@ if(CMAKE_COMPILER_IS_GNUCXX)
     set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -march=native")
   endif()
   # activate warnings !!!
-  set(g2o_C_FLAGS "${g2o_C_FLAGS} -Wall -W")
-  set(g2o_CXX_FLAGS "${g2o_CXX_FLAGS} -Wall -W")
+  set(libg2o_C_FLAGS "${libg2o_C_FLAGS} -Wall -W")
+  set(libg2o_CXX_FLAGS "${libg2o_CXX_FLAGS} -Wall -W")
 endif(CMAKE_COMPILER_IS_GNUCXX)
 
 if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
@@ -409,11 +411,11 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
   endif()
 
   # activate all warnings
-  #set(g2o_C_FLAGS "${g2o_C_FLAGS} -Weverything")
-  #set(g2o_CXX_FLAGS "${g2o_CXX_FLAGS} -Weverything")
-  set(g2o_C_FLAGS "${g2o_C_FLAGS} -Wall")
-  set(g2o_CXX_FLAGS "${g2o_CXX_FLAGS} -Wall")
-  #set(g2o_CXX_FLAGS "${g2o_CXX_FLAGS} -Wall -stdlib=libc++")
+  #set(libg2o_C_FLAGS "${libg2o_C_FLAGS} -Weverything")
+  #set(libg2o_CXX_FLAGS "${libg2o_CXX_FLAGS} -Weverything")
+  set(libg2o_C_FLAGS "${libg2o_C_FLAGS} -Wall")
+  set(libg2o_CXX_FLAGS "${libg2o_CXX_FLAGS} -Wall")
+  #set(libg2o_CXX_FLAGS "${libg2o_CXX_FLAGS} -Wall -stdlib=libc++")
 endif()
 
 if(MSVC)
@@ -477,8 +479,8 @@ set(CMAKE_CXX_STANDARD 14)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
 # specifying compiler flags
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${g2o_CXX_FLAGS}")
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${g2o_C_FLAGS}")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${libg2o_CXX_FLAGS}")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${libg2o_C_FLAGS}")
 
 # Find Eigen3. If it defines the target, this is used. If not,
 # fall back to the using the module form.
@@ -491,7 +493,7 @@ else()
 endif ()
 
 # Set up the top-level include directories
-include_directories(${g2o_SOURCE_DIR} ${PROJECT_BINARY_DIR})
+include_directories(${libg2o_SOURCE_DIR} ${PROJECT_BINARY_DIR})
 
 # Generate config.h
 set(G2O_OPENGL_FOUND ${OPENGL_FOUND})
@@ -503,11 +505,11 @@ set(G2O_CXX_COMPILER "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER}")
 
 # Generate cmake configuration scripts
 set(G2O_GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
-set(G2O_VERSION_CONFIG "${G2O_GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
-set(G2O_PROJECT_CONFIG "${G2O_GENERATED_DIR}/${PROJECT_NAME}Config.cmake")
-set(G2O_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
-set(G2O_CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}")
-set(G2O_NAMESPACE "${PROJECT_NAME}::")
+set(G2O_VERSION_CONFIG "${G2O_GENERATED_DIR}/g2oConfigVersion.cmake")
+set(G2O_PROJECT_CONFIG "${G2O_GENERATED_DIR}/g2oConfig.cmake")
+set(G2O_TARGETS_EXPORT_NAME "g2oTargets")
+set(G2O_CONFIG_INSTALL_DIR "lib/cmake/g2o")
+set(G2O_NAMESPACE "g2o::")
 set(G2O_SRC_DIR "${PROJECT_SOURCE_DIR}")
 set(G2O_VERSION 1.0.0)
 
@@ -519,8 +521,8 @@ WRITE_BASIC_PACKAGE_VERSION_FILE(
 configure_file(config.h.in "${PROJECT_BINARY_DIR}/g2o/config.h")
 install(FILES ${PROJECT_BINARY_DIR}/g2o/config.h DESTINATION ${INCLUDES_DESTINATION}/g2o)
 
-configure_file("${g2o_SOURCE_DIR}/cmake_modules/Config.cmake.in" "${G2O_PROJECT_CONFIG}" @ONLY)
-configure_file("${g2o_SOURCE_DIR}/script/codecov.sh.in" "${CMAKE_CURRENT_BINARY_DIR}/codecov.sh" @ONLY)
+configure_file("${libg2o_SOURCE_DIR}/cmake_modules/Config.cmake.in" "${G2O_PROJECT_CONFIG}" @ONLY)
+configure_file("${libg2o_SOURCE_DIR}/script/codecov.sh.in" "${CMAKE_CURRENT_BINARY_DIR}/codecov.sh" @ONLY)
 
 install(
     FILES "${G2O_PROJECT_CONFIG}" "${G2O_VERSION_CONFIG}"
@@ -551,3 +553,5 @@ endif()
 
 # Include the subdirectories
 add_subdirectory(g2o)
+
+ament_package()