Commit 3bd55dba authored by Yves Frederix's avatar Yves Frederix Committed by Brad King
Browse files

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.
parent 0a2d0b12
......@@ -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);
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment