From c903b5319bfcf383964c625bb84d7bc958aba2e9 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sat, 15 Mar 2014 09:18:39 +0100 Subject: cmTarget: Restore _LOCATION to CMP0026 OLD behavior (#14808) Restore support for the undocumented _LOCATION target property removed by commit v3.0.0-rc1~175^2 (cmTarget: Remove support for _LOCATION property, 2013-12-30) as part of the CMP0026 OLD behavior. --- Help/policy/CMP0026.rst | 7 ++++--- Source/cmTarget.cxx | 15 +++++++++++++++ .../CMP0026/CMP0026-CONFIG-LOCATION-NEW-result.txt | 1 + .../CMP0026/CMP0026-CONFIG-LOCATION-NEW-stderr.txt | 11 +++++++++++ Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW.cmake | 7 +++++++ .../CMP0026/CMP0026-CONFIG-LOCATION-OLD-result.txt | 1 + .../CMP0026/CMP0026-CONFIG-LOCATION-OLD-stderr.txt | 1 + Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD.cmake | 7 +++++++ .../CMP0026/CMP0026-CONFIG-LOCATION-WARN-result.txt | 1 + .../CMP0026/CMP0026-CONFIG-LOCATION-WARN-stderr.txt | 12 ++++++++++++ Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN.cmake | 5 +++++ .../CMP0026/CMP0026-LOCATION-CONFIG-NEW-result.txt | 1 + .../CMP0026/CMP0026-LOCATION-CONFIG-NEW-stderr.txt | 11 +++++++++++ Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW.cmake | 7 +++++++ .../CMP0026/CMP0026-LOCATION-CONFIG-OLD-result.txt | 1 + .../CMP0026/CMP0026-LOCATION-CONFIG-OLD-stderr.txt | 1 + Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD.cmake | 7 +++++++ .../CMP0026/CMP0026-LOCATION-CONFIG-WARN-result.txt | 1 + .../CMP0026/CMP0026-LOCATION-CONFIG-WARN-stderr.txt | 12 ++++++++++++ Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN.cmake | 5 +++++ Tests/RunCMake/CMP0026/RunCMakeTest.cmake | 6 ++++++ 21 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW-result.txt create mode 100644 Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW-stderr.txt create mode 100644 Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW.cmake create mode 100644 Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD-result.txt create mode 100644 Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD-stderr.txt create mode 100644 Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD.cmake create mode 100644 Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN-result.txt create mode 100644 Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN-stderr.txt create mode 100644 Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN.cmake create mode 100644 Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW-result.txt create mode 100644 Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW-stderr.txt create mode 100644 Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW.cmake create mode 100644 Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD-result.txt create mode 100644 Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD-stderr.txt create mode 100644 Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD.cmake create mode 100644 Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN-result.txt create mode 100644 Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN-stderr.txt create mode 100644 Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN.cmake diff --git a/Help/policy/CMP0026.rst b/Help/policy/CMP0026.rst index 460d2d1..177b655 100644 --- a/Help/policy/CMP0026.rst +++ b/Help/policy/CMP0026.rst @@ -3,7 +3,8 @@ CMP0026 Disallow use of the LOCATION target property. -CMake 2.8.12 and lower allowed reading the LOCATION target property to +CMake 2.8.12 and lower allowed reading the LOCATION target +property (and configuration-specific variants) to determine the eventual location of build targets. This relies on the assumption that all necessary information is available at configure-time to determine the final location and filename of the @@ -17,8 +18,8 @@ $ generator expression together with the file(GENERATE) subcommand to generate a file containing the target location. The OLD behavior for this policy is to allow reading the LOCATION -property from build-targets. The NEW behavior for this policy is to -not to allow reading the LOCATION property from build-targets. +properties from build-targets. The NEW behavior for this policy is to +not to allow reading the LOCATION properties from build-targets. This policy was introduced in CMake version 3.0. CMake version |release| warns when the policy is not set and uses OLD behavior. Use diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 3fb79d8..0c89656 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -2730,6 +2730,21 @@ const char *cmTarget::GetProperty(const char* prop, this->GetLocation(configName.c_str()), cmProperty::TARGET); } + // Support "_LOCATION". + if(cmHasLiteralSuffix(prop, "_LOCATION")) + { + std::string configName(prop, strlen(prop) - 9); + if(configName != "IMPORTED") + { + if (!this->HandleLocationPropertyPolicy()) + { + return 0; + } + this->Properties.SetProperty(prop, + this->GetLocation(configName.c_str()), + cmProperty::TARGET); + } + } } if(strcmp(prop,"INCLUDE_DIRECTORIES") == 0) { diff --git a/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW-result.txt b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW-stderr.txt b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW-stderr.txt new file mode 100644 index 0000000..07982bd --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW-stderr.txt @@ -0,0 +1,11 @@ +CMake Error at CMP0026-CONFIG-LOCATION-NEW.cmake:7 \(get_target_property\): + Policy CMP0026 is not set: Disallow use of the LOCATION target property. + Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy + command to set the policy and suppress this warning. + + The LOCATION property may not be read from target "somelib". Use the + target name directly with add_custom_command, or use the generator + expression \$, as appropriate. + +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW.cmake b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW.cmake new file mode 100644 index 0000000..1b373e7 --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-NEW.cmake @@ -0,0 +1,7 @@ + +enable_language(CXX) + +cmake_policy(SET CMP0026 NEW) + +add_library(somelib empty.cpp) +get_target_property(_loc somelib Debug_LOCATION) diff --git a/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD-result.txt b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD-result.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD-stderr.txt b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD-stderr.txt new file mode 100644 index 0000000..10f3293 --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD-stderr.txt @@ -0,0 +1 @@ +^$ diff --git a/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD.cmake b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD.cmake new file mode 100644 index 0000000..4166828 --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-OLD.cmake @@ -0,0 +1,7 @@ + +enable_language(CXX) + +cmake_policy(SET CMP0026 OLD) + +add_library(somelib empty.cpp) +get_target_property(_loc somelib Debug_LOCATION) diff --git a/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN-result.txt b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN-result.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN-stderr.txt b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN-stderr.txt new file mode 100644 index 0000000..d44dcb4 --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN-stderr.txt @@ -0,0 +1,12 @@ +CMake Warning \(dev\) at CMP0026-CONFIG-LOCATION-WARN.cmake:5 \(get_target_property\): + Policy CMP0026 is not set: Disallow use of the LOCATION target property. + Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy + command to set the policy and suppress this warning. + + The LOCATION property should not be read from target "somelib". Use the + target name directly with add_custom_command, or use the generator + expression \$, as appropriate. + +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) +This warning is for project developers. Use -Wno-dev to suppress it. diff --git a/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN.cmake b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN.cmake new file mode 100644 index 0000000..511056f --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-CONFIG-LOCATION-WARN.cmake @@ -0,0 +1,5 @@ + +enable_language(CXX) + +add_library(somelib empty.cpp) +get_target_property(_loc somelib Debug_LOCATION) diff --git a/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW-result.txt b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW-stderr.txt b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW-stderr.txt new file mode 100644 index 0000000..0e90f96 --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW-stderr.txt @@ -0,0 +1,11 @@ +CMake Error at CMP0026-LOCATION-CONFIG-NEW.cmake:7 \(get_target_property\): + Policy CMP0026 is not set: Disallow use of the LOCATION target property. + Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy + command to set the policy and suppress this warning. + + The LOCATION property may not be read from target "somelib". Use the + target name directly with add_custom_command, or use the generator + expression \$, as appropriate. + +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW.cmake b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW.cmake new file mode 100644 index 0000000..e6aa509 --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-NEW.cmake @@ -0,0 +1,7 @@ + +enable_language(CXX) + +cmake_policy(SET CMP0026 NEW) + +add_library(somelib empty.cpp) +get_target_property(_loc somelib LOCATION_Debug) diff --git a/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD-result.txt b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD-result.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD-stderr.txt b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD-stderr.txt new file mode 100644 index 0000000..10f3293 --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD-stderr.txt @@ -0,0 +1 @@ +^$ diff --git a/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD.cmake b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD.cmake new file mode 100644 index 0000000..482373d --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-OLD.cmake @@ -0,0 +1,7 @@ + +enable_language(CXX) + +cmake_policy(SET CMP0026 OLD) + +add_library(somelib empty.cpp) +get_target_property(_loc somelib LOCATION_Debug) diff --git a/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN-result.txt b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN-result.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN-stderr.txt b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN-stderr.txt new file mode 100644 index 0000000..cd6f3d0 --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN-stderr.txt @@ -0,0 +1,12 @@ +CMake Warning \(dev\) at CMP0026-LOCATION-CONFIG-WARN.cmake:5 \(get_target_property\): + Policy CMP0026 is not set: Disallow use of the LOCATION target property. + Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy + command to set the policy and suppress this warning. + + The LOCATION property should not be read from target "somelib". Use the + target name directly with add_custom_command, or use the generator + expression \$, as appropriate. + +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) +This warning is for project developers. Use -Wno-dev to suppress it. diff --git a/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN.cmake b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN.cmake new file mode 100644 index 0000000..85711c3 --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-LOCATION-CONFIG-WARN.cmake @@ -0,0 +1,5 @@ + +enable_language(CXX) + +add_library(somelib empty.cpp) +get_target_property(_loc somelib LOCATION_Debug) diff --git a/Tests/RunCMake/CMP0026/RunCMakeTest.cmake b/Tests/RunCMake/CMP0026/RunCMakeTest.cmake index 68000a6..1824cc6 100644 --- a/Tests/RunCMake/CMP0026/RunCMakeTest.cmake +++ b/Tests/RunCMake/CMP0026/RunCMakeTest.cmake @@ -3,3 +3,9 @@ include(RunCMake) run_cmake(CMP0026-WARN) run_cmake(CMP0026-NEW) run_cmake(CMP0026-IMPORTED) +run_cmake(CMP0026-CONFIG-LOCATION-NEW) +run_cmake(CMP0026-CONFIG-LOCATION-OLD) +run_cmake(CMP0026-CONFIG-LOCATION-WARN) +run_cmake(CMP0026-LOCATION-CONFIG-NEW) +run_cmake(CMP0026-LOCATION-CONFIG-OLD) +run_cmake(CMP0026-LOCATION-CONFIG-WARN) -- cgit v0.12 From ea17a03be5794a934991b1f958cab12b7011da74 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sat, 15 Mar 2014 11:07:57 +0100 Subject: cmTarget: Port _LOCATION support to updated string APIs --- Source/cmTarget.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index c07fd0f..17c8a4d 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -2673,7 +2673,7 @@ const char *cmTarget::GetProperty(const std::string& prop, // Support "_LOCATION". if(cmHasLiteralSuffix(prop, "_LOCATION")) { - std::string configName(prop, strlen(prop) - 9); + std::string configName(prop.c_str(), prop.size() - 9); if(configName != "IMPORTED") { if (!this->HandleLocationPropertyPolicy()) @@ -2681,7 +2681,7 @@ const char *cmTarget::GetProperty(const std::string& prop, return 0; } this->Properties.SetProperty(prop, - this->GetLocation(configName.c_str()), + this->GetLocation(configName), cmProperty::TARGET); } } -- cgit v0.12