|  | /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying | 
|  | file Copyright.txt or https://cmake.org/licensing for details.  */ | 
|  | #include "cmInstallSubdirectoryGenerator.h" | 
|  |  | 
|  | #include <memory> | 
|  | #include <sstream> | 
|  | #include <utility> | 
|  | #include <vector> | 
|  |  | 
|  | #include "cmLocalGenerator.h" | 
|  | #include "cmMakefile.h" | 
|  | #include "cmPolicies.h" | 
|  | #include "cmScriptGenerator.h" | 
|  | #include "cmSystemTools.h" | 
|  |  | 
|  | cmInstallSubdirectoryGenerator::cmInstallSubdirectoryGenerator( | 
|  | cmMakefile* makefile, std::string binaryDirectory, | 
|  | cmListFileBacktrace backtrace) | 
|  | : cmInstallGenerator("", std::vector<std::string>(), "", MessageDefault, | 
|  | false, false, std::move(backtrace)) | 
|  | , Makefile(makefile) | 
|  | , BinaryDirectory(std::move(binaryDirectory)) | 
|  | { | 
|  | } | 
|  |  | 
|  | cmInstallSubdirectoryGenerator::~cmInstallSubdirectoryGenerator() = default; | 
|  |  | 
|  | bool cmInstallSubdirectoryGenerator::HaveInstall() | 
|  | { | 
|  | for (const auto& generator : this->Makefile->GetInstallGenerators()) { | 
|  | if (generator->HaveInstall()) { | 
|  | return true; | 
|  | } | 
|  | } | 
|  |  | 
|  | return false; | 
|  | } | 
|  |  | 
|  | void cmInstallSubdirectoryGenerator::CheckCMP0082( | 
|  | bool& haveSubdirectoryInstall, bool& /*unused*/) | 
|  | { | 
|  | if (this->HaveInstall()) { | 
|  | haveSubdirectoryInstall = true; | 
|  | } | 
|  | } | 
|  |  | 
|  | bool cmInstallSubdirectoryGenerator::Compute(cmLocalGenerator* lg) | 
|  | { | 
|  | this->LocalGenerator = lg; | 
|  | return true; | 
|  | } | 
|  |  | 
|  | void cmInstallSubdirectoryGenerator::GenerateScript(std::ostream& os) | 
|  | { | 
|  | if (!this->Makefile->GetPropertyAsBool("EXCLUDE_FROM_ALL")) { | 
|  | cmPolicies::PolicyStatus status = | 
|  | this->LocalGenerator->GetPolicyStatus(cmPolicies::CMP0082); | 
|  | switch (status) { | 
|  | case cmPolicies::WARN: | 
|  | case cmPolicies::OLD: | 
|  | // OLD behavior is handled in cmLocalGenerator::GenerateInstallRules() | 
|  | break; | 
|  |  | 
|  | case cmPolicies::NEW: | 
|  | case cmPolicies::REQUIRED_IF_USED: | 
|  | case cmPolicies::REQUIRED_ALWAYS: { | 
|  | Indent indent; | 
|  | std::string odir = this->BinaryDirectory; | 
|  | cmSystemTools::ConvertToUnixSlashes(odir); | 
|  | os << indent << "if(NOT CMAKE_INSTALL_LOCAL_ONLY)\n" | 
|  | << indent.Next() | 
|  | << "# Include the install script for the subdirectory.\n" | 
|  | << indent.Next() << "include(\"" << odir | 
|  | << "/cmake_install.cmake\")\n" | 
|  | << indent << "endif()\n\n"; | 
|  | } break; | 
|  | } | 
|  | } | 
|  | } |