Przeglądaj źródła

Autogen: Add method for checksum based path generation

Sebastian Holtermann 8 lat temu
rodzic
commit
d3a9887149
2 zmienionych plików z 22 dodań i 7 usunięć
  1. 20 7
      Source/cmQtAutoGenerators.cxx
  2. 2 0
      Source/cmQtAutoGenerators.h

+ 20 - 7
Source/cmQtAutoGenerators.cxx

@@ -1046,10 +1046,8 @@ void cmQtAutoGenerators::ParseHeaders(
       }
       std::string macroName;
       if (this->MocRequired(contents, macroName)) {
-        notIncludedMocs[headerName] = fpathCheckSum.getPart(headerName) +
-          "/moc_" +
-          cmsys::SystemTools::GetFilenameWithoutLastExtension(headerName) +
-          ".cpp";
+        notIncludedMocs[headerName] =
+          this->ChecksumedPath(headerName, "moc_", ".cpp");
       }
     }
 
@@ -1412,9 +1410,8 @@ bool cmQtAutoGenerators::RccGenerateAll()
        si != this->RccSources.end(); ++si) {
     const std::string ext = cmsys::SystemTools::GetFilenameLastExtension(*si);
     if (ext == ".qrc") {
-      qrcGenMap[*si] = this->AutogenBuildSubDir + fpathCheckSum.getPart(*si) +
-        "/qrc_" + cmsys::SystemTools::GetFilenameWithoutLastExtension(*si) +
-        ".cpp";
+      qrcGenMap[*si] =
+        this->AutogenBuildSubDir + this->ChecksumedPath(*si, "qrc_", ".cpp");
     }
   }
 
@@ -1628,6 +1625,22 @@ bool cmQtAutoGenerators::NameCollisionTest(
   return !collisions.empty();
 }
 
+/**
+ * @brief Generates a file path based on the checksum of the source file path
+ * @return The path
+ */
+std::string cmQtAutoGenerators::ChecksumedPath(const std::string& sourceFile,
+                                               const char* basePrefix,
+                                               const char* baseSuffix)
+{
+  std::string res = fpathCheckSum.getPart(sourceFile);
+  res += "/";
+  res += basePrefix;
+  res += cmsys::SystemTools::GetFilenameWithoutLastExtension(sourceFile);
+  res += baseSuffix;
+  return res;
+}
+
 /**
  * @brief Generates the parent directory of the given file on demand
  * @return True on success

+ 2 - 0
Source/cmQtAutoGenerators.h

@@ -107,6 +107,8 @@ private:
   // - Utility
   bool NameCollisionTest(const std::map<std::string, std::string>& genFiles,
                          std::multimap<std::string, std::string>& collisions);
+  std::string ChecksumedPath(const std::string& sourceFile,
+                             const char* basePrefix, const char* baseSuffix);
   bool MakeParentDirectory(const std::string& filename);
 
   bool MocEnabled() const { return !this->MocExecutable.empty(); }