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 "cmInstallSubdirectoryGenerator.h"
10 #include "cmListFileCache.h"
11 #include "cmLocalGenerator.h"
12 #include "cmMakefile.h"
13 #include "cmPolicies.h"
14 #include "cmScriptGenerator.h"
15 #include "cmSystemTools.h"
17 cmInstallSubdirectoryGenerator::cmInstallSubdirectoryGenerator(
18 cmMakefile* makefile, std::string binaryDirectory,
19 cmListFileBacktrace backtrace)
20 : cmInstallGenerator("", std::vector<std::string>(), "", MessageDefault,
21 false, false, std::move(backtrace))
23 , BinaryDirectory(std::move(binaryDirectory))
27 cmInstallSubdirectoryGenerator::~cmInstallSubdirectoryGenerator() = default;
29 bool cmInstallSubdirectoryGenerator::HaveInstall()
31 for (const auto& generator : this->Makefile->GetInstallGenerators()) {
32 if (generator->HaveInstall()) {
40 void cmInstallSubdirectoryGenerator::CheckCMP0082(
41 bool& haveSubdirectoryInstall, bool& /*unused*/)
43 if (this->HaveInstall()) {
44 haveSubdirectoryInstall = true;
48 bool cmInstallSubdirectoryGenerator::Compute(cmLocalGenerator* lg)
50 this->LocalGenerator = lg;
54 void cmInstallSubdirectoryGenerator::GenerateScript(std::ostream& os)
56 if (!this->Makefile->GetPropertyAsBool("EXCLUDE_FROM_ALL")) {
57 cmPolicies::PolicyStatus status =
58 this->LocalGenerator->GetPolicyStatus(cmPolicies::CMP0082);
60 case cmPolicies::WARN:
63 // OLD behavior is handled in cmLocalGenerator::GenerateInstallRules()
67 case cmPolicies::REQUIRED_IF_USED:
68 case cmPolicies::REQUIRED_ALWAYS: {
70 std::string odir = this->BinaryDirectory;
71 cmSystemTools::ConvertToUnixSlashes(odir);
72 os << indent << "if(NOT CMAKE_INSTALL_LOCAL_ONLY)\n"
74 << "# Include the install script for the subdirectory.\n"
75 << indent.Next() << "include(\"" << odir
76 << "/cmake_install.cmake\")\n"
77 << indent << "endif()\n\n";