CMakeLists.txt (11986:c12e4625ab56) | CMakeLists.txt (12037:d28054ac6ec9) |
---|---|
1# CMakeLists.txt -- Build system for the pybind11 modules 2# 3# Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch> 4# 5# All rights reserved. Use of this source code is governed by a 6# BSD-style license that can be found in the LICENSE file. 7 8cmake_minimum_required(VERSION 2.8.12) 9 | 1# CMakeLists.txt -- Build system for the pybind11 modules 2# 3# Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch> 4# 5# All rights reserved. Use of this source code is governed by a 6# BSD-style license that can be found in the LICENSE file. 7 8cmake_minimum_required(VERSION 2.8.12) 9 |
10if (POLICY CMP0048) 11 # cmake warns if loaded from a min-3.0-required parent dir, so silence the warning: 12 cmake_policy(SET CMP0048 NEW) 13endif() 14 |
|
10project(pybind11) 11 12# Check if pybind11 is being used directly or via add_subdirectory 13set(PYBIND11_MASTER_PROJECT OFF) 14if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) 15 set(PYBIND11_MASTER_PROJECT ON) 16endif() 17 18option(PYBIND11_INSTALL "Install pybind11 header files?" ${PYBIND11_MASTER_PROJECT}) 19option(PYBIND11_TEST "Build pybind11 test suite?" ${PYBIND11_MASTER_PROJECT}) | 15project(pybind11) 16 17# Check if pybind11 is being used directly or via add_subdirectory 18set(PYBIND11_MASTER_PROJECT OFF) 19if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) 20 set(PYBIND11_MASTER_PROJECT ON) 21endif() 22 23option(PYBIND11_INSTALL "Install pybind11 header files?" ${PYBIND11_MASTER_PROJECT}) 24option(PYBIND11_TEST "Build pybind11 test suite?" ${PYBIND11_MASTER_PROJECT}) |
20option(PYBIND11_WERROR "Report all warnings as errors" OFF) | |
21 22list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/tools") 23 24include(pybind11Tools) 25 26# Cache variables so pybind11_add_module can be used in parent projects 27set(PYBIND11_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/include" CACHE INTERNAL "") 28set(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS} CACHE INTERNAL "") 29set(PYTHON_LIBRARIES ${PYTHON_LIBRARIES} CACHE INTERNAL "") 30set(PYTHON_MODULE_PREFIX ${PYTHON_MODULE_PREFIX} CACHE INTERNAL "") 31set(PYTHON_MODULE_EXTENSION ${PYTHON_MODULE_EXTENSION} CACHE INTERNAL "") 32 | 25 26list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/tools") 27 28include(pybind11Tools) 29 30# Cache variables so pybind11_add_module can be used in parent projects 31set(PYBIND11_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/include" CACHE INTERNAL "") 32set(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS} CACHE INTERNAL "") 33set(PYTHON_LIBRARIES ${PYTHON_LIBRARIES} CACHE INTERNAL "") 34set(PYTHON_MODULE_PREFIX ${PYTHON_MODULE_PREFIX} CACHE INTERNAL "") 35set(PYTHON_MODULE_EXTENSION ${PYTHON_MODULE_EXTENSION} CACHE INTERNAL "") 36 |
33# Compile with compiler warnings turned on 34function(pybind11_enable_warnings target_name) 35 if(MSVC) 36 target_compile_options(${target_name} PRIVATE /W4) 37 else() 38 target_compile_options(${target_name} PRIVATE -Wall -Wextra -Wconversion) 39 endif() 40 41 if(PYBIND11_WERROR) 42 if(MSVC) 43 target_compile_options(${target_name} PRIVATE /WX) 44 else() 45 target_compile_options(${target_name} PRIVATE -Werror) 46 endif() 47 endif() 48endfunction() 49 | |
50set(PYBIND11_HEADERS 51 include/pybind11/attr.h 52 include/pybind11/cast.h 53 include/pybind11/chrono.h | 37set(PYBIND11_HEADERS 38 include/pybind11/attr.h 39 include/pybind11/cast.h 40 include/pybind11/chrono.h |
41 include/pybind11/class_support.h |
|
54 include/pybind11/common.h 55 include/pybind11/complex.h 56 include/pybind11/descr.h 57 include/pybind11/options.h 58 include/pybind11/eigen.h 59 include/pybind11/eval.h 60 include/pybind11/functional.h 61 include/pybind11/numpy.h --- 18 unchanged lines hidden (view full) --- 80file(STRINGS "${PYBIND11_INCLUDE_DIR}/pybind11/common.h" pybind11_version_defines 81 REGEX "#define PYBIND11_VERSION_(MAJOR|MINOR|PATCH) ") 82foreach(ver ${pybind11_version_defines}) 83 if (ver MATCHES "#define PYBIND11_VERSION_(MAJOR|MINOR|PATCH) +([^ ]+)$") 84 set(PYBIND11_VERSION_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" CACHE INTERNAL "") 85 endif() 86endforeach() 87set(${PROJECT_NAME}_VERSION ${PYBIND11_VERSION_MAJOR}.${PYBIND11_VERSION_MINOR}.${PYBIND11_VERSION_PATCH}) | 42 include/pybind11/common.h 43 include/pybind11/complex.h 44 include/pybind11/descr.h 45 include/pybind11/options.h 46 include/pybind11/eigen.h 47 include/pybind11/eval.h 48 include/pybind11/functional.h 49 include/pybind11/numpy.h --- 18 unchanged lines hidden (view full) --- 68file(STRINGS "${PYBIND11_INCLUDE_DIR}/pybind11/common.h" pybind11_version_defines 69 REGEX "#define PYBIND11_VERSION_(MAJOR|MINOR|PATCH) ") 70foreach(ver ${pybind11_version_defines}) 71 if (ver MATCHES "#define PYBIND11_VERSION_(MAJOR|MINOR|PATCH) +([^ ]+)$") 72 set(PYBIND11_VERSION_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" CACHE INTERNAL "") 73 endif() 74endforeach() 75set(${PROJECT_NAME}_VERSION ${PYBIND11_VERSION_MAJOR}.${PYBIND11_VERSION_MINOR}.${PYBIND11_VERSION_PATCH}) |
76message(STATUS "pybind11 v${${PROJECT_NAME}_VERSION}") |
|
88 | 77 |
78option (USE_PYTHON_INCLUDE_DIR "Install pybind11 headers in Python include directory instead of default installation prefix" OFF) 79if (USE_PYTHON_INCLUDE_DIR) 80 file(RELATIVE_PATH CMAKE_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX} ${PYTHON_INCLUDE_DIRS}) 81endif() 82 |
|
89if(NOT (CMAKE_VERSION VERSION_LESS 3.0)) # CMake >= 3.0 90 # Build an interface library target: | 83if(NOT (CMAKE_VERSION VERSION_LESS 3.0)) # CMake >= 3.0 84 # Build an interface library target: |
91 add_library(pybind11 INTERFACE) 92 target_include_directories(pybind11 INTERFACE $<BUILD_INTERFACE:${PYBIND11_INCLUDE_DIR}> 93 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) 94 if(APPLE) 95 target_link_libraries(pybind11 INTERFACE "-undefined dynamic_lookup") | 85 add_library(module INTERFACE) 86 target_include_directories(module INTERFACE $<BUILD_INTERFACE:${PYBIND11_INCLUDE_DIR}> 87 $<BUILD_INTERFACE:${PYTHON_INCLUDE_DIRS}> 88 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) 89 if(WIN32 OR CYGWIN) 90 target_link_libraries(module INTERFACE $<BUILD_INTERFACE:${PYTHON_LIBRARIES}>) 91 elseif(APPLE) 92 target_link_libraries(module INTERFACE "-undefined dynamic_lookup") |
96 endif() | 93 endif() |
94 target_compile_options(module INTERFACE $<BUILD_INTERFACE:${PYBIND11_CPP_STANDARD}>) 95 96 add_library(pybind11::module ALIAS module) # to match exported target |
|
97endif() 98 99if (PYBIND11_INSTALL) 100 install(FILES ${PYBIND11_HEADERS} 101 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pybind11) 102 # GNUInstallDirs "DATADIR" wrong here; CMake search path wants "share". 103 set(PYBIND11_CMAKECONFIG_INSTALL_DIR "share/cmake/${PROJECT_NAME}" CACHE STRING "install path for pybind11Config.cmake") 104 --- 5 unchanged lines hidden (view full) --- 110 COMPATIBILITY AnyNewerVersion) 111 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake 112 ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake 113 tools/FindPythonLibsNew.cmake 114 tools/pybind11Tools.cmake 115 DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR}) 116 117 if(NOT (CMAKE_VERSION VERSION_LESS 3.0)) | 97endif() 98 99if (PYBIND11_INSTALL) 100 install(FILES ${PYBIND11_HEADERS} 101 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pybind11) 102 # GNUInstallDirs "DATADIR" wrong here; CMake search path wants "share". 103 set(PYBIND11_CMAKECONFIG_INSTALL_DIR "share/cmake/${PROJECT_NAME}" CACHE STRING "install path for pybind11Config.cmake") 104 --- 5 unchanged lines hidden (view full) --- 110 COMPATIBILITY AnyNewerVersion) 111 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake 112 ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake 113 tools/FindPythonLibsNew.cmake 114 tools/pybind11Tools.cmake 115 DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR}) 116 117 if(NOT (CMAKE_VERSION VERSION_LESS 3.0)) |
118 install(TARGETS pybind11 | 118 install(TARGETS module |
119 EXPORT "${PROJECT_NAME}Targets") 120 install(EXPORT "${PROJECT_NAME}Targets" 121 NAMESPACE "${PROJECT_NAME}::" 122 DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR}) | 119 EXPORT "${PROJECT_NAME}Targets") 120 install(EXPORT "${PROJECT_NAME}Targets" 121 NAMESPACE "${PROJECT_NAME}::" 122 DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR}) |
123 message(STATUS "Exporting ${PROJECT_NAME}::pybind11 interface library target version ${${PROJECT_NAME}_VERSION}") | |
124 endif() 125endif() | 123 endif() 124endif() |