summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Edwards <kyle.edwards@kitware.com>2022-03-21 16:34:15 -0400
committerCraig Scott <craig.scott@crascit.com>2022-03-23 16:39:32 +1100
commit26caa97057445232ce50d4e1de1dff219ae5826b (patch)
tree2ae9c119648f9761aa383e6a6d4245760ec68b6c
parent2aad4cef979bd5174f067424a117fac765e3da34 (diff)
downloadcmake-26caa97057445232ce50d4e1de1dff219ae5826b.tar.gz
define_property(): Change constraints of INITIALIZE_FROM_VARIABLE
Remove the requirement that the variable name have a prefix while keeping the suffix requirement. Require that the property name contains an underscore. Update docs and tests accordingly. Fixes: #23340
-rw-r--r--Help/command/define_property.rst6
-rw-r--r--Source/cmDefinePropertyCommand.cxx8
-rw-r--r--Tests/RunCMake/define_property/RunCMakeTest.cmake2
-rw-r--r--Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_1-stderr.txt2
-rw-r--r--Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_1.cmake4
-rw-r--r--Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_2-stderr.txt2
-rw-r--r--Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_2.cmake4
-rw-r--r--Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_prefix-stderr.txt5
-rw-r--r--Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_underscore-result.txt (renamed from Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_prefix-result.txt)0
-rw-r--r--Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_underscore-stderr.txt5
-rw-r--r--Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_underscore.cmake (renamed from Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_prefix.cmake)0
-rw-r--r--Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-subdirectory/CMakeLists.txt12
-rw-r--r--Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE.cmake10
13 files changed, 31 insertions, 29 deletions
diff --git a/Help/command/define_property.rst b/Help/command/define_property.rst
index c8823476b7..76b060b709 100644
--- a/Help/command/define_property.rst
+++ b/Help/command/define_property.rst
@@ -69,5 +69,7 @@ project via corresponding options to the :command:`get_property` command.
The ``INITIALIZE_FROM_VARIABLE`` option specifies a variable from which the
property should be initialized. It can only be used with target properties.
- The ``<variable>`` name must end with the property name, must have a prefix
- before the property name, and must not begin with ``CMAKE_`` or ``_CMAKE_``.
+ The ``<variable>`` name must end with the property name and must not begin
+ with ``CMAKE_`` or ``_CMAKE_``. The property name must contain at least one
+ underscore. It is recommended that the property name have a prefix specific
+ to the project.
diff --git a/Source/cmDefinePropertyCommand.cxx b/Source/cmDefinePropertyCommand.cxx
index 15b2652cc1..faefcb8f8f 100644
--- a/Source/cmDefinePropertyCommand.cxx
+++ b/Source/cmDefinePropertyCommand.cxx
@@ -91,10 +91,10 @@ bool cmDefinePropertyCommand(std::vector<std::string> const& args,
PropertyName, "\""));
return false;
}
- if (initializeFromVariable == PropertyName) {
- status.SetError(cmStrCat(
- "Variable name must have a non-empty prefix before property name \"",
- PropertyName, "\""));
+ if (PropertyName.find('_') == std::string::npos) {
+ status.SetError(cmStrCat("Property name \"", PropertyName,
+ "\" defined with INITIALIZE_FROM_VARIABLE does "
+ "not contain underscore"));
return false;
}
diff --git a/Tests/RunCMake/define_property/RunCMakeTest.cmake b/Tests/RunCMake/define_property/RunCMakeTest.cmake
index 7d7c75b18f..93eaf1b865 100644
--- a/Tests/RunCMake/define_property/RunCMakeTest.cmake
+++ b/Tests/RunCMake/define_property/RunCMakeTest.cmake
@@ -6,4 +6,4 @@ run_cmake(define_property-INITIALIZE_FROM_VARIABLE-invalid_1)
run_cmake(define_property-INITIALIZE_FROM_VARIABLE-invalid_2)
run_cmake(define_property-INITIALIZE_FROM_VARIABLE-non_target)
run_cmake(define_property-INITIALIZE_FROM_VARIABLE-wrong_suffix)
-run_cmake(define_property-INITIALIZE_FROM_VARIABLE-no_prefix)
+run_cmake(define_property-INITIALIZE_FROM_VARIABLE-no_underscore)
diff --git a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_1-stderr.txt b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_1-stderr.txt
index a7903c9d3e..c5ae467731 100644
--- a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_1-stderr.txt
+++ b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_1-stderr.txt
@@ -1,4 +1,4 @@
^CMake Error at define_property-INITIALIZE_FROM_VARIABLE-invalid_1\.cmake:[0-9]+ \(define_property\):
- define_property variable name "CMAKE_PROP1" is reserved
+ define_property variable name "CMAKE_Test_PROP1" is reserved
Call Stack \(most recent call first\):
CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_1.cmake b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_1.cmake
index 873263af89..edb885207b 100644
--- a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_1.cmake
+++ b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_1.cmake
@@ -1,3 +1,3 @@
-define_property(TARGET PROPERTY PROP1
- INITIALIZE_FROM_VARIABLE CMAKE_PROP1
+define_property(TARGET PROPERTY Test_PROP1
+ INITIALIZE_FROM_VARIABLE CMAKE_Test_PROP1
)
diff --git a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_2-stderr.txt b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_2-stderr.txt
index ea6bc8620d..3dbee34a24 100644
--- a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_2-stderr.txt
+++ b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_2-stderr.txt
@@ -1,4 +1,4 @@
^CMake Error at define_property-INITIALIZE_FROM_VARIABLE-invalid_2\.cmake:[0-9]+ \(define_property\):
- define_property variable name "_CMAKE_PROP1" is reserved
+ define_property variable name "_CMAKE_Test_PROP1" is reserved
Call Stack \(most recent call first\):
CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_2.cmake b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_2.cmake
index 95945a3453..e1c3ca53d9 100644
--- a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_2.cmake
+++ b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-invalid_2.cmake
@@ -1,3 +1,3 @@
-define_property(TARGET PROPERTY PROP1
- INITIALIZE_FROM_VARIABLE _CMAKE_PROP1
+define_property(TARGET PROPERTY Test_PROP1
+ INITIALIZE_FROM_VARIABLE _CMAKE_Test_PROP1
)
diff --git a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_prefix-stderr.txt b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_prefix-stderr.txt
deleted file mode 100644
index fc9099cf18..0000000000
--- a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_prefix-stderr.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-^CMake Error at define_property-INITIALIZE_FROM_VARIABLE-no_prefix\.cmake:[0-9]+ \(define_property\):
- define_property Variable name must have a non-empty prefix before property
- name "PROP1"
-Call Stack \(most recent call first\):
- CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_prefix-result.txt b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_underscore-result.txt
index d00491fd7e..d00491fd7e 100644
--- a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_prefix-result.txt
+++ b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_underscore-result.txt
diff --git a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_underscore-stderr.txt b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_underscore-stderr.txt
new file mode 100644
index 0000000000..9bbdd8b13b
--- /dev/null
+++ b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_underscore-stderr.txt
@@ -0,0 +1,5 @@
+^CMake Error at define_property-INITIALIZE_FROM_VARIABLE-no_underscore\.cmake:[0-9]+ \(define_property\):
+ define_property Property name "PROP1" defined with INITIALIZE_FROM_VARIABLE
+ does not contain underscore
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_prefix.cmake b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_underscore.cmake
index cc39b57c03..cc39b57c03 100644
--- a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_prefix.cmake
+++ b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-no_underscore.cmake
diff --git a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-subdirectory/CMakeLists.txt b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-subdirectory/CMakeLists.txt
index 67c186dd6c..ee128ec4f9 100644
--- a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-subdirectory/CMakeLists.txt
+++ b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE-subdirectory/CMakeLists.txt
@@ -1,11 +1,11 @@
-define_property(TARGET PROPERTY PROP2
+define_property(TARGET PROPERTY Test_PROP2
INITIALIZE_FROM_VARIABLE Test_PROP2
)
-define_property(TARGET PROPERTY PROP3
- INITIALIZE_FROM_VARIABLE Test_PROP3
+define_property(TARGET PROPERTY Test_PROP3
+ INITIALIZE_FROM_VARIABLE MyTest_PROP3
)
add_executable(sub_exe ../main.c)
-assert_prop_eq(sub_exe PROP1 "Hello")
-assert_prop_eq(sub_exe PROP2 "world")
-assert_prop_eq(sub_exe PROP3 "!")
+assert_prop_eq(sub_exe Test_PROP1 "Hello")
+assert_prop_eq(sub_exe Test_PROP2 "world")
+assert_prop_eq(sub_exe Test_PROP3 "!")
diff --git a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE.cmake b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE.cmake
index d866fc983e..5014c74020 100644
--- a/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE.cmake
+++ b/Tests/RunCMake/define_property/define_property-INITIALIZE_FROM_VARIABLE.cmake
@@ -16,14 +16,14 @@ endfunction()
set(Test_PROP1 "Hello")
set(Test_PROP2 "world")
-set(Test_PROP3 "!")
-define_property(TARGET PROPERTY PROP1
+set(MyTest_PROP3 "!")
+define_property(TARGET PROPERTY Test_PROP1
INITIALIZE_FROM_VARIABLE Test_PROP1
)
add_subdirectory(define_property-INITIALIZE_FROM_VARIABLE-subdirectory)
add_executable(top_exe main.c)
-assert_prop_eq(top_exe PROP1 "Hello")
-assert_prop_eq(top_exe PROP2 "world")
-assert_prop_eq(top_exe PROP3 "!")
+assert_prop_eq(top_exe Test_PROP1 "Hello")
+assert_prop_eq(top_exe Test_PROP2 "world")
+assert_prop_eq(top_exe Test_PROP3 "!")