7f819903ed
In single-configuration generators a target installation rule should apply to all configurations for which the INSTALL command was specified. The configuration in which the target is built does not matter. In multi-configuration generators each installation rule must be associated with a particular build configuration to install the proper file. The set of configurations for which rules are generated is the intersection of the build configurations and those for which the INSTALL command was specified.
100 lines
3.4 KiB
C++
100 lines
3.4 KiB
C++
/*=========================================================================
|
|
|
|
Program: CMake - Cross-Platform Makefile Generator
|
|
Module: $RCSfile$
|
|
Language: C++
|
|
Date: $Date$
|
|
Version: $Revision$
|
|
|
|
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notices for more information.
|
|
|
|
=========================================================================*/
|
|
#ifndef cmInstallTargetGenerator_h
|
|
#define cmInstallTargetGenerator_h
|
|
|
|
#include "cmInstallGenerator.h"
|
|
#include "cmTarget.h"
|
|
|
|
/** \class cmInstallTargetGenerator
|
|
* \brief Generate target installation rules.
|
|
*/
|
|
class cmInstallTargetGenerator: public cmInstallGenerator
|
|
{
|
|
public:
|
|
cmInstallTargetGenerator(
|
|
cmTarget& t, const char* dest, bool implib,
|
|
const char* file_permissions = "",
|
|
std::vector<std::string> const& configurations
|
|
= std::vector<std::string>(),
|
|
const char* component = "Unspecified",
|
|
bool optional = false
|
|
);
|
|
virtual ~cmInstallTargetGenerator();
|
|
|
|
/** Select the policy for installing shared library linkable name
|
|
symlinks. */
|
|
enum NamelinkModeType
|
|
{
|
|
NamelinkModeNone,
|
|
NamelinkModeOnly,
|
|
NamelinkModeSkip
|
|
};
|
|
void SetNamelinkMode(NamelinkModeType mode) { this->NamelinkMode = mode; }
|
|
NamelinkModeType GetNamelinkMode() const { return this->NamelinkMode; }
|
|
|
|
std::string GetInstallFilename(const char* config) const;
|
|
|
|
enum NameType
|
|
{
|
|
NameNormal,
|
|
NameImplib,
|
|
NameSO,
|
|
NameReal
|
|
};
|
|
|
|
static std::string GetInstallFilename(cmTarget*target, const char* config,
|
|
NameType nameType = NameNormal);
|
|
|
|
cmTarget* GetTarget() const { return this->Target; }
|
|
bool IsImportLibrary() const { return this->ImportLibrary; }
|
|
|
|
protected:
|
|
typedef cmInstallGeneratorIndent Indent;
|
|
virtual void GenerateScript(std::ostream& os);
|
|
virtual void GenerateScriptConfigs(std::ostream& os, Indent const& indent);
|
|
virtual void GenerateScriptActions(std::ostream& os, Indent const& indent);
|
|
void GenerateScriptForConfig(std::ostream& os,
|
|
const char* config,
|
|
Indent const& indent);
|
|
void AddInstallNamePatchRule(std::ostream& os, Indent const& indent,
|
|
const char* config,
|
|
const std::string& toDestDirPath);
|
|
void AddChrpathPatchRule(std::ostream& os, Indent const& indent,
|
|
const char* config,
|
|
std::string const& toDestDirPath);
|
|
void AddRPathCheckRule(std::ostream& os, Indent const& indent,
|
|
const char* config,
|
|
std::string const& toDestDirPath);
|
|
|
|
void AddStripRule(std::ostream& os, Indent const& indent,
|
|
cmTarget::TargetType type,
|
|
const std::string& toDestDirPath);
|
|
void AddRanlibRule(std::ostream& os, Indent const& indent,
|
|
cmTarget::TargetType type,
|
|
const std::string& toDestDirPath);
|
|
|
|
cmTarget* Target;
|
|
bool ImportLibrary;
|
|
std::string FilePermissions;
|
|
bool Optional;
|
|
NamelinkModeType NamelinkMode;
|
|
std::string FromDir;
|
|
};
|
|
|
|
#endif
|