Warn about unquoted arguments that look like long brackets

In the future CMake will introduce Lua-style long bracket syntax.
Warn about unquoted arguments that in the future will be treated
as opening long brackets.

Teach the RunCMake.Syntax test to cover such cases and ensure that the
warning appears.
This commit is contained in:
Brad King 2013-08-06 15:48:28 -04:00
parent 58e524165d
commit bf73264694
5 changed files with 59 additions and 0 deletions

View File

@ -343,6 +343,27 @@ void cmListFileParser::AddArgument(cmListFileLexer_Token* token,
{
cmListFileArgument a(token->text, delim, this->FileName, token->line);
this->Function.Arguments.push_back(a);
if(delim == cmListFileArgument::Unquoted)
{
// Warn about a future behavior change.
const char* c = a.Value.c_str();
if(*c++ == '[')
{
while(*c == '=')
{ ++c; }
if(*c == '[')
{
cmOStringStream m;
m << "Syntax Warning in cmake code at\n"
<< " " << this->FileName << ":" << token->line << ":"
<< token->column << "\n"
<< "A future version of CMake may treat unquoted argument:\n"
<< " " << a.Value << "\n"
<< "as an opening long bracket. Double-quote the argument.";
this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, m.str().c_str());
}
}
}
if(this->Separation == SeparationOkay)
{
return;

View File

@ -0,0 +1,35 @@
CMake Warning \(dev\) at CMakeLists.txt:3 \(include\):
Syntax Warning in cmake code at
.*/Tests/RunCMake/Syntax/BracketWarn.cmake:1:16
A future version of CMake may treat unquoted argument:
\[\[
as an opening long bracket. Double-quote the argument.
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning \(dev\) at CMakeLists.txt:3 \(include\):
Syntax Warning in cmake code at
.*/Tests/RunCMake/Syntax/BracketWarn.cmake:1:19
A future version of CMake may treat unquoted argument:
\[=\[
as an opening long bracket. Double-quote the argument.
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning \(dev\) at CMakeLists.txt:3 \(include\):
Syntax Warning in cmake code at
.*/Tests/RunCMake/Syntax/BracketWarn.cmake:1:27
A future version of CMake may treat unquoted argument:
\[==\[x
as an opening long bracket. Double-quote the argument.
This warning is for project developers. Use -Wno-dev to suppress it.

View File

@ -0,0 +1 @@
-- \[\[\[=\[\[=x\[==\[x

View File

@ -0,0 +1 @@
message(STATUS [[ [=[ [=x [==[x)

View File

@ -14,3 +14,4 @@ run_cmake(Unquoted1)
run_cmake(UnterminatedCall1)
run_cmake(UnterminatedCall2)
run_cmake(UnterminatedString)
run_cmake(BracketWarn)