From f386c2aae09ff4af04a15ceebe41588fcbbae648 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Fri, 29 Feb 2008 12:18:11 -0500 Subject: [PATCH] ENH: make CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS the default and remove the property. If any value is specified in an endif, endforeach, endwhile, etc then make sure it matches the start string. If no values are given then it is no longer an error. --- Source/cmForEachCommand.cxx | 8 ++++---- Source/cmFunctionCommand.cxx | 10 +++++----- Source/cmIfCommand.cxx | 7 ++++--- Source/cmMacroCommand.cxx | 8 ++++---- Source/cmMakefile.cxx | 9 --------- Source/cmWhileCommand.cxx | 7 ++++--- 6 files changed, 21 insertions(+), 28 deletions(-) diff --git a/Source/cmForEachCommand.cxx b/Source/cmForEachCommand.cxx index 848c6a4fe..b13a849f3 100644 --- a/Source/cmForEachCommand.cxx +++ b/Source/cmForEachCommand.cxx @@ -103,10 +103,10 @@ ShouldRemove(const cmListFileFunction& lff, cmMakefile& mf) { std::vector expandedArguments; mf.ExpandArguments(lff.Arguments, expandedArguments); - if ((!expandedArguments.empty() && - (expandedArguments[0] == this->Args[0])) - || cmSystemTools::IsOn - (mf.GetPropertyOrDefinition("CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS"))) + // if the endforeach has arguments then make sure + // they match the begin foreach arguments + if ((expandedArguments.empty() || + (expandedArguments[0] == this->Args[0]))) { return true; } diff --git a/Source/cmFunctionCommand.cxx b/Source/cmFunctionCommand.cxx index 1ff9d59e1..739470960 100644 --- a/Source/cmFunctionCommand.cxx +++ b/Source/cmFunctionCommand.cxx @@ -252,11 +252,11 @@ ShouldRemove(const cmListFileFunction& lff, cmMakefile &mf) if(!cmSystemTools::Strucmp(lff.Name.c_str(),"endfunction")) { std::vector expandedArguments; - mf.ExpandArguments(lff.Arguments, expandedArguments); - if ((!expandedArguments.empty() && - (expandedArguments[0] == this->Args[0])) - || cmSystemTools::IsOn - (mf.GetPropertyOrDefinition("CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS"))) + mf.ExpandArguments(lff.Arguments, expandedArguments); + // if the endfunction has arguments then make sure + // they match the ones in the openeing function command + if ((expandedArguments.empty() || + (expandedArguments[0] == this->Args[0]))) { return true; } diff --git a/Source/cmIfCommand.cxx b/Source/cmIfCommand.cxx index bc82c4265..f38d2654f 100644 --- a/Source/cmIfCommand.cxx +++ b/Source/cmIfCommand.cxx @@ -145,9 +145,10 @@ bool cmIfFunctionBlocker::ShouldRemove(const cmListFileFunction& lff, { if (!cmSystemTools::Strucmp(lff.Name.c_str(),"endif")) { - if (cmSystemTools::IsOn - (mf.GetPropertyOrDefinition("CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS")) - || lff.Arguments == this->Args) + // if the endif has arguments, then make sure + // they match the arguments of the matching if + if (lff.Arguments.size() == 0 || + lff.Arguments == this->Args) { return true; } diff --git a/Source/cmMacroCommand.cxx b/Source/cmMacroCommand.cxx index 6b927631d..9f1c9043f 100644 --- a/Source/cmMacroCommand.cxx +++ b/Source/cmMacroCommand.cxx @@ -329,10 +329,10 @@ ShouldRemove(const cmListFileFunction& lff, cmMakefile &mf) { std::vector expandedArguments; mf.ExpandArguments(lff.Arguments, expandedArguments); - if ((!expandedArguments.empty() && - (expandedArguments[0] == this->Args[0])) - || cmSystemTools::IsOn - (mf.GetPropertyOrDefinition("CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS"))) + // if the endmacro has arguments make sure they + // match the arguments of the macro + if ((expandedArguments.empty() || + (expandedArguments[0] == this->Args[0]))) { return true; } diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 429eae8c2..c87a4dd46 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -3038,15 +3038,6 @@ void cmMakefile::DefineProperties(cmake *cm) "If this is true then the outputs of custom commands for this " "directory will not be removed during the \"make clean\" stage. "); - cm->DefineProperty - ("CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS", cmProperty::DIRECTORY, - "Allow loops to have non-matching closing statements.", - "If this is set then the closing statement of control " - "structures in CMake will not require an exact match to the " - "opening statement. For example IF(foo) will not require " - "ENDIF(foo) but simple ENDIF() will work.", - true); - cm->DefineProperty ("LISTFILE_STACK", cmProperty::DIRECTORY, "The current stack of listfiles being processed.", diff --git a/Source/cmWhileCommand.cxx b/Source/cmWhileCommand.cxx index 96842218b..2836c1431 100644 --- a/Source/cmWhileCommand.cxx +++ b/Source/cmWhileCommand.cxx @@ -93,9 +93,10 @@ ShouldRemove(const cmListFileFunction& lff, cmMakefile& mf) { if(!cmSystemTools::Strucmp(lff.Name.c_str(),"endwhile")) { - if (lff.Arguments == this->Args - || cmSystemTools::IsOn - (mf.GetPropertyOrDefinition("CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS"))) + // if the endwhile has arguments, then make sure + // they match the arguments of the matching while + if (lff.Arguments.size() == 0 || + lff.Arguments == this->Args) { return true; }