1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-14 02:08:27 +08:00

UseSWIG: Add POSTFIX management

Fixes: #27185
This commit is contained in:
Marc Chevrier
2025-09-20 16:06:24 +02:00
parent 9f190de849
commit 2d4f3d6a6d
5 changed files with 78 additions and 1 deletions

View File

@@ -0,0 +1,6 @@
UseSWIG-POSTFIX
---------------
* The ``swig_add_library()`` command, from the :module:`UseSWIG` module, gained
the option ``DEBUG_POSTFIX`` for the management of the
:prop_tgt:`DEBUG_POSTFIX` target property.

View File

@@ -35,6 +35,7 @@ The following command is defined for use with ``SWIG``:
[TYPE <SHARED|MODULE|STATIC|USE_BUILD_SHARED_LIBS>] [TYPE <SHARED|MODULE|STATIC|USE_BUILD_SHARED_LIBS>]
LANGUAGE <language> LANGUAGE <language>
[NO_PROXY] [NO_PROXY]
[DEBUG_POSTFIX <postfix>]
[OUTPUT_DIR <directory>] [OUTPUT_DIR <directory>]
[OUTFILE_DIR <directory>] [OUTFILE_DIR <directory>]
SOURCES <file>... SOURCES <file>...
@@ -100,6 +101,16 @@ The following command is defined for use with ``SWIG``:
Prevent the generation of the wrapper layer (swig ``-noproxy`` option). Prevent the generation of the wrapper layer (swig ``-noproxy`` option).
``DEBUG_POSTFIX``
.. versionadded:: 4.2
Manage the :prop_tgt:`DEBUG_POSTFIX` target property. Currently, only
meaningful for the ``python`` language.
If the :prop_gbl:`DEBUG_CONFIGURATIONS` global property is defined, define
the :prop_tgt:`<CONFIG>_POSTFIX` target property for each debug
configuration.
``OUTPUT_DIR`` ``OUTPUT_DIR``
.. versionadded:: 3.12 .. versionadded:: 3.12
@@ -675,7 +686,7 @@ function(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
NOT ("-interface" IN_LIST swig_source_file_flags OR "-interface" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS)) NOT ("-interface" IN_LIST swig_source_file_flags OR "-interface" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS))
# This makes sure that the name used in the proxy code # This makes sure that the name used in the proxy code
# matches the library name created by CMake # matches the library name created by CMake
list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-interface" "$<TARGET_FILE_PREFIX:${target_name}>$<TARGET_FILE_BASE_NAME:${target_name}>") list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-interface" "$<TARGET_FILE_PREFIX:${target_name}>$<TARGET_FILE_BASE_NAME:${target_name},POSTFIX:$<IF:$<AND:$<BOOL:${SWIG_DEBUG_POSTFIX}>,$<CONFIG:${SWIG_DEBUG_CONFIGS}>>,EXCLUDE,INCLUDE>>")
endif() endif()
endif() endif()
list (APPEND swig_extra_flags ${SWIG_MODULE_${name}_EXTRA_FLAGS}) list (APPEND swig_extra_flags ${SWIG_MODULE_${name}_EXTRA_FLAGS})
@@ -787,6 +798,7 @@ function(SWIG_ADD_LIBRARY name)
set(options NO_PROXY) set(options NO_PROXY)
set(oneValueArgs LANGUAGE set(oneValueArgs LANGUAGE
TYPE TYPE
DEBUG_POSTFIX
OUTPUT_DIR OUTPUT_DIR
OUTFILE_DIR) OUTFILE_DIR)
set(multiValueArgs SOURCES) set(multiValueArgs SOURCES)
@@ -810,6 +822,18 @@ function(SWIG_ADD_LIBRARY name)
unset(_SAM_TYPE) unset(_SAM_TYPE)
endif() endif()
if(_SAM_DEBUG_POSTFIX)
get_property(SWIG_DEBUG_CONFIGS GLOBAL PROPERTY DEBUG_CONFIGURATIONS)
if(NOT SWIG_DEBUG_CONFIGS)
set(SWIG_DEBUG_CONFIGS DEBUG)
endif()
string(TOUPPER "${SWIG_DEBUG_CONFIGS}" SWIG_DEBUG_CONFIGS)
set(SWIG_DEBUG_POSTFIX "${_SAM_DEBUG_POSTFIX}")
else()
unset(SWIG_DEBUG_CONFIGS)
unset(SWIG_DEBUG_POSTFIX)
endif()
cmake_policy(GET CMP0078 target_name_policy) cmake_policy(GET CMP0078 target_name_policy)
if (target_name_policy STREQUAL "NEW") if (target_name_policy STREQUAL "NEW")
set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD) set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD)
@@ -1001,6 +1025,11 @@ function(SWIG_ADD_LIBRARY name)
if(WIN32 AND NOT CYGWIN) if(WIN32 AND NOT CYGWIN)
set_target_properties(${target_name} PROPERTIES SUFFIX ".pyd") set_target_properties(${target_name} PROPERTIES SUFFIX ".pyd")
endif() endif()
if(SWIG_DEBUG_POSTFIX)
foreach(config IN LISTS SWIG_DEBUG_CONFIGS)
set_target_properties(${target_name} PROPERTIES ${config}_POSTFIX "${SWIG_DEBUG_POSTFIX}")
endforeach()
endif()
elseif (swig_lowercase_language STREQUAL "r") elseif (swig_lowercase_language STREQUAL "r")
set_target_properties(${target_name} PROPERTIES PREFIX "") set_target_properties(${target_name} PROPERTIES PREFIX "")
elseif (swig_lowercase_language STREQUAL "ruby") elseif (swig_lowercase_language STREQUAL "ruby")

View File

@@ -22,6 +22,13 @@ if (CMake_TEST_FindPython2 OR CMake_TEST_FindPython3)
run_cmake(CMP0086-NEW) run_cmake(CMP0086-NEW)
run_cmake_target(CMP0086-NEW build example) run_cmake_target(CMP0086-NEW build example)
block()
run_cmake(SetPOSTFIX)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SetPOSTFIX-build)
set(RunCMake_TEST_NO_CLEAN 1)
run_cmake_command(SetPOSTFIX-build ${CMAKE_COMMAND} --build . --config $<CONFIG>)
run_cmake_command(SetPOSTFIX-run ${CMAKE_CTEST_COMMAND} -C $<CONFIG> -V)
endblock()
endif() endif()
run_cmake(CMP0122-WARN) run_cmake(CMP0122-WARN)

View File

@@ -0,0 +1,28 @@
enable_language(C)
include(CTest)
cmake_policy(SET CMP0078 NEW)
cmake_policy(SET CMP0086 NEW)
find_package(Python REQUIRED COMPONENTS Interpreter Development)
find_package(SWIG)
include(UseSWIG)
swig_add_library(example LANGUAGE python TYPE MODULE DEBUG_POSTFIX "${Python_DEBUG_POSTFIX}"
SOURCES example.i)
target_link_libraries(example PRIVATE Python::Module)
# Path separator
if (WIN32)
set (PS "$<SEMICOLON>")
else()
set (PS ":")
endif()
add_test (NAME SetPOSTFIX
COMMAND "${CMAKE_COMMAND}" -E env "PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}${PS}$<TARGET_FILE_DIR:example>"
"${Python_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/runme.py")

View File

@@ -0,0 +1,7 @@
# file: runme.py
from __future__ import print_function
import example
print ("Goodbye")