CMakeLists.txt revision 11986
111986Sandreas.sandberg@arm.com# CMakeLists.txt -- Build system for the pybind11 modules 211986Sandreas.sandberg@arm.com# 311986Sandreas.sandberg@arm.com# Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch> 411986Sandreas.sandberg@arm.com# 511986Sandreas.sandberg@arm.com# All rights reserved. Use of this source code is governed by a 611986Sandreas.sandberg@arm.com# BSD-style license that can be found in the LICENSE file. 711986Sandreas.sandberg@arm.com 811986Sandreas.sandberg@arm.comcmake_minimum_required(VERSION 2.8.12) 911986Sandreas.sandberg@arm.com 1011986Sandreas.sandberg@arm.comproject(pybind11) 1111986Sandreas.sandberg@arm.com 1211986Sandreas.sandberg@arm.com# Check if pybind11 is being used directly or via add_subdirectory 1311986Sandreas.sandberg@arm.comset(PYBIND11_MASTER_PROJECT OFF) 1411986Sandreas.sandberg@arm.comif (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) 1511986Sandreas.sandberg@arm.com set(PYBIND11_MASTER_PROJECT ON) 1611986Sandreas.sandberg@arm.comendif() 1711986Sandreas.sandberg@arm.com 1811986Sandreas.sandberg@arm.comoption(PYBIND11_INSTALL "Install pybind11 header files?" ${PYBIND11_MASTER_PROJECT}) 1911986Sandreas.sandberg@arm.comoption(PYBIND11_TEST "Build pybind11 test suite?" ${PYBIND11_MASTER_PROJECT}) 2011986Sandreas.sandberg@arm.comoption(PYBIND11_WERROR "Report all warnings as errors" OFF) 2111986Sandreas.sandberg@arm.com 2211986Sandreas.sandberg@arm.comlist(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/tools") 2311986Sandreas.sandberg@arm.com 2411986Sandreas.sandberg@arm.cominclude(pybind11Tools) 2511986Sandreas.sandberg@arm.com 2611986Sandreas.sandberg@arm.com# Cache variables so pybind11_add_module can be used in parent projects 2711986Sandreas.sandberg@arm.comset(PYBIND11_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/include" CACHE INTERNAL "") 2811986Sandreas.sandberg@arm.comset(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS} CACHE INTERNAL "") 2911986Sandreas.sandberg@arm.comset(PYTHON_LIBRARIES ${PYTHON_LIBRARIES} CACHE INTERNAL "") 3011986Sandreas.sandberg@arm.comset(PYTHON_MODULE_PREFIX ${PYTHON_MODULE_PREFIX} CACHE INTERNAL "") 3111986Sandreas.sandberg@arm.comset(PYTHON_MODULE_EXTENSION ${PYTHON_MODULE_EXTENSION} CACHE INTERNAL "") 3211986Sandreas.sandberg@arm.com 3311986Sandreas.sandberg@arm.com# Compile with compiler warnings turned on 3411986Sandreas.sandberg@arm.comfunction(pybind11_enable_warnings target_name) 3511986Sandreas.sandberg@arm.com if(MSVC) 3611986Sandreas.sandberg@arm.com target_compile_options(${target_name} PRIVATE /W4) 3711986Sandreas.sandberg@arm.com else() 3811986Sandreas.sandberg@arm.com target_compile_options(${target_name} PRIVATE -Wall -Wextra -Wconversion) 3911986Sandreas.sandberg@arm.com endif() 4011986Sandreas.sandberg@arm.com 4111986Sandreas.sandberg@arm.com if(PYBIND11_WERROR) 4211986Sandreas.sandberg@arm.com if(MSVC) 4311986Sandreas.sandberg@arm.com target_compile_options(${target_name} PRIVATE /WX) 4411986Sandreas.sandberg@arm.com else() 4511986Sandreas.sandberg@arm.com target_compile_options(${target_name} PRIVATE -Werror) 4611986Sandreas.sandberg@arm.com endif() 4711986Sandreas.sandberg@arm.com endif() 4811986Sandreas.sandberg@arm.comendfunction() 4911986Sandreas.sandberg@arm.com 5011986Sandreas.sandberg@arm.comset(PYBIND11_HEADERS 5111986Sandreas.sandberg@arm.com include/pybind11/attr.h 5211986Sandreas.sandberg@arm.com include/pybind11/cast.h 5311986Sandreas.sandberg@arm.com include/pybind11/chrono.h 5411986Sandreas.sandberg@arm.com include/pybind11/common.h 5511986Sandreas.sandberg@arm.com include/pybind11/complex.h 5611986Sandreas.sandberg@arm.com include/pybind11/descr.h 5711986Sandreas.sandberg@arm.com include/pybind11/options.h 5811986Sandreas.sandberg@arm.com include/pybind11/eigen.h 5911986Sandreas.sandberg@arm.com include/pybind11/eval.h 6011986Sandreas.sandberg@arm.com include/pybind11/functional.h 6111986Sandreas.sandberg@arm.com include/pybind11/numpy.h 6211986Sandreas.sandberg@arm.com include/pybind11/operators.h 6311986Sandreas.sandberg@arm.com include/pybind11/pybind11.h 6411986Sandreas.sandberg@arm.com include/pybind11/pytypes.h 6511986Sandreas.sandberg@arm.com include/pybind11/stl.h 6611986Sandreas.sandberg@arm.com include/pybind11/stl_bind.h 6711986Sandreas.sandberg@arm.com include/pybind11/typeid.h 6811986Sandreas.sandberg@arm.com) 6911986Sandreas.sandberg@arm.comstring(REPLACE "include/" "${CMAKE_CURRENT_SOURCE_DIR}/include/" 7011986Sandreas.sandberg@arm.com PYBIND11_HEADERS "${PYBIND11_HEADERS}") 7111986Sandreas.sandberg@arm.com 7211986Sandreas.sandberg@arm.comif (PYBIND11_TEST) 7311986Sandreas.sandberg@arm.com add_subdirectory(tests) 7411986Sandreas.sandberg@arm.comendif() 7511986Sandreas.sandberg@arm.com 7611986Sandreas.sandberg@arm.cominclude(GNUInstallDirs) 7711986Sandreas.sandberg@arm.cominclude(CMakePackageConfigHelpers) 7811986Sandreas.sandberg@arm.com 7911986Sandreas.sandberg@arm.com# extract project version from source 8011986Sandreas.sandberg@arm.comfile(STRINGS "${PYBIND11_INCLUDE_DIR}/pybind11/common.h" pybind11_version_defines 8111986Sandreas.sandberg@arm.com REGEX "#define PYBIND11_VERSION_(MAJOR|MINOR|PATCH) ") 8211986Sandreas.sandberg@arm.comforeach(ver ${pybind11_version_defines}) 8311986Sandreas.sandberg@arm.com if (ver MATCHES "#define PYBIND11_VERSION_(MAJOR|MINOR|PATCH) +([^ ]+)$") 8411986Sandreas.sandberg@arm.com set(PYBIND11_VERSION_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" CACHE INTERNAL "") 8511986Sandreas.sandberg@arm.com endif() 8611986Sandreas.sandberg@arm.comendforeach() 8711986Sandreas.sandberg@arm.comset(${PROJECT_NAME}_VERSION ${PYBIND11_VERSION_MAJOR}.${PYBIND11_VERSION_MINOR}.${PYBIND11_VERSION_PATCH}) 8811986Sandreas.sandberg@arm.com 8911986Sandreas.sandberg@arm.comif(NOT (CMAKE_VERSION VERSION_LESS 3.0)) # CMake >= 3.0 9011986Sandreas.sandberg@arm.com # Build an interface library target: 9111986Sandreas.sandberg@arm.com add_library(pybind11 INTERFACE) 9211986Sandreas.sandberg@arm.com target_include_directories(pybind11 INTERFACE $<BUILD_INTERFACE:${PYBIND11_INCLUDE_DIR}> 9311986Sandreas.sandberg@arm.com $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) 9411986Sandreas.sandberg@arm.com if(APPLE) 9511986Sandreas.sandberg@arm.com target_link_libraries(pybind11 INTERFACE "-undefined dynamic_lookup") 9611986Sandreas.sandberg@arm.com endif() 9711986Sandreas.sandberg@arm.comendif() 9811986Sandreas.sandberg@arm.com 9911986Sandreas.sandberg@arm.comif (PYBIND11_INSTALL) 10011986Sandreas.sandberg@arm.com install(FILES ${PYBIND11_HEADERS} 10111986Sandreas.sandberg@arm.com DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pybind11) 10211986Sandreas.sandberg@arm.com # GNUInstallDirs "DATADIR" wrong here; CMake search path wants "share". 10311986Sandreas.sandberg@arm.com set(PYBIND11_CMAKECONFIG_INSTALL_DIR "share/cmake/${PROJECT_NAME}" CACHE STRING "install path for pybind11Config.cmake") 10411986Sandreas.sandberg@arm.com 10511986Sandreas.sandberg@arm.com configure_package_config_file(tools/${PROJECT_NAME}Config.cmake.in 10611986Sandreas.sandberg@arm.com "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" 10711986Sandreas.sandberg@arm.com INSTALL_DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR}) 10811986Sandreas.sandberg@arm.com write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake 10911986Sandreas.sandberg@arm.com VERSION ${${PROJECT_NAME}_VERSION} 11011986Sandreas.sandberg@arm.com COMPATIBILITY AnyNewerVersion) 11111986Sandreas.sandberg@arm.com install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake 11211986Sandreas.sandberg@arm.com ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake 11311986Sandreas.sandberg@arm.com tools/FindPythonLibsNew.cmake 11411986Sandreas.sandberg@arm.com tools/pybind11Tools.cmake 11511986Sandreas.sandberg@arm.com DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR}) 11611986Sandreas.sandberg@arm.com 11711986Sandreas.sandberg@arm.com if(NOT (CMAKE_VERSION VERSION_LESS 3.0)) 11811986Sandreas.sandberg@arm.com install(TARGETS pybind11 11911986Sandreas.sandberg@arm.com EXPORT "${PROJECT_NAME}Targets") 12011986Sandreas.sandberg@arm.com install(EXPORT "${PROJECT_NAME}Targets" 12111986Sandreas.sandberg@arm.com NAMESPACE "${PROJECT_NAME}::" 12211986Sandreas.sandberg@arm.com DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR}) 12311986Sandreas.sandberg@arm.com message(STATUS "Exporting ${PROJECT_NAME}::pybind11 interface library target version ${${PROJECT_NAME}_VERSION}") 12411986Sandreas.sandberg@arm.com endif() 12511986Sandreas.sandberg@arm.comendif() 126