Przeglądaj źródła

AUTOGEN: Initializer: Always remember skipped files

Sebastian Holtermann 8 lat temu
rodzic
commit
d8e45536fb
1 zmienionych plików z 35 dodań i 26 usunięć
  1. 35 26
      Source/cmQtAutoGeneratorInitializer.cxx

+ 35 - 26
Source/cmQtAutoGeneratorInitializer.cxx

@@ -101,14 +101,17 @@ static std::string GetQtMajorVersion(cmGeneratorTarget const* target)
 static void SetupSourceFiles(cmGeneratorTarget const* target,
                              std::vector<std::string>& mocUicSources,
                              std::vector<std::string>& mocUicHeaders,
-                             std::vector<std::string>& skipMoc,
-                             std::vector<std::string>& skipUic)
+                             std::vector<std::string>& skipMocList,
+                             std::vector<std::string>& skipUicList)
 {
   cmMakefile* makefile = target->Target->GetMakefile();
 
   std::vector<cmSourceFile*> srcFiles;
   target->GetConfigCommonSourceFiles(srcFiles);
 
+  const bool targetMoc = target->GetPropertyAsBool("AUTOMOC");
+  const bool targetUic = target->GetPropertyAsBool("AUTOUIC");
+
   cmFilePathChecksum fpathCheckSum(makefile);
   for (std::vector<cmSourceFile*>::const_iterator fileIt = srcFiles.begin();
        fileIt != srcFiles.end(); ++fileIt) {
@@ -123,32 +126,38 @@ static void SetupSourceFiles(cmGeneratorTarget const* target,
     if (cmSystemTools::IsOn(sf->GetPropertyForUser("GENERATED"))) {
       continue;
     }
-    if (cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOGEN"))) {
-      continue;
-    }
-    const bool fileSkipUic =
-      cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOUIC"));
-    const bool fileSkipMoc =
-      cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOMOC"));
-    if (fileSkipUic && fileSkipMoc) {
-      continue;
-    }
-
-    // Use file
     const std::string absFile =
       cmsys::SystemTools::GetRealPath(sf->GetFullPath());
-    // Add file name to sources or headers list
-    if (fileType == cmSystemTools::CXX_FILE_FORMAT) {
-      mocUicSources.push_back(absFile);
-    } else if (fileType == cmSystemTools::HEADER_FILE_FORMAT) {
-      mocUicHeaders.push_back(absFile);
-    }
-    // Add file name to skip lists on demand
-    if (fileSkipUic) {
-      skipUic.push_back(absFile);
-    }
-    if (fileSkipMoc) {
-      skipMoc.push_back(absFile);
+    // Skip flags
+    const bool skipAll =
+      cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOGEN"));
+    const bool skipMoc =
+      skipAll || cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOMOC"));
+    const bool skipUic =
+      skipAll || cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOUIC"));
+    // Add file name to skip lists.
+    // Do this even when the file is not added to the sources/headers lists
+    // because the file name may be extracted from an other file when
+    // processing
+    if (skipMoc) {
+      skipMocList.push_back(absFile);
+    }
+    if (skipUic) {
+      skipUicList.push_back(absFile);
+    }
+
+    if ((targetMoc && !skipMoc) || (targetUic && !skipUic)) {
+      // Add file name to sources or headers list
+      switch (fileType) {
+        case cmSystemTools::CXX_FILE_FORMAT:
+          mocUicSources.push_back(absFile);
+          break;
+        case cmSystemTools::HEADER_FILE_FORMAT:
+          mocUicHeaders.push_back(absFile);
+          break;
+        default:
+          break;
+      }
     }
   }
 }