mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
79 lines
2.1 KiB
C++
79 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 "cmConfigure.h" // IWYU pragma: keep
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
|
|
#include "cmPlaceholderExpander.h"
|
|
#include "cmPropertyMap.h"
|
|
#include "cmRule.h"
|
|
#include "cmValue.h"
|
|
|
|
class cmMakefile;
|
|
class cmTarget;
|
|
class cmFileSet;
|
|
class cmSourceFile;
|
|
class cmCustomCommand;
|
|
|
|
class cmGeneratorRule
|
|
{
|
|
public:
|
|
cmGeneratorRule(cmRule const* rule, cmTarget const* target,
|
|
cmFileSet const* fileSet, cmFileSet const* outputFileSet,
|
|
cmSourceFile const* source,
|
|
cmRule::PatternSet const& patterns);
|
|
|
|
cmGeneratorRule(cmGeneratorRule const&) = delete;
|
|
cmGeneratorRule& operator=(cmGeneratorRule const&) = delete;
|
|
|
|
cmMakefile& GetMakefile() const { return this->Makefile; }
|
|
|
|
/** Get the name of the rule */
|
|
std::string const& GetName() const { return this->Name; }
|
|
|
|
bool IsGloballyVisible() const { return this->Rule->IsGloballyVisible(); }
|
|
|
|
cmValue GetProperty(std::string const& property) const;
|
|
|
|
std::unique_ptr<cmCustomCommand> Generate(cmFileSet* outFileSet) const;
|
|
|
|
private:
|
|
void UpdateRuleExpander(cmRule::PatternSet const& patterns);
|
|
|
|
std::unique_ptr<cmCustomCommand> CreateCustomCommand() const;
|
|
|
|
std::string Name;
|
|
cmRule const* Rule;
|
|
cmTarget const* Target;
|
|
cmFileSet const* FileSet;
|
|
cmFileSet const* OutputFileSet;
|
|
cmSourceFile const* Source;
|
|
cmMakefile& Makefile;
|
|
mutable cmPropertyMap Properties;
|
|
|
|
class RulePlaceholderExpander : public cmPlaceholderExpander
|
|
{
|
|
public:
|
|
using VariableMap = std::unordered_map<std::string, std::string>;
|
|
VariableMap Values;
|
|
|
|
std::string ExpandVariables(std::string const& string)
|
|
{
|
|
std::string value{ string };
|
|
return cmPlaceholderExpander::ExpandVariables(
|
|
value, cmPlaceholderExpander::HandleGenex::Yes);
|
|
}
|
|
|
|
private:
|
|
std::string ExpandVariable(std::string const& variable) override;
|
|
};
|
|
|
|
static RulePlaceholderExpander::VariableMap const DefaultProperties;
|
|
|
|
mutable RulePlaceholderExpander RuleExpander;
|
|
};
|