Skip to content

Commit 1d62aa0

Browse files
committed
fix: use classic extension handling unless otherwise requested
1 parent 72b06b8 commit 1d62aa0

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

tools/pybind11NewTools.cmake

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,17 @@ if(PYBIND11_MASTER_PROJECT)
7171
endif()
7272

7373
# Debug check - see https://stackoverflow.com/questions/646518/python-how-to-detect-debug-Interpreter
74-
execute_process(COMMAND ${_Python}::Python -c "import sys; print(hasattr(sys, 'gettotalrefcount'))"
75-
OUTPUT_VARIABLE PYTHON_IS_DEBUG)
74+
execute_process(
75+
COMMAND "${${_Python}_EXECUTABLE}" "-c" "import sys; sys.exit(hasattr(sys, 'gettotalrefcount'))"
76+
RESULT_VARIABLE PYTHON_IS_DEBUG)
77+
78+
# Get the suffix - SO is deprecated, should use EXT_SUFFIX, but this is
79+
# required for PyPy3 (as of 7.3.1)
80+
execute_process(
81+
COMMAND "${${_Python}_EXECUTABLE}" "-c"
82+
"from distutils import sysconfig; print(sysconfig.get_config_var('SO'))"
83+
OUTPUT_VARIABLE PYTHON_MODULE_EXTENSION
84+
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
7685

7786
# Python debug libraries expose slightly different objects before 3.8
7887
# https://docs.python.org/3.6/c-api/intro.html#debugging-builds
@@ -121,8 +130,11 @@ else()
121130
PROPERTY INTERFACE_LINK_LIBRARIES pybind11::python_link_helper)
122131
endif()
123132

133+
# WITHOUT_SOABI and WITH_SOABI will disable the custom extension handling used by pybind11.
134+
# WITH_SOABI is passed on to python_add_library.
124135
function(pybind11_add_module target_name)
125-
cmake_parse_arguments(PARSE_ARGV 1 ARG "STATIC;SHARED;MODULE;THIN_LTO;NO_EXTRAS" "" "")
136+
cmake_parse_arguments(PARSE_ARGV 1 ARG "STATIC;SHARED;MODULE;THIN_LTO;NO_EXTRAS;WITHOUT_SOABI"
137+
"" "")
126138

127139
if(ARG_ADD_LIBRARY_STATIC)
128140
set(type STATIC)
@@ -133,11 +145,11 @@ function(pybind11_add_module target_name)
133145
endif()
134146

135147
if("${_Python}" STREQUAL "Python")
136-
python_add_library(${target_name} ${type} WITH_SOABI ${ARG_UNPARSED_ARGUMENTS})
148+
python_add_library(${target_name} ${type} ${ARG_UNPARSED_ARGUMENTS})
137149
elseif("${_Python}" STREQUAL "Python3")
138-
python3_add_library(${target_name} ${type} WITH_SOABI ${ARG_UNPARSED_ARGUMENTS})
150+
python3_add_library(${target_name} ${type} ${ARG_UNPARSED_ARGUMENTS})
139151
elseif("${_Python}" STREQUAL "Python2")
140-
python2_add_library(${target_name} ${type} WITH_SOABI ${ARG_UNPARSED_ARGUMENTS})
152+
python2_add_library(${target_name} ${type} ${ARG_UNPARSED_ARGUMENTS})
141153
else()
142154
message(FATAL_ERROR "Cannot detect FindPython version: ${_Python}")
143155
endif()
@@ -161,6 +173,11 @@ function(pybind11_add_module target_name)
161173
set_target_properties(${target_name} PROPERTIES CXX_VISIBILITY_PRESET "hidden"
162174
CUDA_VISIBILITY_PRESET "hidden")
163175

176+
# If we don't pass a WITH_SOABI or WITHOUT_SOABI, use our own default handling of extensions
177+
if(NOT ARG_WITHOUT_SOABI OR "WITH_SOABI" IN_LIST ARG_UNPARSED_ARGUMENTS)
178+
pybind11_extension(${target_name})
179+
endif()
180+
164181
if(ARG_NO_EXTRAS)
165182
return()
166183
endif()
@@ -184,20 +201,7 @@ function(pybind11_add_module target_name)
184201
endfunction()
185202

186203
function(pybind11_extension name)
187-
set_property(TARGET ${name} PROPERTY PREFIX "")
188-
189-
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
190-
set_property(TARGET ${name} PROPERTY SUFFIX ".pyd")
191-
endif()
204+
# The extension is precomputed
205+
set_target_properties(${name} PROPERTIES PREFIX "" SUFFIX "${PYTHON_MODULE_EXTENSION}")
192206

193-
if(${_Python}_SOABI)
194-
get_property(
195-
suffix
196-
TARGET ${name}
197-
PROPERTY SUFFIX)
198-
if(NOT suffix)
199-
set(suffix "${CMAKE_SHARED_MODULE_SUFFIX}")
200-
endif()
201-
set_property(TARGET ${name} PROPERTY SUFFIX ".${${_Python}_SOABI}${suffix}")
202-
endif()
203207
endfunction()

0 commit comments

Comments
 (0)