diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmMakefile.cxx | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 8233fef..1ebf06e 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1428,8 +1428,8 @@ void cmMakefile::InitializeFromParent() { cmMakefile *parent = this->LocalGenerator->GetParent()->GetMakefile(); - // copy the definitions - this->Internal->VarStack.top().Reset(&parent->Internal->VarStack.top()); + // Initialize definitions with the closure of the parent scope. + this->Internal->VarStack.top() = parent->Internal->VarStack.top().Closure(); // copy include paths this->IncludeDirectories = parent->IncludeDirectories; @@ -3422,6 +3422,14 @@ void cmMakefile::RaiseScope(const char *var, const char *varDef) // Now update the definition in the parent scope. up->Set(var, varDef); } + else if(cmMakefile* parent = + this->LocalGenerator->GetParent()->GetMakefile()) + { + // Update the definition in the parent directory top scope. This + // directory's scope was initialized by the closure of the parent + // scope, so we do not need to localize the definition first. + parent->Internal->VarStack.top().Set(var, varDef); + } } |