From df115977df9de70710d1d445253c99f47f1a58bd Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Fri, 31 Jul 2020 22:45:19 -0400 Subject: [PATCH] chore: cleanup --- .github/workflows/ci.yml | 11 +- CMakeLists.txt | 22 +-- tests/CMakeLists.txt | 16 +- tests/test_cmake_build/CMakeLists.txt | 2 +- .../installed_embed/CMakeLists.txt | 10 ++ .../installed_function/CMakeLists.txt | 13 +- .../installed_target/CMakeLists.txt | 10 ++ .../subdirectory_embed/CMakeLists.txt | 10 ++ .../subdirectory_function/CMakeLists.txt | 10 ++ .../subdirectory_target/CMakeLists.txt | 10 ++ tools/FindPythonLibsNew.cmake | 1 + tools/pybind11Config.cmake.in | 152 +++++++++--------- tools/pybind11Tools.cmake | 25 ++- 13 files changed, 183 insertions(+), 109 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fc9d04c92..044312b53 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -286,7 +286,10 @@ jobs: apt-get install -y git make cmake g++ libeigen3-dev python3-dev python3-pip python3-pytest - name: Configure for install - run: cmake -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") -DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0 . + run: > + cmake . + -DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0 + -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") - name: Make and install run: make install @@ -298,7 +301,11 @@ jobs: run: mkdir /build-tests - name: Configure tests - run: cmake -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") ../pybind11-tests -DPYBIND11_WERROR=ON + run: > + cmake ../pybind11-tests + -DDOWNLOAD_CATCH=ON + -DPYBIND11_WERROR=ON + -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") working-directory: /build-tests - name: Run tests diff --git a/CMakeLists.txt b/CMakeLists.txt index 7aa8ed72c..3571e33e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,8 +7,9 @@ cmake_minimum_required(VERSION 3.7) -# VERSION 3.7...3.18, but some versions of MCVS have a patched CMake 3.11 -# that do not work properly with this syntax, so using the following workaround: +# The `cmake_minimum_required(VERSION 3.7...3.18)` syntax does not work with +# some versions of VS that have a patched CMake 3.11. This forces us to emulate +# the behavior using the following workaround: if(${CMAKE_VERSION} VERSION_LESS 3.18) cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) else() @@ -26,7 +27,7 @@ foreach(ver ${pybind11_version_defines}) endforeach() if(PYBIND11_VERSION_PATCH MATCHES [[([a-zA-Z]+)]]) - set(PYBIND11_VERSION_TYPE "${CMAKE_MATCH_1}") + set(pybind11_VERSION_TYPE "${CMAKE_MATCH_1}") endif() string(REGEX MATCH "[0-9]+" PYBIND11_VERSION_PATCH "${PYBIND11_VERSION_PATCH}") @@ -40,7 +41,7 @@ include(GNUInstallDirs) include(CMakePackageConfigHelpers) include(CMakeDependentOption) -message(STATUS "pybind11 v${pybind11_VERSION} ${PYBIND11_VERSION_TYPE}") +message(STATUS "pybind11 v${pybind11_VERSION} ${pybind11_VERSION_TYPE}") # Check if pybind11 is being used directly or via add_subdirectory if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) @@ -56,9 +57,11 @@ else() set(pybind11_system SYSTEM) endif() +# Options option(PYBIND11_INSTALL "Install pybind11 header files?" ${PYBIND11_MASTER_PROJECT}) option(PYBIND11_TEST "Build pybind11 test suite?" ${PYBIND11_MASTER_PROJECT}) option(PYBIND11_CLASSIC_LTO "Use the classic LTO flag algorithm, even on CMake 3.9+" OFF) + cmake_dependent_option( USE_PYTHON_INCLUDE_DIR "Install pybind11 headers in Python include directory instead of default installation prefix" @@ -117,8 +120,7 @@ string(REPLACE "include/" "${CMAKE_CURRENT_SOURCE_DIR}/include/" PYBIND11_HEADER # Classic mode -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/tools") -include(pybind11Tools) +include("${CMAKE_CURRENT_LIST_DIR}/tools/pybind11Tools.cmake") # Cache variables so pybind11_add_module can be used in parent projects set(PYBIND11_INCLUDE_DIR @@ -146,10 +148,6 @@ set(PYTHON_IS_DEBUG "${PYTHON_IS_DEBUG}" CACHE INTERNAL "") -if(PYBIND11_TEST OR (BUILD_TESTING AND PYBIND11_MASTER_PROJECT)) - add_subdirectory(tests) -endif() - if(USE_PYTHON_INCLUDE_DIR) file(RELATIVE_PATH CMAKE_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX} ${PYTHON_INCLUDE_DIRS}) endif() @@ -273,3 +271,7 @@ if(PYBIND11_INSTALL) ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) endif() endif() + +if(PYBIND11_TEST OR (BUILD_TESTING AND PYBIND11_MASTER_PROJECT)) + add_subdirectory(tests) +endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5dea63acd..f19fa28c1 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -7,8 +7,9 @@ cmake_minimum_required(VERSION 3.7) -# VERSION 3.7...3.18, but some versions of VS have a patched CMake 3.11 -# that do not work properly with this syntax, so using the following workaround: +# The `cmake_minimum_required(VERSION 3.7...3.18)` syntax does not work with +# some versions of VS that have a patched CMake 3.11. This forces us to emulate +# the behavior using the following workaround: if(${CMAKE_VERSION} VERSION_LESS 3.18) cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) else() @@ -18,6 +19,9 @@ endif() # There's no harm in including a project in a project project(pybind11_tests CXX) +# Access FindCatch and more +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../tools") + option(PYBIND11_WERROR "Report all warnings as errors" OFF) option(DOWNLOAD_EIGEN "Download EIGEN (requires CMake 3.11+)" OFF) set(PYBIND11_TEST_OVERRIDE @@ -89,12 +93,8 @@ endif() # Skip test_async for Python < 3.5 list(FIND PYBIND11_TEST_FILES test_async.cpp PYBIND11_TEST_FILES_ASYNC_I) -if((PYBIND11_TEST_FILES_ASYNC_I GREATER -1) AND ("${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}" - VERSION_LESS 3.5)) - message( - STATUS - "Skipping test_async because Python version ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} < 3.5" - ) +if((PYBIND11_TEST_FILES_ASYNC_I GREATER -1) AND (PYTHON_VERSION VERSION_LESS 3.5)) + message(STATUS "Skipping test_async because Python version ${PYTHON_VERSION} < 3.5") list(REMOVE_AT PYBIND11_TEST_FILES ${PYBIND11_TEST_FILES_ASYNC_I}) endif() diff --git a/tests/test_cmake_build/CMakeLists.txt b/tests/test_cmake_build/CMakeLists.txt index 53228f0eb..07db30023 100644 --- a/tests/test_cmake_build/CMakeLists.txt +++ b/tests/test_cmake_build/CMakeLists.txt @@ -8,7 +8,7 @@ function(pybind11_add_build_test name) "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}" "-DPYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}") - if(CMAKE_CXX_STANDARD) + if(DEFINED CMAKE_CXX_STANDARD) list(APPEND build_options "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}") endif() diff --git a/tests/test_cmake_build/installed_embed/CMakeLists.txt b/tests/test_cmake_build/installed_embed/CMakeLists.txt index 78855afa2..509bce201 100644 --- a/tests/test_cmake_build/installed_embed/CMakeLists.txt +++ b/tests/test_cmake_build/installed_embed/CMakeLists.txt @@ -1,4 +1,14 @@ cmake_minimum_required(VERSION 3.7) + +# The `cmake_minimum_required(VERSION 3.7...3.18)` syntax does not work with +# some versions of VS that have a patched CMake 3.11. This forces us to emulate +# the behavior using the following workaround: +if(${CMAKE_VERSION} VERSION_LESS 3.18) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +else() + cmake_policy(VERSION 3.18) +endif() + project(test_installed_embed CXX) set(CMAKE_MODULE_PATH "") diff --git a/tests/test_cmake_build/installed_function/CMakeLists.txt b/tests/test_cmake_build/installed_function/CMakeLists.txt index 3ad5445e3..f55389549 100644 --- a/tests/test_cmake_build/installed_function/CMakeLists.txt +++ b/tests/test_cmake_build/installed_function/CMakeLists.txt @@ -1,10 +1,21 @@ cmake_minimum_required(VERSION 3.7) + +# The `cmake_minimum_required(VERSION 3.7...3.18)` syntax does not work with +# some versions of VS that have a patched CMake 3.11. This forces us to emulate +# the behavior using the following workaround: +if(${CMAKE_VERSION} VERSION_LESS 3.18) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +else() + cmake_policy(VERSION 3.18) +endif() + project(test_installed_module CXX) set(CMAKE_MODULE_PATH "") find_package(pybind11 CONFIG REQUIRED) -message(STATUS "Found pybind11 v${pybind11_VERSION}: ${pybind11_INCLUDE_DIRS}") +message( + STATUS "Found pybind11 v${pybind11_VERSION} ${pybind11_VERSION_TYPE}: ${pybind11_INCLUDE_DIRS}") pybind11_add_module(test_cmake_build SHARED NO_EXTRAS ../main.cpp) diff --git a/tests/test_cmake_build/installed_target/CMakeLists.txt b/tests/test_cmake_build/installed_target/CMakeLists.txt index 348c419cd..9392c9da6 100644 --- a/tests/test_cmake_build/installed_target/CMakeLists.txt +++ b/tests/test_cmake_build/installed_target/CMakeLists.txt @@ -1,4 +1,14 @@ cmake_minimum_required(VERSION 3.7) + +# The `cmake_minimum_required(VERSION 3.7...3.18)` syntax does not work with +# some versions of VS that have a patched CMake 3.11. This forces us to emulate +# the behavior using the following workaround: +if(${CMAKE_VERSION} VERSION_LESS 3.18) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +else() + cmake_policy(VERSION 3.18) +endif() + project(test_installed_target CXX) set(CMAKE_MODULE_PATH "") diff --git a/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt b/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt index eea0eeea3..0afe4a301 100644 --- a/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +++ b/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt @@ -1,4 +1,14 @@ cmake_minimum_required(VERSION 3.7) + +# The `cmake_minimum_required(VERSION 3.7...3.18)` syntax does not work with +# some versions of VS that have a patched CMake 3.11. This forces us to emulate +# the behavior using the following workaround: +if(${CMAKE_VERSION} VERSION_LESS 3.18) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +else() + cmake_policy(VERSION 3.18) +endif() + project(test_subdirectory_embed CXX) set(PYBIND11_INSTALL diff --git a/tests/test_cmake_build/subdirectory_function/CMakeLists.txt b/tests/test_cmake_build/subdirectory_function/CMakeLists.txt index e4518044e..366a82ba5 100644 --- a/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +++ b/tests/test_cmake_build/subdirectory_function/CMakeLists.txt @@ -1,4 +1,14 @@ cmake_minimum_required(VERSION 3.7) + +# The `cmake_minimum_required(VERSION 3.7...3.18)` syntax does not work with +# some versions of VS that have a patched CMake 3.11. This forces us to emulate +# the behavior using the following workaround: +if(${CMAKE_VERSION} VERSION_LESS 3.18) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +else() + cmake_policy(VERSION 3.18) +endif() + project(test_subdirectory_module CXX) add_subdirectory(${PYBIND11_PROJECT_DIR} pybind11) diff --git a/tests/test_cmake_build/subdirectory_target/CMakeLists.txt b/tests/test_cmake_build/subdirectory_target/CMakeLists.txt index f84140ce0..91a12e3ee 100644 --- a/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +++ b/tests/test_cmake_build/subdirectory_target/CMakeLists.txt @@ -1,4 +1,14 @@ cmake_minimum_required(VERSION 3.7) + +# The `cmake_minimum_required(VERSION 3.7...3.18)` syntax does not work with +# some versions of VS that have a patched CMake 3.11. This forces us to emulate +# the behavior using the following workaround: +if(${CMAKE_VERSION} VERSION_LESS 3.18) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +else() + cmake_policy(VERSION 3.18) +endif() + project(test_subdirectory_target CXX) add_subdirectory(${PYBIND11_PROJECT_DIR} pybind11) diff --git a/tools/FindPythonLibsNew.cmake b/tools/FindPythonLibsNew.cmake index cf2a13f67..cc56351a9 100644 --- a/tools/FindPythonLibsNew.cmake +++ b/tools/FindPythonLibsNew.cmake @@ -140,6 +140,7 @@ string(REGEX REPLACE "\\." ";" _PYTHON_VERSION_LIST ${_PYTHON_VERSION_LIST}) list(GET _PYTHON_VERSION_LIST 0 PYTHON_VERSION_MAJOR) list(GET _PYTHON_VERSION_LIST 1 PYTHON_VERSION_MINOR) list(GET _PYTHON_VERSION_LIST 2 PYTHON_VERSION_PATCH) +set(PYTHON_VERSION "${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.${PYTHON_VERSION_PATCH}") # Make sure all directory separators are '/' string(REGEX REPLACE "\\\\" "/" PYTHON_PREFIX "${PYTHON_PREFIX}") diff --git a/tools/pybind11Config.cmake.in b/tools/pybind11Config.cmake.in index bcc74d6bf..a8b3cb1f1 100644 --- a/tools/pybind11Config.cmake.in +++ b/tools/pybind11Config.cmake.in @@ -1,62 +1,65 @@ -# pybind11Config.cmake -# -------------------- -# -# PYBIND11 cmake module. -# This module sets the following variables in your project:: -# -# pybind11_FOUND - true if pybind11 and all required components found on the system -# pybind11_VERSION - pybind11 version in format Major.Minor.Release -# pybind11_INCLUDE_DIRS - Directories where pybind11 and python headers are located. -# pybind11_INCLUDE_DIR - Directory where pybind11 headers are located. -# pybind11_DEFINITIONS - Definitions necessary to use pybind11, namely USING_pybind11. -# pybind11_LIBRARIES - compile flags and python libraries (as needed) to link against. -# pybind11_LIBRARY - empty. -# CMAKE_MODULE_PATH - appends location of accompanying FindPythonLibsNew.cmake and -# pybind11Tools.cmake modules. -# -# -# Available components: None -# -# -# Exported targets:: -# -# If pybind11 is found, this module defines the following :prop_tgt:`IMPORTED` -# interface library targets:: -# -# pybind11::module - for extension modules -# pybind11::embed - for embedding the Python interpreter -# -# Python headers, libraries (as needed by platform), and the C++ standard -# are attached to the target. Set PythonLibsNew variables to influence -# python detection and CMAKE_CXX_STANDARD (11 or 14) to influence standard -# setting. :: -# -# find_package(pybind11 CONFIG REQUIRED) -# message(STATUS "Found pybind11 v${pybind11_VERSION}: ${pybind11_INCLUDE_DIRS}") -# -# # Create an extension module -# add_library(mylib MODULE main.cpp) -# target_link_libraries(mylib pybind11::module) -# -# # Or embed the Python interpreter into an executable -# add_executable(myexe main.cpp) -# target_link_libraries(myexe pybind11::embed) -# -# Suggested usage:: -# -# find_package with version info is not recommended except for release versions. :: -# -# find_package(pybind11 CONFIG) -# find_package(pybind11 2.0 EXACT CONFIG REQUIRED) -# -# -# The following variables can be set to guide the search for this package:: -# -# pybind11_DIR - CMake variable, set to directory containing this Config file -# CMAKE_PREFIX_PATH - CMake variable, set to root directory of this package -# PATH - environment variable, set to bin directory of this package -# CMAKE_DISABLE_FIND_PACKAGE_pybind11 - CMake variable, disables -# find_package(pybind11) when not REQUIRED, perhaps to force internal build +#[=============================================================================[.rst + +pybind11Config.cmake +-------------------- + +PYBIND11 cmake module. +This module sets the following variables in your project:: + + pybind11_FOUND - true if pybind11 and all required components found on the system + pybind11_VERSION - pybind11 version in format Major.Minor.Release + pybind11_INCLUDE_DIRS - Directories where pybind11 and python headers are located. + pybind11_INCLUDE_DIR - Directory where pybind11 headers are located. + pybind11_DEFINITIONS - Definitions necessary to use pybind11, namely USING_pybind11. + pybind11_LIBRARIES - compile flags and python libraries (as needed) to link against. + pybind11_LIBRARY - empty. + + +Available components: None + + +Exported targets:: + +If pybind11 is found, this module defines the following :prop_tgt:`IMPORTED` +interface library targets:: + + pybind11::module - for extension modules + pybind11::embed - for embedding the Python interpreter + +Python headers, libraries (as needed by platform), and the C++ standard +are attached to the target. +Classic mode:: + +Set PythonLibsNew variables to influence python detection and +CMAKE_CXX_STANDARD to influence standard setting. :: + + find_package(pybind11 CONFIG REQUIRED) + message(STATUS "Found pybind11 v${pybind11_VERSION} ${pybind11_VERSION_TYPE}: ${pybind11_INCLUDE_DIRS}") + + # Create an extension module + add_library(mylib MODULE main.cpp) + target_link_libraries(mylib pybind11::module) + + # Or embed the Python interpreter into an executable + add_executable(myexe main.cpp) + target_link_libraries(myexe pybind11::embed) + +Suggested usage:: + +find_package with version info is not recommended except for release versions. :: + + find_package(pybind11 CONFIG) + find_package(pybind11 2.0 EXACT CONFIG REQUIRED) + + +The following variables can be set to guide the search for this package:: + + pybind11_DIR - CMake variable, set to directory containing this Config file + CMAKE_PREFIX_PATH - CMake variable, set to root directory of this package + PATH - environment variable, set to bin directory of this package + CMAKE_DISABLE_FIND_PACKAGE_pybind11 - CMake variable, disables + find_package(pybind11) when not REQUIRED, perhaps to force internal build +#]=============================================================================] @PACKAGE_INIT@ @@ -65,32 +68,35 @@ set(pybind11_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/@CMAKE_INSTALL_INCLUDEDIR@") set(pybind11_LIBRARY "") set(pybind11_DEFINITIONS USING_pybind11) +set(pybind11_VERSION_TYPE "@pybind11_VERSION_TYPE@") check_required_components(pybind11) -# Make the FindPythonLibsNew.cmake module available -list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) -include(pybind11Tools) +include("${CMAKE_CURRENT_LIST_DIR}/pybind11Tools.cmake") #----------------------------------------------------------------------------- # Don't include targets if this file is being picked up by another # project which has already built this as a subproject #----------------------------------------------------------------------------- if(NOT TARGET pybind11::pybind11) - include("${CMAKE_CURRENT_LIST_DIR}/pybind11Targets.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/pybind11Targets.cmake") - find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} MODULE REQUIRED) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") + find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} MODULE REQUIRED) + list(REMOVE_AT CMAKE_MODULE_PATH -1) - set_property(TARGET pybind11::pybind11 APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PYTHON_INCLUDE_DIRS}) - set_property(TARGET pybind11::pybind11 APPEND PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${PYTHON_INCLUDE_DIRS}) + set_property(TARGET pybind11::pybind11 APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PYTHON_INCLUDE_DIRS}) + set_property(TARGET pybind11::pybind11 APPEND PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${PYTHON_INCLUDE_DIRS}) - set_property(TARGET pybind11::embed APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${PYTHON_LIBRARIES}) - set_property(TARGET pybind11::module APPEND PROPERTY INTERFACE_LINK_LIBRARIES - "$<$,$>:$>") + set_property(TARGET pybind11::embed APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${PYTHON_LIBRARIES}) + set_property(TARGET pybind11::module APPEND PROPERTY INTERFACE_LINK_LIBRARIES + "$<$,$>:$>") - get_property(_iid TARGET pybind11::pybind11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES) - get_property(_ill TARGET pybind11::module PROPERTY INTERFACE_LINK_LIBRARIES) - set(pybind11_INCLUDE_DIRS ${_iid}) - set(pybind11_LIBRARIES ${_ico} ${_ill}) + get_property(_iid TARGET pybind11::pybind11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES) + get_property(_ill TARGET pybind11::module PROPERTY INTERFACE_LINK_LIBRARIES) + set(pybind11_INCLUDE_DIRS ${_iid}) + set(pybind11_LIBRARIES ${_ico} ${_ill}) + + include("${CMAKE_CURRENT_LIST_DIR}/pybind11Tools.cmake") endif() diff --git a/tools/pybind11Tools.cmake b/tools/pybind11Tools.cmake index 49876eb9f..258aaac00 100644 --- a/tools/pybind11Tools.cmake +++ b/tools/pybind11Tools.cmake @@ -5,16 +5,6 @@ # All rights reserved. Use of this source code is governed by a # BSD-style license that can be found in the LICENSE file. -cmake_minimum_required(VERSION 3.7) - -# VERSION 3.7...3.18, but some versions of VS have a patched CMake 3.11 -# that do not work properly with this syntax, so using the following workaround: -if(${CMAKE_VERSION} VERSION_LESS 3.18) - cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) -else() - cmake_policy(VERSION 3.18) -endif() - # Add a CMake parameter for choosing a desired Python version if(NOT PYBIND11_PYTHON_VERSION) set(PYBIND11_PYTHON_VERSION @@ -26,10 +16,12 @@ endif() set(Python_ADDITIONAL_VERSIONS "3.9;3.8;3.7;3.6;3.5;3.4" CACHE INTERNAL "") -find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED) + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") +find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} MODULE REQUIRED) +list(REMOVE_AT CMAKE_MODULE_PATH -1) include(CheckCXXCompilerFlag) -include(CMakeParseArguments) # Warn or error if old variable name used if(PYBIND11_CPP_STANDARD) @@ -131,7 +123,7 @@ endfunction() # function(pybind11_add_module target_name) set(options MODULE SHARED EXCLUDE_FROM_ALL NO_EXTRAS SYSTEM THIN_LTO) - cmake_parse_arguments(ARG "${options}" "" "" ${ARGN}) + cmake_parse_arguments(PARSE_ARGV 2 ARG "${options}" "" "") if(ARG_MODULE AND ARG_SHARED) message(FATAL_ERROR "Can't be both MODULE and SHARED") @@ -185,9 +177,14 @@ function(pybind11_add_module target_name) _pybind11_add_lto_flags(${target_name} ${ARG_THIN_LTO}) else() include(CheckIPOSupported) - check_ipo_supported(RESULT supported OUTPUT error) + check_ipo_supported( + RESULT supported + OUTPUT error + LANGUAGES CXX) if(supported) set_property(TARGET ${target_name} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) + else() + message(WARNING "IPO is not supported: ${output}") endif() endif()