From c23f89bc7651609865164c95ce3655ebd369c11e Mon Sep 17 00:00:00 2001 From: Daniel Pfeifer Date: Mon, 20 Jun 2016 22:11:20 +0200 Subject: cmOutputConverter::Convert: make precondition explicit --- Source/cmOutputConverter.cxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index da43a11..a23478b 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -161,9 +161,11 @@ std::string cmOutputConverter::Convert(RelativeRoot remote, OutputFormat output, bool optional) const { - const char* remotePath = this->GetRelativeRootPath(remote); - // The relative root must have a path (i.e. not FULL or NONE) + assert(remote != FULL); + assert(remote != NONE); + + const char* remotePath = this->GetRelativeRootPath(remote); assert(remotePath != 0); if (!local.empty() && !optional) { -- cgit v0.12 From cde127b08441b23f7210bfe987812f8d253e960b Mon Sep 17 00:00:00 2001 From: Daniel Pfeifer Date: Mon, 20 Jun 2016 22:12:21 +0200 Subject: cmOutputConverter::Convert: invert condition Make the control flow of the 'optional' argument more explicit. --- Source/cmOutputConverter.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index a23478b..a45e37b 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -168,14 +168,14 @@ std::string cmOutputConverter::Convert(RelativeRoot remote, const char* remotePath = this->GetRelativeRootPath(remote); assert(remotePath != 0); - if (!local.empty() && !optional) { - std::vector components; - cmSystemTools::SplitPath(local, components); - std::string result = this->ConvertToRelativePath(components, remotePath); - return this->ConvertToOutputFormat(result, output); + if (local.empty() || optional) { + return this->ConvertToOutputFormat(remotePath, output); } - return this->ConvertToOutputFormat(remotePath, output); + std::vector components; + cmSystemTools::SplitPath(local, components); + std::string result = this->ConvertToRelativePath(components, remotePath); + return this->ConvertToOutputFormat(result, output); } static bool cmOutputConverterNotAbove(const char* a, const char* b) -- cgit v0.12 From b86007e385fc0f4cc45149b68cafebad749bf6e8 Mon Sep 17 00:00:00 2001 From: Daniel Pfeifer Date: Mon, 20 Jun 2016 22:31:57 +0200 Subject: cmOutputConverter: remove 'optional' argument Remove the 'optional' paramenter from the second overload of the Convert function. This parameter is used from one single location. Inline the codepath for which the argument is true to the callsite. --- Source/cmOutputConverter.cxx | 17 ++++++++++++----- Source/cmOutputConverter.h | 3 +-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index a45e37b..8f1e3af 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -61,11 +61,19 @@ std::string cmOutputConverter::ConvertToOutputForExisting( std::string cmOutputConverter::ConvertToOutputForExisting( RelativeRoot remote, const std::string& local, OutputFormat format) const { + static_cast(local); + + // The relative root must have a path (i.e. not FULL or NONE) + assert(remote != FULL); + assert(remote != NONE); + + const char* remotePath = this->GetRelativeRootPath(remote); + assert(remotePath != 0); + // Perform standard conversion. - std::string result = this->Convert(remote, local, format, true); + std::string result = this->ConvertToOutputFormat(remotePath, format); // Consider short-path. - const char* remotePath = this->GetRelativeRootPath(remote); return this->ConvertToOutputForExistingCommon(remotePath, result, format); } @@ -158,8 +166,7 @@ std::string cmOutputConverter::ConvertDirectorySeparatorsForShell( std::string cmOutputConverter::Convert(RelativeRoot remote, const std::string& local, - OutputFormat output, - bool optional) const + OutputFormat output) const { // The relative root must have a path (i.e. not FULL or NONE) assert(remote != FULL); @@ -168,7 +175,7 @@ std::string cmOutputConverter::Convert(RelativeRoot remote, const char* remotePath = this->GetRelativeRootPath(remote); assert(remotePath != 0); - if (local.empty() || optional) { + if (local.empty()) { return this->ConvertToOutputFormat(remotePath, output); } diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h index f138d0e..f661572 100644 --- a/Source/cmOutputConverter.h +++ b/Source/cmOutputConverter.h @@ -58,8 +58,7 @@ public: std::string Convert(const std::string& remote, RelativeRoot local, OutputFormat output = UNCHANGED) const; std::string Convert(RelativeRoot remote, const std::string& local, - OutputFormat output = UNCHANGED, - bool optional = false) const; + OutputFormat output = UNCHANGED) const; std::string ConvertDirectorySeparatorsForShell( const std::string& source) const; -- cgit v0.12 From 191fc3a0f373d262e2f2e5a2ccb07979e227d683 Mon Sep 17 00:00:00 2001 From: Daniel Pfeifer Date: Mon, 20 Jun 2016 23:03:28 +0200 Subject: cmOutputConverter: remove unused 'local' argument --- Source/cmLocalGenerator.cxx | 6 +++--- Source/cmLocalUnixMakefileGenerator3.cxx | 7 +++---- Source/cmOutputConverter.cxx | 8 ++------ Source/cmOutputConverter.h | 2 -- 4 files changed, 8 insertions(+), 15 deletions(-) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index e2e7aa1..0de9895 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -832,8 +832,8 @@ void cmLocalGenerator::InsertRuleLauncher(std::string& s, std::string cmLocalGenerator::ConvertToIncludeReference( std::string const& path, OutputFormat format, bool forceFullPaths) { - return this->ConvertToOutputForExisting( - path, forceFullPaths ? FULL : START_OUTPUT, format); + static_cast(forceFullPaths); + return this->ConvertToOutputForExisting(path, format); } std::string cmLocalGenerator::GetIncludeFlags( @@ -1503,7 +1503,7 @@ void cmLocalGenerator::OutputLinkLibraries(std::string& linkLibraries, for (std::vector::const_iterator libDir = libDirs.begin(); libDir != libDirs.end(); ++libDir) { std::string libpath = - this->ConvertToOutputForExisting(*libDir, START_OUTPUT, shellFormat); + this->ConvertToOutputForExisting(*libDir, shellFormat); linkPath += " " + libPathFlag; linkPath += libpath; linkPath += libPathTerminator; diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index 460f0e2..0478a3a 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -2068,19 +2068,18 @@ void cmLocalUnixMakefileGenerator3::CreateCDCommand( // back because the shell keeps the working directory between // commands. std::string cmd = cd_cmd; - cmd += this->ConvertToOutputForExisting(tgtDir, relRetDir); + cmd += this->ConvertToOutputForExisting(tgtDir); commands.insert(commands.begin(), cmd); // Change back to the starting directory. cmd = cd_cmd; - cmd += this->ConvertToOutputForExisting(relRetDir, tgtDir); + cmd += this->ConvertToOutputForExisting(relRetDir); commands.push_back(cmd); } else { // On UNIX we must construct a single shell command to change // directory and build because make resets the directory between // each command. - std::string outputForExisting = - this->ConvertToOutputForExisting(tgtDir, relRetDir); + std::string outputForExisting = this->ConvertToOutputForExisting(tgtDir); std::string prefix = cd_cmd + outputForExisting + " && "; std::transform(commands.begin(), commands.end(), commands.begin(), std::bind1st(std::plus(), prefix)); diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index 8f1e3af..e66158e 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -47,10 +47,8 @@ std::string cmOutputConverter::ConvertToOutputForExistingCommon( } std::string cmOutputConverter::ConvertToOutputForExisting( - const std::string& remote, RelativeRoot local, OutputFormat format) const + const std::string& remote, OutputFormat format) const { - static_cast(local); - // Perform standard conversion. std::string result = this->ConvertToOutputFormat(remote, format); @@ -59,10 +57,8 @@ std::string cmOutputConverter::ConvertToOutputForExisting( } std::string cmOutputConverter::ConvertToOutputForExisting( - RelativeRoot remote, const std::string& local, OutputFormat format) const + RelativeRoot remote, OutputFormat format) const { - static_cast(local); - // The relative root must have a path (i.e. not FULL or NONE) assert(remote != FULL); assert(remote != NONE); diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h index f661572..3d7d493 100644 --- a/Source/cmOutputConverter.h +++ b/Source/cmOutputConverter.h @@ -69,13 +69,11 @@ public: ///! for existing files convert to output path and short path if spaces std::string ConvertToOutputForExisting(const std::string& remote, - RelativeRoot local = START_OUTPUT, OutputFormat format = SHELL) const; /** For existing path identified by RelativeRoot convert to output path and short path if spaces. */ std::string ConvertToOutputForExisting(RelativeRoot remote, - const std::string& local = "", OutputFormat format = SHELL) const; void SetLinkScriptShell(bool linkScriptShell); -- cgit v0.12 From bdaadbdc2b6f7cb9eea1392043f225da85f51b5b Mon Sep 17 00:00:00 2001 From: Daniel Pfeifer Date: Mon, 20 Jun 2016 23:11:05 +0200 Subject: cmOutputConverter: collapse ConvertToOutputForExisting functions --- Source/cmOutputConverter.cxx | 24 ++++++------------------ Source/cmOutputConverter.h | 4 ---- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index e66158e..03d8376 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -27,10 +27,12 @@ cmOutputConverter::cmOutputConverter(cmState::Snapshot snapshot) assert(this->StateSnapshot.IsValid()); } -std::string cmOutputConverter::ConvertToOutputForExistingCommon( - const std::string& remote, std::string const& result, - OutputFormat format) const +std::string cmOutputConverter::ConvertToOutputForExisting( + const std::string& remote, OutputFormat format) const { + // Perform standard conversion. + std::string result = this->ConvertToOutputFormat(remote, format); + // If this is a windows shell, the result has a space, and the path // already exists, we can use a short-path to reference it without a // space. @@ -47,16 +49,6 @@ std::string cmOutputConverter::ConvertToOutputForExistingCommon( } std::string cmOutputConverter::ConvertToOutputForExisting( - const std::string& remote, OutputFormat format) const -{ - // Perform standard conversion. - std::string result = this->ConvertToOutputFormat(remote, format); - - // Consider short-path. - return this->ConvertToOutputForExistingCommon(remote, result, format); -} - -std::string cmOutputConverter::ConvertToOutputForExisting( RelativeRoot remote, OutputFormat format) const { // The relative root must have a path (i.e. not FULL or NONE) @@ -66,11 +58,7 @@ std::string cmOutputConverter::ConvertToOutputForExisting( const char* remotePath = this->GetRelativeRootPath(remote); assert(remotePath != 0); - // Perform standard conversion. - std::string result = this->ConvertToOutputFormat(remotePath, format); - - // Consider short-path. - return this->ConvertToOutputForExistingCommon(remotePath, result, format); + return this->ConvertToOutputForExisting(remotePath, format); } const char* cmOutputConverter::GetRelativeRootPath(RelativeRoot relroot) const diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h index 3d7d493..23f2e62 100644 --- a/Source/cmOutputConverter.h +++ b/Source/cmOutputConverter.h @@ -159,10 +159,6 @@ public: private: cmState* GetState() const; - std::string ConvertToOutputForExistingCommon(const std::string& remote, - std::string const& result, - OutputFormat format) const; - static int Shell__CharIsWhitespace(char c); static int Shell__CharNeedsQuotesOnUnix(char c); static int Shell__CharNeedsQuotesOnWindows(char c); -- cgit v0.12 From 8ddbd4c2806f3064f734377b48ec77131f6836dc Mon Sep 17 00:00:00 2001 From: Daniel Pfeifer Date: Mon, 20 Jun 2016 23:18:59 +0200 Subject: cmOutputConverter: remove unnecessary conversion --- Source/cmOutputConverter.cxx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index 03d8376..b92c074 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -30,13 +30,11 @@ cmOutputConverter::cmOutputConverter(cmState::Snapshot snapshot) std::string cmOutputConverter::ConvertToOutputForExisting( const std::string& remote, OutputFormat format) const { - // Perform standard conversion. - std::string result = this->ConvertToOutputFormat(remote, format); - // If this is a windows shell, the result has a space, and the path // already exists, we can use a short-path to reference it without a // space. - if (this->GetState()->UseWindowsShell() && result.find(' ') != result.npos && + if (this->GetState()->UseWindowsShell() && + remote.find(' ') != std::string::npos && cmSystemTools::FileExists(remote.c_str())) { std::string tmp; if (cmSystemTools::GetShortPath(remote, tmp)) { @@ -44,8 +42,8 @@ std::string cmOutputConverter::ConvertToOutputForExisting( } } - // Otherwise, leave it unchanged. - return result; + // Otherwise, perform standard conversion. + return this->ConvertToOutputFormat(remote, format); } std::string cmOutputConverter::ConvertToOutputForExisting( -- cgit v0.12