浏览代码

Autogen: Skip included files on demand

Sebastian Holtermann 8 年之前
父节点
当前提交
ecac50e133
共有 1 个文件被更改,包括 33 次插入28 次删除
  1. 33 28
      Source/cmQtAutoGenerators.cxx

+ 33 - 28
Source/cmQtAutoGenerators.cxx

@@ -971,17 +971,19 @@ bool cmQtAutoGenerators::MocParseSourceContent(
         const std::string headerToMoc =
           this->MocFindHeader(scannedFileAbsPath, incSubDir + incRealBasename);
         if (!headerToMoc.empty()) {
-          // Register moc job
-          mocsIncluded[headerToMoc] = incString;
-          this->MocFindDepends(headerToMoc, contentText, mocDepends);
-          // Store meta information for relaxed mode
-          if (relaxed && (incRealBasename == scannedFileBasename)) {
-            ownMocUnderscoreInclude = incString;
-            ownMocUnderscoreHeader = headerToMoc;
+          if (!this->MocSkip(headerToMoc)) {
+            // Register moc job
+            mocsIncluded[headerToMoc] = incString;
+            this->MocFindDepends(headerToMoc, contentText, mocDepends);
+            // Store meta information for relaxed mode
+            if (relaxed && (incRealBasename == scannedFileBasename)) {
+              ownMocUnderscoreInclude = incString;
+              ownMocUnderscoreHeader = headerToMoc;
+            }
           }
         } else {
           std::ostringstream ost;
-          ost << "AutoMoc: Error: " << absFilename << "\n"
+          ost << "AutoMoc: Error: " << Quoted(absFilename) << "\n"
               << "The file includes the moc file " << Quoted(incString)
               << ", but could not find header "
               << Quoted(incRealBasename + "{" +
@@ -1003,36 +1005,39 @@ bool cmQtAutoGenerators::MocParseSourceContent(
             // In relaxed mode try to find a header instead but issue a warning
             const std::string headerToMoc =
               this->MocFindHeader(scannedFileAbsPath, incSubDir + incBasename);
-            if (!headerToMoc.empty() && !this->MocSkip(headerToMoc)) {
-              // This is for KDE4 compatibility:
-              fileToMoc = headerToMoc;
-              if (!requiresMoc && (incBasename == scannedFileBasename)) {
-                std::ostringstream ost;
-                ost << "AutoMoc: Warning: " << Quoted(absFilename) << "\n"
+            if (!headerToMoc.empty()) {
+              if (!this->MocSkip(headerToMoc)) {
+                // This is for KDE4 compatibility:
+                fileToMoc = headerToMoc;
+                if (!requiresMoc && (incBasename == scannedFileBasename)) {
+                  std::ostringstream ost;
+                  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 " << 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: " << 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());
+                  this->LogWarning(ost.str());
+                } else {
+                  std::ostringstream ost;
+                  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: " << Quoted(absFilename) << "\n"
                   << "The file includes the moc file " << Quoted(incString)
-                  << ". which seems to be the moc file from a different "
+                  << ", which seems to be the moc file from a different "
                      "source file. CMake also could not find a matching "
                      "header.";
               this->LogError(ost.str());
@@ -1048,7 +1053,7 @@ bool cmQtAutoGenerators::MocParseSourceContent(
             // Accept but issue a warning if moc isn't required
             if (!requiresMoc) {
               std::ostringstream ost;
-              ost << "AutoMoc: Error: " << Quoted(absFilename) << "\n"
+              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.";