summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2008-09-24 12:51:33 (GMT)
committerBrad King <brad.king@kitware.com>2008-09-24 12:51:33 (GMT)
commit5f57efb417bc02a0aab7be2667a3712ca8af3c64 (patch)
tree8eb810faafc0ac558dab6c1c03367bf5444f0bde
parentdbd88e00c7c281991b28616fe8ac4cfe5f737ea3 (diff)
downloadCMake-5f57efb417bc02a0aab7be2667a3712ca8af3c64.zip
CMake-5f57efb417bc02a0aab7be2667a3712ca8af3c64.tar.gz
CMake-5f57efb417bc02a0aab7be2667a3712ca8af3c64.tar.bz2
BUG: Skip a command if its arguments fail to parse
If the arguments to a command fail to parse correctly due to a syntax error, the command should not be invoked. This avoids problems created by processing of commands with bad arguments. Even though the build system will not be generated, the command may affect files on disk that persist across CMake runs.
-rw-r--r--Source/cmCommand.h7
-rw-r--r--Source/cmMakefile.cxx3
-rw-r--r--Source/cmMakefile.h2
3 files changed, 9 insertions, 3 deletions
diff --git a/Source/cmCommand.h b/Source/cmCommand.h
index 96699ac..ed00b78 100644
--- a/Source/cmCommand.h
+++ b/Source/cmCommand.h
@@ -64,7 +64,12 @@ public:
cmExecutionStatus &status)
{
std::vector<std::string> expandedArguments;
- this->Makefile->ExpandArguments(args, expandedArguments);
+ if(!this->Makefile->ExpandArguments(args, expandedArguments))
+ {
+ // There was an error expanding arguments. It was already
+ // reported, so we can skip this command without error.
+ return true;
+ }
return this->InitialPass(expandedArguments,status);
}
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 8456d58..8f102df 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -2364,7 +2364,7 @@ bool cmMakefile::IsFunctionBlocked(const cmListFileFunction& lff,
return false;
}
-void cmMakefile::ExpandArguments(
+bool cmMakefile::ExpandArguments(
std::vector<cmListFileArgument> const& inArgs,
std::vector<std::string>& outArgs)
{
@@ -2390,6 +2390,7 @@ void cmMakefile::ExpandArguments(
cmSystemTools::ExpandListArgument(value, outArgs);
}
}
+ return !cmSystemTools::GetFatalErrorOccured();
}
void cmMakefile::RemoveFunctionBlocker(const cmListFileFunction& lff)
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index f78a1dd..c2dbfb1 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -702,7 +702,7 @@ public:
* Expand the given list file arguments into the full set after
* variable replacement and list expansion.
*/
- void ExpandArguments(std::vector<cmListFileArgument> const& inArgs,
+ bool ExpandArguments(std::vector<cmListFileArgument> const& inArgs,
std::vector<std::string>& outArgs);
/**
* Get the instance