1
0
Эх сурвалжийг харах

BUG: Make RAISE_SCOPE function work when variable is not defined.

Brad King 18 жил өмнө
parent
commit
dcd9a1b59f

+ 16 - 2
Source/cmMakefile.cxx

@@ -2853,7 +2853,14 @@ void cmMakefile::RaiseScope(const char *var)
   // multiple scopes in this directory?
   if (this->DefinitionStack.size() > 1)
     {
-    this->DefinitionStack[this->DefinitionStack.size()-2][var] = varDef;
+    if(varDef)
+      {
+      this->DefinitionStack[this->DefinitionStack.size()-2][var] = varDef;
+      }
+    else
+      {
+      this->DefinitionStack[this->DefinitionStack.size()-2].erase(var);
+      }
     }
   // otherwise do the parent
   else
@@ -2861,7 +2868,14 @@ void cmMakefile::RaiseScope(const char *var)
     cmMakefile *parent = this->LocalGenerator->GetParent()->GetMakefile();
     if (parent)
       {
-      parent->AddDefinition(var,varDef);
+      if(varDef)
+        {
+        parent->AddDefinition(var,varDef);
+        }
+      else
+        {
+        parent->RemoveDefinition(var);
+        }
       }
     }
 }

+ 27 - 0
Tests/FunctionTest/CMakeLists.txt

@@ -83,4 +83,31 @@ FUNCTION(ADD_EXECUTABLE exec)
   _ADD_EXECUTABLE(mini${exec} ${ARGN})
 ENDFUNCTION(ADD_EXECUTABLE)
 
+# var undef case
+FUNCTION(undef_var m)
+  SET(${m})
+  RAISE_SCOPE(${m})
+ENDFUNCTION(undef_var)
+SET(FUNCTION_UNDEFINED 1)
+undef_var(FUNCTION_UNDEFINED)
+IF(DEFINED FUNCTION_UNDEFINED)
+  FAILED("Function Undefine Test" "(${FUNCTION_UNDEFINED})")
+ELSE(DEFINED FUNCTION_UNDEFINED)
+  PASS("Function Undefine Test" "(${FUNCTION_UNDEFINED})")
+ENDIF(DEFINED FUNCTION_UNDEFINED)
+
+# Subdirectory scope raise.
+SET(SUBDIR_UNDEFINED 1)
+ADD_SUBDIRECTORY(SubDirScope)
+IF(DEFINED SUBDIR_UNDEFINED)
+  FAILED("Subdir Undefine Test" "(${SUBDIR_UNDEFINED})")
+ELSE(DEFINED SUBDIR_UNDEFINED)
+  PASS("Subdir Undefine Test" "(${SUBDIR_UNDEFINED})")
+ENDIF(DEFINED SUBDIR_UNDEFINED)
+IF(DEFINED SUBDIR_DEFINED)
+  PASS("Subdir Define Test" "(${SUBDIR_DEFINED})")
+ELSE(DEFINED SUBDIR_DEFINED)
+  FAILED("Subdir Define Test" "(${SUBDIR_DEFINED})")
+ENDIF(DEFINED SUBDIR_DEFINED)
+
 ADD_EXECUTABLE(FunctionTest functionTest.c)

+ 3 - 0
Tests/FunctionTest/SubDirScope/CMakeLists.txt

@@ -0,0 +1,3 @@
+SET(SUBDIR_DEFINED 1)
+SET(SUBDIR_UNDEFINED)
+RAISE_SCOPE(SUBDIR_DEFINED SUBDIR_UNDEFINED)