From 6ac6c09e2cbfaf6e292d46e299885dc98480f7ce Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 9 Feb 2017 14:26:58 +0100 Subject: [PATCH 1/8] Update CMake design to export include directories The current cmake implementation provides target modern cmake but those targets does not hold their include. This aims to correct it. --- orocos_kdl/CMakeLists.txt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/orocos_kdl/CMakeLists.txt b/orocos_kdl/CMakeLists.txt index 9bf842315..a37c4ad18 100644 --- a/orocos_kdl/CMakeLists.txt +++ b/orocos_kdl/CMakeLists.txt @@ -97,12 +97,6 @@ ADD_SUBDIRECTORY( tests ) ADD_SUBDIRECTORY( models ) ADD_SUBDIRECTORY( examples ) - -export(TARGETS orocos-kdl - FILE "${PROJECT_BINARY_DIR}/OrocosKDLTargets.cmake") - -export(PACKAGE orocos_kdl) - set(KDL_INCLUDE_DIRS ${KDL_INCLUDE_DIRS} ${Eigen_INCLUDE_DIR}) CONFIGURE_FILE(KDLConfig.cmake.in From 4ec06e359bb60e2922c28b2566c33bc8beb49e3f Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 9 Feb 2017 14:27:51 +0100 Subject: [PATCH 2/8] Update CMakeLits.txt Same problem as ./CMakeLists.txt --- orocos_kdl/src/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/orocos_kdl/src/CMakeLists.txt b/orocos_kdl/src/CMakeLists.txt index 4acd4665d..31fc2a08a 100644 --- a/orocos_kdl/src/CMakeLists.txt +++ b/orocos_kdl/src/CMakeLists.txt @@ -126,7 +126,7 @@ ENDIF() #####end RPATH # Needed so that the generated config.h can be used -INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) +TARGET_INCLUDE_DIRECTORIES(orocos-kdl PUBLIC $ ) TARGET_LINK_LIBRARIES(orocos-kdl ${Boost_LIBRARIES}) INSTALL(TARGETS orocos-kdl @@ -134,6 +134,7 @@ INSTALL(TARGETS orocos-kdl ARCHIVE DESTINATION lib${LIB_SUFFIX} LIBRARY DESTINATION lib${LIB_SUFFIX} PUBLIC_HEADER DESTINATION include/kdl + INCLUDES DESTINATION include/kdl ) INSTALL(FILES ${UTIL_HPPS} DESTINATION include/kdl/utilities) From 845385db037371d48acf76bc3cd4e3bd914d90b8 Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 9 Feb 2017 14:39:53 +0100 Subject: [PATCH 3/8] Update CMakeLists.txt Wrong install path --- orocos_kdl/src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orocos_kdl/src/CMakeLists.txt b/orocos_kdl/src/CMakeLists.txt index 31fc2a08a..2f7ba6ebf 100644 --- a/orocos_kdl/src/CMakeLists.txt +++ b/orocos_kdl/src/CMakeLists.txt @@ -134,7 +134,7 @@ INSTALL(TARGETS orocos-kdl ARCHIVE DESTINATION lib${LIB_SUFFIX} LIBRARY DESTINATION lib${LIB_SUFFIX} PUBLIC_HEADER DESTINATION include/kdl - INCLUDES DESTINATION include/kdl + INCLUDES DESTINATION include ) INSTALL(FILES ${UTIL_HPPS} DESTINATION include/kdl/utilities) From 534605ef30907a2e08d5e979b18e5e82a7825543 Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 9 Feb 2017 14:40:23 +0100 Subject: [PATCH 4/8] Update CMakeLists.txt Added minimum version 3.2 to support new technologies --- orocos_kdl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orocos_kdl/CMakeLists.txt b/orocos_kdl/CMakeLists.txt index a37c4ad18..420bd4c14 100644 --- a/orocos_kdl/CMakeLists.txt +++ b/orocos_kdl/CMakeLists.txt @@ -1,7 +1,7 @@ # # Test CMake version # -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +CMAKE_MINIMUM_REQUIRED(VERSION 3.2) #MARK_AS_ADVANCED( FORCE CMAKE_BACKWARDS_COMPATIBILITY ) From 9c44336519726135d7f596def1f5306c75264a94 Mon Sep 17 00:00:00 2001 From: Pierre Date: Fri, 30 Jun 2017 10:16:18 +0200 Subject: [PATCH 5/8] Update CMakeLists.txt --- orocos_kdl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orocos_kdl/CMakeLists.txt b/orocos_kdl/CMakeLists.txt index 420bd4c14..6e2056fdd 100644 --- a/orocos_kdl/CMakeLists.txt +++ b/orocos_kdl/CMakeLists.txt @@ -47,7 +47,7 @@ if(NOT Eigen_FOUND) include(${PROJ_SOURCE_DIR}/config/FindEigen3.cmake) set(Eigen_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}") endif() -include_directories(${Eigen_INCLUDE_DIR}) + SET(KDL_CFLAGS "${KDL_CFLAGS} -I${Eigen_INCLUDE_DIR}") # Check the platform STL containers capabilities From 54fd789ebb4ea79688c33adadc912a6ee3d7d5d0 Mon Sep 17 00:00:00 2001 From: Pierre Date: Fri, 30 Jun 2017 10:18:21 +0200 Subject: [PATCH 6/8] Update CMakeLists.txt Updated to new Eigen exportefd target --- orocos_kdl/src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orocos_kdl/src/CMakeLists.txt b/orocos_kdl/src/CMakeLists.txt index 2f7ba6ebf..c8d4f19fa 100644 --- a/orocos_kdl/src/CMakeLists.txt +++ b/orocos_kdl/src/CMakeLists.txt @@ -127,7 +127,7 @@ ENDIF() # Needed so that the generated config.h can be used TARGET_INCLUDE_DIRECTORIES(orocos-kdl PUBLIC $ ) -TARGET_LINK_LIBRARIES(orocos-kdl ${Boost_LIBRARIES}) +TARGET_LINK_LIBRARIES(orocos-kdl PUBLIC ${Boost_LIBRARIES} Eigen3::Eigen) INSTALL(TARGETS orocos-kdl EXPORT OrocosKDLTargets From 90e9f55f7551c6652b330af37c9ce445db1c8816 Mon Sep 17 00:00:00 2001 From: Matthijs van der Burgh Date: Wed, 30 Sep 2020 09:22:26 +0200 Subject: [PATCH 7/8] Fix merge --- orocos_kdl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orocos_kdl/CMakeLists.txt b/orocos_kdl/CMakeLists.txt index b7960c563..56d32a6aa 100644 --- a/orocos_kdl/CMakeLists.txt +++ b/orocos_kdl/CMakeLists.txt @@ -55,7 +55,7 @@ if(NOT EIGEN3_FOUND) include(${PROJ_SOURCE_DIR}/cmake/FindEigen3.cmake) endif() -SET(KDL_CFLAGS "${KDL_CFLAGS} -I${Eigen_INCLUDE_DIR}") +SET(KDL_CFLAGS "${KDL_CFLAGS} -I${EIGEN3_INCLUDE_DIR}") # Check the platform STL containers capabilities include(cmake/CheckSTLContainers.cmake) From 135ee064694249f2df041b126065189505d920c1 Mon Sep 17 00:00:00 2001 From: Pierre Date: Sat, 20 Feb 2021 15:21:49 +0100 Subject: [PATCH 8/8] Add checks on eigen targets and use built-in cmake script for configuration Eigen3 is offering CMake target from 3.3.1, we add in the local find module a target mechanism and fall back to it when FindEigen3.cmake did not create a target. Use cmake CMakePackageConfigHelpers to generate the .config file. --- orocos_kdl/CMakeLists.txt | 35 +++++++++++++------ orocos_kdl/cmake/FindEigen3.cmake | 7 ++++ orocos_kdl/orocos_kdl-config-version.cmake.in | 11 ------ orocos_kdl/orocos_kdl-config.cmake.in | 15 +++++--- orocos_kdl/src/CMakeLists.txt | 2 +- 5 files changed, 43 insertions(+), 27 deletions(-) delete mode 100644 orocos_kdl/orocos_kdl-config-version.cmake.in diff --git a/orocos_kdl/CMakeLists.txt b/orocos_kdl/CMakeLists.txt index 56d32a6aa..f855965e4 100644 --- a/orocos_kdl/CMakeLists.txt +++ b/orocos_kdl/CMakeLists.txt @@ -51,10 +51,14 @@ ENDIF ( NOT CMAKE_BUILD_TYPE ) SET( KDL_CFLAGS "") find_package(Eigen3 QUIET) -if(NOT EIGEN3_FOUND) +if(NOT EIGEN3_FOUND OR NOT TARGET Eigen3::Eigen) include(${PROJ_SOURCE_DIR}/cmake/FindEigen3.cmake) endif() +if(NOT TARGET Eigen3::Eigen) + message(FATAL_ERROR "Eigen3 NOT FOUND") +endif() + SET(KDL_CFLAGS "${KDL_CFLAGS} -I${EIGEN3_INCLUDE_DIR}") # Check the platform STL containers capabilities @@ -101,6 +105,11 @@ ENDIF(ENABLE_TESTS ) OPTION(ENABLE_EXAMPLES OFF "Enable building of examples") +# Configuration variables +set(orocos_kdl_TARGETS_EXPORT_NAME "OrocosKDLTargets") +set(orocos_kdl_VERSION_CONFIG_FILENAME "${PROJECT_NAME}-config-version.cmake") +set(orocos_kdl_CONFIG_FILENAME "${PROJECT_NAME}-config.cmake") + ADD_SUBDIRECTORY( doc ) ADD_SUBDIRECTORY( src ) ADD_SUBDIRECTORY( tests ) @@ -108,15 +117,21 @@ ADD_SUBDIRECTORY( models ) ADD_SUBDIRECTORY( examples ) # Generate CMake package configuration -CONFIGURE_FILE(orocos_kdl-config.cmake.in - ${PROJECT_BINARY_DIR}/orocos_kdl-config.cmake @ONLY) -CONFIGURE_FILE(orocos_kdl-config-version.cmake.in - ${PROJECT_BINARY_DIR}/orocos_kdl-config-version.cmake @ONLY) - -INSTALL(FILES cmake/FindEigen3.cmake DESTINATION share/orocos_kdl/cmake) -INSTALL(FILES ${PROJECT_BINARY_DIR}/orocos_kdl-config.cmake DESTINATION share/orocos_kdl/cmake) -INSTALL(FILES ${PROJECT_BINARY_DIR}/orocos_kdl-config-version.cmake DESTINATION share/orocos_kdl/cmake) -INSTALL(EXPORT OrocosKDLTargets DESTINATION share/orocos_kdl/cmake) +include(CMakePackageConfigHelpers) + +set(orocos_kdl_CMAKE_INSTALL_SUFFIX share/orocos_kdl/cmake) + +configure_package_config_file(orocos_kdl-config.cmake.in ${orocos_kdl_CONFIG_FILENAME} + INSTALL_DESTINATION ${orocos_kdl_CMAKE_INSTALL_SUFFIX}) +write_basic_package_version_file(${orocos_kdl_VERSION_CONFIG_FILENAME} + VERSION ${KDL_VERSION} + COMPATIBILITY AnyNewerVersion) + +INSTALL(FILES cmake/FindEigen3.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${orocos_kdl_CONFIG_FILENAME} + ${CMAKE_CURRENT_BINARY_DIR}/${orocos_kdl_VERSION_CONFIG_FILENAME} + DESTINATION ${orocos_kdl_CMAKE_INSTALL_SUFFIX}) +INSTALL(EXPORT OrocosKDLTargets DESTINATION ${orocos_kdl_CMAKE_INSTALL_SUFFIX}) # Generate pkg-config package configuration CONFIGURE_FILE(orocos_kdl.pc.in ${CMAKE_CURRENT_BINARY_DIR}/orocos-kdl.pc @ONLY) diff --git a/orocos_kdl/cmake/FindEigen3.cmake b/orocos_kdl/cmake/FindEigen3.cmake index 17307fc07..e36e7d843 100644 --- a/orocos_kdl/cmake/FindEigen3.cmake +++ b/orocos_kdl/cmake/FindEigen3.cmake @@ -87,3 +87,10 @@ else (EIGEN3_INCLUDE_DIR) mark_as_advanced(EIGEN3_INCLUDE_DIR) endif(EIGEN3_INCLUDE_DIR) + +if(EIGEN3_FOUND AND NOT TARGET Eigen3::Eigen) + add_library(Eigen3::Eigen INTERFACE IMPORTED) + set_target_properties(Eigen3::Eigen PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${EIGEN3_INCLUDE_DIR}") +endif() + diff --git a/orocos_kdl/orocos_kdl-config-version.cmake.in b/orocos_kdl/orocos_kdl-config-version.cmake.in deleted file mode 100644 index 796eddc19..000000000 --- a/orocos_kdl/orocos_kdl-config-version.cmake.in +++ /dev/null @@ -1,11 +0,0 @@ -set(PACKAGE_VERSION "@KDL_VERSION@") - -# Check whether the requested PACKAGE_FIND_VERSION is compatible -if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_COMPATIBLE FALSE) -else() - set(PACKAGE_VERSION_COMPATIBLE TRUE) - if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_EXACT TRUE) - endif() -endif() \ No newline at end of file diff --git a/orocos_kdl/orocos_kdl-config.cmake.in b/orocos_kdl/orocos_kdl-config.cmake.in index 4cc8bc598..31b71c54d 100644 --- a/orocos_kdl/orocos_kdl-config.cmake.in +++ b/orocos_kdl/orocos_kdl-config.cmake.in @@ -4,8 +4,7 @@ # orocos_kdl_LIBRARIES - libraries to link against for Orocos KDL # orocos_kdl_PKGCONFIG_DIR - directory containing the .pc pkgconfig files -# Compute paths -get_filename_component(orocos_kdl_PREFIX "${CMAKE_CURRENT_LIST_DIR}/../../.." ABSOLUTE) + @PACKAGE_INIT@ # Find dependencies find_package(Eigen3 QUIET) @@ -19,15 +18,21 @@ if(KDL_USE_NEW_TREE_INTERFACE) endif() if(NOT TARGET orocos-kdl) - include("${CMAKE_CURRENT_LIST_DIR}/OrocosKDLTargets.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/@orocos_kdl_TARGETS_EXPORT_NAME@.cmake") endif() +get_target_property(orocos_kdl_INCLUDE_DIR orocos-kdl INTERFACE_INCLUDE_DIRECTORIES) + +set_and_check(orocos_kdl_INCLUDE_DIR "${orocos_kdl_INCLUDE_DIR}") + set(orocos_kdl_INCLUDE_DIRS - ${orocos_kdl_PREFIX}/include + ${orocos_kdl_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR} ) set(orocos_kdl_LIBRARIES orocos-kdl) # where the .pc pkgconfig files are installed -set(orocos_kdl_PKGCONFIG_DIR "${orocos_kdl_PREFIX}/lib/pkgconfig") +set(orocos_kdl_PKGCONFIG_DIR "${PACKAGE_PREFIX_DIR}/lib/pkgconfig") + +check_required_components("@PROJECT_NAME@") diff --git a/orocos_kdl/src/CMakeLists.txt b/orocos_kdl/src/CMakeLists.txt index 5406c6cf8..3e3cb3fcc 100644 --- a/orocos_kdl/src/CMakeLists.txt +++ b/orocos_kdl/src/CMakeLists.txt @@ -84,7 +84,7 @@ TARGET_INCLUDE_DIRECTORIES(orocos-kdl PUBLIC $