1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file LICENSE.rst or https://cmake.org/licensing for details. */
#pragma once
#include "cmConfigure.h" // IWYU pragma: keep
#include <iosfwd>
#include <string>
#include <vector>
#include "cmInstallGenerator.h"
#include "cmInstallType.h"
#include "cmListFileCache.h"
class cmGeneratorTarget;
class cmLocalGenerator;
/** \class cmInstallTargetGenerator
* \brief Generate target installation rules.
*/
class cmInstallTargetGenerator : public cmInstallGenerator
{
public:
cmInstallTargetGenerator(
std::string targetName, std::string const& dest, bool implib,
std::string file_permissions,
std::vector<std::string> const& configurations,
std::string const& component, MessageLevel message, bool exclude_from_all,
bool optional, cmListFileBacktrace backtrace = cmListFileBacktrace());
~cmInstallTargetGenerator() override;
/** Select the policy for installing shared library linkable name
symlinks. */
enum NamelinkModeType
{
NamelinkModeNone,
NamelinkModeOnly,
NamelinkModeSkip
};
void SetNamelinkMode(NamelinkModeType mode) { this->NamelinkMode = mode; }
void SetImportlinkMode(NamelinkModeType mode)
{
this->ImportlinkMode = mode;
}
std::string GetInstallFilename(std::string const& config) const;
void GetInstallObjectNames(std::string const& config,
std::vector<std::string>& objects) const;
enum NameType
{
NameNormal,
NameImplib,
NameSO,
NameReal,
NameImplibReal
};
static std::string GetInstallFilename(cmGeneratorTarget const* target,
std::string const& config,
NameType nameType = NameNormal);
bool Compute(cmLocalGenerator* lg) override;
cmGeneratorTarget* GetTarget() const { return this->Target; }
bool IsImportLibrary() const { return this->ImportLibrary; }
std::string GetDestination(std::string const& config) const;
struct Files
{
// Names or paths of files to be read from the source or build tree.
// The paths may be computed as [FromDir/] + From[i].
std::vector<std::string> From;
// Corresponding names of files to be written in the install directory.
// The paths may be computed as Destination/ + [ToDir/] + To[i].
std::vector<std::string> To;
// Prefix for all files in From.
std::string FromDir;
// Prefix for all files in To.
std::string ToDir;
NamelinkModeType NamelinkMode = NamelinkModeNone;
bool NoTweak = false;
bool UseSourcePermissions = false;
cmInstallType Type = cmInstallType();
};
Files GetFiles(std::string const& config) const;
bool GetOptional() const { return this->Optional; }
protected:
void GenerateScriptForConfig(std::ostream& os, std::string const& config,
Indent indent) override;
void PreReplacementTweaks(std::ostream& os, Indent indent,
std::string const& config,
std::string const& file);
void PostReplacementTweaks(std::ostream& os, Indent indent,
std::string const& config,
std::string const& file);
void AddInstallNamePatchRule(std::ostream& os, Indent indent,
std::string const& config,
std::string const& toDestDirPath);
void AddChrpathPatchRule(std::ostream& os, Indent indent,
std::string const& config,
std::string const& toDestDirPath);
void AddRPathCheckRule(std::ostream& os, Indent indent,
std::string const& config,
std::string const& toDestDirPath);
void AddStripRule(std::ostream& os, Indent indent,
std::string const& toDestDirPath);
void AddRanlibRule(std::ostream& os, Indent indent,
std::string const& toDestDirPath);
void AddUniversalInstallRule(std::ostream& os, Indent indent,
std::string const& toDestDirPath);
void IssueCMP0095Warning(std::string const& unescapedRpath);
std::string const TargetName;
cmGeneratorTarget* Target = nullptr;
std::string const FilePermissions;
NamelinkModeType NamelinkMode;
NamelinkModeType ImportlinkMode;
bool const ImportLibrary;
bool const Optional;
};
|