[Cmake-commits] CMake branch, master, updated. v3.14.4-1082-gf03a80a
Kitware Robot
kwrobot at kitware.com
Thu May 23 09:23:02 EDT 2019
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, master has been updated
via f03a80aefd4073bc1502c2e486fedfdbd8addfb6 (commit)
via 5a1af142f120ccc6834efcf786e346b06e0f05c6 (commit)
from a4faf7788cc40b17c48a9393cd15425ee65abfd9 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f03a80aefd4073bc1502c2e486fedfdbd8addfb6
commit f03a80aefd4073bc1502c2e486fedfdbd8addfb6
Merge: a4faf77 5a1af14
Author: Brad King <brad.king at kitware.com>
AuthorDate: Thu May 23 13:22:25 2019 +0000
Commit: Kitware Robot <kwrobot at kitware.com>
CommitDate: Thu May 23 09:22:37 2019 -0400
Merge topic 'genex-target-property-lifetime'
5a1af142f1 Genex: Fix value lifetimes in nested TARGET_PROPERTY evaluation
Acked-by: Kitware Robot <kwrobot at kitware.com>
Merge-request: !3362
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5a1af142f120ccc6834efcf786e346b06e0f05c6
commit 5a1af142f120ccc6834efcf786e346b06e0f05c6
Author: Brad King <brad.king at kitware.com>
AuthorDate: Wed May 22 09:56:19 2019 -0400
Commit: Brad King <brad.king at kitware.com>
CommitDate: Wed May 22 10:19:41 2019 -0400
Genex: Fix value lifetimes in nested TARGET_PROPERTY evaluation
For special properties like `INCLUDE_DIRECTORIES`, the pointer returned
by `cmTarget::GetProperty` is only valid until the next time the same
special property is queried on *any* target. When evaluating a nested
`TARGET_PROPERTY` generator expression we may look up such a property
more than once on different targets. Fix `TargetPropertyNode::Evaluate`
to store the lookup result in locally owned memory earlier.
Fixes: #19286
diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx
index 709355a..68ef170 100644
--- a/Source/cmGeneratorExpressionNode.cxx
+++ b/Source/cmGeneratorExpressionNode.cxx
@@ -1215,7 +1215,12 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
break;
}
- const char* prop = target->GetProperty(propertyName);
+ std::string prop;
+ bool haveProp = false;
+ if (const char* p = target->GetProperty(propertyName)) {
+ prop = p;
+ haveProp = true;
+ }
if (dagCheckerParent) {
if (dagCheckerParent->EvaluatingGenexExpression() ||
@@ -1235,7 +1240,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
}
#undef TRANSITIVE_PROPERTY_COMPARE
- if (!prop) {
+ if (!haveProp) {
return std::string();
}
} else {
@@ -1291,7 +1296,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
}
}
- if (!prop) {
+ if (!haveProp) {
if (target->IsImported() ||
target->GetType() == cmStateEnums::INTERFACE_LIBRARY) {
return linkedTargetsContent;
diff --git a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
index 8abf70d..68a0172 100644
--- a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
+++ b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
@@ -53,6 +53,7 @@ run_cmake_with_options(TARGET_FILE_BASE_NAME -DCMAKE_BUILD_TYPE:STRING=Debug)
run_cmake_with_options(TARGET_FILE_BASE_NAME-imported-target -DCMAKE_BUILD_TYPE:STRING=Debug)
run_cmake(TARGET_FILE_BASE_NAME-non-valid-target)
run_cmake(TARGET_LINKER_FILE_BASE_NAME-non-valid-target)
+run_cmake(TARGET_PROPERTY-INCLUDE_DIRECTORIES)
run_cmake(TARGET_PROPERTY-LOCATION)
run_cmake(TARGET_PROPERTY-SOURCES)
run_cmake(LINK_ONLY-not-linking)
diff --git a/Tests/RunCMake/GeneratorExpression/TARGET_PROPERTY-INCLUDE_DIRECTORIES.cmake b/Tests/RunCMake/GeneratorExpression/TARGET_PROPERTY-INCLUDE_DIRECTORIES.cmake
new file mode 100644
index 0000000..cb6f4d8
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/TARGET_PROPERTY-INCLUDE_DIRECTORIES.cmake
@@ -0,0 +1,18 @@
+cmake_minimum_required(VERSION 3.14)
+enable_language(C)
+
+add_library(foo1 STATIC empty.c)
+target_include_directories(foo1 PUBLIC include)
+target_link_libraries(foo1 PRIVATE foo2 foo3 foo4)
+
+add_library(foo2 STATIC empty.c)
+target_include_directories(foo2 PUBLIC $<TARGET_PROPERTY:foo1,INCLUDE_DIRECTORIES>)
+
+add_library(foo3 STATIC empty.c)
+target_include_directories(foo3 PUBLIC $<TARGET_PROPERTY:foo2,INCLUDE_DIRECTORIES>)
+
+add_library(foo4 STATIC empty.c)
+target_include_directories(foo4 PUBLIC $<TARGET_PROPERTY:foo3,INCLUDE_DIRECTORIES>)
+
+# Evaluate a genex that looks up INCLUDE_DIRECTORIES on multiple targets.
+file(GENERATE OUTPUT out.txt CONTENT "$<TARGET_PROPERTY:foo4,INCLUDE_DIRECTORIES>")
-----------------------------------------------------------------------
Summary of changes:
Source/cmGeneratorExpressionNode.cxx | 11 ++++++++---
Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake | 1 +
.../TARGET_PROPERTY-INCLUDE_DIRECTORIES.cmake | 18 ++++++++++++++++++
3 files changed, 27 insertions(+), 3 deletions(-)
create mode 100644 Tests/RunCMake/GeneratorExpression/TARGET_PROPERTY-INCLUDE_DIRECTORIES.cmake
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list