mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-23 07:28:51 -06:00
UseSWIG: Manage alternate library name
Manage alternate library name by passing -interface <library_name> for python language or -dllimport <library_name> for CSharp language to the SWIG compiler. Fixes: #18771
This commit is contained in:
7
Help/release/dev/UseSWIG-alternate-library-name.rst
Normal file
7
Help/release/dev/UseSWIG-alternate-library-name.rst
Normal file
@@ -0,0 +1,7 @@
|
||||
UseSWIG-alternate-library-name
|
||||
------------------------------
|
||||
|
||||
* The :module:`UseSWIG` module learned to manage alternate library names by
|
||||
passing ``-interface <library_name>`` for ``python`` language or
|
||||
``-dllimport <library_name>`` for ``CSharp`` language to the ``SWIG``
|
||||
compiler.
|
||||
@@ -466,7 +466,14 @@ function(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
|
||||
if(NOT ("-dllimport" IN_LIST swig_source_file_flags OR "-dllimport" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS))
|
||||
# This makes sure that the name used in the generated DllImport
|
||||
# matches the library name created by CMake
|
||||
list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-dllimport" "${name}")
|
||||
list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-dllimport" "$<TARGET_FILE_PREFIX:${target_name}>$<TARGET_FILE_BASE_NAME:${target_name}>")
|
||||
endif()
|
||||
endif()
|
||||
if (SWIG_MODULE_${name}_LANGUAGE STREQUAL "PYTHON" AND NOT SWIG_MODULE_${name}_NOPROXY)
|
||||
if(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
|
||||
# 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}>")
|
||||
endif()
|
||||
endif()
|
||||
list (APPEND swig_extra_flags ${SWIG_MODULE_${name}_EXTRA_FLAGS})
|
||||
|
||||
35
Tests/UseSWIG/AlternateLibraryName/CMakeLists.txt
Normal file
35
Tests/UseSWIG/AlternateLibraryName/CMakeLists.txt
Normal file
@@ -0,0 +1,35 @@
|
||||
cmake_minimum_required(VERSION 3.14...3.15)
|
||||
|
||||
project(TestAlternateLibraryName CXX)
|
||||
|
||||
include(CTest)
|
||||
|
||||
find_package(SWIG REQUIRED)
|
||||
include(${SWIG_USE_FILE})
|
||||
|
||||
find_package(Python2 REQUIRED COMPONENTS Interpreter Development)
|
||||
|
||||
# Path separator
|
||||
if (WIN32)
|
||||
set (PS "$<SEMICOLON>")
|
||||
else()
|
||||
set (PS ":")
|
||||
endif()
|
||||
|
||||
unset(CMAKE_SWIG_FLAGS)
|
||||
|
||||
set_property(SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../example.i" PROPERTY CPLUSPLUS ON)
|
||||
set_property(SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../example.i" PROPERTY COMPILE_OPTIONS -includeall)
|
||||
|
||||
swig_add_library(example_python
|
||||
LANGUAGE python
|
||||
SOURCES ../example.i ../example.cxx)
|
||||
set_target_properties (example_python PROPERTIES
|
||||
INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/.."
|
||||
SWIG_USE_TARGET_INCLUDE_DIRECTORIES TRUE)
|
||||
target_link_libraries(example_python PRIVATE Python2::Python)
|
||||
|
||||
|
||||
add_test (NAME AlternateLibraryName.example1
|
||||
COMMAND "${CMAKE_COMMAND}" -E env "PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}${PS}$<TARGET_FILE_DIR:example_python>"
|
||||
"${Python2_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/../runme.py")
|
||||
@@ -123,3 +123,15 @@ add_test(NAME UseSWIG.SwigSrcFileExtension COMMAND
|
||||
--build-options ${build_options}
|
||||
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
|
||||
)
|
||||
|
||||
|
||||
add_test(NAME UseSWIG.AlternateLibraryName COMMAND
|
||||
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
|
||||
--build-and-test
|
||||
"${CMake_SOURCE_DIR}/Tests/UseSWIG/AlternateLibraryName"
|
||||
"${CMake_BINARY_DIR}/Tests/UseSWIG/AlternateLibraryName"
|
||||
${build_generator_args}
|
||||
--build-project TestAlternateLibraryName
|
||||
--build-options ${build_options}
|
||||
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user