From d4f2be9c25f5dd3572a2133c6477a609a39db45c Mon Sep 17 00:00:00 2001 From: Mark Moll Date: Sat, 7 Sep 2024 17:25:23 -0700 Subject: [PATCH] modernize cmake syntax --- CMakeLists.txt | 89 ++++++++++++++++++++------------------ CMakeModules/Findccd.cmake | 9 ---- CMakeModules/Findfcl.cmake | 18 -------- README.md | 4 +- benchmark/CMakeLists.txt | 2 +- ompl | 2 +- src/omplapp/CMakeLists.txt | 3 -- 7 files changed, 51 insertions(+), 76 deletions(-) delete mode 100644 CMakeModules/Findccd.cmake delete mode 100644 CMakeModules/Findfcl.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index edca49a9..d966fbb8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,8 @@ if(NOT EXISTS "${_ompl_cmake_modules_path}") endif() set(CMAKE_MODULE_PATH - "${CMAKE_MODULE_PATH}" + "${CMAKE_MODULE_PATH}") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_ROOT_DIR}/cmake/Modules" "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules" "${_ompl_cmake_modules_path}") @@ -124,31 +125,39 @@ set_package_properties(Triangle PROPERTIES URL "http://www.cs.cmu.edu/~quake/triangle.html" PURPOSE "Used to create triangular decompositions of polygonal 2D environments.") find_package(Triangle QUIET) +set(OMPL_EXTENSION_TRIANGLE ${TRIANGLE_FOUND}) + set_package_properties(flann PROPERTIES URL "https://github.com/mariusmuja/flann" PURPOSE "If detetected, FLANN can be used for nearest neighbor queries by OMPL.") find_package(flann CONFIG 1.9.2 QUIET) +if (flann_FOUND) + set(OMPL_HAVE_FLANN 1) +endif() + set_package_properties(spot PROPERTIES URL "http://spot.lrde.epita.fr" PURPOSE "Used for constructing finite automata from LTL formulae.") find_package(spot) +if (spot_FOUND) + set(OMPL_HAVE_SPOT 1) +endif() + set_package_properties(assimp PROPERTIES URL "http://assimp.org" PURPOSE "Used in ompl_app for reading meshes representing robots and environments.") find_package(assimp REQUIRED) -set_package_properties(ccd PROPERTIES - URL "https://github.com/danfis/libccd" - PURPOSE "Collision detection library used by fcl.") -find_package(ccd REQUIRED) + set_package_properties(fcl PROPERTIES URL "https://github.com/flexible-collision-library/fcl" PURPOSE "The default collision checking library.") -find_package(octomap QUIET) find_package(fcl REQUIRED) + set_package_properties(Threads PROPERTIES URL "https://en.wikipedia.org/wiki/POSIX_Threads" PURPOSE "Pthreads is sometimes needed, depending on OS / compiler.") find_package(Threads QUIET) + set_package_properties(Doxygen PROPERTIES URL "http://doxygen.org" PURPOSE "Used to create the OMPL documentation (i.e., http://ompl.kavrakilab.org).") @@ -156,49 +165,39 @@ find_package(Doxygen) enable_testing() -include_directories(SYSTEM "${Boost_INCLUDE_DIR}") +# Add support in Boost::Python for std::shared_ptr +# This is a hack that replaces boost::shared_ptr related code with std::shared_ptr. +# Proper support for std::shared_ptr was added in Boost 1.63. +if (NOT Boost_VERSION_STRING) + if (Boost_VERSION_MAJOR) + set(Boost_VERSION_STRING + "${Boost_VERSION_MAJOR}.${Boost_VERSION_MINOR}.${Boost_VERSION_PATCH}") + else() + set(Boost_VERSION_STRING + "${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_PATCH_VERSION}") + endif() +endif() +if(Boost_VERSION_STRING VERSION_LESS "1.63.0") + include_directories("${CMAKE_CURRENT_SOURCE_DIR}/ompl/src/external") +endif() + include_directories( "${OMPLAPP_INCLUDE_DIRS}" - "${OMPL_INCLUDE_DIRS}" - "${EIGEN3_INCLUDE_DIR}" - "${FCL_INCLUDE_DIRS}" - "${ASSIMP_INCLUDE_DIRS}") - -# ROS installs fcl in /usr. In /usr/include/fcl/config.h it says octomap was -# enabled. Octomap is installed in /opt/ros/${ROS_DISTRO}/include (most -# likely), but fcl.pc doesn't have that information, so we just add it to the -# include path. -if(DEFINED ENV{ROS_DISTRO}) - include_directories("/opt/ros/$ENV{ROS_DISTRO}/include") -endif() + "${OMPL_INCLUDE_DIRS}") set(OMPLAPP_MODULE_LIBRARIES ${OPENGL_LIBRARIES} - ${ASSIMP_LIBRARY} - ${FCL_LIBRARIES}) + assimp::assimp + fcl::fcl) set(OMPLAPP_LIBRARIES ${OPENGL_LIBRARIES} - ${ASSIMP_LIBRARIES} - ${FCL_LIBRARIES}) -link_directories(${ASSIMP_LIBRARY_DIRS} ${CCD_LIBRARY_DIRS} ${OCTOMAP_LIBRARY_DIRS} ${FCL_LIBRARY_DIRS}) + assimp::assimp + fcl) if (OPENGL_INCLUDE_DIR) include_directories("${OPENGL_INCLUDE_DIR}") endif() -set(OMPL_EXTENSION_TRIANGLE ${TRIANGLE_FOUND}) -if (OMPL_EXTENSION_TRIANGLE) - include_directories(${TRIANGLE_INCLUDE_DIR}) -endif() - -if (flann_FOUND) - set(OMPL_HAVE_FLANN 1) -endif() - -if (spot_FOUND) - set(OMPL_HAVE_SPOT 1) -endif() - # Numpy is used to convert Eigen matrices/vectors to numpy arrays if(PYTHON_FOUND) find_python_module(numpy) @@ -263,7 +262,7 @@ if(OPENGL_FOUND AND NOT MSVC) target_link_flags(ompl ompl_app_base ompl_app) set(PKG_NAME "ompl") set(PKG_DESC "The Open Motion Planning Library") - set(PKG_EXTERNAL_DEPS "eigen3 ${ompl_PKG_DEPS}") + set(PKG_EXTERNAL_DEPS "${ompl_PKG_DEPS}") set(PKG_OMPL_LIBS "-lompl -lompl_app_base -lompl_app ${ompl_LINK_FLAGS}") configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ompl/CMakeModules/ompl.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/ompl.pc" @ONLY) @@ -288,14 +287,20 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/omplConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/omplConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/ompl/cmake COMPONENT ompl) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/ ${CMAKE_CURRENT_SOURCE_DIR}/ompl/CMakeModules/ - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/ompl/cmake - COMPONENT ompl - FILES_MATCHING PATTERN "Find*.cmake") install(TARGETS ompl EXPORT omplExport DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ompl) +install(TARGETS ompl_app_base + EXPORT omplExport + DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT omplapp) +if(TARGET ompl_app) + install(TARGETS ompl_app + EXPORT omplExport + DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT omplapp) +endif() install(EXPORT omplExport NAMESPACE ompl:: DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/ompl/cmake) diff --git a/CMakeModules/Findccd.cmake b/CMakeModules/Findccd.cmake deleted file mode 100644 index 21a6bf20..00000000 --- a/CMakeModules/Findccd.cmake +++ /dev/null @@ -1,9 +0,0 @@ -include(FindPackageHandleStandardArgs) -find_package(PkgConfig) -if(PKGCONFIG_FOUND) - pkg_check_modules(CCD ccd>=2.0) - if(CCD_LIBRARIES AND NOT CCD_INCLUDE_DIRS) - set(CCD_INCLUDE_DIRS "/usr/include") - endif() -endif() -find_package_handle_standard_args(ccd DEFAULT_MSG CCD_LIBRARIES CCD_INCLUDE_DIRS) diff --git a/CMakeModules/Findfcl.cmake b/CMakeModules/Findfcl.cmake deleted file mode 100644 index f7961c29..00000000 --- a/CMakeModules/Findfcl.cmake +++ /dev/null @@ -1,18 +0,0 @@ -include(FindPackageHandleStandardArgs) - -# vcpkg and MacPorts install cmake config files for fcl -find_package(fcl QUIET CONFIG) -if(TARGET fcl) - get_target_property(FCL_INCLUDE_DIRS fcl INTERFACE_INCLUDE_DIRECTORIES) - set(FCL_LIBRARIES "fcl") -else() - find_package(PkgConfig) - if(PKGCONFIG_FOUND) - pkg_check_modules(FCL fcl>=0.3.1) - if(FCL_LIBRARIES AND NOT FCL_INCLUDE_DIRS) - set(FCL_INCLUDE_DIRS "/usr/include") - endif() - endif() -endif() - -find_package_handle_standard_args(fcl DEFAULT_MSG FCL_LIBRARIES FCL_INCLUDE_DIRS) diff --git a/README.md b/README.md index f2216171..e2045e08 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ detailed installation instructions. OMPL.app has the following required dependencies: -* [Boost](https://www.boost.org) (version 1.68 or higher) -* [CMake](https://www.cmake.org) (version 3.5 or higher) +* [Boost](https://www.boost.org) (version 1.58 or higher) +* [CMake](https://www.cmake.org) (version 3.12 or higher) * [Eigen](http://eigen.tuxfamily.org) (version 3.3 or higher) * [Assimp](http://assimp.org) (version 3.0.1270 or higher) * [FCL](https://github.com/flexible-collision-library/fcl) (version 0.3.1 or higher) diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 7da2b7f5..1c7b0136 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -1,6 +1,6 @@ add_executable(ompl_benchmark CFGBenchmark.cpp BenchmarkOptions.cpp BenchmarkTypes.cpp benchmark.cpp) -target_link_libraries(ompl_benchmark ${OMPLAPP_LIBRARIES} ompl ompl_app_base ${Boost_PROGRAM_OPTIONS_LIBRARY}) +target_link_libraries(ompl_benchmark ${OMPLAPP_LIBRARIES} ompl ompl_app_base Boost::program_options) install(TARGETS ompl_benchmark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT omplapp diff --git a/ompl b/ompl index 1cf2e32b..af4d6d62 160000 --- a/ompl +++ b/ompl @@ -1 +1 @@ -Subproject commit 1cf2e32b45814c82ab623edddda223095a6dc6d8 +Subproject commit af4d6d625e15a4ed6d85255c718ce26bcd79e4cc diff --git a/src/omplapp/CMakeLists.txt b/src/omplapp/CMakeLists.txt index 2d0c8e5c..951bb321 100644 --- a/src/omplapp/CMakeLists.txt +++ b/src/omplapp/CMakeLists.txt @@ -38,9 +38,6 @@ foreach(_target ${OMPLAPP_TARGETS}) set_target_properties(${_target} PROPERTIES VERSION "${PROJECT_VERSION}" SOVERSION "${OMPL_ABI_VERSION}") endif(WIN32) - install(TARGETS ${_target} - DESTINATION ${CMAKE_INSTALL_LIBDIR} - COMPONENT omplapp) if(NOT MSVC) add_custom_command(TARGET ${_target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "$"