summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmGlobalGenerator.cxx23
-rw-r--r--Source/cmGlobalGenerator.h16
2 files changed, 37 insertions, 2 deletions
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 9ebdcad..bb0d152 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/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());
+}
+
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index c72ab67..8a95263 100644
--- a/Source/cmGlobalGenerator.h
+++ b/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;