Browse Source

Merge topic 'unset-PARENT_SCOPE'

261c248 unset: Add PARENT_SCOPE option
Brad King 12 years ago
parent
commit
8424d569f0
3 changed files with 38 additions and 2 deletions
  1. 7 1
      Source/cmUnsetCommand.cxx
  2. 4 1
      Source/cmUnsetCommand.h
  3. 27 0
      Tests/Unset/CMakeLists.txt

+ 7 - 1
Source/cmUnsetCommand.cxx

@@ -49,7 +49,13 @@ bool cmUnsetCommand::InitialPass(std::vector<std::string> const& args,
     this->Makefile->RemoveCacheDefinition(variable);
     return true;
     }
-  // ERROR: second argument isn't CACHE
+  // unset(VAR PARENT_SCOPE)
+  else if ((args.size() == 2) && (args[1] == "PARENT_SCOPE"))
+    {
+    this->Makefile->RaiseScope(variable, 0);
+    return true;
+    }
+  // ERROR: second argument isn't CACHE or PARENT_SCOPE
   else
     {
     this->SetError("called with an invalid second argument");

+ 4 - 1
Source/cmUnsetCommand.h

@@ -61,10 +61,13 @@ public:
   virtual const char* GetFullDocumentation() const
     {
     return
-      "  unset(<variable> [CACHE])\n"
+      "  unset(<variable> [CACHE | PARENT_SCOPE])\n"
       "Removes the specified variable causing it to become undefined.  "
       "If CACHE is present then the variable is removed from the cache "
       "instead of the current scope.\n"
+      "If PARENT_SCOPE is present then the variable is removed from the "
+      "scope above the current scope.  See the same option in the set() "
+      "command for further details.\n"
       "<variable> can be an environment variable such as:\n"
       "  unset(ENV{LD_LIBRARY_PATH})\n"
       "in which case the variable will be removed from the current "

+ 27 - 0
Tests/Unset/CMakeLists.txt

@@ -51,5 +51,32 @@ if(DEFINED BAR)
   message(FATAL_ERROR "BAR still defined")
 endif()
 
+# Test unset(... PARENT_SCOPE)
+function(unset_zots)
+  if(NOT DEFINED ZOT1)
+    message(FATAL_ERROR "ZOT1 is not defined inside function")
+  endif()
+  if(NOT DEFINED ZOT2)
+    message(FATAL_ERROR "ZOT2 is not defined inside function")
+  endif()
+  unset(ZOT1)
+  unset(ZOT2 PARENT_SCOPE)
+  if(DEFINED ZOT1)
+    message(FATAL_ERROR "ZOT1 is defined inside function after unset")
+  endif()
+  if(NOT DEFINED ZOT2)
+    message(FATAL_ERROR
+      "ZOT2 is not defined inside function after unset(... PARENT_SCOPE)")
+  endif()
+endfunction()
+set(ZOT1 1)
+set(ZOT2 2)
+unset_zots()
+if(NOT DEFINED ZOT1)
+  message(FATAL_ERROR "ZOT1 is not still defined after function")
+endif()
+if(DEFINED ZOT2)
+  message(FATAL_ERROR "ZOT2 is still defined after function unset PARENT_SCOPE")
+endif()
 
 add_executable(Unset unset.c)