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 |
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}) |
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 |
37set(PYBIND11_HEADERS 38 include/pybind11/attr.h 39 include/pybind11/cast.h 40 include/pybind11/chrono.h |
41 include/pybind11/class_support.h |
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}") |
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 |
83if(NOT (CMAKE_VERSION VERSION_LESS 3.0)) # CMake >= 3.0 84 # Build an interface library target: |
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") |
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)) |
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}) |
123 endif() 124endif() |