Skip to content

Commit 6b4d5f3

Browse files
committed
cmake: relocatable package for recent CMake versions
1 parent 116c7c6 commit 6b4d5f3

File tree

1 file changed

+36
-6
lines changed

1 file changed

+36
-6
lines changed

CMakeLists.txt

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,23 @@ ELSE(WIN32)
6868
SET(LINK create_symlink)
6969
ENDIF(WIN32)
7070

71+
set(PYTHON_COMPONENTS Interpreter)
72+
if(CMAKE_VERSION VERSION_LESS "3.18")
73+
# Development.Module only require headers, so it's best for our module
74+
# But it's not available before CMake 3.18
75+
set(PYTHON_COMPONENTS ${PYTHON_COMPONENTS} Development)
76+
else()
77+
set(PYTHON_COMPONENTS ${PYTHON_COMPONENTS} Development.Module)
78+
endif()
79+
if(NOT CMAKE_VERSION VERSION_LESS "3.14")
80+
# NumPy provides a standard CMake imported target,
81+
# But it's not available before CMake 3.14
82+
set(PYTHON_COMPONENTS ${PYTHON_COMPONENTS} NumPy)
83+
endif()
7184
FINDPYTHON()
72-
FIND_NUMPY()
85+
if(CMAKE_VERSION VERSION_LESS "3.14")
86+
FIND_NUMPY()
87+
endif()
7388

7489
IF(WIN32)
7590
LINK_DIRECTORIES(${PYTHON_LIBRARY_DIRS})
@@ -200,13 +215,23 @@ SET(${PROJECT_NAME}_SOURCES
200215
ADD_LIBRARY(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS})
201216
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME}
202217
SYSTEM PUBLIC
203-
${Boost_INCLUDE_DIRS}
204-
${EIGEN3_INCLUDE_DIR}
205-
${PYTHON_INCLUDE_DIRS}
206-
${NUMPY_INCLUDE_DIRS}
207218
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
208219
$<INSTALL_INTERFACE:include>)
209220

221+
if(TARGET Eigen3::Eigen)
222+
TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC Eigen3::Eigen)
223+
else()
224+
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PUBLIC ${EIGEN3_INCLUDE_DIR})
225+
endif()
226+
227+
if(TARGET Python3::NumPy)
228+
TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC Python3::NumPy)
229+
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PRIVATE ${Python3_INCLUDE_DIRS})
230+
else()
231+
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PUBLIC ${NUMPY_INCLUDE_DIRS})
232+
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PRIVATE ${PYTHON_INCLUDE_DIRS})
233+
endif()
234+
210235
IF(SUFFIX_SO_VERSION)
211236
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION})
212237
ENDIF(SUFFIX_SO_VERSION)
@@ -217,7 +242,12 @@ ELSE()
217242
TARGET_COMPILE_OPTIONS(${PROJECT_NAME} PRIVATE $<$<CXX_COMPILER_ID:MSVC>:-bigobj>)
218243
ENDIF()
219244

220-
TARGET_LINK_BOOST_PYTHON(${PROJECT_NAME} PUBLIC)
245+
if(TARGET Boost::python3${Python3_VERSION_MINOR} AND NOT APPLE)
246+
TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC Boost::python3${Python3_VERSION_MINOR})
247+
else()
248+
TARGET_LINK_BOOST_PYTHON(${PROJECT_NAME} PUBLIC)
249+
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
250+
endif()
221251
INSTALL(TARGETS ${PROJECT_NAME}
222252
EXPORT ${TARGETS_EXPORT_NAME}
223253
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}

0 commit comments

Comments
 (0)