diff options
author | Brad King <brad.king@kitware.com> | 2016-09-19 12:55:27 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2016-09-19 12:55:27 (GMT) |
commit | 419ad0510193eb2b2e227095a4dd167cd9b3df80 (patch) | |
tree | 3ac08c36568b69c6382d699a2a2bbe998c4a77bd | |
parent | ec5114f997a7a8cde5b734823eefa97d5c37ff69 (diff) | |
parent | 6afd35b98a2316685a071a43d0e56448e7ab9ed5 (diff) | |
download | CMake-419ad0510193eb2b2e227095a4dd167cd9b3df80.zip CMake-419ad0510193eb2b2e227095a4dd167cd9b3df80.tar.gz CMake-419ad0510193eb2b2e227095a4dd167cd9b3df80.tar.bz2 |
Merge topic 'cleanup-Convert'
6afd35b9 cmState: remove unused code
8d47a20f cmOutputConverter: use new ConvertToRelativePath signature internally
149af87b cmOutputConverter: split ConvertToRelativePath
-rw-r--r-- | Source/cmOutputConverter.cxx | 90 | ||||
-rw-r--r-- | Source/cmOutputConverter.h | 18 | ||||
-rw-r--r-- | Source/cmState.cxx | 36 | ||||
-rw-r--r-- | Source/cmState.h | 8 |
4 files changed, 75 insertions, 77 deletions
diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index d44fbb7..ae7c583 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -54,21 +54,19 @@ std::string cmOutputConverter::ConvertToRelativePath( switch (relative) { case HOME: result = this->ConvertToRelativePath( - this->GetState()->GetSourceDirectoryComponents(), source); + this->GetState()->GetSourceDirectory(), source); break; case START: result = this->ConvertToRelativePath( - this->StateSnapshot.GetDirectory().GetCurrentSourceComponents(), - source); + this->StateSnapshot.GetDirectory().GetCurrentSource(), source); break; case HOME_OUTPUT: result = this->ConvertToRelativePath( - this->GetState()->GetBinaryDirectoryComponents(), source); + this->GetState()->GetBinaryDirectory(), source); break; case START_OUTPUT: result = this->ConvertToRelativePath( - this->StateSnapshot.GetDirectory().GetCurrentBinaryComponents(), - source); + this->StateSnapshot.GetDirectory().GetCurrentBinary(), source); break; } return result; @@ -128,41 +126,67 @@ std::string cmOutputConverter::ConvertToRelativePath( const std::vector<std::string>& local, const std::string& in_remote, bool force) const { - // The path should never be quoted. - assert(in_remote[0] != '\"'); + std::string local_path = cmSystemTools::JoinPath(local); + return force ? this->ForceToRelativePath(local_path, in_remote) + : this->ConvertToRelativePath(local_path, in_remote); +} + +std::string cmOutputConverter::ConvertToRelativePath( + std::string const& local_path, std::string const& remote_path) const +{ + // The paths should never be quoted. + assert(local_path[0] != '\"'); + assert(remote_path[0] != '\"'); // The local path should never have a trailing slash. - assert(!local.empty() && !(local[local.size() - 1] == "")); + assert(local_path.empty() || local_path[local_path.size() - 1] != '/'); // If the path is already relative then just return the path. - if (!cmSystemTools::FileIsFullPath(in_remote.c_str())) { - return in_remote; - } - - if (!force) { - // Skip conversion if the path and local are not both in the source - // or both in the binary tree. - std::string local_path = cmSystemTools::JoinPath(local); - if (!((cmOutputConverterNotAbove( - local_path.c_str(), - this->StateSnapshot.GetDirectory().GetRelativePathTopBinary()) && - cmOutputConverterNotAbove( - in_remote.c_str(), - this->StateSnapshot.GetDirectory().GetRelativePathTopBinary())) || - (cmOutputConverterNotAbove( - local_path.c_str(), - this->StateSnapshot.GetDirectory().GetRelativePathTopSource()) && - cmOutputConverterNotAbove(in_remote.c_str(), - this->StateSnapshot.GetDirectory() - .GetRelativePathTopSource())))) { - return in_remote; - } + if (!cmSystemTools::FileIsFullPath(remote_path.c_str())) { + return remote_path; + } + + // Skip conversion if the path and local are not both in the source + // or both in the binary tree. + if (!((cmOutputConverterNotAbove( + local_path.c_str(), + this->StateSnapshot.GetDirectory().GetRelativePathTopBinary()) && + cmOutputConverterNotAbove( + remote_path.c_str(), + this->StateSnapshot.GetDirectory().GetRelativePathTopBinary())) || + (cmOutputConverterNotAbove( + local_path.c_str(), + this->StateSnapshot.GetDirectory().GetRelativePathTopSource()) && + cmOutputConverterNotAbove( + remote_path.c_str(), + this->StateSnapshot.GetDirectory().GetRelativePathTopSource())))) { + return remote_path; + } + + return this->ForceToRelativePath(local_path, remote_path); +} + +std::string cmOutputConverter::ForceToRelativePath( + std::string const& local_path, std::string const& remote_path) +{ + // The paths should never be quoted. + assert(local_path[0] != '\"'); + assert(remote_path[0] != '\"'); + + // The local path should never have a trailing slash. + assert(local_path.empty() || local_path[local_path.size() - 1] != '/'); + + // If the path is already relative then just return the path. + if (!cmSystemTools::FileIsFullPath(remote_path.c_str())) { + return remote_path; } // Identify the longest shared path component between the remote // path and the local path. + std::vector<std::string> local; + cmSystemTools::SplitPath(local_path, local); std::vector<std::string> remote; - cmSystemTools::SplitPath(in_remote, remote); + cmSystemTools::SplitPath(remote_path, remote); unsigned int common = 0; while (common < remote.size() && common < local.size() && cmSystemTools::ComparePath(remote[common], local[common])) { @@ -171,7 +195,7 @@ std::string cmOutputConverter::ConvertToRelativePath( // If no part of the path is in common then return the full path. if (common == 0) { - return in_remote; + return remote_path; } // If the entire path is in common then just return a ".". diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h index ac58ddc..1efe109 100644 --- a/Source/cmOutputConverter.h +++ b/Source/cmOutputConverter.h @@ -145,6 +145,24 @@ public: const std::string& in_remote, bool force = false) const; + /** + * Convert the given remote path to a relative path with respect to + * the given local path. Both paths must use forward slashes and not + * already be escaped or quoted. + * The conversion is skipped if the paths are not both in the source + * or both in the binary tree. + */ + std::string ConvertToRelativePath(std::string const& local_path, + std::string const& remote_path) const; + + /** + * Convert the given remote path to a relative path with respect to + * the given local path. Both paths must use forward slashes and not + * already be escaped or quoted. + */ + static std::string ForceToRelativePath(std::string const& local_path, + std::string const& remote_path); + private: cmState* GetState() const; diff --git a/Source/cmState.cxx b/Source/cmState.cxx index 073c239..ffb104b 100644 --- a/Source/cmState.cxx +++ b/Source/cmState.cxx @@ -77,8 +77,6 @@ struct cmState::BuildsystemDirectoryStateType std::string Location; std::string OutputLocation; - std::vector<std::string> CurrentSourceDirectoryComponents; - std::vector<std::string> CurrentBinaryDirectoryComponents; // The top-most directories for relative path conversion. Both the // source and destination location of a relative path conversion // must be underneath one of these directories (both under source or @@ -591,10 +589,6 @@ void cmState::SetSourceDirectory(std::string const& sourceDirectory) { this->SourceDirectory = sourceDirectory; cmSystemTools::ConvertToUnixSlashes(this->SourceDirectory); - - cmSystemTools::SplitPath( - cmSystemTools::CollapseFullPath(this->SourceDirectory), - this->SourceDirectoryComponents); } const char* cmState::GetSourceDirectory() const @@ -602,19 +596,10 @@ const char* cmState::GetSourceDirectory() const return this->SourceDirectory.c_str(); } -std::vector<std::string> const& cmState::GetSourceDirectoryComponents() const -{ - return this->SourceDirectoryComponents; -} - void cmState::SetBinaryDirectory(std::string const& binaryDirectory) { this->BinaryDirectory = binaryDirectory; cmSystemTools::ConvertToUnixSlashes(this->BinaryDirectory); - - cmSystemTools::SplitPath( - cmSystemTools::CollapseFullPath(this->BinaryDirectory), - this->BinaryDirectoryComponents); } void cmState::SetWindowsShell(bool windowsShell) @@ -692,11 +677,6 @@ const char* cmState::GetBinaryDirectory() const return this->BinaryDirectory.c_str(); } -std::vector<std::string> const& cmState::GetBinaryDirectoryComponents() const -{ - return this->BinaryDirectoryComponents; -} - void cmState::Directory::ComputeRelativePathTopSource() { // Relative path conversion inside the source tree is not used to @@ -978,8 +958,6 @@ void cmState::Directory::SetCurrentSource(std::string const& dir) cmSystemTools::ConvertToUnixSlashes(loc); loc = cmSystemTools::CollapseFullPath(loc); - cmSystemTools::SplitPath( - loc, this->DirectoryState->CurrentSourceDirectoryComponents); this->ComputeRelativePathTopSource(); this->Snapshot_.SetDefinition("CMAKE_CURRENT_SOURCE_DIR", loc); @@ -997,8 +975,6 @@ void cmState::Directory::SetCurrentBinary(std::string const& dir) cmSystemTools::ConvertToUnixSlashes(loc); loc = cmSystemTools::CollapseFullPath(loc); - cmSystemTools::SplitPath( - loc, this->DirectoryState->CurrentBinaryDirectoryComponents); this->ComputeRelativePathTopBinary(); this->Snapshot_.SetDefinition("CMAKE_CURRENT_BINARY_DIR", loc); @@ -1009,18 +985,6 @@ void cmState::Snapshot::SetListFile(const std::string& listfile) *this->Position->ExecutionListFile = listfile; } -std::vector<std::string> const& -cmState::Directory::GetCurrentSourceComponents() const -{ - return this->DirectoryState->CurrentSourceDirectoryComponents; -} - -std::vector<std::string> const& -cmState::Directory::GetCurrentBinaryComponents() const -{ - return this->DirectoryState->CurrentBinaryDirectoryComponents; -} - const char* cmState::Directory::GetRelativePathTopSource() const { return this->DirectoryState->RelativePathTopSource.c_str(); diff --git a/Source/cmState.h b/Source/cmState.h index 9ab4213..0fac42c 100644 --- a/Source/cmState.h +++ b/Source/cmState.h @@ -135,9 +135,6 @@ public: const char* GetCurrentBinary() const; void SetCurrentBinary(std::string const& dir); - std::vector<std::string> const& GetCurrentSourceComponents() const; - std::vector<std::string> const& GetCurrentBinaryComponents() const; - const char* GetRelativePathTopSource() const; const char* GetRelativePathTopBinary() const; void SetRelativePathTopSource(const char* dir); @@ -312,9 +309,6 @@ public: const char* GetBinaryDirectory() const; void SetBinaryDirectory(std::string const& binaryDirectory); - std::vector<std::string> const& GetSourceDirectoryComponents() const; - std::vector<std::string> const& GetBinaryDirectoryComponents() const; - void SetWindowsShell(bool windowsShell); bool UseWindowsShell() const; void SetWindowsVSIDE(bool windowsVSIDE); @@ -350,8 +344,6 @@ private: cmLinkedTree<SnapshotDataType> SnapshotData; cmLinkedTree<cmDefinitions> VarTree; - std::vector<std::string> SourceDirectoryComponents; - std::vector<std::string> BinaryDirectoryComponents; std::string SourceDirectory; std::string BinaryDirectory; bool IsInTryCompile; |