diff --git a/CMakeLists.txt b/CMakeLists.txt index 4036e3c17..b3780a93d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,28 +37,41 @@ set(CXX_DISABLE_WERROR TRUE) set(PROJECT_NAME coal) set(PROJECT_ORG "coal-library") -set(PROJECT_DESCRIPTION +set( + PROJECT_DESCRIPTION "Coal, The Collision Detection Library. Previously known as HPP-FCL, fork of FCL -- The Flexible Collision Library" - ) +) set(PROJECT_URL "https://github.com/coal-library/coal") -SET(PROJECT_USE_CMAKE_EXPORT TRUE) -SET(PROJECT_COMPATIBILITY_VERSION AnyNewerVersion) +set(PROJECT_USE_CMAKE_EXPORT TRUE) +set(PROJECT_COMPATIBILITY_VERSION AnyNewerVersion) # To enable jrl-cmakemodules compatibility with workspace we must define the two # following lines set(PROJECT_AUTO_RUN_FINALIZE FALSE) set(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}) -SET(PROJECT_USE_KEYWORD_LINK_LIBRARIES TRUE) -SET(DOXYGEN_USE_TEMPLATE_CSS TRUE) +set(PROJECT_USE_KEYWORD_LINK_LIBRARIES TRUE) +set(DOXYGEN_USE_TEMPLATE_CSS TRUE) # ---------------------------------------------------- # --- OPTIONS --------------------------------------- # Need to be set before including base.cmake # ---------------------------------------------------- option(INSTALL_DOCUMENTATION "Generate and install the documentation" OFF) -option(COAL_TURN_ASSERT_INTO_EXCEPTION "Turn some critical Coal asserts to exception." FALSE) -option(COAL_ENABLE_LOGGING "Activate logging for warnings or error messages. Turned on by default in Debug." FALSE) -option(COAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL "Make Coal retro-compatible with HPP-FCL." FALSE) +option( + COAL_TURN_ASSERT_INTO_EXCEPTION + "Turn some critical Coal asserts to exception." + FALSE +) +option( + COAL_ENABLE_LOGGING + "Activate logging for warnings or error messages. Turned on by default in Debug." + FALSE +) +option( + COAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL + "Make Coal retro-compatible with HPP-FCL." + FALSE +) # Check if the submodule cmake have been initialized set(JRL_CMAKE_MODULES "${CMAKE_CURRENT_LIST_DIR}/cmake") @@ -70,22 +83,24 @@ else() get_property( JRL_CMAKE_MODULES TARGET jrl-cmakemodules::jrl-cmakemodules - PROPERTY INTERFACE_INCLUDE_DIRECTORIES) + PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ) message(STATUS "JRL cmakemodules found on system at ${JRL_CMAKE_MODULES}") elseif(${CMAKE_VERSION} VERSION_LESS "3.14.0") message( FATAL_ERROR - "\nCan't find jrl-cmakemodules. Please either:\n" - " - use git submodule: 'git submodule update --init'\n" - " - or install https://github.com/jrl-umi3218/jrl-cmakemodules\n" - " - or upgrade your CMake version to >= 3.14 to allow automatic fetching\n" + "\nCan't find jrl-cmakemodules. Please either:\n" + " - use git submodule: 'git submodule update --init'\n" + " - or install https://github.com/jrl-umi3218/jrl-cmakemodules\n" + " - or upgrade your CMake version to >= 3.14 to allow automatic fetching\n" ) else() message(STATUS "JRL cmakemodules not found. Let's fetch it.") include(FetchContent) FetchContent_Declare( "jrl-cmakemodules" - GIT_REPOSITORY "https://github.com/jrl-umi3218/jrl-cmakemodules.git") + GIT_REPOSITORY "https://github.com/jrl-umi3218/jrl-cmakemodules.git" + ) FetchContent_MakeAvailable("jrl-cmakemodules") FetchContent_GetProperties("jrl-cmakemodules" SOURCE_DIR JRL_CMAKE_MODULES) endif() @@ -94,18 +109,18 @@ endif() # Use BoostConfig module distributed by boost library instead of using FindBoost module distributed # by CMake. # There is one unresolved issue with FindBoost and clang-cl so we deactivate it in this case. -IF(NOT WIN32 OR NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") - IF(POLICY CMP0167) - CMAKE_POLICY(SET CMP0167 NEW) +if(NOT WIN32 OR NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") + if(POLICY CMP0167) + cmake_policy(SET CMP0167 NEW) # Set a default value to this policy to avoid issue with find_dependency # macro redefinition with different policy in some modules. - SET(CMAKE_POLICY_DEFAULT_CMP0167 NEW) - ENDIF() -ENDIF() + set(CMAKE_POLICY_DEFAULT_CMP0167 NEW) + endif() +endif() include("${JRL_CMAKE_MODULES}/base.cmake") COMPUTE_PROJECT_ARGS(PROJECT_ARGS LANGUAGES CXX) -PROJECT(${PROJECT_NAME} ${PROJECT_ARGS}) +project(${PROJECT_NAME} ${PROJECT_ARGS}) include("${JRL_CMAKE_MODULES}/boost.cmake") include("${JRL_CMAKE_MODULES}/python.cmake") @@ -113,32 +128,40 @@ include("${JRL_CMAKE_MODULES}/apple.cmake") include("${JRL_CMAKE_MODULES}/ide.cmake") include(CMakeDependentOption) -SET(CMAKE_MODULE_PATH +set( + CMAKE_MODULE_PATH ${JRL_CMAKE_MODULES}/find-external/assimp/ - ${CMAKE_MODULE_PATH}) + ${CMAKE_MODULE_PATH} +) -FUNCTION(set_standard_output_directory target) - SET_TARGET_PROPERTIES( +function(set_standard_output_directory target) + set_target_properties( ${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib ) -ENDFUNCTION() +endfunction() -set_default_cmake_build_type("RelWithDebInfo") +SET_DEFAULT_CMAKE_BUILD_TYPE("RelWithDebInfo") # If needed, fix CMake policy for APPLE systems APPLY_DEFAULT_APPLE_CONFIGURATION() -OPTION(BUILD_PYTHON_INTERFACE "Build the python bindings" ON) -CMAKE_DEPENDENT_OPTION(GENERATE_PYTHON_STUBS "Generate the Python stubs associated to the Python library" OFF BUILD_PYTHON_INTERFACE OFF) +option(BUILD_PYTHON_INTERFACE "Build the python bindings" ON) +cmake_dependent_option( + GENERATE_PYTHON_STUBS + "Generate the Python stubs associated to the Python library" + OFF + BUILD_PYTHON_INTERFACE + OFF +) ADD_PROJECT_DEPENDENCY(Eigen3 REQUIRED PKG_CONFIG_REQUIRES "eigen3 >= 3.0.0") if(BUILD_PYTHON_INTERFACE) - SET(PYTHON_COMPONENTS Interpreter Development NumPy) + set(PYTHON_COMPONENTS Interpreter Development NumPy) FINDPYTHON(REQUIRED) ADD_PROJECT_PRIVATE_DEPENDENCY(eigenpy 2.9.2 REQUIRED) endif() @@ -146,8 +169,16 @@ endif() # Required dependencies SET_BOOST_DEFAULT_OPTIONS() EXPORT_BOOST_DEFAULT_OPTIONS() -ADD_PROJECT_DEPENDENCY(Boost REQUIRED chrono thread date_time serialization filesystem) -if (COAL_ENABLE_LOGGING) +ADD_PROJECT_DEPENDENCY( + Boost + REQUIRED + chrono + thread + date_time + serialization + filesystem +) +if(COAL_ENABLE_LOGGING) ADD_PROJECT_DEPENDENCY(Boost REQUIRED log) endif() if(BUILD_PYTHON_INTERFACE) @@ -165,14 +196,14 @@ endif() # Optional dependencies ADD_PROJECT_DEPENDENCY(octomap PKG_CONFIG_REQUIRES "octomap >= 1.6") if(octomap_FOUND) - SET(COAL_HAS_OCTOMAP TRUE) + set(COAL_HAS_OCTOMAP TRUE) string(REPLACE "." ";" VERSION_LIST ${octomap_VERSION}) list(GET VERSION_LIST 0 OCTOMAP_MAJOR_VERSION) list(GET VERSION_LIST 1 OCTOMAP_MINOR_VERSION) list(GET VERSION_LIST 2 OCTOMAP_PATCH_VERSION) message(STATUS "COAL uses Octomap") else() - SET(COAL_HAS_OCTOMAP FALSE) + set(COAL_HAS_OCTOMAP FALSE) message(STATUS "COAL does not use Octomap") endif() @@ -183,30 +214,37 @@ if(COAL_HAS_QHULL) set(COAL_USE_SYSTEM_QHULL TRUE) message(STATUS "COAL uses system Qhull") else() - message(STATUS "Qhullcpp not found: it will be build from sources, if Qhull_r is found") + message( + STATUS + "Qhullcpp not found: it will be build from sources, if Qhull_r is found" + ) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third-parties) - execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink - ${PROJECT_SOURCE_DIR}/third-parties/qhull/src/libqhullcpp - ${PROJECT_BINARY_DIR}/third-parties/libqhullcpp - ) + execute_process( + COMMAND + ${CMAKE_COMMAND} -E create_symlink + ${PROJECT_SOURCE_DIR}/third-parties/qhull/src/libqhullcpp + ${PROJECT_BINARY_DIR}/third-parties/libqhullcpp + ) set(Qhullcpp_PREFIX ${PROJECT_BINARY_DIR}/third-parties) - find_path(Qhull_r_INCLUDE_DIR + find_path( + Qhull_r_INCLUDE_DIR NAMES libqhull_r/libqhull_r.h PATHS ${Qhull_PREFIX} - ) - find_library(Qhull_r_LIBRARY - NAMES libqhull_r.so - PATHS ${Qhull_PREFIX} - ) + ) + find_library(Qhull_r_LIBRARY NAMES libqhull_r.so PATHS ${Qhull_PREFIX}) if(NOT Qhull_r_LIBRARY) - message(FATAL_ERROR "Qhull_r not found, please install it or turn COAL_HAS_QHULL OFF") + message( + FATAL_ERROR + "Qhull_r not found, please install it or turn COAL_HAS_QHULL OFF" + ) endif() endif() endif() -FIND_PACKAGE(assimp REQUIRED) +find_package(assimp REQUIRED) -SET(${PROJECT_NAME}_HEADERS +set( + ${PROJECT_NAME}_HEADERS include/coal/collision_data.h include/coal/BV/kIOS.h include/coal/BV/BV.h @@ -325,10 +363,11 @@ SET(${PROJECT_NAME}_HEADERS include/coal/serialization/quadrilateral.h include/coal/serialization/triangle.h include/coal/timings.h - ) +) if(COAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL) - SET(HPP_FCL_BACKWARD_COMPATIBILITY_HEADERS + set( + HPP_FCL_BACKWARD_COMPATIBILITY_HEADERS include/hpp/fcl/broadphase/broadphase_bruteforce.h include/hpp/fcl/broadphase/broadphase_callbacks.h include/hpp/fcl/broadphase/broadphase_collision_manager.h @@ -454,48 +493,60 @@ if(COAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL) include/hpp/fcl/shape/geometric_shape_to_BVH_model.h include/hpp/fcl/timings.h include/hpp/fcl/warning.hh - ) - LIST(APPEND ${PROJECT_NAME}_HEADERS ${HPP_FCL_BACKWARD_COMPATIBILITY_HEADERS}) - HEADER_INSTALL(COMPONENT hpp-fcl-compatibility ${HPP_FCL_BACKWARD_COMPATIBILITY_HEADERS}) + ) + list(APPEND ${PROJECT_NAME}_HEADERS ${HPP_FCL_BACKWARD_COMPATIBILITY_HEADERS}) + HEADER_INSTALL( + COMPONENT hpp-fcl-compatibility + ${HPP_FCL_BACKWARD_COMPATIBILITY_HEADERS} + ) endif() -IF(COAL_HAS_OCTOMAP) - LIST(APPEND ${PROJECT_NAME}_HEADERS +if(COAL_HAS_OCTOMAP) + list( + APPEND + ${PROJECT_NAME}_HEADERS include/coal/octree.h include/coal/serialization/octree.h include/coal/internal/traversal_node_octree.h ) -ENDIF(COAL_HAS_OCTOMAP) +endif(COAL_HAS_OCTOMAP) add_subdirectory(doc) add_subdirectory(src) -if (BUILD_PYTHON_INTERFACE) +if(BUILD_PYTHON_INTERFACE) add_subdirectory(python) -endif () +endif() if(BUILD_TESTING) add_subdirectory(test) endif(BUILD_TESTING) -pkg_config_append_libs("coal") -IF(COAL_HAS_OCTOMAP) +PKG_CONFIG_APPEND_LIBS("coal") +if(COAL_HAS_OCTOMAP) # FCL_HAVE_OCTOMAP kept for backward compatibility reasons. PKG_CONFIG_APPEND_CFLAGS( - "-DCOAL_HAS_OCTOMAP -DCOAL_HAVE_OCTOMAP -DFCL_HAVE_OCTOMAP -DOCTOMAP_MAJOR_VERSION=${OCTOMAP_MAJOR_VERSION} -DOCTOMAP_MINOR_VERSION=${OCTOMAP_MINOR_VERSION} -DOCTOMAP_PATCH_VERSION=${OCTOMAP_PATCH_VERSION}") -ENDIF(COAL_HAS_OCTOMAP) + "-DCOAL_HAS_OCTOMAP -DCOAL_HAVE_OCTOMAP -DFCL_HAVE_OCTOMAP -DOCTOMAP_MAJOR_VERSION=${OCTOMAP_MAJOR_VERSION} -DOCTOMAP_MINOR_VERSION=${OCTOMAP_MINOR_VERSION} -DOCTOMAP_PATCH_VERSION=${OCTOMAP_PATCH_VERSION}" + ) +endif(COAL_HAS_OCTOMAP) # Install catkin package.xml -INSTALL(FILES package.xml DESTINATION share/${PROJECT_NAME}) +install(FILES package.xml DESTINATION share/${PROJECT_NAME}) if(COAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL) include(CMakePackageConfigHelpers) - write_basic_package_version_file(hpp-fclConfigVersion.cmake - VERSION 3.0.0 - COMPATIBILITY AnyNewerVersion) - install(FILES hpp-fclConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/hpp-fclConfigVersion.cmake - DESTINATION lib/cmake/hpp-fcl - COMPONENT hpp-fcl-compatibility) + write_basic_package_version_file( + hpp-fclConfigVersion.cmake + VERSION 3.0.0 + COMPATIBILITY AnyNewerVersion + ) + install( + FILES + hpp-fclConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/hpp-fclConfigVersion.cmake + DESTINATION lib/cmake/hpp-fcl + COMPONENT hpp-fcl-compatibility + ) include("${JRL_CMAKE_MODULES}/install-helpers.cmake") - add_install_target(NAME hpp-fcl-compatibility COMPONENT hpp-fcl-compatibility) + ADD_INSTALL_TARGET(NAME hpp-fcl-compatibility COMPONENT hpp-fcl-compatibility) endif() -setup_project_finalize() +SETUP_PROJECT_FINALIZE() diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 4f6a9a769..b053976a9 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,19 +1,28 @@ -SET(DOXYGEN_XML_OUTPUT "doxygen-xml" PARENT_SCOPE) -SET(DOXYGEN_FILE_PATTERNS "*.h *.hh *.hxx" PARENT_SCOPE) -SET(DOXYGEN_GENERATE_XML "YES" PARENT_SCOPE) -SET(DOXYGEN_EXPAND_ONLY_PREDEF "NO" PARENT_SCOPE) -SET(DOXYGEN_ENABLE_PREPROCESSING "YES" PARENT_SCOPE) -SET(DOXYGEN_MACRO_EXPANSION "YES" PARENT_SCOPE) -SET(DOXYGEN_EXCLUDE "${PROJECT_SOURCE_DIR}/include/hpp/") +set(DOXYGEN_XML_OUTPUT "doxygen-xml" PARENT_SCOPE) +set(DOXYGEN_FILE_PATTERNS "*.h *.hh *.hxx" PARENT_SCOPE) +set(DOXYGEN_GENERATE_XML "YES" PARENT_SCOPE) +set(DOXYGEN_EXPAND_ONLY_PREDEF "NO" PARENT_SCOPE) +set(DOXYGEN_ENABLE_PREPROCESSING "YES" PARENT_SCOPE) +set(DOXYGEN_MACRO_EXPANSION "YES" PARENT_SCOPE) +set(DOXYGEN_EXCLUDE "${PROJECT_SOURCE_DIR}/include/hpp/") # We must not document octree if Octomap is not setup. # This create a build issue when building the bindings because doxygen-autodoc will # include octree.h that will include octomap.h. -IF(NOT COAL_HAS_OCTOMAP) - SET(DOXYGEN_EXCLUDE "${DOXYGEN_EXCLUDE} ${PROJECT_SOURCE_DIR}/include/coal/octree.h") - SET(DOXYGEN_EXCLUDE "${DOXYGEN_EXCLUDE} ${PROJECT_SOURCE_DIR}/include/coal/serialization/octree.h") - SET(DOXYGEN_EXCLUDE "${DOXYGEN_EXCLUDE} ${PROJECT_SOURCE_DIR}/include/coal/internal/traversal_node_octree.h") -ENDIF() -SET(DOXYGEN_EXCLUDE ${DOXYGEN_EXCLUDE} PARENT_SCOPE) +if(NOT COAL_HAS_OCTOMAP) + set( + DOXYGEN_EXCLUDE + "${DOXYGEN_EXCLUDE} ${PROJECT_SOURCE_DIR}/include/coal/octree.h" + ) + set( + DOXYGEN_EXCLUDE + "${DOXYGEN_EXCLUDE} ${PROJECT_SOURCE_DIR}/include/coal/serialization/octree.h" + ) + set( + DOXYGEN_EXCLUDE + "${DOXYGEN_EXCLUDE} ${PROJECT_SOURCE_DIR}/include/coal/internal/traversal_node_octree.h" + ) +endif() +set(DOXYGEN_EXCLUDE ${DOXYGEN_EXCLUDE} PARENT_SCOPE) -SET(DOXYGEN_PREDEFINED "IS_DOXYGEN" PARENT_SCOPE) +set(DOXYGEN_PREDEFINED "IS_DOXYGEN" PARENT_SCOPE) diff --git a/hpp-fclConfig.cmake b/hpp-fclConfig.cmake index 7139c9d4f..9cf156e92 100644 --- a/hpp-fclConfig.cmake +++ b/hpp-fclConfig.cmake @@ -19,8 +19,9 @@ if(NOT TARGET hpp-fcl::hpp-fcl) set_target_properties( hpp-fcl::hpp-fcl - PROPERTIES INTERFACE_COMPILE_DEFINITIONS - "COAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL" - INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" - INTERFACE_LINK_LIBRARIES "coal::coal") + PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "COAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL" + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "coal::coal" + ) endif() diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 38b98031b..2e0395802 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -35,13 +35,17 @@ include(${JRL_CMAKE_MODULES}/python-helpers.cmake) include(${JRL_CMAKE_MODULES}/stubs.cmake) -ADD_CUSTOM_TARGET(${PROJECT_NAME}_python) -SET_TARGET_PROPERTIES(${PROJECT_NAME}_python PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True) +add_custom_target(${PROJECT_NAME}_python) +set_target_properties( + ${PROJECT_NAME}_python + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True +) # Name of the Python library -SET(PYTHON_LIB_NAME ${PROJECT_NAME}_pywrap) +set(PYTHON_LIB_NAME ${PROJECT_NAME}_pywrap) -SET(${PYTHON_LIB_NAME}_HEADERS +set( + ${PYTHON_LIB_NAME}_HEADERS fwd.hh coal.hh deprecation.hh @@ -51,65 +55,92 @@ SET(${PYTHON_LIB_NAME}_HEADERS pickle.hh utils/std-pair.hh serializable.hh +) + +set( + ENABLE_PYTHON_DOXYGEN_AUTODOC + TRUE + CACHE BOOL + "Enable automatic documentation of Python bindings from Doxygen documentation" +) + +if(NOT ENABLE_PYTHON_DOXYGEN_AUTODOC OR NOT DOXYGEN_FOUND) + set(ENABLE_DOXYGEN_AUTODOC FALSE) +else() + set(ENABLE_DOXYGEN_AUTODOC TRUE) + + if( + DOXYGEN_VERSION VERSION_GREATER_EQUAL 1.9.8 + AND DOXYGEN_VERSION VERSION_LESS 1.11.0 ) - -SET(ENABLE_PYTHON_DOXYGEN_AUTODOC TRUE CACHE BOOL "Enable automatic documentation of Python bindings from Doxygen documentation") - -IF( NOT ENABLE_PYTHON_DOXYGEN_AUTODOC - OR NOT DOXYGEN_FOUND) - SET(ENABLE_DOXYGEN_AUTODOC FALSE) -ELSE() - SET(ENABLE_DOXYGEN_AUTODOC TRUE) - - IF(DOXYGEN_VERSION VERSION_GREATER_EQUAL 1.9.8 AND DOXYGEN_VERSION VERSION_LESS 1.11.0) # deactivate python doxygen automoc for doxygen 1.9.8 and 1.10.0, # as it incorrectly parse "const" keyword, # generating wrong links in C++ doc, and fail generating python doc # ref. https://github.com/doxygen/doxygen/issues/10797 - SET(ENABLE_DOXYGEN_AUTODOC FALSE) - MESSAGE(AUTHOR_WARNING "automoc deactivated because of doxygen 1.10. Please use <1.10 or >=1.11.") - ENDIF() - EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import lxml" + set(ENABLE_DOXYGEN_AUTODOC FALSE) + message( + AUTHOR_WARNING + "automoc deactivated because of doxygen 1.10. Please use <1.10 or >=1.11." + ) + endif() + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "import lxml" RESULT_VARIABLE _pypkg_found OUTPUT_QUIET - ERROR_QUIET) - IF(_pypkg_found EQUAL 0) - MESSAGE(STATUS "Found Python package lxml.") - ELSE() - SET(ENABLE_DOXYGEN_AUTODOC FALSE) - MESSAGE(STATUS "Python package lxml not found. Python bindings will not be documented.") - MESSAGE(STATUS " You can install it with: pip install lxml") - ENDIF() - - EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import pylatexenc" + ERROR_QUIET + ) + if(_pypkg_found EQUAL 0) + message(STATUS "Found Python package lxml.") + else() + set(ENABLE_DOXYGEN_AUTODOC FALSE) + message( + STATUS + "Python package lxml not found. Python bindings will not be documented." + ) + message(STATUS " You can install it with: pip install lxml") + endif() + + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "import pylatexenc" RESULT_VARIABLE _pypkg_found OUTPUT_QUIET - ERROR_QUIET) - IF(NOT _pypkg_found EQUAL 0) - MESSAGE(STATUS "Python package pylatexenc not found.") - MESSAGE(STATUS " Formulas in the Python bindings documentation may look ugly.") - MESSAGE(STATUS " You can install it with: pip install pylatexenc") - ENDIF() - UNSET(_pypkg_found) -ENDIF() -IF(ENABLE_DOXYGEN_AUTODOC) - ADD_CUSTOM_TARGET(generate_doxygen_cpp_doc - COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/doc/python/doxygen_xml_parser.py - ${PROJECT_BINARY_DIR}/doc/doxygen-xml/index.xml - ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc > ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc.log + ERROR_QUIET + ) + if(NOT _pypkg_found EQUAL 0) + message(STATUS "Python package pylatexenc not found.") + message( + STATUS + " Formulas in the Python bindings documentation may look ugly." + ) + message(STATUS " You can install it with: pip install pylatexenc") + endif() + unset(_pypkg_found) +endif() +if(ENABLE_DOXYGEN_AUTODOC) + add_custom_target( + generate_doxygen_cpp_doc + COMMAND + ${PYTHON_EXECUTABLE} + ${PROJECT_SOURCE_DIR}/doc/python/doxygen_xml_parser.py + ${PROJECT_BINARY_DIR}/doc/doxygen-xml/index.xml + ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc > + ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc.log BYPRODUCTS - ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc/doxygen_xml_parser_for_cmake.hh - ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc.log + ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc/doxygen_xml_parser_for_cmake.hh + ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc.log COMMENT "Generating Doxygen C++ documentation" - ) - ADD_DEPENDENCIES(generate_doxygen_cpp_doc doc) + ) + add_dependencies(generate_doxygen_cpp_doc doc) - LIST(APPEND ${PYTHON_LIB_NAME}_HEADERS + list( + APPEND + ${PYTHON_LIB_NAME}_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc/doxygen_xml_parser_for_cmake.hh - ) -ENDIF() + ) +endif() -SET(${PYTHON_LIB_NAME}_SOURCES +set( + ${PYTHON_LIB_NAME}_SOURCES version.cc math.cc collision-geometries.cc @@ -119,78 +150,105 @@ SET(${PYTHON_LIB_NAME}_SOURCES coal.cc gjk.cc broadphase/broadphase.cc - ) - -IF(COAL_HAS_OCTOMAP) - LIST(APPEND ${PYTHON_LIB_NAME}_SOURCES octree.cc) -ENDIF(COAL_HAS_OCTOMAP) - -ADD_LIBRARY(${PYTHON_LIB_NAME} MODULE ${${PYTHON_LIB_NAME}_SOURCES} ${${PYTHON_LIB_NAME}_HEADERS}) -TARGET_INCLUDE_DIRECTORIES(${PYTHON_LIB_NAME} SYSTEM PRIVATE ${PYTHON_INCLUDE_DIRS}) -TARGET_INCLUDE_DIRECTORIES(${PYTHON_LIB_NAME} PRIVATE "${PROJECT_SOURCE_DIR}/src" "${CMAKE_CURRENT_BINARY_DIR}") -IF(WIN32) - TARGET_LINK_LIBRARIES(${PYTHON_LIB_NAME} PUBLIC ${PYTHON_LIBRARY}) -ENDIF(WIN32) - -ADD_DEPENDENCIES(${PROJECT_NAME}_python ${PYTHON_LIB_NAME}) +) + +if(COAL_HAS_OCTOMAP) + list(APPEND ${PYTHON_LIB_NAME}_SOURCES octree.cc) +endif(COAL_HAS_OCTOMAP) + +add_library( + ${PYTHON_LIB_NAME} + MODULE + ${${PYTHON_LIB_NAME}_SOURCES} + ${${PYTHON_LIB_NAME}_HEADERS} +) +target_include_directories( + ${PYTHON_LIB_NAME} + SYSTEM + PRIVATE ${PYTHON_INCLUDE_DIRS} +) +target_include_directories( + ${PYTHON_LIB_NAME} + PRIVATE "${PROJECT_SOURCE_DIR}/src" "${CMAKE_CURRENT_BINARY_DIR}" +) +if(WIN32) + target_link_libraries(${PYTHON_LIB_NAME} PUBLIC ${PYTHON_LIBRARY}) +endif(WIN32) + +add_dependencies(${PROJECT_NAME}_python ${PYTHON_LIB_NAME}) ADD_HEADER_GROUP(${PYTHON_LIB_NAME}_HEADERS) ADD_SOURCE_GROUP(${PYTHON_LIB_NAME}_SOURCES) -IF(ENABLE_DOXYGEN_AUTODOC) - ADD_DEPENDENCIES(${PYTHON_LIB_NAME} generate_doxygen_cpp_doc) - TARGET_COMPILE_DEFINITIONS(${PYTHON_LIB_NAME} PRIVATE -DCOAL_HAS_DOXYGEN_AUTODOC) -ENDIF() - -TARGET_LINK_LIBRARIES(${PYTHON_LIB_NAME} PUBLIC - ${PROJECT_NAME} - eigenpy::eigenpy - Boost::system) - -SET_TARGET_PROPERTIES(${PYTHON_LIB_NAME} PROPERTIES - PREFIX "" - SUFFIX "${PYTHON_EXT_SUFFIX}" - OUTPUT_NAME "${PYTHON_LIB_NAME}" - LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/python/${PROJECT_NAME}" - # On Windows, shared library are treat as binary - RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/python/${PROJECT_NAME}" +if(ENABLE_DOXYGEN_AUTODOC) + add_dependencies(${PYTHON_LIB_NAME} generate_doxygen_cpp_doc) + target_compile_definitions( + ${PYTHON_LIB_NAME} + PRIVATE -DCOAL_HAS_DOXYGEN_AUTODOC ) +endif() -IF(IS_ABSOLUTE ${PYTHON_SITELIB}) - SET(ABSOLUTE_PYTHON_SITELIB ${PYTHON_SITELIB}) -ELSE() - SET(ABSOLUTE_PYTHON_SITELIB ${CMAKE_INSTALL_PREFIX}/${PYTHON_SITELIB}) -ENDIF() -SET(${PYTHON_LIB_NAME}_INSTALL_DIR ${ABSOLUTE_PYTHON_SITELIB}/${PROJECT_NAME}) -IF(UNIX) - GET_RELATIVE_RPATH(${${PYTHON_LIB_NAME}_INSTALL_DIR} ${PYTHON_LIB_NAME}_INSTALL_RPATH) - SET_TARGET_PROPERTIES(${PYTHON_LIB_NAME} PROPERTIES INSTALL_RPATH "${${PYTHON_LIB_NAME}_INSTALL_RPATH}") -ENDIF() - -INSTALL(TARGETS ${PYTHON_LIB_NAME} +target_link_libraries( + ${PYTHON_LIB_NAME} + PUBLIC ${PROJECT_NAME} eigenpy::eigenpy Boost::system +) + +set_target_properties( + ${PYTHON_LIB_NAME} + PROPERTIES + PREFIX "" + SUFFIX "${PYTHON_EXT_SUFFIX}" + OUTPUT_NAME "${PYTHON_LIB_NAME}" + LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/python/${PROJECT_NAME}" + # On Windows, shared library are treat as binary + RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/python/${PROJECT_NAME}" +) + +if(IS_ABSOLUTE ${PYTHON_SITELIB}) + set(ABSOLUTE_PYTHON_SITELIB ${PYTHON_SITELIB}) +else() + set(ABSOLUTE_PYTHON_SITELIB ${CMAKE_INSTALL_PREFIX}/${PYTHON_SITELIB}) +endif() +set(${PYTHON_LIB_NAME}_INSTALL_DIR ${ABSOLUTE_PYTHON_SITELIB}/${PROJECT_NAME}) +if(UNIX) + GET_RELATIVE_RPATH( + ${${PYTHON_LIB_NAME}_INSTALL_DIR} + ${PYTHON_LIB_NAME}_INSTALL_RPATH + ) + set_target_properties( + ${PYTHON_LIB_NAME} + PROPERTIES INSTALL_RPATH "${${PYTHON_LIB_NAME}_INSTALL_RPATH}" + ) +endif() + +install( + TARGETS ${PYTHON_LIB_NAME} EXPORT ${TARGETS_EXPORT_NAME} - DESTINATION ${${PYTHON_LIB_NAME}_INSTALL_DIR}) + DESTINATION ${${PYTHON_LIB_NAME}_INSTALL_DIR} +) # --- GENERATE STUBS -IF(GENERATE_PYTHON_STUBS) +if(GENERATE_PYTHON_STUBS) LOAD_STUBGEN() - GENERATE_STUBS(${CMAKE_CURRENT_BINARY_DIR} ${PROJECT_NAME} ${ABSOLUTE_PYTHON_SITELIB} ${PYTHON_LIB_NAME} ${PROJECT_NAME}) -ENDIF(GENERATE_PYTHON_STUBS) + GENERATE_STUBS( + ${CMAKE_CURRENT_BINARY_DIR} + ${PROJECT_NAME} + ${ABSOLUTE_PYTHON_SITELIB} + ${PYTHON_LIB_NAME} + ${PROJECT_NAME} + ) +endif(GENERATE_PYTHON_STUBS) # --- INSTALL SCRIPTS -SET(PYTHON_FILES - __init__.py - viewer.py - windows_dll_manager.py - ) +set(PYTHON_FILES __init__.py viewer.py windows_dll_manager.py) -FOREACH(python ${PYTHON_FILES}) +foreach(python ${PYTHON_FILES}) PYTHON_BUILD(${PROJECT_NAME} ${python}) - INSTALL(FILES - "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${python}" - DESTINATION ${${PYTHON_LIB_NAME}_INSTALL_DIR}) -ENDFOREACH(python) - + install( + FILES "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${python}" + DESTINATION ${${PYTHON_LIB_NAME}_INSTALL_DIR} + ) +endforeach(python) if(COAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL) - python_install_on_site(hppfcl __init__.py COMPONENT hpp-fcl-compatibility) - python_install_on_site(hppfcl viewer.py COMPONENT hpp-fcl-compatibility) + PYTHON_INSTALL_ON_SITE(hppfcl __init__.py COMPONENT hpp-fcl-compatibility) + PYTHON_INSTALL_ON_SITE(hppfcl viewer.py COMPONENT hpp-fcl-compatibility) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0574a84ab..4cd211608 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -33,7 +33,8 @@ # POSSIBILITY OF SUCH DAMAGE. set(LIBRARY_NAME ${PROJECT_NAME}) -set(${LIBRARY_NAME}_SOURCES +set( + ${LIBRARY_NAME}_SOURCES collision.cpp contact_patch.cpp contact_patch/contact_patch_solver.cpp @@ -108,7 +109,7 @@ set(${LIBRARY_NAME}_SOURCES mesh_loader/loader.cpp hfield.cpp serialization/serialization.cpp - ) +) if(COAL_HAS_OCTOMAP) list(APPEND ${LIBRARY_NAME}_SOURCES octree.cpp) @@ -141,7 +142,7 @@ if(COAL_HAS_QHULL AND NOT COAL_USE_SYSTEM_QHULL) ${Qhullcpp_PREFIX}/libqhullcpp/RboxPoints.h ${Qhullcpp_PREFIX}/libqhullcpp/RoadError.h ${Qhullcpp_PREFIX}/libqhullcpp/RoadLogEvent.h - ) + ) set( libqhullcpp_SOURCES @@ -165,7 +166,7 @@ if(COAL_HAS_QHULL AND NOT COAL_USE_SYSTEM_QHULL) ${Qhullcpp_PREFIX}/libqhullcpp/RoadError.cpp ${Qhullcpp_PREFIX}/libqhullcpp/RoadLogEvent.cpp ${libqhullcpp_HEADERS} - ) + ) # TODO We compile qhullcpp because it is not provided in the binary package while # the other parts of Qhull are released. @@ -175,20 +176,33 @@ if(COAL_HAS_QHULL AND NOT COAL_USE_SYSTEM_QHULL) list(APPEND ${LIBRARY_NAME}_SOURCES ${libqhullcpp_SOURCES}) endif() -SET(PROJECT_HEADERS_FULL_PATH) -FOREACH(header ${${PROJECT_NAME}_HEADERS}) - LIST(APPEND PROJECT_HEADERS_FULL_PATH ${PROJECT_SOURCE_DIR}/${header}) -ENDFOREACH() -LIST(APPEND PROJECT_HEADERS_FULL_PATH ${PROJECT_BINARY_DIR}/include/coal/config.hh) -LIST(APPEND PROJECT_HEADERS_FULL_PATH ${PROJECT_BINARY_DIR}/include/coal/deprecated.hh) -LIST(APPEND PROJECT_HEADERS_FULL_PATH ${PROJECT_BINARY_DIR}/include/coal/warning.hh) -add_library(${LIBRARY_NAME} +set(PROJECT_HEADERS_FULL_PATH) +foreach(header ${${PROJECT_NAME}_HEADERS}) + list(APPEND PROJECT_HEADERS_FULL_PATH ${PROJECT_SOURCE_DIR}/${header}) +endforeach() +list( + APPEND + PROJECT_HEADERS_FULL_PATH + ${PROJECT_BINARY_DIR}/include/coal/config.hh +) +list( + APPEND + PROJECT_HEADERS_FULL_PATH + ${PROJECT_BINARY_DIR}/include/coal/deprecated.hh +) +list( + APPEND + PROJECT_HEADERS_FULL_PATH + ${PROJECT_BINARY_DIR}/include/coal/warning.hh +) +add_library( + ${LIBRARY_NAME} SHARED ${PROJECT_HEADERS_FULL_PATH} ${${LIBRARY_NAME}_SOURCES} - ) +) add_library(${LIBRARY_NAME}::${LIBRARY_NAME} ALIAS ${LIBRARY_NAME}) -SET_STANDARD_OUTPUT_DIRECTORY(${LIBRARY_NAME}) +set_standard_output_directory(${LIBRARY_NAME}) if(COAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL) add_library(hpp-fcl ALIAS ${LIBRARY_NAME}) @@ -196,100 +210,130 @@ if(COAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL) endif() if(UNIX) - get_relative_rpath(${CMAKE_INSTALL_LIBDIR} ${PROJECT_NAME}_INSTALL_RPATH) - set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH "${${PROJECT_NAME}_INSTALL_RPATH}") + GET_RELATIVE_RPATH(${CMAKE_INSTALL_LIBDIR} ${PROJECT_NAME}_INSTALL_RPATH) + set_target_properties( + ${PROJECT_NAME} + PROPERTIES INSTALL_RPATH "${${PROJECT_NAME}_INSTALL_RPATH}" + ) endif() set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION}) -cxx_flags_by_compiler_frontend( - MSVC "/bigobj" - OUTPUT PUBLIC_OPTIONS - FILTER) +CXX_FLAGS_BY_COMPILER_FRONTEND(MSVC "/bigobj" OUTPUT PUBLIC_OPTIONS FILTER) target_compile_options(${PROJECT_NAME} PUBLIC ${PUBLIC_OPTIONS}) -cxx_flags_by_compiler_frontend(MSVC "NOMINMAX" OUTPUT PUBLIC_DEFINITIONS) +CXX_FLAGS_BY_COMPILER_FRONTEND(MSVC "NOMINMAX" OUTPUT PUBLIC_DEFINITIONS) target_compile_definitions(${PROJECT_NAME} INTERFACE ${PUBLIC_DEFINITIONS}) # IDE sources and headers sorting ADD_SOURCE_GROUP(${LIBRARY_NAME}_SOURCES) ADD_HEADER_GROUP(PROJECT_HEADERS_FULL_PATH) -MODERNIZE_TARGET_LINK_LIBRARIES(${LIBRARY_NAME} SCOPE PRIVATE +MODERNIZE_TARGET_LINK_LIBRARIES( + ${LIBRARY_NAME} + SCOPE PRIVATE TARGETS assimp::assimp LIBRARIES ${assimp_LIBRARIES} - INCLUDE_DIRS ${assimp_INCLUDE_DIR}) + INCLUDE_DIRS ${assimp_INCLUDE_DIR} +) -TARGET_LINK_LIBRARIES(${LIBRARY_NAME} - PUBLIC - Boost::serialization - Boost::chrono - Boost::filesystem +target_link_libraries( + ${LIBRARY_NAME} + PUBLIC Boost::serialization Boost::chrono Boost::filesystem ) -if (COAL_ENABLE_LOGGING) - TARGET_LINK_LIBRARIES(${LIBRARY_NAME} PUBLIC Boost::log) +if(COAL_ENABLE_LOGGING) + target_link_libraries(${LIBRARY_NAME} PUBLIC Boost::log) # The compile flag `BOOST_LOG_DYN_LINK` is required here. - target_compile_definitions(${LIBRARY_NAME} PUBLIC COAL_ENABLE_LOGGING BOOST_LOG_DYN_LINK) + target_compile_definitions( + ${LIBRARY_NAME} + PUBLIC COAL_ENABLE_LOGGING BOOST_LOG_DYN_LINK + ) endif() -IF(WIN32) - TARGET_LINK_LIBRARIES(${LIBRARY_NAME} - INTERFACE - Boost::thread - Boost::date_time +if(WIN32) + target_link_libraries( + ${LIBRARY_NAME} + INTERFACE Boost::thread Boost::date_time ) # There is an issue with MSVC 2017 and Eigen (due to std::aligned_storage). # See https://github.com/ceres-solver/ceres-solver/issues/481 - target_compile_definitions(${LIBRARY_NAME} PRIVATE _ENABLE_EXTENDED_ALIGNED_STORAGE) -ENDIF(WIN32) + target_compile_definitions( + ${LIBRARY_NAME} + PRIVATE _ENABLE_EXTENDED_ALIGNED_STORAGE + ) +endif(WIN32) -if (COAL_TURN_ASSERT_INTO_EXCEPTION) - target_compile_definitions(${LIBRARY_NAME} PUBLIC -DCOAL_TURN_ASSERT_INTO_EXCEPTION) +if(COAL_TURN_ASSERT_INTO_EXCEPTION) + target_compile_definitions( + ${LIBRARY_NAME} + PUBLIC -DCOAL_TURN_ASSERT_INTO_EXCEPTION + ) endif() -if (COAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL) - target_compile_definitions(${LIBRARY_NAME} PUBLIC -DCOAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL) +if(COAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL) + target_compile_definitions( + ${LIBRARY_NAME} + PUBLIC -DCOAL_BACKWARD_COMPATIBILITY_WITH_HPP_FCL + ) endif() if(COAL_HAS_QHULL) target_compile_definitions(${LIBRARY_NAME} PRIVATE -DCOAL_HAS_QHULL) - if (COAL_USE_SYSTEM_QHULL) - target_link_libraries(${LIBRARY_NAME} PRIVATE Qhull::qhull_r Qhull::qhullcpp) + if(COAL_USE_SYSTEM_QHULL) + target_link_libraries( + ${LIBRARY_NAME} + PRIVATE Qhull::qhull_r Qhull::qhullcpp + ) else() - target_include_directories(${LIBRARY_NAME} SYSTEM PRIVATE - ${Qhull_r_INCLUDE_DIR} ${Qhullcpp_PREFIX}) + target_include_directories( + ${LIBRARY_NAME} + SYSTEM + PRIVATE ${Qhull_r_INCLUDE_DIR} ${Qhullcpp_PREFIX} + ) target_link_libraries(${LIBRARY_NAME} PRIVATE "${Qhull_r_LIBRARY}") endif() endif() -MODERNIZE_TARGET_LINK_LIBRARIES(${PROJECT_NAME} SCOPE PUBLIC +MODERNIZE_TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + SCOPE PUBLIC TARGETS Eigen3::Eigen - INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR}) + INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR} +) -target_include_directories(${LIBRARY_NAME} +target_include_directories( + ${LIBRARY_NAME} PUBLIC - $ - $ - $ - ) + $ + $ + $ +) -IF(octomap_FOUND) - MODERNIZE_TARGET_LINK_LIBRARIES(${PROJECT_NAME} SCOPE PUBLIC +if(octomap_FOUND) + MODERNIZE_TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + SCOPE PUBLIC TARGETS octomap LIBRARIES ${OCTOMAP_LIBRARIES} - INCLUDE_DIRS ${OCTOMAP_INCLUDE_DIRS}) - target_compile_definitions (${LIBRARY_NAME} PUBLIC - -DCOAL_HAS_OCTOMAP - -DCOAL_HAVE_OCTOMAP - -DOCTOMAP_MAJOR_VERSION=${OCTOMAP_MAJOR_VERSION} - -DOCTOMAP_MINOR_VERSION=${OCTOMAP_MINOR_VERSION} - -DOCTOMAP_PATCH_VERSION=${OCTOMAP_PATCH_VERSION}) -ENDIF(octomap_FOUND) + INCLUDE_DIRS ${OCTOMAP_INCLUDE_DIRS} + ) + target_compile_definitions( + ${LIBRARY_NAME} + PUBLIC + -DCOAL_HAS_OCTOMAP + -DCOAL_HAVE_OCTOMAP + -DOCTOMAP_MAJOR_VERSION=${OCTOMAP_MAJOR_VERSION} + -DOCTOMAP_MINOR_VERSION=${OCTOMAP_MINOR_VERSION} + -DOCTOMAP_PATCH_VERSION=${OCTOMAP_PATCH_VERSION} + ) +endif(octomap_FOUND) -install(TARGETS ${LIBRARY_NAME} +install( + TARGETS ${LIBRARY_NAME} EXPORT ${TARGETS_EXPORT_NAME} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ba83183ef..2e0f2d783 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,19 +1,20 @@ # Find Boost.UnitTestFramework -FIND_PACKAGE(Boost REQUIRED COMPONENTS unit_test_framework filesystem) +find_package(Boost REQUIRED COMPONENTS unit_test_framework filesystem) -config_files(fcl_resources/config.h) +CONFIG_FILES(fcl_resources/config.h) function(add_coal_test test_name source) set(target_name ${PROJECT_NAME}-${test_name}) ADD_UNIT_TEST(${target_name} ${source}) - SET_STANDARD_OUTPUT_DIRECTORY(${target_name}) - target_link_libraries(${target_name} - PUBLIC - ${LIBRARY_NAME} - Boost::filesystem - ${utility_target} - ) - cxx_flags_by_compiler_frontend(GNU "-Wno-c99-extensions" OUTPUT PRIVATE_OPTIONS) + set_standard_output_directory(${target_name}) + target_link_libraries( + ${target_name} + PUBLIC ${LIBRARY_NAME} Boost::filesystem ${utility_target} + ) + CXX_FLAGS_BY_COMPILER_FRONTEND( + GNU "-Wno-c99-extensions" + OUTPUT PRIVATE_OPTIONS + ) target_compile_options(${target_name} PRIVATE ${PRIVATE_OPTIONS}) if(COAL_HAS_QHULL) target_compile_options(${target_name} PRIVATE -DCOAL_HAS_QHULL) @@ -24,7 +25,7 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(utility_target ${PROJECT_NAME}-utility) add_library(${utility_target} STATIC utility.cpp) -SET_STANDARD_OUTPUT_DIRECTORY(${utility_target}) +set_standard_output_directory(${utility_target}) target_link_libraries(${utility_target} PUBLIC ${PROJECT_NAME}) add_coal_test(math math.cpp) @@ -41,7 +42,7 @@ add_coal_test(shape_inflation shape_inflation.cpp) #add_coal_test(shape_mesh_consistency shape_mesh_consistency.cpp) add_coal_test(gjk_asserts gjk_asserts.cpp) add_coal_test(frontlist frontlist.cpp) -SET_TESTS_PROPERTIES(${PROJECT_NAME}-frontlist PROPERTIES TIMEOUT 7200) +set_tests_properties(${PROJECT_NAME}-frontlist PROPERTIES TIMEOUT 7200) # add_coal_test(sphere_capsule sphere_capsule.cpp) add_coal_test(capsule_capsule capsule_capsule.cpp) @@ -78,15 +79,13 @@ add_coal_test(broadphase_collision_2 broadphase_collision_2.cpp) ## Benchmark set(test_benchmark_target ${PROJECT_NAME}-test-benchmark) add_executable(${test_benchmark_target} benchmark.cpp) -SET_STANDARD_OUTPUT_DIRECTORY(${test_benchmark_target}) -target_link_libraries(${test_benchmark_target} - PUBLIC - ${utility_target} - Boost::filesystem - ${PROJECT_NAME} - ) +set_standard_output_directory(${test_benchmark_target}) +target_link_libraries( + ${test_benchmark_target} + PUBLIC ${utility_target} Boost::filesystem ${PROJECT_NAME} +) ## Python tests -IF(BUILD_PYTHON_INTERFACE) - ADD_SUBDIRECTORY(python_unit) -ENDIF(BUILD_PYTHON_INTERFACE) +if(BUILD_PYTHON_INTERFACE) + add_subdirectory(python_unit) +endif(BUILD_PYTHON_INTERFACE) diff --git a/test/python_unit/CMakeLists.txt b/test/python_unit/CMakeLists.txt index 1e3a95298..d1eba043c 100644 --- a/test/python_unit/CMakeLists.txt +++ b/test/python_unit/CMakeLists.txt @@ -1,12 +1,17 @@ -SET(${PROJECT_NAME}_PYTHON_TESTS +set( + ${PROJECT_NAME}_PYTHON_TESTS geometric_shapes api collision collision_manager pickling - ) +) -ADD_DEPENDENCIES(build_tests ${PROJECT_NAME}_pywrap) -FOREACH(TEST ${${PROJECT_NAME}_PYTHON_TESTS}) - ADD_PYTHON_UNIT_TEST("${PROJECT_NAME}-py-${TEST}" "test/python_unit/${TEST}.py" "python") -ENDFOREACH() +add_dependencies(build_tests ${PROJECT_NAME}_pywrap) +foreach(TEST ${${PROJECT_NAME}_PYTHON_TESTS}) + ADD_PYTHON_UNIT_TEST( + "${PROJECT_NAME}-py-${TEST}" + "test/python_unit/${TEST}.py" + "python" + ) +endforeach()