From 6b4d5f3b4fe7f4c396cb1564cdb98e5fbf9a16bf Mon Sep 17 00:00:00 2001 From: Guilhem Saurel <guilhem.saurel@laas.fr> Date: Wed, 13 Jul 2022 12:45:52 +0200 Subject: [PATCH] cmake: relocatable package for recent CMake versions --- CMakeLists.txt | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b68806..01d96bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,8 +68,23 @@ ELSE(WIN32) SET(LINK create_symlink) ENDIF(WIN32) +set(PYTHON_COMPONENTS Interpreter) +if(CMAKE_VERSION VERSION_LESS "3.18") + # Development.Module only require headers, so it's best for our module + # But it's not available before CMake 3.18 + set(PYTHON_COMPONENTS ${PYTHON_COMPONENTS} Development) +else() + set(PYTHON_COMPONENTS ${PYTHON_COMPONENTS} Development.Module) +endif() +if(NOT CMAKE_VERSION VERSION_LESS "3.14") + # NumPy provides a standard CMake imported target, + # But it's not available before CMake 3.14 + set(PYTHON_COMPONENTS ${PYTHON_COMPONENTS} NumPy) +endif() FINDPYTHON() -FIND_NUMPY() +if(CMAKE_VERSION VERSION_LESS "3.14") + FIND_NUMPY() +endif() IF(WIN32) LINK_DIRECTORIES(${PYTHON_LIBRARY_DIRS}) @@ -200,13 +215,23 @@ SET(${PROJECT_NAME}_SOURCES ADD_LIBRARY(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS}) TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PUBLIC - ${Boost_INCLUDE_DIRS} - ${EIGEN3_INCLUDE_DIR} - ${PYTHON_INCLUDE_DIRS} - ${NUMPY_INCLUDE_DIRS} $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include> $<INSTALL_INTERFACE:include>) +if(TARGET Eigen3::Eigen) + TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC Eigen3::Eigen) +else() + TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PUBLIC ${EIGEN3_INCLUDE_DIR}) +endif() + +if(TARGET Python3::NumPy) + TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC Python3::NumPy) + TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PRIVATE ${Python3_INCLUDE_DIRS}) +else() + TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PUBLIC ${NUMPY_INCLUDE_DIRS}) + TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PRIVATE ${PYTHON_INCLUDE_DIRS}) +endif() + IF(SUFFIX_SO_VERSION) SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION}) ENDIF(SUFFIX_SO_VERSION) @@ -217,7 +242,12 @@ ELSE() TARGET_COMPILE_OPTIONS(${PROJECT_NAME} PRIVATE $<$<CXX_COMPILER_ID:MSVC>:-bigobj>) ENDIF() -TARGET_LINK_BOOST_PYTHON(${PROJECT_NAME} PUBLIC) +if(TARGET Boost::python3${Python3_VERSION_MINOR} AND NOT APPLE) + TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC Boost::python3${Python3_VERSION_MINOR}) +else() + TARGET_LINK_BOOST_PYTHON(${PROJECT_NAME} PUBLIC) + TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS}) +endif() INSTALL(TARGETS ${PROJECT_NAME} EXPORT ${TARGETS_EXPORT_NAME} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR} -- GitLab