diff options
author | Brad King <brad.king@kitware.com> | 2009-10-08 18:56:15 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-10-08 18:56:15 (GMT) |
commit | 9a77f65da7d3275760a60d0a6180a9c240ba30e5 (patch) | |
tree | 7326f55451af5e372483a512caaa44906a67570a /Source | |
parent | 24bf97440fc8730860620c65d9dfd487ca68c69d (diff) | |
download | CMake-9a77f65da7d3275760a60d0a6180a9c240ba30e5.zip CMake-9a77f65da7d3275760a60d0a6180a9c240ba30e5.tar.gz CMake-9a77f65da7d3275760a60d0a6180a9c240ba30e5.tar.bz2 |
Remove CMake Policy CMP0015 until it is revised
We revert commit "Create CMake Policy CMP0015 to fix set(CACHE)" because
the NEW behavior of the policy breaks a valid use case:
# CMakeLists.txt
option(BUILD_SHARED_LIBS "..." ON)
add_library(mylib ...)
set(BUILD_SHARED_LIBS OFF) # we want only mylib to be shared
add_subdirectory(ThirdParty)
# ThirdParty/CMakeLists.txt
option(BUILD_SHARED_LIBS "..." ON)
# uh, oh, with NEW behavior this dir uses shared libs!!!
We'll re-introduce the policy later with a different change in behavior
to resolve the motivating case, which was more subtle but less common.
See issue #9008.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmMakefile.cxx | 51 | ||||
-rw-r--r-- | Source/cmMakefile.h | 5 | ||||
-rw-r--r-- | Source/cmOptionCommand.cxx | 1 | ||||
-rw-r--r-- | Source/cmPolicies.cxx | 31 | ||||
-rw-r--r-- | Source/cmPolicies.h | 1 | ||||
-rw-r--r-- | Source/cmSetCommand.cxx | 1 | ||||
-rw-r--r-- | Source/cmSetCommand.h | 6 |
7 files changed, 2 insertions, 94 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 6fc0dd4..88c8c7b 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1642,57 +1642,6 @@ void cmMakefile::AddDefinition(const char* name, const char* value) #endif } -//---------------------------------------------------------------------------- -void cmMakefile::UseCacheDefinition(cmCacheManager::CacheIterator const& it) -{ - // Check for a local definition that might hide the cache value. - const char* name = it.GetName(); - const char* def = this->Internal->VarStack.top().Get(name); - if(!def) - { - return; - } - - // If the visible value will change then check policy CMP0015. - const char* cache = it.GetValue(); - if(strcmp(def, cache) != 0) - { - cmOStringStream e; - switch (this->GetPolicyStatus(cmPolicies::CMP0015)) - { - case cmPolicies::WARN: - e << "Local variable \"" << name << "\" is set to\n" - << " " << def << "\n" - << "but the CACHE entry of the same name is set to\n" - << " " << cache << "\n" - << "The local variable is hiding the cache value." - << "\n" - << this->GetPolicies()->GetPolicyWarning(cmPolicies::CMP0015); - this->IssueMessage(cmake::AUTHOR_WARNING, e.str()); - case cmPolicies::OLD: - // OLD behavior is to leave local definition. - return; - case cmPolicies::REQUIRED_IF_USED: - case cmPolicies::REQUIRED_ALWAYS: - e << "Local variable \"" << name << "\" is set to\n" - << " " << def << "\n" - << "but the CACHE entry of the same name is set to\n" - << " " << cache << "\n" - << "This command is removing the local variable to expose " - << "the cache value." - << "\n" - << this->GetPolicies()->GetRequiredPolicyError(cmPolicies::CMP0015); - this->IssueMessage(cmake::FATAL_ERROR, e.str()); - case cmPolicies::NEW: - // NEW behavior is to remove local definition (done below). - break; - } - } - - // Remove the local definition to make the cache value visible. - this->RemoveDefinition(name); -} - void cmMakefile::AddCacheDefinition(const char* name, const char* value, const char* doc, diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index cb180ba..63f81b8 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -286,11 +286,6 @@ public: bool force = false); /** - * Update the variable scope to make the cache definition visible. - */ - void UseCacheDefinition(cmCacheManager::CacheIterator const& it); - - /** * Add bool variable definition to the build. */ void AddDefinition(const char* name, bool); diff --git a/Source/cmOptionCommand.cxx b/Source/cmOptionCommand.cxx index c3ec266..af9d94b 100644 --- a/Source/cmOptionCommand.cxx +++ b/Source/cmOptionCommand.cxx @@ -53,7 +53,6 @@ bool cmOptionCommand if ( it.GetType() != cmCacheManager::UNINITIALIZED ) { it.SetProperty("HELPSTRING", args[1].c_str()); - this->Makefile->UseCacheDefinition(it); return true; } if ( it.GetValue() ) diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx index a7292cf..0d35b65 100644 --- a/Source/cmPolicies.cxx +++ b/Source/cmPolicies.cxx @@ -401,37 +401,6 @@ cmPolicies::cmPolicies() "The OLD behavior for this policy is to silently ignore the problem. " "The NEW behavior for this policy is to report an error.", 2,8,0, cmPolicies::WARN); - - this->DefinePolicy( - CMP0015, "CMP0015", - "The set() CACHE mode and option() command make the cache value visible.", - "In CMake 2.6 and below the CACHE mode of the set() command and the " - "option() command did not expose the value from the named cache entry " - "if it was already set both in the cache and as a local variable. " - "This led to subtle differences between first and later configurations " - "because a conflicting local variable would be overridden only when the " - "cache value was first created. " - "For example, the code\n" - " set(x 1)\n" - " set(before ${x})\n" - " set(x 2 CACHE STRING \"X\")\n" - " set(after ${x})\n" - " message(STATUS \"${before},${after}\")\n" - "would print \"1,2\" on the first run and \"1,1\" on future runs." - "\n" - "CMake 2.8.0 and above prefer to expose the cache value in all cases by " - "removing the local variable definition, but this changes behavior in " - "subtle cases when the local variable has a different value than that " - "exposed from the cache. " - "The example above will always print \"1,2\"." - "\n" - "This policy determines whether the commands should always expose the " - "cache value. " - "The OLD behavior for this policy is to leave conflicting local " - "variable values untouched and hide the true cache value. " - "The NEW behavior for this policy is to always expose the cache value.", - 2,8,0, cmPolicies::WARN); - } cmPolicies::~cmPolicies() diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h index be3b44a..cf808bd 100644 --- a/Source/cmPolicies.h +++ b/Source/cmPolicies.h @@ -50,7 +50,6 @@ public: CMP0012, // Strong handling of boolean constants CMP0013, // Duplicate binary directories not allowed CMP0014, // Input directories must have CMakeLists.txt - CMP0015, // set(CACHE) and option() make CACHE value visible // Always the last entry. Useful mostly to avoid adding a comma // the last policy when adding a new one. diff --git a/Source/cmSetCommand.cxx b/Source/cmSetCommand.cxx index 7ff6869..5fcbdba 100644 --- a/Source/cmSetCommand.cxx +++ b/Source/cmSetCommand.cxx @@ -155,7 +155,6 @@ bool cmSetCommand // or the makefile if(cache && type != cmCacheManager::INTERNAL && !force) { - this->Makefile->UseCacheDefinition(it); return true; } } diff --git a/Source/cmSetCommand.h b/Source/cmSetCommand.h index 609106c..2990d24 100644 --- a/Source/cmSetCommand.h +++ b/Source/cmSetCommand.h @@ -64,10 +64,8 @@ public: " set(<variable> <value>\n" " [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE])\n" "Within CMake sets <variable> to the value <value>. <value> is expanded" - " before <variable> is set to it. If CACHE is present and <variable> " - "is not yet in the cache, then <variable> is put in the cache. If it is " - "already in the cache, <variable> is assigned the value stored in the " - "cache. If CACHE is present, also <type> and <docstring> are " + " before <variable> is set to it. If CACHE is present, then the " + "<variable> is put in the cache. <type> and <docstring> are then " "required. <type> is used by the CMake GUI to choose a widget with " "which the user sets a value. The value for <type> may be one of\n" " FILEPATH = File chooser dialog.\n" |