Sfoglia il codice sorgente

BUG: Need to include relative path top information in directory information so that relative path conversion during dependency generation works with the same rules as project generation.

Brad King 18 anni fa
parent
commit
144c605525
1 ha cambiato i file con 25 aggiunte e 2 eliminazioni
  1. 25 2
      Source/cmLocalUnixMakefileGenerator3.cxx

+ 25 - 2
Source/cmLocalUnixMakefileGenerator3.cxx

@@ -411,6 +411,15 @@ void cmLocalUnixMakefileGenerator3::WriteDirectoryInformationFile()
   // Write the do not edit header.
   // Write the do not edit header.
   this->WriteDisclaimer(infoFileStream);
   this->WriteDisclaimer(infoFileStream);
 
 
+  // Setup relative path conversion tops.
+  infoFileStream
+    << "# Relative path conversion top directories.\n"
+    << "SET(CMAKE_RELATIVE_PATH_TOP_SOURCE \"" << this->RelativePathTopSource
+    << "\")\n"
+    << "SET(CMAKE_RELATIVE_PATH_TOP_BINARY \"" << this->RelativePathTopBinary
+    << "\")\n"
+    << "\n";
+
   // Tell the dependency scanner to use unix paths if necessary.
   // Tell the dependency scanner to use unix paths if necessary.
   if(cmSystemTools::GetForceUnixPaths())
   if(cmSystemTools::GetForceUnixPaths())
     {
     {
@@ -1155,10 +1164,11 @@ bool cmLocalUnixMakefileGenerator3::ScanDependencies(const char* tgtInfo)
     {
     {
     cmSystemTools::Error("Target DependInfo.cmake file not found");    
     cmSystemTools::Error("Target DependInfo.cmake file not found");    
     }
     }
-  
-  // Test whether we need to force Unix paths.
+
+  // Lookup useful directory information.
   if(haveDirectoryInfo)
   if(haveDirectoryInfo)
     {
     {
+    // Test whether we need to force Unix paths.
     if(const char* force = mf->GetDefinition("CMAKE_FORCE_UNIX_PATHS"))
     if(const char* force = mf->GetDefinition("CMAKE_FORCE_UNIX_PATHS"))
       {
       {
       if(!cmSystemTools::IsOff(force))
       if(!cmSystemTools::IsOff(force))
@@ -1166,6 +1176,19 @@ bool cmLocalUnixMakefileGenerator3::ScanDependencies(const char* tgtInfo)
         cmSystemTools::SetForceUnixPaths(true);
         cmSystemTools::SetForceUnixPaths(true);
         }
         }
       }
       }
+
+    // Setup relative path top directories.
+    this->RelativePathsConfigured = true;
+    if(const char* relativePathTopSource =
+       mf->GetDefinition("CMAKE_RELATIVE_PATH_TOP_SOURCE"))
+      {
+      this->RelativePathTopSource = relativePathTopSource;
+      }
+    if(const char* relativePathTopBinary =
+       mf->GetDefinition("CMAKE_RELATIVE_PATH_TOP_BINARY"))
+      {
+      this->RelativePathTopBinary = relativePathTopBinary;
+      }
     }
     }
   else
   else
     {
     {