diff options
author | Brad King <brad.king@kitware.com> | 2005-05-16 18:17:30 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2005-05-16 18:17:30 (GMT) |
commit | 7ed018ec09cd68bd1417b9bf0d29ebb963e2c213 (patch) | |
tree | ca8ecee93f41e2dfbb9528574207aa68a8d6a0ae /Source | |
parent | 26f82b064ce935e429dfcb3fd74bd277640e0b7e (diff) | |
download | CMake-7ed018ec09cd68bd1417b9bf0d29ebb963e2c213.zip CMake-7ed018ec09cd68bd1417b9bf0d29ebb963e2c213.tar.gz CMake-7ed018ec09cd68bd1417b9bf0d29ebb963e2c213.tar.bz2 |
BUG: Changing to a new test for whether to do relative path conversion. Now only paths inside the source or binary trees are converted.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmGlobalGenerator.cxx | 55 | ||||
-rw-r--r-- | Source/cmGlobalGenerator.h | 11 |
2 files changed, 28 insertions, 38 deletions
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 7818c0e..f63fa99 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -889,36 +889,20 @@ cmTarget* cmGlobalGenerator::FindTarget(const char* project, //---------------------------------------------------------------------------- void cmGlobalGenerator::ConfigureRelativePaths() { - // Identify the longest shared path component between the source - // directory and the build directory. - std::vector<std::string> source; - std::vector<std::string> binary; - cmSystemTools::SplitPath(m_CMakeInstance->GetHomeDirectory(), source); - cmSystemTools::SplitPath(m_CMakeInstance->GetHomeOutputDirectory(), binary); - unsigned int common=0; - while(common < source.size() && common < binary.size() && - cmSystemTools::ComparePath(source[common].c_str(), - binary[common].c_str())) - { - ++common; - } - - // Require more than just the root portion of the path to be in - // common before allowing relative paths. Also disallow relative - // paths if the build tree is a network path. The current working - // directory on Windows cannot be a network path. Therefore - // relative paths cannot work with network paths. - if(common > 1 && source[0] != "//") + // The current working directory on Windows cannot be a network + // path. Therefore relative paths cannot work when the build tree + // is a network path. + std::string source = m_CMakeInstance->GetHomeDirectory(); + std::string binary = m_CMakeInstance->GetHomeOutputDirectory(); + if(binary.size() < 2 || binary.substr(0, 2) != "//") { - // Build the minimum prefix required of a path to be converted to - // a relative path. - source.erase(source.begin()+common, source.end()); - m_RelativePathTop = cmSystemTools::JoinPath(source); + m_RelativePathTopSource = source; + m_RelativePathTopBinary = binary; } else { - // Disable relative paths. - m_RelativePathTop = ""; + m_RelativePathTopSource = ""; + m_RelativePathTopBinary = ""; } } @@ -939,13 +923,16 @@ cmGlobalGenerator::ConvertToRelativePath(const std::vector<std::string>& local, return in_remote; } - // if the path does not contain all of the relative top path then return - // because it is going too far out of the tree + // Skip conversion if the path is not in the source or binary tree. std::string original = in_remote; - if(original.size() < m_RelativePathTop.size() || - !cmSystemTools::ComparePath( - original.substr(0, m_RelativePathTop.size()).c_str(), - m_RelativePathTop.c_str())) + if((original.size() < m_RelativePathTopSource.size() || + !cmSystemTools::ComparePath( + original.substr(0, m_RelativePathTopSource.size()).c_str(), + m_RelativePathTopSource.c_str())) && + (original.size() < m_RelativePathTopBinary.size() || + !cmSystemTools::ComparePath( + original.substr(0, m_RelativePathTopBinary.size()).c_str(), + m_RelativePathTopBinary.c_str()))) { return in_remote; } @@ -963,8 +950,8 @@ cmGlobalGenerator::ConvertToRelativePath(const std::vector<std::string>& local, ++common; } - // if nothiong is in common the return - if (common == 0) + // If no part of the path is in common then return the full path. + if(common == 0) { return in_remote; } diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index c72ab67..8b35116 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -171,10 +171,13 @@ private: std::map<cmStdString, cmStdString> m_ExtensionToLanguage; std::map<cmStdString, cmStdString> m_LanguageToLinkerPreference; - // The prefix required of a path to be converted to a relative path. - // No sequence of ../.. will ever go past this path. This is the - // longest common path between the top level source and build trees. - std::string m_RelativePathTop; + // The paths to the tops of the source and binary trees used for + // relative path computation. A path must be either in the source + // tree or the build tree to be converted to a relative path. The + // ConfigureRelativePaths method may set these to be empty when + // using relative paths is unsafe. + std::string m_RelativePathTopSource; + std::string m_RelativePathTopBinary; }; #endif |