summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2008-09-25 14:21:15 (GMT)
committerBrad King <brad.king@kitware.com>2008-09-25 14:21:15 (GMT)
commitf8bc0492e174c2787780ec04979e8ca7e50d5aad (patch)
treefbad0890ee3d7196b106c1049b39c273d5cbb8db
parent883d8e186c06e4fdf4e9dd6ccce985a89d5b8d46 (diff)
downloadCMake-f8bc0492e174c2787780ec04979e8ca7e50d5aad.zip
CMake-f8bc0492e174c2787780ec04979e8ca7e50d5aad.tar.gz
CMake-f8bc0492e174c2787780ec04979e8ca7e50d5aad.tar.bz2
ENH: Create $CACHE{VAR} syntax
This syntax allows reading of cache entries even when variables of the same name have been defined in the local scope. See issue #7715.
-rw-r--r--Source/cmCommandArgumentParserHelper.cxx17
-rw-r--r--Tests/Unset/CMakeLists.txt14
2 files changed, 30 insertions, 1 deletions
diff --git a/Source/cmCommandArgumentParserHelper.cxx b/Source/cmCommandArgumentParserHelper.cxx
index 2aa6c0c..c67f884 100644
--- a/Source/cmCommandArgumentParserHelper.cxx
+++ b/Source/cmCommandArgumentParserHelper.cxx
@@ -87,9 +87,24 @@ char* cmCommandArgumentParserHelper::ExpandSpecialVariable(const char* key,
}
return this->EmptyVariable;
}
+ if ( strcmp(key, "CACHE") == 0 )
+ {
+ if(const char* c = this->Makefile->GetCacheManager()->GetCacheValue(var))
+ {
+ if(this->EscapeQuotes)
+ {
+ return this->AddString(cmSystemTools::EscapeQuotes(c).c_str());
+ }
+ else
+ {
+ return this->AddString(c);
+ }
+ }
+ return this->EmptyVariable;
+ }
cmOStringStream e;
e << "Syntax $" << key << "{} is not supported. "
- << "Only ${} and ENV{} are allowed.";
+ << "Only ${}, $ENV{}, and $CACHE{} are allowed.";
this->SetError(e.str());
return 0;
}
diff --git a/Tests/Unset/CMakeLists.txt b/Tests/Unset/CMakeLists.txt
index 05a7e03..bacb6d2 100644
--- a/Tests/Unset/CMakeLists.txt
+++ b/Tests/Unset/CMakeLists.txt
@@ -32,6 +32,20 @@ if(NOT DEFINED BAR)
message(FATAL_ERROR "BAR not defined")
endif(NOT DEFINED BAR)
+# Test interaction of cache entries with variables.
+set(BAR "test-var")
+if(NOT "$CACHE{BAR}" STREQUAL "test")
+ message(FATAL_ERROR "\$CACHE{BAR} changed by variable BAR")
+endif(NOT "$CACHE{BAR}" STREQUAL "test")
+if(NOT "${BAR}" STREQUAL "test-var")
+ message(FATAL_ERROR "\${BAR} not separate from \$CACHE{BAR}")
+endif(NOT "${BAR}" STREQUAL "test-var")
+unset(BAR)
+if(NOT "${BAR}" STREQUAL "test")
+ message(FATAL_ERROR "\${BAR} does not fall through to \$CACHE{BAR}")
+endif(NOT "${BAR}" STREQUAL "test")
+
+# Test unsetting of CACHE entry.
unset(BAR CACHE)
if(DEFINED BAR)
message(FATAL_ERROR "BAR still defined")