From dadf1570d919a8dd79547b8a01644d03ae607040 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 13 Apr 2017 16:32:46 -0400 Subject: file: Refactor COPY/INSTALL relative path handling Delay conversion to absolute path until the last moment. --- Source/cmFileCommand.cxx | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index deb7187a70..51fb945aa7 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -1314,13 +1314,7 @@ bool cmFileCopier::CheckValue(std::string const& arg) { switch (this->Doing) { case DoingFiles: - if (arg.empty() || cmSystemTools::FileIsFullPath(arg.c_str())) { - this->Files.push_back(arg); - } else { - std::string file = this->Makefile->GetCurrentSourceDirectory(); - file += "/" + arg; - this->Files.push_back(file); - } + this->Files.push_back(arg); break; case DoingDestination: if (arg.empty() || cmSystemTools::FileIsFullPath(arg.c_str())) { @@ -1390,11 +1384,20 @@ bool cmFileCopier::Run(std::vector const& args) return false; } - std::vector const& files = this->Files; - for (std::vector::size_type i = 0; i < files.size(); ++i) { + for (std::vector::const_iterator i = this->Files.begin(); + i != this->Files.end(); ++i) { + std::string file; + if (!i->empty() && !cmSystemTools::FileIsFullPath(*i)) { + file = this->Makefile->GetCurrentSourceDirectory(); + file += "/"; + file += *i; + } else { + file = *i; + } + // Split the input file into its directory and name components. std::vector fromPathComponents; - cmSystemTools::SplitPath(files[i], fromPathComponents); + cmSystemTools::SplitPath(file, fromPathComponents); std::string fromName = *(fromPathComponents.end() - 1); std::string fromDir = cmSystemTools::JoinPath( fromPathComponents.begin(), fromPathComponents.end() - 1); -- cgit v1.2.1