1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
3 #include "cmInstallScriptGenerator.h"
9 #include "cmGeneratorExpression.h"
10 #include "cmLocalGenerator.h"
11 #include "cmMessageType.h"
12 #include "cmPolicies.h"
13 #include "cmScriptGenerator.h"
15 cmInstallScriptGenerator::cmInstallScriptGenerator(
16 std::string script, bool code, std::string const& component,
17 bool exclude_from_all, bool all_components, cmListFileBacktrace backtrace)
18 : cmInstallGenerator("", std::vector<std::string>(), component,
19 MessageDefault, exclude_from_all, all_components,
21 , Script(std::move(script))
24 // We need per-config actions if the script has generator expressions.
25 if (cmGeneratorExpression::Find(this->Script) != std::string::npos) {
26 this->ActionsPerConfig = true;
30 cmInstallScriptGenerator::~cmInstallScriptGenerator() = default;
32 bool cmInstallScriptGenerator::Compute(cmLocalGenerator* lg)
34 this->LocalGenerator = lg;
36 if (this->ActionsPerConfig) {
37 switch (this->LocalGenerator->GetPolicyStatus(cmPolicies::CMP0087)) {
38 case cmPolicies::WARN:
39 this->LocalGenerator->IssueMessage(
40 MessageType::AUTHOR_WARNING,
41 cmPolicies::GetPolicyWarning(cmPolicies::CMP0087));
46 case cmPolicies::REQUIRED_ALWAYS:
47 case cmPolicies::REQUIRED_IF_USED:
48 this->AllowGenex = true;
56 std::string cmInstallScriptGenerator::GetScript(
57 std::string const& config) const
60 if (this->AllowGenex && this->ActionsPerConfig) {
61 script = cmGeneratorExpression::Evaluate(this->Script,
62 this->LocalGenerator, config);
64 script = this->Script;
69 void cmInstallScriptGenerator::AddScriptInstallRule(
70 std::ostream& os, Indent indent, std::string const& script) const
73 os << indent << script << "\n";
75 os << indent << "include(\"" << script << "\")\n";
79 void cmInstallScriptGenerator::GenerateScriptActions(std::ostream& os,
82 if (this->AllowGenex && this->ActionsPerConfig) {
83 this->cmInstallGenerator::GenerateScriptActions(os, indent);
85 this->AddScriptInstallRule(os, indent, this->Script);
89 void cmInstallScriptGenerator::GenerateScriptForConfig(
90 std::ostream& os, const std::string& config, Indent indent)
92 this->AddScriptInstallRule(os, indent, this->GetScript(config));