Skip to content

Commit 0a9b7ef

Browse files
committed
python_extension_module: Add support for module suffix
1 parent b5012f3 commit 0a9b7ef

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

skbuild/resources/cmake/FindPythonExtensions.cmake

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
#
3333
# python_extension_module(<Target>
3434
# [LINKED_MODULES_VAR <LinkedModVar>]
35-
# [FORWARD_DECL_MODULES_VAR <ForwardDeclModVar>])
35+
# [FORWARD_DECL_MODULES_VAR <ForwardDeclModVar>]
36+
# [MODULE_SUFFIX <ModuleSuffix>])
3637
#
3738
# Only extension modules that are configured to be built as MODULE libraries can
3839
# be runtime-loaded through the standard Python import mechanism. All other
@@ -62,6 +63,15 @@
6263
# that use them. By default, the global property
6364
# ``PY_FORWARD_DECL_MODULES_LIST`` is used.
6465
#
66+
# ``MODULE_SUFFIX <ModuleSuffix>``
67+
# Suffix appended to the python extension module file.
68+
# The default suffix is retrieved using ``sysconfig.get_config_var("SO")"``,
69+
# if not available, the default is then ``.so`` on unix and ``.pyd`` on
70+
# windows.
71+
# Setting the variable ``PYTHON_EXTENSION_MODULE_SUFFIX`` in the caller
72+
# scope defines the value used for all extensions not having a suffix
73+
# explicitly specified using ``MODULE_SUFFIX`` parameter.
74+
#
6575
#
6676
# .. cmake:command:: python_standalone_executable
6777
#
@@ -237,6 +247,7 @@ import os
237247
import os.path
238248
import site
239249
import sys
250+
import sysconfig
240251
241252
result = None
242253
rel_result = None
@@ -270,6 +281,7 @@ sys.stdout.write(\";\".join((
270281
sys.prefix,
271282
result,
272283
rel_result,
284+
sysconfig.get_config_var('SO')
273285
)))
274286
")
275287

@@ -297,8 +309,13 @@ list(GET _list 4 _item)
297309
set(PYTHON_RELATIVE_SITE_PACKAGES_DIR "${_item}")
298310
mark_as_advanced(PYTHON_RELATIVE_SITE_PACKAGES_DIR)
299311

312+
if(NOT DEFINED PYTHON_EXTENSION_MODULE_SUFFIX)
313+
list(GET _list 5 _item)
314+
set(PYTHON_EXTENSION_MODULE_SUFFIX "${_item}")
315+
endif()
316+
300317
function(python_extension_module _target)
301-
set(one_ops LINKED_MODULES_VAR FORWARD_DECL_MODULES_VAR)
318+
set(one_ops LINKED_MODULES_VAR FORWARD_DECL_MODULES_VAR MODULE_SUFFIX)
302319
cmake_parse_arguments(_args "" "${one_ops}" "" ${ARGN})
303320

304321
set(_lib_type "NA")
@@ -356,8 +373,20 @@ function(python_extension_module _target)
356373
endif()
357374

358375
if(_is_module_lib OR _is_shared_lib)
359-
if(_is_module_lib AND WIN32 AND NOT CYGWIN)
360-
set_target_properties(${_target} PROPERTIES SUFFIX ".pyd")
376+
if(_is_module_lib)
377+
378+
if(NOT _args_MODULE_SUFFIX)
379+
set(_args_MODULE_SUFFIX "${PYTHON_EXTENSION_MODULE_SUFFIX}")
380+
endif()
381+
382+
if(_args_MODULE_SUFFIX STREQUAL "" AND WIN32 AND NOT CYGWIN)
383+
set(_args_MODULE_SUFFIX ".pyd")
384+
endif()
385+
386+
if(NOT _args_MODULE_SUFFIX STREQUAL "")
387+
set_target_properties(${_target}
388+
PROPERTIES SUFFIX ${_args_MODULE_SUFFIX})
389+
endif()
361390
endif()
362391

363392
target_link_libraries_with_dynamic_lookup(${_target} ${PYTHON_LIBRARIES})

0 commit comments

Comments
 (0)