install: Fix evaluation of leading generator expressions in DIRECTORY
Since commit v3.5.0-rc1~58^2 (install: Allow generator expressions in DIRECTORY, 2016-01-12) we accidentally treat leading generator expressions as relative paths even though they may evaluate to absolute paths. Defer the conversion to an absolute path until after evaluation.
This commit is contained in:
parent
0a2d0b126c
commit
3bd55dba7c
|
@ -976,7 +976,8 @@ bool cmInstallCommand::HandleDirectoryMode(
|
|||
} else if (doing == DoingDirs) {
|
||||
// Convert this directory to a full path.
|
||||
std::string dir = args[i];
|
||||
if (!cmSystemTools::FileIsFullPath(dir.c_str())) {
|
||||
std::string::size_type gpos = cmGeneratorExpression::Find(dir);
|
||||
if (gpos != 0 && !cmSystemTools::FileIsFullPath(dir.c_str())) {
|
||||
dir = this->Makefile->GetCurrentSourceDirectory();
|
||||
dir += "/";
|
||||
dir += args[i];
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
#include "cmGeneratorExpression.h"
|
||||
#include "cmLocalGenerator.h"
|
||||
#include "cmMakefile.h"
|
||||
|
||||
cmInstallDirectoryGenerator::cmInstallDirectoryGenerator(
|
||||
std::vector<std::string> const& dirs, const char* dest,
|
||||
|
@ -73,6 +74,16 @@ void cmInstallDirectoryGenerator::GenerateScriptForConfig(
|
|||
cmSystemTools::ExpandListArgument(
|
||||
cge->Evaluate(this->LocalGenerator, config), dirs);
|
||||
}
|
||||
|
||||
// Make sure all dirs have absolute paths.
|
||||
cmMakefile const& mf = *this->LocalGenerator->GetMakefile();
|
||||
for (std::vector<std::string>::iterator i = dirs.begin(); i != dirs.end();
|
||||
++i) {
|
||||
if (!cmSystemTools::FileIsFullPath(i->c_str())) {
|
||||
*i = std::string(mf.GetCurrentSourceDirectory()) + "/" + *i;
|
||||
}
|
||||
}
|
||||
|
||||
this->AddDirectoryInstallRule(os, config, indent, dirs);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue