Răsfoiți Sursa

ENH: added new methods to convert to HomeRelative paths

Ken Martin 20 ani în urmă
părinte
comite
25f75d9075
2 a modificat fișierele cu 37 adăugiri și 2 ștergeri
  1. 21 2
      Source/cmGlobalGenerator.cxx
  2. 16 0
      Source/cmGlobalGenerator.h

+ 21 - 2
Source/cmGlobalGenerator.cxx

@@ -491,6 +491,12 @@ void cmGlobalGenerator::ClearEnabledLanguages()
 
 void cmGlobalGenerator::Configure()
 {
+  // Setup the current output directory components for use by
+  // ConvertToRelativePath.
+  std::string outdir =
+    cmSystemTools::CollapseFullPath(m_CMakeInstance->GetHomeOutputDirectory());
+  cmSystemTools::SplitPath(outdir.c_str(), m_HomeOutputDirectoryComponents);
+
   // Delete any existing cmLocalGenerators
   unsigned int i;
   for (i = 0; i < m_LocalGenerators.size(); ++i)
@@ -522,8 +528,7 @@ void cmGlobalGenerator::Configure()
   sprintf(num,"%d",static_cast<int>(m_LocalGenerators.size()));
   this->GetCMakeInstance()->AddCacheEntry
     ("CMAKE_NUMBER_OF_LOCAL_GENERATORS", num,
-     "number of local generators",
-                                          cmCacheManager::INTERNAL);
+     "number of local generators", cmCacheManager::INTERNAL);
   
   std::set<cmStdString> notFoundMap;
   // after it is all done do a ConfigureFinalPass
@@ -1091,3 +1096,17 @@ void cmGlobalGenerator::SetupTests()
 }
 
 
+//----------------------------------------------------------------------------
+std::string cmGlobalGenerator::ConvertToHomeRelativePath(const char* remote)
+{
+  return (this->ConvertToRelativePath(m_HomeOutputDirectoryComponents,remote));
+}
+
+//----------------------------------------------------------------------------
+std::string
+cmGlobalGenerator::ConvertToHomeRelativeOutputPath(const char* remote)
+{
+  return cmSystemTools::ConvertToOutputPath
+    (this->ConvertToRelativePath(m_HomeOutputDirectoryComponents,remote).c_str());
+}
+

+ 16 - 0
Source/cmGlobalGenerator.h

@@ -138,6 +138,20 @@ public:
   std::string ConvertToRelativePath(const std::vector<std::string>& local,
                                     const char* remote);
 
+  /**
+   * Convert the given remote path to a relative path with respect to
+   * this generator's output directory.  The remote path must use
+   * forward slashes and not already be escaped or quoted.
+   */
+  std::string ConvertToHomeRelativePath(const char* remote);
+
+  /**
+   * Convert to an output path that is relative to the output
+   * directory.  The remote path must use forward slashes and not
+   * already be escaped or quoted.
+   */
+  std::string ConvertToHomeRelativeOutputPath(const char* remote);
+
   /*
    * Determine what program to use for building the project.
    */
@@ -151,6 +165,8 @@ protected:
   void ConfigureRelativePaths();
   void SetupTests();
   
+  std::vector<std::string> m_HomeOutputDirectoryComponents;
+
   bool m_ForceUnixPaths;
   cmStdString m_FindMakeProgramFile;
   cmStdString m_ConfiguredFilesPath;