summaryrefslogtreecommitdiff
path: root/Source/cmInstallDirectoryGenerator.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmInstallDirectoryGenerator.cxx')
-rw-r--r--Source/cmInstallDirectoryGenerator.cxx28
1 files changed, 20 insertions, 8 deletions
diff --git a/Source/cmInstallDirectoryGenerator.cxx b/Source/cmInstallDirectoryGenerator.cxx
index 175e7cf0b..4eb5f69e4 100644
--- a/Source/cmInstallDirectoryGenerator.cxx
+++ b/Source/cmInstallDirectoryGenerator.cxx
@@ -16,9 +16,9 @@ cmInstallDirectoryGenerator::cmInstallDirectoryGenerator(
std::string file_permissions, std::string dir_permissions,
std::vector<std::string> const& configurations, std::string const& component,
MessageLevel message, bool exclude_from_all, std::string literal_args,
- bool optional)
+ bool optional, cmListFileBacktrace backtrace)
: cmInstallGenerator(dest, configurations, component, message,
- exclude_from_all)
+ exclude_from_all, std::move(backtrace))
, LocalGenerator(nullptr)
, Directories(dirs)
, FilePermissions(std::move(file_permissions))
@@ -27,7 +27,7 @@ cmInstallDirectoryGenerator::cmInstallDirectoryGenerator(
, Optional(optional)
{
// We need per-config actions if destination have generator expressions.
- if (cmGeneratorExpression::Find(Destination) != std::string::npos) {
+ if (cmGeneratorExpression::Find(this->Destination) != std::string::npos) {
this->ActionsPerConfig = true;
}
@@ -50,6 +50,22 @@ bool cmInstallDirectoryGenerator::Compute(cmLocalGenerator* lg)
return true;
}
+std::vector<std::string> cmInstallDirectoryGenerator::GetDirectories(
+ std::string const& config) const
+{
+ std::vector<std::string> directories;
+ if (this->ActionsPerConfig) {
+ for (std::string const& f : this->Directories) {
+ cmExpandList(
+ cmGeneratorExpression::Evaluate(f, this->LocalGenerator, config),
+ directories);
+ }
+ } else {
+ directories = this->Directories;
+ }
+ return directories;
+}
+
void cmInstallDirectoryGenerator::GenerateScriptActions(std::ostream& os,
Indent indent)
{
@@ -63,11 +79,7 @@ void cmInstallDirectoryGenerator::GenerateScriptActions(std::ostream& os,
void cmInstallDirectoryGenerator::GenerateScriptForConfig(
std::ostream& os, const std::string& config, Indent indent)
{
- std::vector<std::string> dirs;
- for (std::string const& d : this->Directories) {
- cmExpandList(
- cmGeneratorExpression::Evaluate(d, this->LocalGenerator, config), dirs);
- }
+ std::vector<std::string> dirs = this->GetDirectories(config);
// Make sure all dirs have absolute paths.
cmMakefile const& mf = *this->LocalGenerator->GetMakefile();