mirror of
https://github.com/Kitware/CMake.git
synced 2026-08-09 17:18:18 +00:00
Add `-Winstall-absolute-destination` diagnostic to warn or error when an install command has an absolute destination. This allow projects to enforce the best practice of not allowing absolute install DESTINATIONS.
64 lines
2.1 KiB
C++
64 lines
2.1 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file LICENSE.rst or https://cmake.org/licensing for details. */
|
|
#pragma once
|
|
|
|
#include <iosfwd>
|
|
#include <map>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "cmInstallGenerator.h"
|
|
|
|
class cmExportInstallCMakeConfigGenerator;
|
|
class cmGeneratorFileSet;
|
|
class cmGeneratorTarget;
|
|
class cmListFileBacktrace;
|
|
class cmLocalGenerator;
|
|
|
|
class cmInstallFileSetGenerator : public cmInstallGenerator
|
|
{
|
|
public:
|
|
cmInstallFileSetGenerator(std::string targetName, std::string fileSetName,
|
|
std::string destination,
|
|
std::string file_permissions,
|
|
std::vector<std::string> const& configurations,
|
|
std::string const& component, MessageLevel message,
|
|
bool exclude_from_all, bool optional,
|
|
cmListFileBacktrace backtrace);
|
|
~cmInstallFileSetGenerator() override;
|
|
|
|
bool Compute(cmLocalGenerator* lg) override;
|
|
|
|
struct DestinationContext
|
|
{
|
|
std::string UnescapedDestination;
|
|
bool HadContextSensitiveCondition;
|
|
};
|
|
std::string GetDestination(std::string const& config) const;
|
|
DestinationContext GetDestination(cmGeneratorTarget* gt,
|
|
std::string const& config) const;
|
|
bool GetOptional() const { return this->Optional; }
|
|
std::string GetFileSetName() const { return this->FileSetName; }
|
|
cmGeneratorFileSet const* GetFileSet() const { return this->FileSet; };
|
|
cmGeneratorTarget* GetTarget() const { return this->Target; }
|
|
|
|
protected:
|
|
friend cmExportInstallCMakeConfigGenerator;
|
|
std::string GetDestination() const;
|
|
|
|
void GenerateScriptForConfig(std::ostream& os, std::string const& config,
|
|
Indent indent) override;
|
|
|
|
private:
|
|
std::string TargetName;
|
|
cmLocalGenerator* LocalGenerator;
|
|
cmGeneratorFileSet const* FileSet;
|
|
std::string const FileSetName;
|
|
std::string const FilePermissions;
|
|
bool const Optional;
|
|
cmGeneratorTarget* Target;
|
|
|
|
std::map<std::string, std::vector<std::string>> CalculateFilesPerDir(
|
|
std::string const& config) const;
|
|
};
|