@@ -71,8 +71,17 @@ if(PYBIND11_MASTER_PROJECT)
71
71
endif ()
72
72
73
73
# 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)
76
85
77
86
# Python debug libraries expose slightly different objects before 3.8
78
87
# https://docs.python.org/3.6/c-api/intro.html#debugging-builds
@@ -121,8 +130,11 @@ else()
121
130
PROPERTY INTERFACE_LINK_LIBRARIES pybind11::python_link_helper)
122
131
endif ()
123
132
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.
124
135
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
+ "" "" )
126
138
127
139
if (ARG_ADD_LIBRARY_STATIC)
128
140
set (type STATIC )
@@ -133,11 +145,11 @@ function(pybind11_add_module target_name)
133
145
endif ()
134
146
135
147
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} )
137
149
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} )
139
151
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} )
141
153
else ()
142
154
message (FATAL_ERROR "Cannot detect FindPython version: ${_Python} " )
143
155
endif ()
@@ -161,6 +173,11 @@ function(pybind11_add_module target_name)
161
173
set_target_properties (${target_name} PROPERTIES CXX_VISIBILITY_PRESET "hidden"
162
174
CUDA_VISIBILITY_PRESET "hidden" )
163
175
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
+
164
181
if (ARG_NO_EXTRAS)
165
182
return ()
166
183
endif ()
@@ -184,20 +201,7 @@ function(pybind11_add_module target_name)
184
201
endfunction ()
185
202
186
203
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} " )
192
206
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 ()
203
207
endfunction ()
0 commit comments