Ver código fonte

Autogen: Pass absolute include path in info file

Sebastian Holtermann 7 anos atrás
pai
commit
5776639fbf

+ 20 - 19
Source/cmQtAutoGenInitializer.cxx

@@ -244,6 +244,21 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
     // Working directory
     this->DirWork = cbd;
     cmSystemTools::ConvertToUnixSlashes(this->DirWork);
+
+    // Include directory
+    this->DirInclude = this->DirBuild;
+    this->DirInclude += "/include";
+    if (this->MultiConfig) {
+      this->DirInclude += "_$<CONFIG>";
+    }
+    if (this->MultiConfig) {
+      for (std::string const& cfg : this->ConfigsList) {
+        std::string& dir = this->DirConfigInclude[cfg];
+        dir = this->DirBuild;
+        dir += "/include_";
+        dir += cfg;
+      }
+    }
   }
 
   // Autogen files
@@ -305,12 +320,7 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
   // Add autogen includes directory to the origin target INCLUDE_DIRECTORIES
   if (this->Moc.Enabled || this->Uic.Enabled ||
       (this->Rcc.Enabled && this->MultiConfig)) {
-    std::string includeDir = this->DirBuild;
-    includeDir += "/include";
-    if (this->MultiConfig) {
-      includeDir += "_$<CONFIG>";
-    }
-    this->Target->AddIncludeDirectory(includeDir, true);
+    this->Target->AddIncludeDirectory(this->DirInclude, true);
   }
 
   // Acquire rcc executable and features
@@ -833,15 +843,6 @@ bool cmQtAutoGenInitializer::SetupCustomTargets()
     return false;
   }
 
-  // Configuration include directories
-  std::string includeDir = "include";
-  std::map<std::string, std::string> includeDirs;
-  for (std::string const& cfg : this->ConfigsList) {
-    std::string& dir = includeDirs[cfg];
-    dir = "include_";
-    dir += cfg;
-  }
-
   // Generate autogen target info file
   if (this->Moc.Enabled || this->Uic.Enabled) {
     if (this->Moc.Enabled) {
@@ -913,9 +914,9 @@ bool cmQtAutoGenInitializer::SetupCustomTargets()
              MfDef("CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE"));
       CWrite("AM_BUILD_DIR", this->DirBuild);
       if (this->MultiConfig) {
-        CWriteMap("AM_INCLUDE_DIR", includeDirs);
+        CWriteMap("AM_INCLUDE_DIR", this->DirConfigInclude);
       } else {
-        CWrite("AM_INCLUDE_DIR", includeDir);
+        CWrite("AM_INCLUDE_DIR", this->DirInclude);
       }
 
       ofs << "# Files\n";
@@ -1014,9 +1015,9 @@ bool cmQtAutoGenInitializer::SetupCustomTargets()
         ofs << "# Directories\n";
         CWrite("ARCC_BUILD_DIR", this->DirBuild);
         if (this->MultiConfig) {
-          CWriteMap("ARCC_INCLUDE_DIR", includeDirs);
+          CWriteMap("ARCC_INCLUDE_DIR", this->DirConfigInclude);
         } else {
-          CWrite("ARCC_INCLUDE_DIR", includeDir);
+          CWrite("ARCC_INCLUDE_DIR", this->DirInclude);
         }
 
         ofs << "# Rcc executable\n";

+ 2 - 0
Source/cmQtAutoGenInitializer.h

@@ -90,6 +90,8 @@ private:
   std::string DirInfo;
   std::string DirBuild;
   std::string DirWork;
+  std::string DirInclude;
+  std::map<std::string, std::string> DirConfigInclude;
   // Sources
   std::vector<std::string> Headers;
   std::vector<std::string> Sources;

+ 5 - 8
Source/cmQtAutoGeneratorMocUic.cxx

@@ -1247,14 +1247,11 @@ bool cmQtAutoGeneratorMocUic::Init(cmMakefile* makefile)
     return false;
   }
   // include directory
-  {
-    std::string dirRel = InfoGetConfig("AM_INCLUDE_DIR");
-    if (dirRel.empty()) {
-      Log().ErrorFile(GeneratorT::GEN, InfoFile(),
-                      "Autogen include directory missing");
-      return false;
-    }
-    Base_.AutogenIncludeDir = Base_.AbsoluteBuildPath(dirRel);
+  Base_.AutogenIncludeDir = InfoGetConfig("AM_INCLUDE_DIR");
+  if (Base_.AutogenIncludeDir.empty()) {
+    Log().ErrorFile(GeneratorT::GEN, InfoFile(),
+                    "Autogen include directory missing");
+    return false;
   }
 
   // - Files

+ 1 - 3
Source/cmQtAutoGeneratorRcc.cxx

@@ -141,9 +141,7 @@ bool cmQtAutoGeneratorRcc::Init(cmMakefile* makefile)
 
   // Compute rcc output file name
   if (IsMultiConfig()) {
-    RccFileOutput_ = AutogenBuildDir_;
-    RccFileOutput_ += '/';
-    RccFileOutput_ += IncludeDir_;
+    RccFileOutput_ = IncludeDir_;
     RccFileOutput_ += '/';
     RccFileOutput_ += MultiConfigOutput();
   } else {