From 9a77f65da7d3275760a60d0a6180a9c240ba30e5 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 8 Oct 2009 14:56:15 -0400 Subject: 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. --- Source/cmMakefile.cxx | 51 ---------------------------------------------- Source/cmMakefile.h | 5 ----- Source/cmOptionCommand.cxx | 1 - Source/cmPolicies.cxx | 31 ---------------------------- Source/cmPolicies.h | 1 - Source/cmSetCommand.cxx | 1 - 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( \n" " [[CACHE [FORCE]] | PARENT_SCOPE])\n" "Within CMake sets to the value . is expanded" - " before is set to it. If CACHE is present and " - "is not yet in the cache, then is put in the cache. If it is " - "already in the cache, is assigned the value stored in the " - "cache. If CACHE is present, also and are " + " before is set to it. If CACHE is present, then the " + " is put in the cache. and are then " "required. is used by the CMake GUI to choose a widget with " "which the user sets a value. The value for may be one of\n" " FILEPATH = File chooser dialog.\n" -- cgit v0.12