|  | @@ -465,9 +465,7 @@ bool cmQtAutoGenerators::SettingsFileWrite(const std::string& targetDirectory)
 | 
	
		
			
				|  |  |    if (this->GenerateAllAny()) {
 | 
	
		
			
				|  |  |      const std::string filename = SettingsFile(targetDirectory);
 | 
	
		
			
				|  |  |      if (this->Verbose) {
 | 
	
		
			
				|  |  | -      std::ostringstream err;
 | 
	
		
			
				|  |  | -      err << "AutoGen: Writing settings file " << filename << "\n";
 | 
	
		
			
				|  |  | -      this->LogInfo(err.str());
 | 
	
		
			
				|  |  | +      this->LogInfo("AutoGen: Writing settings file " + filename);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      cmsys::ofstream outfile;
 | 
	
		
			
				|  |  |      outfile.open(filename.c_str(), std::ios::trunc);
 | 
	
	
		
			
				|  | @@ -483,8 +481,8 @@ bool cmQtAutoGenerators::SettingsFileWrite(const std::string& targetDirectory)
 | 
	
		
			
				|  |  |        cmSystemTools::RemoveFile(filename);
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  |          std::ostringstream err;
 | 
	
		
			
				|  |  | -        err << "AutoGen: Error: Writing old settings file failed: " << filename
 | 
	
		
			
				|  |  | -            << std::endl;
 | 
	
		
			
				|  |  | +        err << "AutoGen: Error: Writing old settings file failed: "
 | 
	
		
			
				|  |  | +            << filename;
 | 
	
		
			
				|  |  |          this->LogError(err.str());
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -686,12 +684,12 @@ void cmQtAutoGenerators::MocFindDepends(
 | 
	
		
			
				|  |  |              mocDepends[absFilename].insert(incFile);
 | 
	
		
			
				|  |  |              if (this->Verbose) {
 | 
	
		
			
				|  |  |                this->LogInfo("AutoMoc: Found dependency:\n  \"" + absFilename +
 | 
	
		
			
				|  |  | -                            "\"\n  \"" + incFile + "\"\n");
 | 
	
		
			
				|  |  | +                            "\"\n  \"" + incFile + "\"");
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |            } else {
 | 
	
		
			
				|  |  |              this->LogWarning("AutoMoc: Warning: \"" + absFilename + "\"\n" +
 | 
	
		
			
				|  |  |                               "Could not find dependency file \"" + match +
 | 
	
		
			
				|  |  | -                             "\"\n");
 | 
	
		
			
				|  |  | +                             "\"");
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          contentChars += filter.regExp.end();
 | 
	
	
		
			
				|  | @@ -741,10 +739,10 @@ bool cmQtAutoGenerators::ParseSourceFile(
 | 
	
		
			
				|  |  |    bool success = true;
 | 
	
		
			
				|  |  |    const std::string contentText = ReadAll(absFilename);
 | 
	
		
			
				|  |  |    if (contentText.empty()) {
 | 
	
		
			
				|  |  | -    std::ostringstream err;
 | 
	
		
			
				|  |  | -    err << "AutoGen: Warning: " << absFilename << "\n"
 | 
	
		
			
				|  |  | +    std::ostringstream ost;
 | 
	
		
			
				|  |  | +    ost << "AutoGen: Warning: " << absFilename << "\n"
 | 
	
		
			
				|  |  |          << "The file is empty\n";
 | 
	
		
			
				|  |  | -    this->LogWarning(err.str());
 | 
	
		
			
				|  |  | +    this->LogWarning(ost.str());
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  |      // Parse source contents for MOC
 | 
	
		
			
				|  |  |      if (success && !this->MocSkip(absFilename)) {
 | 
	
	
		
			
				|  | @@ -764,9 +762,7 @@ void cmQtAutoGenerators::UicParseContent(
 | 
	
		
			
				|  |  |    std::map<std::string, std::vector<std::string> >& uisIncluded)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    if (this->Verbose) {
 | 
	
		
			
				|  |  | -    std::ostringstream err;
 | 
	
		
			
				|  |  | -    err << "AutoUic: Checking " << absFilename << "\n";
 | 
	
		
			
				|  |  | -    this->LogInfo(err.str());
 | 
	
		
			
				|  |  | +    this->LogInfo("AutoUic: Checking " + absFilename);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    const char* contentChars = contentText.c_str();
 | 
	
	
		
			
				|  | @@ -792,9 +788,7 @@ bool cmQtAutoGenerators::MocParseSourceContent(
 | 
	
		
			
				|  |  |    std::map<std::string, std::set<std::string> >& mocDepends, bool relaxed)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    if (this->Verbose) {
 | 
	
		
			
				|  |  | -    std::ostringstream err;
 | 
	
		
			
				|  |  | -    err << "AutoMoc: Checking " << absFilename << "\n";
 | 
	
		
			
				|  |  | -    this->LogInfo(err.str());
 | 
	
		
			
				|  |  | +    this->LogInfo("AutoMoc: Checking " + absFilename);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    const std::string scannedFileAbsPath =
 | 
	
	
		
			
				|  | @@ -846,12 +840,12 @@ bool cmQtAutoGenerators::MocParseSourceContent(
 | 
	
		
			
				|  |  |              ownMocUnderscoreHeader = headerToMoc;
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  | -          std::ostringstream err;
 | 
	
		
			
				|  |  | -          err << "AutoMoc: Error: " << absFilename << "\n"
 | 
	
		
			
				|  |  | +          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";
 | 
	
		
			
				|  |  | -          this->LogError(err.str());
 | 
	
		
			
				|  |  | +          this->LogError(ost.str());
 | 
	
		
			
				|  |  |            return false;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        } else {
 | 
	
	
		
			
				|  | @@ -871,34 +865,34 @@ bool cmQtAutoGenerators::MocParseSourceContent(
 | 
	
		
			
				|  |  |                // This is for KDE4 compatibility:
 | 
	
		
			
				|  |  |                fileToMoc = headerToMoc;
 | 
	
		
			
				|  |  |                if (!requiresMoc && (incBasename == scannedFileBasename)) {
 | 
	
		
			
				|  |  | -                std::ostringstream err;
 | 
	
		
			
				|  |  | -                err << "AutoMoc: Warning: " << absFilename << "\n"
 | 
	
		
			
				|  |  | +                std::ostringstream ost;
 | 
	
		
			
				|  |  | +                ost << "AutoMoc: Warning: " << absFilename << "\n"
 | 
	
		
			
				|  |  |                      << "The file includes the moc file \"" << 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";
 | 
	
		
			
				|  |  | -                this->LogWarning(err.str());
 | 
	
		
			
				|  |  | +                this->LogWarning(ost.str());
 | 
	
		
			
				|  |  |                } else {
 | 
	
		
			
				|  |  | -                std::ostringstream err;
 | 
	
		
			
				|  |  | -                err << "AutoMoc: Warning: " << absFilename << "\n"
 | 
	
		
			
				|  |  | +                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";
 | 
	
		
			
				|  |  | -                this->LogWarning(err.str());
 | 
	
		
			
				|  |  | +                this->LogWarning(ost.str());
 | 
	
		
			
				|  |  |                }
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  | -              std::ostringstream err;
 | 
	
		
			
				|  |  | -              err << "AutoMoc: Error: " << absFilename << "\n"
 | 
	
		
			
				|  |  | +              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. CMake also could not find a matching "
 | 
	
		
			
				|  |  |                       "header.\n";
 | 
	
		
			
				|  |  | -              this->LogError(err.str());
 | 
	
		
			
				|  |  | +              this->LogError(ost.str());
 | 
	
		
			
				|  |  |                return false;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |            }
 | 
	
	
		
			
				|  | @@ -910,23 +904,23 @@ bool cmQtAutoGenerators::MocParseSourceContent(
 | 
	
		
			
				|  |  |              ownDotMocIncluded = true;
 | 
	
		
			
				|  |  |              // Accept but issue a warning if moc isn't required
 | 
	
		
			
				|  |  |              if (!requiresMoc) {
 | 
	
		
			
				|  |  | -              std::ostringstream err;
 | 
	
		
			
				|  |  | -              err << "AutoMoc: Error: " << absFilename << "\n"
 | 
	
		
			
				|  |  | +              std::ostringstream ost;
 | 
	
		
			
				|  |  | +              ost << "AutoMoc: Error: " << absFilename << "\n"
 | 
	
		
			
				|  |  |                    << "The file includes the moc file \"" << incString << "\""
 | 
	
		
			
				|  |  |                    << ", but does not contain a Q_OBJECT or Q_GADGET "
 | 
	
		
			
				|  |  |                       "macro.\n";
 | 
	
		
			
				|  |  | -              this->LogWarning(err.str());
 | 
	
		
			
				|  |  | +              this->LogWarning(ost.str());
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |            } else {
 | 
	
		
			
				|  |  |              // Don't allow FOO.moc include other than self in strict mode
 | 
	
		
			
				|  |  | -            std::ostringstream err;
 | 
	
		
			
				|  |  | -            err << "AutoMoc: Error: " << absFilename << "\n"
 | 
	
		
			
				|  |  | +            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";
 | 
	
		
			
				|  |  | -            this->LogError(err.str());
 | 
	
		
			
				|  |  | +            this->LogError(ost.str());
 | 
	
		
			
				|  |  |              return false;
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -947,8 +941,8 @@ bool cmQtAutoGenerators::MocParseSourceContent(
 | 
	
		
			
				|  |  |      // But warn, since this is not how it is supposed to be used.
 | 
	
		
			
				|  |  |      if (relaxed && !ownMocUnderscoreInclude.empty()) {
 | 
	
		
			
				|  |  |        // This is for KDE4 compatibility:
 | 
	
		
			
				|  |  | -      std::ostringstream err;
 | 
	
		
			
				|  |  | -      err << "AutoMoc: Warning: " << absFilename << "\n"
 | 
	
		
			
				|  |  | +      std::ostringstream ost;
 | 
	
		
			
				|  |  | +      ost << "AutoMoc: Warning: " << absFilename << "\n"
 | 
	
		
			
				|  |  |            << "The file contains a " << macroName
 | 
	
		
			
				|  |  |            << " macro, but does not include "
 | 
	
		
			
				|  |  |            << "\"" << scannedFileBasename << ".moc\", but instead includes "
 | 
	
	
		
			
				|  | @@ -957,7 +951,7 @@ bool cmQtAutoGenerators::MocParseSourceContent(
 | 
	
		
			
				|  |  |            << "Better include \"" << scannedFileBasename
 | 
	
		
			
				|  |  |            << ".moc\" for compatibility with "
 | 
	
		
			
				|  |  |               "strict mode (see CMAKE_AUTOMOC_RELAXED_MODE).\n";
 | 
	
		
			
				|  |  | -      this->LogWarning(err.str());
 | 
	
		
			
				|  |  | +      this->LogWarning(ost.str());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        // Use scanned source file instead of scanned header file as moc source
 | 
	
		
			
				|  |  |        mocsIncluded[absFilename] = ownMocUnderscoreInclude;
 | 
	
	
		
			
				|  | @@ -966,12 +960,12 @@ bool cmQtAutoGenerators::MocParseSourceContent(
 | 
	
		
			
				|  |  |        mocsIncluded.erase(ownMocUnderscoreHeader);
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  |        // Otherwise always error out since it will not compile:
 | 
	
		
			
				|  |  | -      std::ostringstream err;
 | 
	
		
			
				|  |  | -      err << "AutoMoc: Error: " << absFilename << "\n"
 | 
	
		
			
				|  |  | +      std::ostringstream ost;
 | 
	
		
			
				|  |  | +      ost << "AutoMoc: Error: " << absFilename << "\n"
 | 
	
		
			
				|  |  |            << "The file contains a " << macroName
 | 
	
		
			
				|  |  |            << " macro, but does not include "
 | 
	
		
			
				|  |  |            << "\"" << scannedFileBasename << ".moc\"!\n";
 | 
	
		
			
				|  |  | -      this->LogError(err.str());
 | 
	
		
			
				|  |  | +      this->LogError(ost.str());
 | 
	
		
			
				|  |  |        return false;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -986,9 +980,7 @@ void cmQtAutoGenerators::MocParseHeaderContent(
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    // Log
 | 
	
		
			
				|  |  |    if (this->Verbose) {
 | 
	
		
			
				|  |  | -    std::ostringstream err;
 | 
	
		
			
				|  |  | -    err << "AutoMoc: Checking " << absFilename << "\n";
 | 
	
		
			
				|  |  | -    this->LogInfo(err.str());
 | 
	
		
			
				|  |  | +    this->LogInfo("AutoMoc: Checking " + absFilename);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    if (this->MocRequired(contentText)) {
 | 
	
		
			
				|  |  |      // Register moc job
 | 
	
	
		
			
				|  | @@ -1080,15 +1072,14 @@ bool cmQtAutoGenerators::MocGenerateAll(
 | 
	
		
			
				|  |  |      std::map<std::string, std::string> mergedMocs(mocsIncluded);
 | 
	
		
			
				|  |  |      mergedMocs.insert(mocsNotIncluded.begin(), mocsNotIncluded.end());
 | 
	
		
			
				|  |  |      if (this->NameCollisionTest(mergedMocs, collisions)) {
 | 
	
		
			
				|  |  | -      std::ostringstream err;
 | 
	
		
			
				|  |  | -      err << "AutoMoc: Error: "
 | 
	
		
			
				|  |  | +      std::ostringstream ost;
 | 
	
		
			
				|  |  | +      ost << "AutoMoc: Error: "
 | 
	
		
			
				|  |  |               "The same moc file will be generated "
 | 
	
		
			
				|  |  | -             "from different sources."
 | 
	
		
			
				|  |  | -          << std::endl
 | 
	
		
			
				|  |  | -          << "To avoid this error either" << std::endl
 | 
	
		
			
				|  |  | -          << "- rename the source files or" << std::endl
 | 
	
		
			
				|  |  | -          << "- do not include the (moc_NAME.cpp|NAME.moc) file" << std::endl;
 | 
	
		
			
				|  |  | -      this->LogErrorNameCollision(err.str(), collisions);
 | 
	
		
			
				|  |  | +             "from different sources.\n"
 | 
	
		
			
				|  |  | +             "To avoid this error either\n"
 | 
	
		
			
				|  |  | +             "- rename the source files or\n"
 | 
	
		
			
				|  |  | +             "- do not include the (moc_NAME.cpp|NAME.moc) file";
 | 
	
		
			
				|  |  | +      this->LogErrorNameCollision(ost.str(), collisions);
 | 
	
		
			
				|  |  |        return false;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -1124,21 +1115,20 @@ bool cmQtAutoGenerators::MocGenerateAll(
 | 
	
		
			
				|  |  |    // Compose moc_compilation.cpp content
 | 
	
		
			
				|  |  |    std::string automocSource;
 | 
	
		
			
				|  |  |    {
 | 
	
		
			
				|  |  | -    std::ostringstream outStream;
 | 
	
		
			
				|  |  | -    outStream << "/* This file is autogenerated, do not edit*/\n";
 | 
	
		
			
				|  |  | +    std::ostringstream ost;
 | 
	
		
			
				|  |  | +    ost << "/* This file is autogenerated, do not edit*/\n";
 | 
	
		
			
				|  |  |      if (mocsNotIncluded.empty()) {
 | 
	
		
			
				|  |  |        // Dummy content
 | 
	
		
			
				|  |  | -      outStream << "enum some_compilers { need_more_than_nothing };\n";
 | 
	
		
			
				|  |  | +      ost << "enum some_compilers { need_more_than_nothing };\n";
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  |        // Valid content
 | 
	
		
			
				|  |  |        for (std::map<std::string, std::string>::const_iterator it =
 | 
	
		
			
				|  |  |               mocsNotIncluded.begin();
 | 
	
		
			
				|  |  |             it != mocsNotIncluded.end(); ++it) {
 | 
	
		
			
				|  |  | -        outStream << "#include \"" << it->second << "\"\n";
 | 
	
		
			
				|  |  | +        ost << "#include \"" << it->second << "\"\n";
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    outStream.flush();
 | 
	
		
			
				|  |  | -    automocSource = outStream.str();
 | 
	
		
			
				|  |  | +    automocSource = ost.str();
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Check if the content of moc_compilation.cpp changed
 | 
	
	
		
			
				|  | @@ -1159,25 +1149,20 @@ bool cmQtAutoGenerators::MocGenerateAll(
 | 
	
		
			
				|  |  |        outfile.open(this->MocCppFilenameAbs.c_str(), std::ios::trunc);
 | 
	
		
			
				|  |  |        if (!outfile) {
 | 
	
		
			
				|  |  |          success = false;
 | 
	
		
			
				|  |  | -        std::ostringstream err;
 | 
	
		
			
				|  |  | -        err << "AutoMoc: error opening " << this->MocCppFilenameAbs << "\n";
 | 
	
		
			
				|  |  | -        this->LogError(err.str());
 | 
	
		
			
				|  |  | +        this->LogError("AutoMoc: error opening " + this->MocCppFilenameAbs);
 | 
	
		
			
				|  |  |        } else {
 | 
	
		
			
				|  |  |          outfile << automocSource;
 | 
	
		
			
				|  |  |          // Check for write errors
 | 
	
		
			
				|  |  |          if (!outfile.good()) {
 | 
	
		
			
				|  |  |            success = false;
 | 
	
		
			
				|  |  | -          std::ostringstream err;
 | 
	
		
			
				|  |  | -          err << "AutoMoc: error writing " << this->MocCppFilenameAbs << "\n";
 | 
	
		
			
				|  |  | -          this->LogError(err.str());
 | 
	
		
			
				|  |  | +          this->LogError("AutoMoc: error writing " + this->MocCppFilenameAbs);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    } else if (mocCompFileGenerated) {
 | 
	
		
			
				|  |  |      // Only touch moc_compilation.cpp
 | 
	
		
			
				|  |  |      if (this->Verbose) {
 | 
	
		
			
				|  |  | -      this->LogInfo("Touching MOC compilation " + this->MocCppFilenameRel +
 | 
	
		
			
				|  |  | -                    "\n");
 | 
	
		
			
				|  |  | +      this->LogInfo("Touching MOC compilation " + this->MocCppFilenameRel);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      cmSystemTools::Touch(this->MocCppFilenameAbs, false);
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -1257,12 +1242,12 @@ bool cmQtAutoGenerators::MocGenerateFile(
 | 
	
		
			
				|  |  |        if (!res || (retVal != 0)) {
 | 
	
		
			
				|  |  |          // Command failed
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -          std::ostringstream err;
 | 
	
		
			
				|  |  | -          err << "AutoMoc: Error: moc process failed for\n";
 | 
	
		
			
				|  |  | -          err << "\"" << mocFileRel << "\"\n";
 | 
	
		
			
				|  |  | -          err << "AutoMoc: Command:\n" << cmJoin(cmd, " ") << "\n";
 | 
	
		
			
				|  |  | -          err << "AutoMoc: Command output:\n" << output << "\n";
 | 
	
		
			
				|  |  | -          this->LogError(err.str());
 | 
	
		
			
				|  |  | +          std::ostringstream ost;
 | 
	
		
			
				|  |  | +          ost << "AutoMoc: Error: moc process failed for\n";
 | 
	
		
			
				|  |  | +          ost << "\"" << mocFileRel << "\"\n";
 | 
	
		
			
				|  |  | +          ost << "AutoMoc: Command:\n" << cmJoin(cmd, " ") << "\n";
 | 
	
		
			
				|  |  | +          ost << "AutoMoc: Command output:\n" << output << "\n";
 | 
	
		
			
				|  |  | +          this->LogError(ost.str());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          cmSystemTools::RemoveFile(mocFileAbs);
 | 
	
		
			
				|  |  |          this->RunMocFailed = true;
 | 
	
	
		
			
				|  | @@ -1311,12 +1296,11 @@ bool cmQtAutoGenerators::UicGenerateAll(
 | 
	
		
			
				|  |  |    {
 | 
	
		
			
				|  |  |      std::multimap<std::string, std::string> collisions;
 | 
	
		
			
				|  |  |      if (this->NameCollisionTest(testMap, collisions)) {
 | 
	
		
			
				|  |  | -      std::ostringstream err;
 | 
	
		
			
				|  |  | -      err << "AutoUic: Error: The same ui_NAME.h file will be generated "
 | 
	
		
			
				|  |  | -             "from different sources."
 | 
	
		
			
				|  |  | -          << std::endl
 | 
	
		
			
				|  |  | -          << "To avoid this error rename the source files." << std::endl;
 | 
	
		
			
				|  |  | -      this->LogErrorNameCollision(err.str(), collisions);
 | 
	
		
			
				|  |  | +      std::ostringstream ost;
 | 
	
		
			
				|  |  | +      ost << "AutoUic: Error: The same ui_NAME.h file will be generated "
 | 
	
		
			
				|  |  | +             "from different sources.\n"
 | 
	
		
			
				|  |  | +             "To avoid this error rename the source files.\n";
 | 
	
		
			
				|  |  | +      this->LogErrorNameCollision(ost.str(), collisions);
 | 
	
		
			
				|  |  |        return false;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -1397,13 +1381,13 @@ bool cmQtAutoGenerators::UicGenerateFile(const std::string& realName,
 | 
	
		
			
				|  |  |        if (!res || (retVal != 0)) {
 | 
	
		
			
				|  |  |          // Command failed
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -          std::ostringstream err;
 | 
	
		
			
				|  |  | -          err << "AutoUic: Error: uic process failed for\n";
 | 
	
		
			
				|  |  | -          err << "\"" << uicFileRel << "\" needed by\n";
 | 
	
		
			
				|  |  | -          err << "\"" << realName << "\"\n";
 | 
	
		
			
				|  |  | -          err << "AutoUic: Command:\n" << cmJoin(cmd, " ") << "\n";
 | 
	
		
			
				|  |  | -          err << "AutoUic: Command output:\n" << output << "\n";
 | 
	
		
			
				|  |  | -          this->LogError(err.str());
 | 
	
		
			
				|  |  | +          std::ostringstream ost;
 | 
	
		
			
				|  |  | +          ost << "AutoUic: Error: uic process failed for\n";
 | 
	
		
			
				|  |  | +          ost << "\"" << uicFileRel << "\" needed by\n";
 | 
	
		
			
				|  |  | +          ost << "\"" << realName << "\"\n";
 | 
	
		
			
				|  |  | +          ost << "AutoUic: Command:\n" << cmJoin(cmd, " ") << "\n";
 | 
	
		
			
				|  |  | +          ost << "AutoUic: Command output:\n" << output << "\n";
 | 
	
		
			
				|  |  | +          this->LogError(ost.str());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          cmSystemTools::RemoveFile(uicFileAbs);
 | 
	
		
			
				|  |  |          this->RunUicFailed = true;
 | 
	
	
		
			
				|  | @@ -1440,12 +1424,11 @@ bool cmQtAutoGenerators::RccGenerateAll()
 | 
	
		
			
				|  |  |    {
 | 
	
		
			
				|  |  |      std::multimap<std::string, std::string> collisions;
 | 
	
		
			
				|  |  |      if (this->NameCollisionTest(qrcGenMap, collisions)) {
 | 
	
		
			
				|  |  | -      std::ostringstream err;
 | 
	
		
			
				|  |  | -      err << "AutoRcc: Error: The same qrc_NAME.cpp file"
 | 
	
		
			
				|  |  | -             " will be generated from different sources."
 | 
	
		
			
				|  |  | -          << std::endl
 | 
	
		
			
				|  |  | -          << "To avoid this error rename the source .qrc files." << std::endl;
 | 
	
		
			
				|  |  | -      this->LogErrorNameCollision(err.str(), collisions);
 | 
	
		
			
				|  |  | +      std::ostringstream ost;
 | 
	
		
			
				|  |  | +      ost << "AutoRcc: Error: The same qrc_NAME.cpp file"
 | 
	
		
			
				|  |  | +             " will be generated from different sources.\n"
 | 
	
		
			
				|  |  | +             "To avoid this error rename the source .qrc files.\n";
 | 
	
		
			
				|  |  | +      this->LogErrorNameCollision(ost.str(), collisions);
 | 
	
		
			
				|  |  |        return false;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -1537,12 +1520,12 @@ bool cmQtAutoGenerators::RccGenerateFile(const std::string& rccInputFile,
 | 
	
		
			
				|  |  |        if (!res || (retVal != 0)) {
 | 
	
		
			
				|  |  |          // Command failed
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -          std::ostringstream err;
 | 
	
		
			
				|  |  | -          err << "AutoRcc: Error: rcc process failed for\n";
 | 
	
		
			
				|  |  | -          err << "\"" << rccOutputFile << "\"\n";
 | 
	
		
			
				|  |  | -          err << "AutoRcc: Command:\n" << cmJoin(cmd, " ") << "\n";
 | 
	
		
			
				|  |  | -          err << "AutoRcc: Command output:\n" << output << "\n";
 | 
	
		
			
				|  |  | -          this->LogError(err.str());
 | 
	
		
			
				|  |  | +          std::ostringstream ost;
 | 
	
		
			
				|  |  | +          ost << "AutoRcc: Error: rcc process failed for\n";
 | 
	
		
			
				|  |  | +          ost << "\"" << rccOutputFile << "\"\n";
 | 
	
		
			
				|  |  | +          ost << "AutoRcc: Command:\n" << cmJoin(cmd, " ") << "\n";
 | 
	
		
			
				|  |  | +          ost << "AutoRcc: Command output:\n" << output << "\n";
 | 
	
		
			
				|  |  | +          this->LogError(ost.str());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          cmSystemTools::RemoveFile(rccBuildFile);
 | 
	
		
			
				|  |  |          this->RunRccFailed = true;
 | 
	
	
		
			
				|  | @@ -1560,18 +1543,23 @@ bool cmQtAutoGenerators::RccGenerateFile(const std::string& rccInputFile,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmQtAutoGenerators::LogErrorNameCollision(
 | 
	
		
			
				|  |  |    const std::string& message,
 | 
	
		
			
				|  |  | -  const std::multimap<std::string, std::string>& collisions)
 | 
	
		
			
				|  |  | +  const std::multimap<std::string, std::string>& collisions) const
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    typedef std::multimap<std::string, std::string>::const_iterator Iter;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  std::ostringstream err;
 | 
	
		
			
				|  |  | +  std::ostringstream ost;
 | 
	
		
			
				|  |  |    // Add message
 | 
	
		
			
				|  |  | -  err << message;
 | 
	
		
			
				|  |  | +  if (!message.empty()) {
 | 
	
		
			
				|  |  | +    ost << message;
 | 
	
		
			
				|  |  | +    if (message[message.size() - 1] != '\n') {
 | 
	
		
			
				|  |  | +      ost << '\n';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |    // Append collision list
 | 
	
		
			
				|  |  |    for (Iter it = collisions.begin(); it != collisions.end(); ++it) {
 | 
	
		
			
				|  |  | -    err << it->first << " : " << it->second << std::endl;
 | 
	
		
			
				|  |  | +    ost << it->first << " : " << it->second << '\n';
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  this->LogError(err.str());
 | 
	
		
			
				|  |  | +  this->LogError(ost.str());
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmQtAutoGenerators::LogBold(const std::string& message) const
 | 
	
	
		
			
				|  | @@ -1583,38 +1571,45 @@ void cmQtAutoGenerators::LogBold(const std::string& message) const
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmQtAutoGenerators::LogInfo(const std::string& message) const
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -  cmSystemTools::Stdout(message.c_str(), message.size());
 | 
	
		
			
				|  |  | +  std::string msg(message);
 | 
	
		
			
				|  |  | +  if (!msg.empty()) {
 | 
	
		
			
				|  |  | +    if (msg[msg.size() - 1] != '\n') {
 | 
	
		
			
				|  |  | +      msg.push_back('\n');
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    cmSystemTools::Stdout(msg.c_str(), msg.size());
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmQtAutoGenerators::LogWarning(const std::string& message) const
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    std::string msg(message);
 | 
	
		
			
				|  |  | -  msg += "\n";
 | 
	
		
			
				|  |  | -  cmSystemTools::Stdout(msg.c_str(), msg.size());
 | 
	
		
			
				|  |  | +  if (!msg.empty()) {
 | 
	
		
			
				|  |  | +    if (msg[msg.size() - 1] != '\n') {
 | 
	
		
			
				|  |  | +      msg.push_back('\n');
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    // Append empty line
 | 
	
		
			
				|  |  | +    msg.push_back('\n');
 | 
	
		
			
				|  |  | +    cmSystemTools::Stdout(msg.c_str(), msg.size());
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmQtAutoGenerators::LogError(const std::string& message) const
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    std::string msg(message);
 | 
	
		
			
				|  |  | -  msg += "\n";
 | 
	
		
			
				|  |  | -  cmSystemTools::Stderr(msg.c_str(), msg.size());
 | 
	
		
			
				|  |  | +  if (!msg.empty()) {
 | 
	
		
			
				|  |  | +    if (msg[msg.size() - 1] != '\n') {
 | 
	
		
			
				|  |  | +      msg.push_back('\n');
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    // Append empty line
 | 
	
		
			
				|  |  | +    msg.push_back('\n');
 | 
	
		
			
				|  |  | +    cmSystemTools::Stderr(msg.c_str(), msg.size());
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmQtAutoGenerators::LogCommand(
 | 
	
		
			
				|  |  |    const std::vector<std::string>& command) const
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -  std::ostringstream sbuf;
 | 
	
		
			
				|  |  | -  for (std::vector<std::string>::const_iterator cmdIt = command.begin();
 | 
	
		
			
				|  |  | -       cmdIt != command.end(); ++cmdIt) {
 | 
	
		
			
				|  |  | -    if (cmdIt != command.begin()) {
 | 
	
		
			
				|  |  | -      sbuf << " ";
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    sbuf << *cmdIt;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  if (!sbuf.str().empty()) {
 | 
	
		
			
				|  |  | -    sbuf << std::endl;
 | 
	
		
			
				|  |  | -    this->LogInfo(sbuf.str());
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +  this->LogInfo(cmJoin(command, " "));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
	
		
			
				|  | @@ -1737,7 +1732,7 @@ std::string cmQtAutoGenerators::FindIncludedFile(
 | 
	
		
			
				|  |  |        return cmsys::SystemTools::GetRealPath(testPath);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  // Search globaly
 | 
	
		
			
				|  |  | +  // Search globally
 | 
	
		
			
				|  |  |    return FindInIncludeDirectories(includeString);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1765,16 +1760,14 @@ std::string cmQtAutoGenerators::FindInIncludeDirectories(
 | 
	
		
			
				|  |  |   * @brief Generates the parent directory of the given file on demand
 | 
	
		
			
				|  |  |   * @return True on success
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  | -bool cmQtAutoGenerators::MakeParentDirectory(const std::string& filename)
 | 
	
		
			
				|  |  | +bool cmQtAutoGenerators::MakeParentDirectory(const std::string& filename) const
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    bool success = true;
 | 
	
		
			
				|  |  |    const std::string dirName = cmSystemTools::GetFilenamePath(filename);
 | 
	
		
			
				|  |  |    if (!dirName.empty()) {
 | 
	
		
			
				|  |  |      success = cmsys::SystemTools::MakeDirectory(dirName);
 | 
	
		
			
				|  |  |      if (!success) {
 | 
	
		
			
				|  |  | -      std::ostringstream err;
 | 
	
		
			
				|  |  | -      err << "AutoGen: Directory creation failed: " << dirName << std::endl;
 | 
	
		
			
				|  |  | -      this->LogError(err.str());
 | 
	
		
			
				|  |  | +      this->LogError("AutoGen: Directory creation failed: " + dirName);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    return success;
 |