From a3a0c3aa71498f76cc0e9655038de7bbb5430a03 Mon Sep 17 00:00:00 2001 From: Marc Chevrier Date: Mon, 23 Jul 2018 10:38:08 +0200 Subject: UseSWIG: add policy to manage target naming strategy. --- Help/manual/cmake-policies.7.rst | 1 + Help/policy/CMP0078.rst | 22 ++++++++++++ Help/release/dev/UseSWIG-target-name-policy.rst | 5 +++ Modules/UseSWIG.cmake | 41 ++++++++++++++-------- Source/cmPolicies.h | 4 ++- Tests/RunCMake/CMakeLists.txt | 3 ++ Tests/RunCMake/UseSWIG/CMP0078-NEW-stdout.txt | 2 ++ Tests/RunCMake/UseSWIG/CMP0078-NEW.cmake | 2 ++ Tests/RunCMake/UseSWIG/CMP0078-OLD-stdout.txt | 2 ++ Tests/RunCMake/UseSWIG/CMP0078-OLD.cmake | 2 ++ Tests/RunCMake/UseSWIG/CMP0078-WARN-stderr.txt | 9 +++++ Tests/RunCMake/UseSWIG/CMP0078-WARN-stdout.txt | 2 ++ Tests/RunCMake/UseSWIG/CMP0078-WARN.cmake | 1 + Tests/RunCMake/UseSWIG/CMP0078-common.cmake | 10 ++++++ Tests/RunCMake/UseSWIG/CMakeLists.txt | 3 ++ Tests/RunCMake/UseSWIG/RunCMakeTest.cmake | 5 +++ Tests/RunCMake/UseSWIG/example.i | 2 ++ Tests/UseSWIG/BasicConfiguration.cmake | 1 - Tests/UseSWIG/BasicCsharp/CMakeLists.txt | 2 +- Tests/UseSWIG/BasicPerl/CMakeLists.txt | 2 +- Tests/UseSWIG/BasicPython/CMakeLists.txt | 2 +- Tests/UseSWIG/ModuleVersion2/CMakeLists.txt | 3 +- Tests/UseSWIG/MultipleModules/CMakeLists.txt | 3 +- Tests/UseSWIG/MultiplePython/CMakeLists.txt | 3 +- .../UseTargetINCLUDE_DIRECTORIES/CMakeLists.txt | 3 +- 25 files changed, 107 insertions(+), 28 deletions(-) create mode 100644 Help/policy/CMP0078.rst create mode 100644 Help/release/dev/UseSWIG-target-name-policy.rst create mode 100644 Tests/RunCMake/UseSWIG/CMP0078-NEW-stdout.txt create mode 100644 Tests/RunCMake/UseSWIG/CMP0078-NEW.cmake create mode 100644 Tests/RunCMake/UseSWIG/CMP0078-OLD-stdout.txt create mode 100644 Tests/RunCMake/UseSWIG/CMP0078-OLD.cmake create mode 100644 Tests/RunCMake/UseSWIG/CMP0078-WARN-stderr.txt create mode 100644 Tests/RunCMake/UseSWIG/CMP0078-WARN-stdout.txt create mode 100644 Tests/RunCMake/UseSWIG/CMP0078-WARN.cmake create mode 100644 Tests/RunCMake/UseSWIG/CMP0078-common.cmake create mode 100644 Tests/RunCMake/UseSWIG/CMakeLists.txt create mode 100644 Tests/RunCMake/UseSWIG/RunCMakeTest.cmake create mode 100644 Tests/RunCMake/UseSWIG/example.i diff --git a/Help/manual/cmake-policies.7.rst b/Help/manual/cmake-policies.7.rst index b2eeb3a8a1..32a0118687 100644 --- a/Help/manual/cmake-policies.7.rst +++ b/Help/manual/cmake-policies.7.rst @@ -57,6 +57,7 @@ Policies Introduced by CMake 3.13 .. toctree:: :maxdepth: 1 + CMP0078: UseSWIG generates standard target names. CMP0077: option() honors normal variables. CMP0076: target_sources() command converts relative paths to absolute. diff --git a/Help/policy/CMP0078.rst b/Help/policy/CMP0078.rst new file mode 100644 index 0000000000..54cdc9cc7f --- /dev/null +++ b/Help/policy/CMP0078.rst @@ -0,0 +1,22 @@ +CMP0078 +------- + +Starting with CMake 3.13, :module:`UseSWIG` generates now standard target +names. This policy provides compatibility with projects that expect the legacy +behavior. + +The ``OLD`` behavior for this policy relies on +``UseSWIG_TARGET_NAME_PREFERENCE`` variable that can be used to specify an +explicit preference. The value may be one of: + +* ``LEGACY``: legacy strategy is applied. Variable + ``SWIG_MODULE__REAL_NAME`` must be used to get real target name. + This is the default if not specified. +* ``STANDARD``: target name matches specified name. + +This policy was introduced in CMake version 3.13. CMake version +|release| warns when the policy is not set and uses ``OLD`` behavior. +Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` +explicitly. + +.. include:: DEPRECATED.txt diff --git a/Help/release/dev/UseSWIG-target-name-policy.rst b/Help/release/dev/UseSWIG-target-name-policy.rst new file mode 100644 index 0000000000..bb9011d777 --- /dev/null +++ b/Help/release/dev/UseSWIG-target-name-policy.rst @@ -0,0 +1,5 @@ +UseSWIG-target-name-policy +-------------------------- + +* The :module:`UseSWIG` module has changed strategy for target naming. + See policy :policy:`CMP0078`. diff --git a/Modules/UseSWIG.cmake b/Modules/UseSWIG.cmake index 7460932885..e7aaf32eef 100644 --- a/Modules/UseSWIG.cmake +++ b/Modules/UseSWIG.cmake @@ -30,9 +30,10 @@ Defines the following command for use with ``SWIG``: .. note:: - The variable ``SWIG_MODULE__REAL_NAME`` will be set to the name - of the swig module target library. This variable is useless if variable - ``UseSWIG_TARGET_NAME_PREFERENCE`` is set to ``STANDARD``. + This command creates a target with the specified ```` when + policy :policy:`CMP0078` is set to ``NEW``. Otherwise, the legacy + behavior will choose a different target name and store it in the + ``SWIG_MODULE__REAL_NAME`` variable. .. note:: @@ -197,13 +198,6 @@ information about support files generated by ``SWIG`` interface compilation. Some variables can be set to customize the behavior of ``swig_add_library`` as well as ``SWIG``: -``UseSWIG_TARGET_NAME_PREFERENCE`` - Specify target name strategy. - - * Set to ``LEGACY`` or undefined: legacy strategy is applied. Variable - ``SWIG_MODULE__REAL_NAME`` must be used to get real target name. - * Set to ``STANDARD``: target name matches specified name. - ``UseSWIG_MODULE_VERSION`` Specify different behaviors for ``UseSWIG`` module. @@ -225,8 +219,13 @@ as well as ``SWIG``: Specify extra dependencies for the generated module for ````. #]=======================================================================] - +cmake_policy(GET CMP0078 target_name_policy) cmake_policy (VERSION 3.12) +if (target_name_policy) + # respect user choice regarding CMP0078 policy + cmake_policy(SET CMP0078 ${target_name_policy}) +endif() +unset(target_name_policy) set(SWIG_CXX_EXTENSION "cxx") set(SWIG_EXTRA_LIBRARIES "") @@ -545,10 +544,22 @@ function(SWIG_ADD_LIBRARY name) unset(_SAM_TYPE) endif() - if (NOT DEFINED UseSWIG_TARGET_NAME_PREFERENCE) - set (UseSWIG_TARGET_NAME_PREFERENCE LEGACY) - elseif (NOT UseSWIG_TARGET_NAME_PREFERENCE MATCHES "^(LEGACY|STANDARD)$") - message (FATAL_ERROR "UseSWIG_TARGET_NAME_PREFERENCE: ${UseSWIG_TARGET_NAME_PREFERENCE}: invalid value. 'LEGACY' or 'STANDARD' is expected.") + cmake_policy(GET CMP0078 target_name_policy) + if (target_name_policy STREQUAL "NEW") + set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD) + else() + if (NOT target_name_policy) + message(AUTHOR_WARNING + "Policy CMP0078 is not set. " + "Run \"cmake --help-policy CMP0078\" for policy details. " + "Use the cmake_policy command to set the policy and suppress this warning." + ) + endif() + if (NOT DEFINED UseSWIG_TARGET_NAME_PREFERENCE) + set (UseSWIG_TARGET_NAME_PREFERENCE LEGACY) + elseif (NOT UseSWIG_TARGET_NAME_PREFERENCE MATCHES "^(LEGACY|STANDARD)$") + message (FATAL_ERROR "UseSWIG_TARGET_NAME_PREFERENCE: ${UseSWIG_TARGET_NAME_PREFERENCE}: invalid value. 'LEGACY' or 'STANDARD' is expected.") + endif() endif() if (NOT DEFINED UseSWIG_MODULE_VERSION) diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h index d6f7c54b91..91ed924ff4 100644 --- a/Source/cmPolicies.h +++ b/Source/cmPolicies.h @@ -228,7 +228,9 @@ class cmMakefile; "target_sources() command converts relative paths to absolute.", 3, \ 13, 0, cmPolicies::WARN) \ SELECT(POLICY, CMP0077, "option() honors normal variables.", 3, 13, 0, \ - cmPolicies::WARN) + cmPolicies::WARN) \ + SELECT(POLICY, CMP0078, "UseSWIG generates standard target names.", 3, 13, \ + 0, cmPolicies::WARN) #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1) #define CM_FOR_EACH_POLICY_ID(POLICY) \ diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index c030cda8a0..c6c90d0300 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -154,6 +154,9 @@ add_RunCMake_test(FPHSA) add_RunCMake_test(FindBoost) add_RunCMake_test(FindLua) add_RunCMake_test(FindOpenGL) +if(CMake_TEST_UseSWIG) + add_RunCMake_test(UseSWIG) +endif() if(NOT CMAKE_C_COMPILER_ID MATCHES "Watcom") add_RunCMake_test(GenerateExportHeader) endif() diff --git a/Tests/RunCMake/UseSWIG/CMP0078-NEW-stdout.txt b/Tests/RunCMake/UseSWIG/CMP0078-NEW-stdout.txt new file mode 100644 index 0000000000..d4fa6e4b8a --- /dev/null +++ b/Tests/RunCMake/UseSWIG/CMP0078-NEW-stdout.txt @@ -0,0 +1,2 @@ +-- PREFIX='_' +-- TARGET NAME='example' diff --git a/Tests/RunCMake/UseSWIG/CMP0078-NEW.cmake b/Tests/RunCMake/UseSWIG/CMP0078-NEW.cmake new file mode 100644 index 0000000000..ce77218c8f --- /dev/null +++ b/Tests/RunCMake/UseSWIG/CMP0078-NEW.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0078 NEW) +include(CMP0078-common.cmake) diff --git a/Tests/RunCMake/UseSWIG/CMP0078-OLD-stdout.txt b/Tests/RunCMake/UseSWIG/CMP0078-OLD-stdout.txt new file mode 100644 index 0000000000..62f5371e1a --- /dev/null +++ b/Tests/RunCMake/UseSWIG/CMP0078-OLD-stdout.txt @@ -0,0 +1,2 @@ +-- PREFIX='' +-- TARGET NAME='_example' diff --git a/Tests/RunCMake/UseSWIG/CMP0078-OLD.cmake b/Tests/RunCMake/UseSWIG/CMP0078-OLD.cmake new file mode 100644 index 0000000000..2c4d142d5c --- /dev/null +++ b/Tests/RunCMake/UseSWIG/CMP0078-OLD.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0078 OLD) +include(CMP0078-common.cmake) diff --git a/Tests/RunCMake/UseSWIG/CMP0078-WARN-stderr.txt b/Tests/RunCMake/UseSWIG/CMP0078-WARN-stderr.txt new file mode 100644 index 0000000000..bc8da4c290 --- /dev/null +++ b/Tests/RunCMake/UseSWIG/CMP0078-WARN-stderr.txt @@ -0,0 +1,9 @@ +CMake Warning \(dev\) at .*/Modules/UseSWIG.cmake:[0-9]+ \(message\): + Policy CMP0078 is not set. Run "cmake --help-policy CMP0078" for policy + details. Use the cmake_policy command to set the policy and suppress this + warning. +Call Stack \(most recent call first\): + CMP0078-common.cmake:6 \(swig_add_library\) + CMP0078-WARN.cmake:1 \(include\) + CMakeLists.txt:3 \(include\) +This warning is for project developers. Use -Wno-dev to suppress it.$ diff --git a/Tests/RunCMake/UseSWIG/CMP0078-WARN-stdout.txt b/Tests/RunCMake/UseSWIG/CMP0078-WARN-stdout.txt new file mode 100644 index 0000000000..62f5371e1a --- /dev/null +++ b/Tests/RunCMake/UseSWIG/CMP0078-WARN-stdout.txt @@ -0,0 +1,2 @@ +-- PREFIX='' +-- TARGET NAME='_example' diff --git a/Tests/RunCMake/UseSWIG/CMP0078-WARN.cmake b/Tests/RunCMake/UseSWIG/CMP0078-WARN.cmake new file mode 100644 index 0000000000..86b21a5859 --- /dev/null +++ b/Tests/RunCMake/UseSWIG/CMP0078-WARN.cmake @@ -0,0 +1 @@ +include(CMP0078-common.cmake) diff --git a/Tests/RunCMake/UseSWIG/CMP0078-common.cmake b/Tests/RunCMake/UseSWIG/CMP0078-common.cmake new file mode 100644 index 0000000000..6cf39dcf86 --- /dev/null +++ b/Tests/RunCMake/UseSWIG/CMP0078-common.cmake @@ -0,0 +1,10 @@ + +set(SWIG_EXECUTABLE "swig") +set(SWIG_DIR "/swig") +include(UseSWIG) + +swig_add_library(example LANGUAGE python TYPE MODULE SOURCES example.i) + +get_property(prefix TARGET ${SWIG_MODULE_example_REAL_NAME} PROPERTY PREFIX) +message(STATUS "PREFIX='${prefix}'") +message(STATUS "TARGET NAME='${SWIG_MODULE_example_REAL_NAME}'") diff --git a/Tests/RunCMake/UseSWIG/CMakeLists.txt b/Tests/RunCMake/UseSWIG/CMakeLists.txt new file mode 100644 index 0000000000..d1b0d2c3e8 --- /dev/null +++ b/Tests/RunCMake/UseSWIG/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.10) +project(${RunCMake_TEST} C) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/UseSWIG/RunCMakeTest.cmake b/Tests/RunCMake/UseSWIG/RunCMakeTest.cmake new file mode 100644 index 0000000000..b96622ae32 --- /dev/null +++ b/Tests/RunCMake/UseSWIG/RunCMakeTest.cmake @@ -0,0 +1,5 @@ +include(RunCMake) + +run_cmake(CMP0078-WARN) +run_cmake(CMP0078-OLD) +run_cmake(CMP0078-NEW) diff --git a/Tests/RunCMake/UseSWIG/example.i b/Tests/RunCMake/UseSWIG/example.i new file mode 100644 index 0000000000..86625aa3a2 --- /dev/null +++ b/Tests/RunCMake/UseSWIG/example.i @@ -0,0 +1,2 @@ +/* File : example.i */ +%module example diff --git a/Tests/UseSWIG/BasicConfiguration.cmake b/Tests/UseSWIG/BasicConfiguration.cmake index ad34d39093..fd3ac4031d 100644 --- a/Tests/UseSWIG/BasicConfiguration.cmake +++ b/Tests/UseSWIG/BasicConfiguration.cmake @@ -58,7 +58,6 @@ if(${language} MATCHES lua) set(SWIG_LANG_LIBRARIES ${LUA_LIBRARIES}) endif() -set(UseSWIG_TARGET_NAME_PREFERENCE STANDARD) unset(CMAKE_SWIG_FLAGS) set (CMAKE_INCLUDE_CURRENT_DIR ON) diff --git a/Tests/UseSWIG/BasicCsharp/CMakeLists.txt b/Tests/UseSWIG/BasicCsharp/CMakeLists.txt index 84743efa03..1a6c763b56 100644 --- a/Tests/UseSWIG/BasicCsharp/CMakeLists.txt +++ b/Tests/UseSWIG/BasicCsharp/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.12) +cmake_minimum_required(VERSION 3.12...3.13) project(TestBasicCsharp CXX CSharp) diff --git a/Tests/UseSWIG/BasicPerl/CMakeLists.txt b/Tests/UseSWIG/BasicPerl/CMakeLists.txt index 476ef0e9a5..cf02de7de6 100644 --- a/Tests/UseSWIG/BasicPerl/CMakeLists.txt +++ b/Tests/UseSWIG/BasicPerl/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.1...3.13) project(TestBasicPerl CXX) diff --git a/Tests/UseSWIG/BasicPython/CMakeLists.txt b/Tests/UseSWIG/BasicPython/CMakeLists.txt index cf1d8213c7..8bbd1cbe83 100644 --- a/Tests/UseSWIG/BasicPython/CMakeLists.txt +++ b/Tests/UseSWIG/BasicPython/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.1...3.13) project(TestBasicPython CXX) diff --git a/Tests/UseSWIG/ModuleVersion2/CMakeLists.txt b/Tests/UseSWIG/ModuleVersion2/CMakeLists.txt index 452f9e2738..a7ee2106ba 100644 --- a/Tests/UseSWIG/ModuleVersion2/CMakeLists.txt +++ b/Tests/UseSWIG/ModuleVersion2/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.1...3.13) project(TestModuleVersion2 CXX) @@ -16,7 +16,6 @@ else() set (PS ":") endif() -set(UseSWIG_TARGET_NAME_PREFERENCE STANDARD) set (UseSWIG_MODULE_VERSION 2) unset(CMAKE_SWIG_FLAGS) diff --git a/Tests/UseSWIG/MultipleModules/CMakeLists.txt b/Tests/UseSWIG/MultipleModules/CMakeLists.txt index 25dd6b317d..f1dc379c56 100644 --- a/Tests/UseSWIG/MultipleModules/CMakeLists.txt +++ b/Tests/UseSWIG/MultipleModules/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.1...3.13) project(TestMultipleModules CXX) @@ -19,7 +19,6 @@ else() set (PS ":") endif() -set(UseSWIG_TARGET_NAME_PREFERENCE STANDARD) unset(CMAKE_SWIG_FLAGS) set_property(SOURCE "../example.i" PROPERTY CPLUSPLUS ON) diff --git a/Tests/UseSWIG/MultiplePython/CMakeLists.txt b/Tests/UseSWIG/MultiplePython/CMakeLists.txt index a1651fbfef..8f87755766 100644 --- a/Tests/UseSWIG/MultiplePython/CMakeLists.txt +++ b/Tests/UseSWIG/MultiplePython/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.1...3.13) project(TestMultiplePython CXX) @@ -17,7 +17,6 @@ else() set (PS ":") endif() -set(UseSWIG_TARGET_NAME_PREFERENCE STANDARD) unset(CMAKE_SWIG_FLAGS) set_property(SOURCE "../example.i" PROPERTY CPLUSPLUS ON) diff --git a/Tests/UseSWIG/UseTargetINCLUDE_DIRECTORIES/CMakeLists.txt b/Tests/UseSWIG/UseTargetINCLUDE_DIRECTORIES/CMakeLists.txt index d0855bfb88..fbb72d5715 100644 --- a/Tests/UseSWIG/UseTargetINCLUDE_DIRECTORIES/CMakeLists.txt +++ b/Tests/UseSWIG/UseTargetINCLUDE_DIRECTORIES/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.1...3.13) project(TestUseTargetINCLUDE_DIRECTORIES CXX) @@ -9,7 +9,6 @@ include(${SWIG_USE_FILE}) find_package(Python3 REQUIRED COMPONENTS Interpreter Development) -set(UseSWIG_TARGET_NAME_PREFERENCE STANDARD) unset(CMAKE_SWIG_FLAGS) set_property(SOURCE "example.i" PROPERTY CPLUSPLUS ON) -- cgit v1.2.1