summaryrefslogtreecommitdiffstats
path: root/Source/cmCommandArgumentParserHelper.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2008-09-24 12:51:19 (GMT)
committerBrad King <brad.king@kitware.com>2008-09-24 12:51:19 (GMT)
commitd524f3675e455335eceb94eb7dce7fdb014abf58 (patch)
tree6ad0c5fcfd12df536f6d1f4bcafcc2fd641dac94 /Source/cmCommandArgumentParserHelper.cxx
parent4a1317de364979ff8850ce02360aa54c54064214 (diff)
downloadCMake-d524f3675e455335eceb94eb7dce7fdb014abf58.zip
CMake-d524f3675e455335eceb94eb7dce7fdb014abf58.tar.gz
CMake-d524f3675e455335eceb94eb7dce7fdb014abf58.tar.bz2
ENH: Improve argument parsing error messages
Previously error messages produced by parsing of command argument variable references, such as bad $KEY{VAR} syntax or a bad escape sequence, did not provide good context information. Errors parsing arguments inside macro invocations gave no context at all. Furthermore, some errors such as a missing close curly "${VAR" would be reported but build files would still be generated. These changes teach CMake to report errors with good context information for all command argument parsing problems. Policy CMP0010 is introduced so that existing projects that built despite such errors will continue to work.
Diffstat (limited to 'Source/cmCommandArgumentParserHelper.cxx')
-rw-r--r--Source/cmCommandArgumentParserHelper.cxx25
1 files changed, 18 insertions, 7 deletions
diff --git a/Source/cmCommandArgumentParserHelper.cxx b/Source/cmCommandArgumentParserHelper.cxx
index f1efa68..2aa6c0c 100644
--- a/Source/cmCommandArgumentParserHelper.cxx
+++ b/Source/cmCommandArgumentParserHelper.cxx
@@ -87,8 +87,10 @@ char* cmCommandArgumentParserHelper::ExpandSpecialVariable(const char* key,
}
return this->EmptyVariable;
}
- cmSystemTools::Error("Key ", key,
- " is not used yet. For now only $ENV{..} is allowed");
+ cmOStringStream e;
+ e << "Syntax $" << key << "{} is not supported. "
+ << "Only ${} and ENV{} are allowed.";
+ this->SetError(e.str());
return 0;
}
@@ -216,10 +218,11 @@ bool cmCommandArgumentParserHelper::HandleEscapeSymbol
this->AllocateParserType(pt, "\0", 1);
break;
default:
- char buffer[2];
- buffer[0] = symbol;
- buffer[1] = 0;
- cmSystemTools::Error("Invalid escape sequence \\", buffer);
+ {
+ cmOStringStream e;
+ e << "Invalid escape sequence \\" << symbol;
+ this->SetError(e.str());
+ }
return false;
}
return true;
@@ -300,7 +303,7 @@ void cmCommandArgumentParserHelper::Error(const char* str)
unsigned long pos = static_cast<unsigned long>(this->InputBufferPos);
cmOStringStream ostr;
ostr << str << " (" << pos << ")";
- this->ErrorString = ostr.str();
+ this->SetError(ostr.str());
}
void cmCommandArgumentParserHelper::SetMakefile(const cmMakefile* mf)
@@ -318,3 +321,11 @@ void cmCommandArgumentParserHelper::SetResult(const char* value)
this->Result = value;
}
+void cmCommandArgumentParserHelper::SetError(std::string const& msg)
+{
+ // Keep only the first error.
+ if(this->ErrorString.empty())
+ {
+ this->ErrorString = msg;
+ }
+}