Skip to content

Commit

Permalink
feat: FindPython by default
Browse files Browse the repository at this point in the history
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
  • Loading branch information
henryiii committed Mar 6, 2025
1 parent 79be5c8 commit 08b391b
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 6 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,17 @@ jobs:
- runs-on: ubuntu-20.04
python: '3.8'
args: >
-DPYBIND11_FINDPYTHON=ON
-DPYBIND11_FINDPYTHON=OFF
-DCMAKE_CXX_FLAGS="-D_=1"
exercise_D_: 1
- runs-on: ubuntu-20.04
python: 'pypy-3.8'
args: >
-DPYBIND11_FINDPYTHON=ON
-DPYBIND11_FINDPYTHON=OFF
- runs-on: windows-2019
python: '3.8'
args: >
-DPYBIND11_FINDPYTHON=ON
-DPYBIND11_FINDPYTHON=OFF
# Inject a couple Windows 2019 runs
- runs-on: windows-2019
python: '3.9'
Expand Down
6 changes: 4 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
else()
set(PYBIND11_MASTER_PROJECT OFF)
set(pybind11_system SYSTEM)
set(_pybind11_findpython_default OFF)
set(_pybind11_findpython_default COMPAT)
endif()

# Options
Expand Down Expand Up @@ -114,7 +114,9 @@ cmake_dependent_option(
"Install pybind11 headers in Python include directory instead of default installation prefix"
OFF "PYBIND11_INSTALL" OFF)

option(PYBIND11_FINDPYTHON "Force new FindPython" ${_pybind11_findpython_default})
set(PYBIND11_FINDPYTHON
${_pybind11_findpython_default}
CACHE STRING "Force new FindPython - NEW, OLD, COMPAT")

# Allow PYTHON_EXECUTABLE if in FINDPYTHON mode and building pybind11's tests
# (makes transition easier while we support both modes).
Expand Down
20 changes: 19 additions & 1 deletion tools/pybind11Common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,25 @@ elseif(
))

# New mode
include("${CMAKE_CURRENT_LIST_DIR}/pybind11NewTools.cmake")
if(Python_FOUND OR Python3_FOUND)
include("${CMAKE_CURRENT_LIST_DIR}/pybind11NewTools.cmake")
else()
include("${CMAKE_CURRENT_LIST_DIR}/pybind11NewTools.cmake")

message(
"Using compatibility mode for Python, set PYBIND11_FINDPYTHON to NEW/OLD to silence this message"
)
set(PYTHON_EXECUTABLE "${Python_EXECUTABLE}")
set(PYTHON_INCLUDE_DIR "${Python_INCLUDE_DIR}")
set(Python_INCLUDE_DIRS "${Python_INCLUDE_DIRS}")
set(PYTHON_LIBRARY "${Python_LIRARY}")
set(PYTHON_LIBRARIES "${Python_LIRARIES}")
set(PYTHON_VERSION "${Python_VERSION}")
set(PYTHON_VERSION_STRING "${Python_VERSION_STRING}")
set(PYTHON_VERSION_MAJOR "${Python_VERSION_MAJOR}")
set(PYTHON_VERSION_MINOR "${Python_VERSION_MINOR}")
set(PYTHON_VERSION_PATCH "${Python_VERSION_PATCH}")
endif()

else()

Expand Down
7 changes: 7 additions & 0 deletions tools/pybind11Config.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,13 @@ from 3.12+ forward (3.15+ _highly_ recommended). If you set the minimum or
maximum version of CMake to 3.27+, then FindPython is the default (since
FindPythonInterp/FindPythonLibs has been removed via policy `CMP0148`).
Starting in pybind11 3.0, the new mode is the default, but we provide backward
compatible names (`PYTHON_*` vs. the new `Python_* names). Set the mode
explicitly to avoid the compatibility defines. You can specify this mode
explicitly by setting `PYBIND11_FINDPYTHON` to `COMPAT`, but if you are changing
your CMakeLists anyway, please just use the `ON` mode. A future release may
default on `ON`.
New FindPython mode
^^^^^^^^^^^^^^^^^^^
Expand Down

0 comments on commit 08b391b

Please sign in to comment.