diff options
author | Sebastian Holtermann <sebholt@xwmw.org> | 2017-02-22 19:08:53 (GMT) |
---|---|---|
committer | Sebastian Holtermann <sebholt@xwmw.org> | 2017-02-23 13:14:29 (GMT) |
commit | e98465cfed68f6511af552ac8ab0d168791f4302 (patch) | |
tree | b3037a19f76bf48e6f69a19017eec528a63f929e /Source/cmQtAutoGenerators.cxx | |
parent | 96f6f392e3d2ba95c11d0b77fbb5da485e626ed4 (diff) | |
download | CMake-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.cxx | 124 |
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()); |