ENH: Enforce matching PUSH/POP calls for cmake_policy.
This commit is contained in:
parent
eb6b300978
commit
7f2bf83132
@ -579,6 +579,7 @@ bool cmMakefile::ReadListFile(const char* filename_in,
|
|||||||
}
|
}
|
||||||
// add this list file to the list of dependencies
|
// add this list file to the list of dependencies
|
||||||
this->ListFiles.push_back( filenametoread);
|
this->ListFiles.push_back( filenametoread);
|
||||||
|
bool endScopeNicely = filename? true: false;
|
||||||
const size_t numberFunctions = cacheFile.Functions.size();
|
const size_t numberFunctions = cacheFile.Functions.size();
|
||||||
for(size_t i =0; i < numberFunctions; ++i)
|
for(size_t i =0; i < numberFunctions; ++i)
|
||||||
{
|
{
|
||||||
@ -587,17 +588,14 @@ bool cmMakefile::ReadListFile(const char* filename_in,
|
|||||||
if (status.GetReturnInvoked() ||
|
if (status.GetReturnInvoked() ||
|
||||||
cmSystemTools::GetFatalErrorOccured() )
|
cmSystemTools::GetFatalErrorOccured() )
|
||||||
{
|
{
|
||||||
// pop the listfile off the stack
|
// Exit early from processing this file.
|
||||||
this->ListFileStack.pop_back();
|
endScopeNicely = false;
|
||||||
this->AddDefinition("CMAKE_PARENT_LIST_FILE",
|
break;
|
||||||
currentParentFile.c_str());
|
|
||||||
this->AddDefinition("CMAKE_CURRENT_LIST_FILE", currentFile.c_str());
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// send scope ended to and function blockers
|
// send scope ended to and function blockers
|
||||||
if (filename)
|
if (endScopeNicely)
|
||||||
{
|
{
|
||||||
// loop over all function blockers to see if any block this command
|
// loop over all function blockers to see if any block this command
|
||||||
std::list<cmFunctionBlocker *>::iterator pos;
|
std::list<cmFunctionBlocker *>::iterator pos;
|
||||||
@ -613,6 +611,20 @@ bool cmMakefile::ReadListFile(const char* filename_in,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If this is the directory-level CMakeLists.txt file then enforce
|
||||||
|
// policy stack depth.
|
||||||
|
if(this->ListFileStack.size() == 1)
|
||||||
|
{
|
||||||
|
while(this->PolicyStack.size() > 1)
|
||||||
|
{
|
||||||
|
if(endScopeNicely)
|
||||||
|
{
|
||||||
|
this->IssueError("cmake_policy PUSH without matching POP");
|
||||||
|
}
|
||||||
|
this->PopPolicy(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this->AddDefinition("CMAKE_PARENT_LIST_FILE", currentParentFile.c_str());
|
this->AddDefinition("CMAKE_PARENT_LIST_FILE", currentParentFile.c_str());
|
||||||
this->AddDefinition("CMAKE_CURRENT_LIST_FILE", currentFile.c_str());
|
this->AddDefinition("CMAKE_CURRENT_LIST_FILE", currentFile.c_str());
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user