mirror of
https://github.com/reactos/CMake.git
synced 2025-03-02 00:45:48 +00:00
Autogen: Add Quote function and use it for logging
This commit is contained in:
parent
96f6f392e3
commit
e98465cfed
@ -36,6 +36,25 @@ static const char* SettingsKeyRcc = "AM_RCC_OLD_SETTINGS";
|
||||
|
||||
// -- Static functions
|
||||
|
||||
/**
|
||||
* @brief Returns a the string escaped and enclosed in quotes
|
||||
*/
|
||||
static std::string Quoted(const std::string& text)
|
||||
{
|
||||
static const char* rep[18] = { "\\", "\\\\", "\"", "\\\"", "\a", "\\a",
|
||||
"\b", "\\b", "\f", "\\f", "\n", "\\n",
|
||||
"\r", "\\r", "\t", "\\t", "\v", "\\v" };
|
||||
|
||||
std::string res = text;
|
||||
for (const char* const* it = cmArrayBegin(rep); it != cmArrayEnd(rep);
|
||||
it += 2) {
|
||||
cmSystemTools::ReplaceString(res, *it, *(it + 1));
|
||||
}
|
||||
res = '"' + res;
|
||||
res += '"';
|
||||
return res;
|
||||
}
|
||||
|
||||
static std::string GetConfigDefinition(cmMakefile* makefile,
|
||||
const std::string& key,
|
||||
const std::string& config)
|
||||
@ -273,8 +292,8 @@ bool cmQtAutoGenerators::MocDependFilterPush(const std::string& key,
|
||||
success = true;
|
||||
} else {
|
||||
this->LogError("AutoMoc: Error in AUTOMOC_DEPEND_FILTERS: Compiling "
|
||||
"regular expression failed.\nKey: \"" +
|
||||
key + "\"\nReg. exp.: \"" + regExp + "\"");
|
||||
"regular expression failed.\nKey: " +
|
||||
Quoted(key) + "\nExp.: " + Quoted(regExp));
|
||||
}
|
||||
} else {
|
||||
this->LogError("AutoMoc: Error in AUTOMOC_DEPEND_FILTERS: Regular "
|
||||
@ -320,8 +339,8 @@ bool cmQtAutoGenerators::ReadAutogenInfoFile(
|
||||
}
|
||||
// Check Qt version
|
||||
if ((this->QtMajorVersion != "4") && (this->QtMajorVersion != "5")) {
|
||||
this->LogError("AutoGen: Error: Unsupported Qt version: \"" +
|
||||
this->QtMajorVersion + "\"");
|
||||
this->LogError("AutoGen: Error: Unsupported Qt version: " +
|
||||
Quoted(this->QtMajorVersion));
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -719,13 +738,13 @@ void cmQtAutoGenerators::MocFindDepends(
|
||||
if (!incFile.empty()) {
|
||||
mocDepends[absFilename].insert(incFile);
|
||||
if (this->Verbose) {
|
||||
this->LogInfo("AutoMoc: Found dependency:\n \"" + absFilename +
|
||||
"\"\n \"" + incFile + "\"");
|
||||
this->LogInfo("AutoMoc: Found dependency:\n " +
|
||||
Quoted(absFilename) + "\n " + Quoted(incFile));
|
||||
}
|
||||
} else {
|
||||
this->LogWarning("AutoMoc: Warning: \"" + absFilename + "\"\n" +
|
||||
"Could not find dependency file \"" + match +
|
||||
"\"");
|
||||
this->LogWarning("AutoMoc: Warning: " + Quoted(absFilename) +
|
||||
"\n" + "Could not find dependency file " +
|
||||
Quoted(match));
|
||||
}
|
||||
}
|
||||
contentChars += filter.regExp.end();
|
||||
@ -878,9 +897,11 @@ bool cmQtAutoGenerators::MocParseSourceContent(
|
||||
} else {
|
||||
std::ostringstream ost;
|
||||
ost << "AutoMoc: Error: " << absFilename << "\n"
|
||||
<< "The file includes the moc file \"" << incString
|
||||
<< "\", but could not find header \"" << incRealBasename << '{'
|
||||
<< JoinExts(this->HeaderExtensions) << "}\"\n";
|
||||
<< "The file includes the moc file " << Quoted(incString)
|
||||
<< ", but could not find header "
|
||||
<< Quoted(incRealBasename + "{" +
|
||||
JoinExts(this->HeaderExtensions) + "}");
|
||||
;
|
||||
this->LogError(ost.str());
|
||||
return false;
|
||||
}
|
||||
@ -902,32 +923,33 @@ bool cmQtAutoGenerators::MocParseSourceContent(
|
||||
fileToMoc = headerToMoc;
|
||||
if (!requiresMoc && (incBasename == scannedFileBasename)) {
|
||||
std::ostringstream ost;
|
||||
ost << "AutoMoc: Warning: " << absFilename << "\n"
|
||||
<< "The file includes the moc file \"" << incString << "\""
|
||||
ost << "AutoMoc: Warning: " << Quoted(absFilename) << "\n"
|
||||
<< "The file includes the moc file " << Quoted(incString)
|
||||
<< ", but does not contain a Q_OBJECT or Q_GADGET macro.\n"
|
||||
<< "Running moc on \"" << headerToMoc << "\"!\n"
|
||||
<< "Include \"moc_" << incBasename
|
||||
<< ".cpp\" for a compatibility with "
|
||||
"strict mode (see CMAKE_AUTOMOC_RELAXED_MODE).\n";
|
||||
<< "Running moc on " << Quoted(headerToMoc) << "!\n"
|
||||
<< "Include " << Quoted("moc_" + incBasename + ".cpp")
|
||||
<< " for a compatibility with strict mode (see "
|
||||
"CMAKE_AUTOMOC_RELAXED_MODE).\n";
|
||||
this->LogWarning(ost.str());
|
||||
} else {
|
||||
std::ostringstream ost;
|
||||
ost << "AutoMoc: Warning: " << absFilename << "\n"
|
||||
<< "The file includes the moc file \"" << incString
|
||||
<< "\" instead of \"moc_" << incBasename << ".cpp\".\n"
|
||||
<< "Running moc on \"" << headerToMoc << "\"!\n"
|
||||
<< "Include \"moc_" << incBasename
|
||||
<< ".cpp\" for compatibility with "
|
||||
"strict mode (see CMAKE_AUTOMOC_RELAXED_MODE).\n";
|
||||
ost << "AutoMoc: Warning: " << Quoted(absFilename) << "\n"
|
||||
<< "The file includes the moc file " << Quoted(incString)
|
||||
<< " instead of " << Quoted("moc_" + incBasename + ".cpp")
|
||||
<< ".\n"
|
||||
<< "Running moc on " << Quoted(headerToMoc) << "!\n"
|
||||
<< "Include " << Quoted("moc_" + incBasename + ".cpp")
|
||||
<< " for compatibility with strict mode (see "
|
||||
"CMAKE_AUTOMOC_RELAXED_MODE).\n";
|
||||
this->LogWarning(ost.str());
|
||||
}
|
||||
} else {
|
||||
std::ostringstream ost;
|
||||
ost << "AutoMoc: Error: " << absFilename << "\n"
|
||||
<< "The file includes the moc file \"" << incString
|
||||
<< "\", which seems to be the moc file from a different "
|
||||
ost << "AutoMoc: Error: " << Quoted(absFilename) << "\n"
|
||||
<< "The file includes the moc file " << Quoted(incString)
|
||||
<< ". which seems to be the moc file from a different "
|
||||
"source file. CMake also could not find a matching "
|
||||
"header.\n";
|
||||
"header.";
|
||||
this->LogError(ost.str());
|
||||
return false;
|
||||
}
|
||||
@ -941,21 +963,21 @@ bool cmQtAutoGenerators::MocParseSourceContent(
|
||||
// Accept but issue a warning if moc isn't required
|
||||
if (!requiresMoc) {
|
||||
std::ostringstream ost;
|
||||
ost << "AutoMoc: Error: " << absFilename << "\n"
|
||||
<< "The file includes the moc file \"" << incString << "\""
|
||||
ost << "AutoMoc: Error: " << Quoted(absFilename) << "\n"
|
||||
<< "The file includes the moc file " << Quoted(incString)
|
||||
<< ", but does not contain a Q_OBJECT or Q_GADGET "
|
||||
"macro.\n";
|
||||
"macro.";
|
||||
this->LogWarning(ost.str());
|
||||
}
|
||||
} else {
|
||||
// Don't allow FOO.moc include other than self in strict mode
|
||||
std::ostringstream ost;
|
||||
ost << "AutoMoc: Error: " << absFilename << "\n"
|
||||
<< "The file includes the moc file \"" << incString
|
||||
<< "\", which seems to be the moc file from a different "
|
||||
"source file. This is not supported. Include \""
|
||||
<< scannedFileBasename
|
||||
<< ".moc\" to run moc on this source file.\n";
|
||||
ost << "AutoMoc: Error: " << Quoted(absFilename) << "\n"
|
||||
<< "The file includes the moc file " << Quoted(incString)
|
||||
<< ", which seems to be the moc file from a different "
|
||||
"source file. This is not supported. Include "
|
||||
<< Quoted(scannedFileBasename + ".moc")
|
||||
<< " to run moc on this source file.";
|
||||
this->LogError(ost.str());
|
||||
return false;
|
||||
}
|
||||
@ -978,15 +1000,15 @@ bool cmQtAutoGenerators::MocParseSourceContent(
|
||||
if (relaxed && !ownMocUnderscoreInclude.empty()) {
|
||||
// This is for KDE4 compatibility:
|
||||
std::ostringstream ost;
|
||||
ost << "AutoMoc: Warning: " << absFilename << "\n"
|
||||
ost << "AutoMoc: Warning: " << Quoted(absFilename) << "\n"
|
||||
<< "The file contains a " << macroName
|
||||
<< " macro, but does not include "
|
||||
<< "\"" << scannedFileBasename << ".moc\", but instead includes "
|
||||
<< "\"" << ownMocUnderscoreInclude << "\".\n"
|
||||
<< "Running moc on \"" << absFilename << "\"!\n"
|
||||
<< "Better include \"" << scannedFileBasename
|
||||
<< ".moc\" for compatibility with "
|
||||
"strict mode (see CMAKE_AUTOMOC_RELAXED_MODE).\n";
|
||||
<< Quoted(scannedFileBasename + ".moc") << ", but instead includes "
|
||||
<< Quoted(ownMocUnderscoreInclude) << ".\n"
|
||||
<< "Running moc on " << Quoted(absFilename) << "!\n"
|
||||
<< "Better include " << Quoted(scannedFileBasename + ".moc")
|
||||
<< " for compatibility with strict mode (see "
|
||||
"CMAKE_AUTOMOC_RELAXED_MODE).";
|
||||
this->LogWarning(ost.str());
|
||||
|
||||
// Use scanned source file instead of scanned header file as moc source
|
||||
@ -997,10 +1019,10 @@ bool cmQtAutoGenerators::MocParseSourceContent(
|
||||
} else {
|
||||
// Otherwise always error out since it will not compile:
|
||||
std::ostringstream ost;
|
||||
ost << "AutoMoc: Error: " << absFilename << "\n"
|
||||
ost << "AutoMoc: Error: " << Quoted(absFilename) << "\n"
|
||||
<< "The file contains a " << macroName
|
||||
<< " macro, but does not include "
|
||||
<< "\"" << scannedFileBasename << ".moc\"!\n";
|
||||
<< Quoted(scannedFileBasename + ".moc") << "!";
|
||||
this->LogError(ost.str());
|
||||
return false;
|
||||
}
|
||||
@ -1280,7 +1302,7 @@ bool cmQtAutoGenerators::MocGenerateFile(
|
||||
{
|
||||
std::ostringstream ost;
|
||||
ost << "AutoMoc: Error: moc process failed for\n";
|
||||
ost << "\"" << mocFileRel << "\"\n";
|
||||
ost << Quoted(mocFileRel) << "\n";
|
||||
ost << "AutoMoc: Command:\n" << cmJoin(cmd, " ") << "\n";
|
||||
ost << "AutoMoc: Command output:\n" << output << "\n";
|
||||
this->LogError(ost.str());
|
||||
@ -1419,8 +1441,8 @@ bool cmQtAutoGenerators::UicGenerateFile(const std::string& realName,
|
||||
{
|
||||
std::ostringstream ost;
|
||||
ost << "AutoUic: Error: uic process failed for\n";
|
||||
ost << "\"" << uicFileRel << "\" needed by\n";
|
||||
ost << "\"" << realName << "\"\n";
|
||||
ost << Quoted(uicFileRel) << " needed by\n";
|
||||
ost << Quoted(realName) << "\n";
|
||||
ost << "AutoUic: Command:\n" << cmJoin(cmd, " ") << "\n";
|
||||
ost << "AutoUic: Command output:\n" << output << "\n";
|
||||
this->LogError(ost.str());
|
||||
@ -1558,7 +1580,7 @@ bool cmQtAutoGenerators::RccGenerateFile(const std::string& rccInputFile,
|
||||
{
|
||||
std::ostringstream ost;
|
||||
ost << "AutoRcc: Error: rcc process failed for\n";
|
||||
ost << "\"" << rccOutputFile << "\"\n";
|
||||
ost << Quoted(rccOutputFile) << "\n";
|
||||
ost << "AutoRcc: Command:\n" << cmJoin(cmd, " ") << "\n";
|
||||
ost << "AutoRcc: Command output:\n" << output << "\n";
|
||||
this->LogError(ost.str());
|
||||
|
Loading…
x
Reference in New Issue
Block a user