mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-22 06:59:01 -06:00
file: Refactor COPY/INSTALL relative path handling
Delay conversion to absolute path until the last moment.
This commit is contained in:
@@ -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<std::string> const& args)
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<std::string> const& files = this->Files;
|
||||
for (std::vector<std::string>::size_type i = 0; i < files.size(); ++i) {
|
||||
for (std::vector<std::string>::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<std::string> 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);
|
||||
|
||||
Reference in New Issue
Block a user