summaryrefslogtreecommitdiffstats
path: root/Source/cmQtAutoGenerators.cxx
diff options
context:
space:
mode:
authorSebastian Holtermann <sebholt@xwmw.org>2017-02-22 19:08:53 (GMT)
committerSebastian Holtermann <sebholt@xwmw.org>2017-02-23 13:14:29 (GMT)
commite98465cfed68f6511af552ac8ab0d168791f4302 (patch)
treeb3037a19f76bf48e6f69a19017eec528a63f929e /Source/cmQtAutoGenerators.cxx
parent96f6f392e3d2ba95c11d0b77fbb5da485e626ed4 (diff)
downloadCMake-e98465cfed68f6511af552ac8ab0d168791f4302.zip
CMake-e98465cfed68f6511af552ac8ab0d168791f4302.tar.gz
CMake-e98465cfed68f6511af552ac8ab0d168791f4302.tar.bz2
Autogen: Add Quote function and use it for logging
Diffstat (limited to 'Source/cmQtAutoGenerators.cxx')
-rw-r--r--Source/cmQtAutoGenerators.cxx124
1 files changed, 73 insertions, 51 deletions
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index e1b4f35..8d65129 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -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());