Refactor the -W options parser to be generic.
Refactor the -Wdev and -Wno-dev options parser to use a generic -W parser that follows the GCC pattern, excluding support for -Werror=TYPE and -Wno-error=TYPE formats for now.
This commit is contained in:
parent
246b0bfbfd
commit
07388f83b6
104
Source/cmake.cxx
104
Source/cmake.cxx
|
@ -127,8 +127,6 @@ cmake::cmake()
|
|||
this->WarnUnused = false;
|
||||
this->WarnUnusedCli = true;
|
||||
this->CheckSystemVars = false;
|
||||
this->SuppressDevWarnings = false;
|
||||
this->DoSuppressDevWarnings = false;
|
||||
this->DebugOutput = false;
|
||||
this->DebugTryCompile = false;
|
||||
this->ClearBuildSystem = false;
|
||||
|
@ -274,15 +272,51 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
|||
return false;
|
||||
}
|
||||
}
|
||||
else if(arg.find("-Wno-dev",0) == 0)
|
||||
else if(cmHasLiteralPrefix(arg, "-W"))
|
||||
{
|
||||
this->SuppressDevWarnings = true;
|
||||
this->DoSuppressDevWarnings = true;
|
||||
}
|
||||
else if(arg.find("-Wdev",0) == 0)
|
||||
{
|
||||
this->SuppressDevWarnings = false;
|
||||
this->DoSuppressDevWarnings = true;
|
||||
std::string entry = arg.substr(2);
|
||||
if (entry.empty())
|
||||
{
|
||||
++i;
|
||||
if (i < args.size())
|
||||
{
|
||||
entry = args[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
cmSystemTools::Error("-W must be followed with [no-]<name>.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
std::string name;
|
||||
bool foundNo = false;
|
||||
unsigned int nameStartPosition = 0;
|
||||
|
||||
if (entry.find("no-", nameStartPosition) == 0)
|
||||
{
|
||||
foundNo = true;
|
||||
nameStartPosition += 3;
|
||||
}
|
||||
|
||||
name = entry.substr(nameStartPosition);
|
||||
if (name.empty())
|
||||
{
|
||||
cmSystemTools::Error("No warning name provided.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!foundNo)
|
||||
{
|
||||
// -W<name>
|
||||
this->DiagLevels[name] = std::max(this->DiagLevels[name],
|
||||
DIAG_WARN);
|
||||
}
|
||||
else
|
||||
{
|
||||
// -Wno<name>
|
||||
this->DiagLevels[name] = DIAG_IGNORE;
|
||||
}
|
||||
}
|
||||
else if(arg.find("-U",0) == 0)
|
||||
{
|
||||
|
@ -618,11 +652,7 @@ void cmake::SetArgs(const std::vector<std::string>& args,
|
|||
// skip for now
|
||||
i++;
|
||||
}
|
||||
else if(arg.find("-Wno-dev",0) == 0)
|
||||
{
|
||||
// skip for now
|
||||
}
|
||||
else if(arg.find("-Wdev",0) == 0)
|
||||
else if(arg.find("-W",0) == 0)
|
||||
{
|
||||
// skip for now
|
||||
}
|
||||
|
@ -1231,25 +1261,28 @@ int cmake::HandleDeleteCacheVariables(const std::string& var)
|
|||
|
||||
int cmake::Configure()
|
||||
{
|
||||
if(this->DoSuppressDevWarnings)
|
||||
DiagLevel diagLevel;
|
||||
|
||||
if (this->DiagLevels.count("dev") == 1)
|
||||
{
|
||||
if(this->SuppressDevWarnings)
|
||||
|
||||
diagLevel = this->DiagLevels["dev"];
|
||||
if (diagLevel == DIAG_IGNORE)
|
||||
{
|
||||
this->
|
||||
AddCacheEntry("CMAKE_SUPPRESS_DEVELOPER_WARNINGS", "TRUE",
|
||||
"Suppress Warnings that are meant for"
|
||||
" the author of the CMakeLists.txt files.",
|
||||
cmState::INTERNAL);
|
||||
this->AddCacheEntry("CMAKE_SUPPRESS_DEVELOPER_WARNINGS", "TRUE",
|
||||
"Suppress Warnings that are meant for"
|
||||
" the author of the CMakeLists.txt files.",
|
||||
cmState::INTERNAL);
|
||||
}
|
||||
else
|
||||
else if (diagLevel == DIAG_WARN)
|
||||
{
|
||||
this->
|
||||
AddCacheEntry("CMAKE_SUPPRESS_DEVELOPER_WARNINGS", "FALSE",
|
||||
"Suppress Warnings that are meant for"
|
||||
" the author of the CMakeLists.txt files.",
|
||||
cmState::INTERNAL);
|
||||
this->AddCacheEntry("CMAKE_SUPPRESS_DEVELOPER_WARNINGS", "FALSE",
|
||||
"Suppress Warnings that are meant for"
|
||||
" the author of the CMakeLists.txt files.",
|
||||
cmState::INTERNAL);
|
||||
}
|
||||
}
|
||||
|
||||
int ret = this->ActualConfigure();
|
||||
const char* delCacheVars = this->State
|
||||
->GetGlobalProperty("__CMAKE_DELETE_CACHE_CHANGE_VARS_");
|
||||
|
@ -2805,6 +2838,21 @@ void cmake::RunCheckForUnusedVariables()
|
|||
#endif
|
||||
}
|
||||
|
||||
void cmake::SetSuppressDevWarnings(bool b)
|
||||
{
|
||||
// equivalent to -Wno-dev
|
||||
if (b)
|
||||
{
|
||||
this->DiagLevels["dev"] = DIAG_IGNORE;
|
||||
}
|
||||
// equivalent to -Wdev
|
||||
else
|
||||
{
|
||||
this->DiagLevels["dev"] = std::max(this->DiagLevels["dev"],
|
||||
DIAG_WARN);
|
||||
}
|
||||
}
|
||||
|
||||
bool cmake::GetSuppressDevWarnings(cmMakefile const* mf)
|
||||
{
|
||||
/*
|
||||
|
|
|
@ -68,6 +68,11 @@ class cmake
|
|||
DEPRECATION_WARNING
|
||||
};
|
||||
|
||||
enum DiagLevel
|
||||
{
|
||||
DIAG_IGNORE,
|
||||
DIAG_WARN
|
||||
};
|
||||
|
||||
/** \brief Describes the working modes of cmake */
|
||||
enum WorkingMode
|
||||
|
@ -303,11 +308,7 @@ class cmake
|
|||
std::string const& GetCMakeEditCommand() const
|
||||
{ return this->CMakeEditCommand; }
|
||||
|
||||
void SetSuppressDevWarnings(bool v)
|
||||
{
|
||||
this->SuppressDevWarnings = v;
|
||||
this->DoSuppressDevWarnings = true;
|
||||
}
|
||||
void SetSuppressDevWarnings(bool v);
|
||||
/*
|
||||
* Get the state of the suppression of developer (author) warnings.
|
||||
* Returns false, by default, if developer warnings should be shown, true
|
||||
|
@ -359,8 +360,7 @@ protected:
|
|||
|
||||
cmGlobalGenerator *GlobalGenerator;
|
||||
cmCacheManager *CacheManager;
|
||||
bool SuppressDevWarnings;
|
||||
bool DoSuppressDevWarnings;
|
||||
std::map<std::string, DiagLevel> DiagLevels;
|
||||
std::string GeneratorPlatform;
|
||||
std::string GeneratorToolset;
|
||||
|
||||
|
|
|
@ -129,13 +129,24 @@ set(RunCMake_TEST_OPTIONS -Wno-dev)
|
|||
run_cmake(Wno-dev)
|
||||
unset(RunCMake_TEST_OPTIONS)
|
||||
|
||||
set(RunCMake_TEST_OPTIONS -Wno-dev -Wdev)
|
||||
set(RunCMake_TEST_OPTIONS -Wdev)
|
||||
run_cmake(Wdev)
|
||||
unset(RunCMake_TEST_OPTIONS)
|
||||
|
||||
# Dev warnings should be on by default
|
||||
run_cmake(Wdev)
|
||||
|
||||
# Conflicting -W options should honor the last value
|
||||
set(RunCMake_TEST_OPTIONS -Wno-dev -Wdev)
|
||||
run_cmake(Wdev)
|
||||
unset(RunCMake_TEST_OPTIONS)
|
||||
set(RunCMake_TEST_OPTIONS -Wdev -Wno-dev)
|
||||
run_cmake(Wno-dev)
|
||||
unset(RunCMake_TEST_OPTIONS)
|
||||
|
||||
run_cmake_command(W_bad-arg1 ${CMAKE_COMMAND} -W)
|
||||
run_cmake_command(W_bad-arg2 ${CMAKE_COMMAND} -Wno-)
|
||||
|
||||
set(RunCMake_TEST_OPTIONS --debug-output)
|
||||
run_cmake(debug-output)
|
||||
unset(RunCMake_TEST_OPTIONS)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1,2 @@
|
|||
CMake Error: -W must be followed with \[no-\]<name>.
|
||||
CMake Error: Problem processing arguments. Aborting.
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1,2 @@
|
|||
CMake Error: No warning name provided.
|
||||
CMake Error: Problem processing arguments. Aborting.
|
Loading…
Reference in New Issue