From b8dc60ec8f17ae739f15c54ffe4b1c578adcb994 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Mon, 2 Nov 2020 20:45:54 -0500 Subject: [PATCH] fix: Python include directory was missing from DIRS (#2636) --- CMakeLists.txt | 22 +++++++++++++--------- tools/pybind11Common.cmake | 6 ++++++ tools/pybind11NewTools.cmake | 3 +++ tools/pybind11Tools.cmake | 4 ++++ 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 99cdd220..2c08ff0b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,10 +142,17 @@ endif() string(REPLACE "include/" "${CMAKE_CURRENT_SOURCE_DIR}/include/" PYBIND11_HEADERS "${PYBIND11_HEADERS}") -# Cache variables so pybind11_add_module can be used in parent projects -set(PYBIND11_INCLUDE_DIR +# Cache variable so this can be used in parent projects +set(pybind11_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/include" - CACHE INTERNAL "") + CACHE INTERNAL "Directory where pybind11 headers are located") + +# Backward compatible variable for add_subdirectory mode +if(NOT PYBIND11_MASTER_PROJECT) + set(PYBIND11_INCLUDE_DIR + "${pybind11_INCLUDE_DIR}" + CACHE INTERNAL "") +endif() # Note: when creating targets, you cannot use if statements at configure time - # you need generator expressions, because those will be placed in the target file. @@ -170,14 +177,14 @@ endif() # Fill in headers target target_include_directories( - pybind11_headers ${pybind11_system} INTERFACE $ + pybind11_headers ${pybind11_system} INTERFACE $ $) target_compile_features(pybind11_headers INTERFACE cxx_inheriting_constructors cxx_user_literals cxx_right_angle_brackets) if(PYBIND11_INSTALL) - install(DIRECTORY ${PYBIND11_INCLUDE_DIR}/pybind11 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install(DIRECTORY ${pybind11_INCLUDE_DIR}/pybind11 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) set(PYBIND11_CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}" CACHE STRING "install path for pybind11Config.cmake") @@ -259,8 +266,5 @@ endif() if(NOT PYBIND11_MASTER_PROJECT) set(pybind11_FOUND TRUE - CACHE INTERNAL "true if pybind11 and all required components found on the system") - set(pybind11_INCLUDE_DIR - "${PYBIND11_INCLUDE_DIR}" - CACHE INTERNAL "Directory where pybind11 headers are located") + CACHE INTERNAL "True if pybind11 and all required components found on the system") endif() diff --git a/tools/pybind11Common.cmake b/tools/pybind11Common.cmake index d9317d03..3c05c682 100644 --- a/tools/pybind11Common.cmake +++ b/tools/pybind11Common.cmake @@ -36,6 +36,12 @@ if(NOT is_config) set(optional_global GLOBAL) endif() +# If not run in Python mode, we still would like this to at least +# include pybind11's include directory: +set(pybind11_INCLUDE_DIRS + "${pybind11_INCLUDE_DIR}" + CACHE INTERNAL "Include directory for pybind11 (Python not requested)") + # --------------------- Shared targets ---------------------------- # Build an interface library target: diff --git a/tools/pybind11NewTools.cmake b/tools/pybind11NewTools.cmake index bc9fa186..01b66535 100644 --- a/tools/pybind11NewTools.cmake +++ b/tools/pybind11NewTools.cmake @@ -130,6 +130,9 @@ if(DEFINED ${_Python}_INCLUDE_DIRS) TARGET pybind11::pybind11 APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $) + set(pybind11_INCLUDE_DIRS + "${pybind11_INCLUDE_DIR}" "${${_Python}_INCLUDE_DIRS}" + CACHE INTERNAL "Directories where pybind11 and possibly Python headers are located") endif() if(DEFINED ${_Python}_VERSION AND ${_Python}_VERSION VERSION_LESS 3) diff --git a/tools/pybind11Tools.cmake b/tools/pybind11Tools.cmake index f6ee9788..23cff98e 100644 --- a/tools/pybind11Tools.cmake +++ b/tools/pybind11Tools.cmake @@ -87,6 +87,10 @@ set_property( APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $) +set(pybind11_INCLUDE_DIRS + "${pybind11_INCLUDE_DIR}" "${PYTHON_INCLUDE_DIRS}" + CACHE INTERNAL "Directories where pybind11 and possibly Python headers are located") + # Python debug libraries expose slightly different objects before 3.8 # https://docs.python.org/3.6/c-api/intro.html#debugging-builds # https://stackoverflow.com/questions/39161202/how-to-work-around-missing-pymodule-create2-in-amd64-win-python35-d-lib