|
32 | 32 | # |
33 | 33 | # python_extension_module(<Target> |
34 | 34 | # [LINKED_MODULES_VAR <LinkedModVar>] |
35 | | -# [FORWARD_DECL_MODULES_VAR <ForwardDeclModVar>]) |
| 35 | +# [FORWARD_DECL_MODULES_VAR <ForwardDeclModVar>] |
| 36 | +# [MODULE_SUFFIX <ModuleSuffix>]) |
36 | 37 | # |
37 | 38 | # Only extension modules that are configured to be built as MODULE libraries can |
38 | 39 | # be runtime-loaded through the standard Python import mechanism. All other |
|
62 | 63 | # that use them. By default, the global property |
63 | 64 | # ``PY_FORWARD_DECL_MODULES_LIST`` is used. |
64 | 65 | # |
| 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 | +# |
65 | 75 | # |
66 | 76 | # .. cmake:command:: python_standalone_executable |
67 | 77 | # |
@@ -237,6 +247,7 @@ import os |
237 | 247 | import os.path |
238 | 248 | import site |
239 | 249 | import sys |
| 250 | +import sysconfig |
240 | 251 |
|
241 | 252 | result = None |
242 | 253 | rel_result = None |
@@ -270,6 +281,7 @@ sys.stdout.write(\";\".join(( |
270 | 281 | sys.prefix, |
271 | 282 | result, |
272 | 283 | rel_result, |
| 284 | + sysconfig.get_config_var('SO') |
273 | 285 | ))) |
274 | 286 | ") |
275 | 287 |
|
@@ -297,8 +309,13 @@ list(GET _list 4 _item) |
297 | 309 | set(PYTHON_RELATIVE_SITE_PACKAGES_DIR "${_item}") |
298 | 310 | mark_as_advanced(PYTHON_RELATIVE_SITE_PACKAGES_DIR) |
299 | 311 |
|
| 312 | +if(NOT DEFINED PYTHON_EXTENSION_MODULE_SUFFIX) |
| 313 | + list(GET _list 5 _item) |
| 314 | + set(PYTHON_EXTENSION_MODULE_SUFFIX "${_item}") |
| 315 | +endif() |
| 316 | + |
300 | 317 | 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) |
302 | 319 | cmake_parse_arguments(_args "" "${one_ops}" "" ${ARGN}) |
303 | 320 |
|
304 | 321 | set(_lib_type "NA") |
@@ -356,8 +373,20 @@ function(python_extension_module _target) |
356 | 373 | endif() |
357 | 374 |
|
358 | 375 | 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() |
361 | 390 | endif() |
362 | 391 |
|
363 | 392 | target_link_libraries_with_dynamic_lookup(${_target} ${PYTHON_LIBRARIES}) |
|
0 commit comments