summaryrefslogtreecommitdiffstats
path: root/Source/cmRulePlaceholderExpander.h
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2016-10-17 14:15:17 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2016-10-17 14:15:17 (GMT)
commit9a2048f1ea6687530e209992c3f5eafcbc02b2a9 (patch)
treee7903b517c4216e40dd58e27dde1476fbe6c7d11 /Source/cmRulePlaceholderExpander.h
parent248527ed930ea69f9d6953a47b708044c48d5921 (diff)
parentb59b6dd9d27de7839c7b23a3094db33298038896 (diff)
downloadCMake-9a2048f1ea6687530e209992c3f5eafcbc02b2a9.zip
CMake-9a2048f1ea6687530e209992c3f5eafcbc02b2a9.tar.gz
CMake-9a2048f1ea6687530e209992c3f5eafcbc02b2a9.tar.bz2
Merge topic 'extract-cmRulePlaceholderExpander'
b59b6dd9 cmRulePlaceholderExpander: Port clients to direct-use bdddd423 cmRulePlaceholderExpander: Extract from cmLocalGenerator f796e1b6 cmLocalGenerator: Move memset to cxx file c75a9d66 cmLocalGenerator: Use strings instead of a Target in rule replacement 46ad0d21 cmLocalGenerator: Use a converter in rule replacement API 2628dec1 cmLocalGenerator: Store variable replacements as state 315b9a31 cmLocalGenerator: Merge loops which populate mapping d5feb5b3 cmLocalGenerator: Populate variable mapping for all replacements efba22e1 cmLocalGenerator: Extract compiler option replacement from loop b29425f7 cmLocalGenerator: Populate a container of mappings for replacements f009d8f5 cmLocalGenerator: Move compiler option handling to be more direct 6cd27a85 cmLocalGenerator: Move variable to where it can be used easily 8b0e4795 cmLocalGenerator: Use the language from the compiler container 88016e2e cmLocalGenerator: Introduce a container of compiler names be87cb0c cmLocalGenerator: Simplify loop with range algorithm 425cd167 cmLocalGenerator: Remove the launcher from RuleVariables
Diffstat (limited to 'Source/cmRulePlaceholderExpander.h')
-rw-r--r--Source/cmRulePlaceholderExpander.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/Source/cmRulePlaceholderExpander.h b/Source/cmRulePlaceholderExpander.h
new file mode 100644
index 0000000..444419c
--- /dev/null
+++ b/Source/cmRulePlaceholderExpander.h
@@ -0,0 +1,83 @@
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+
+#ifndef cmRulePlaceholderExpander_h
+#define cmRulePlaceholderExpander_h
+
+#include <cmConfigure.h> // IWYU pragma: keep
+
+#include <map>
+#include <string>
+
+class cmGeneratorTarget;
+class cmOutputConverter;
+
+class cmRulePlaceholderExpander
+{
+public:
+ cmRulePlaceholderExpander(
+ std::map<std::string, std::string> const& compilers,
+ std::map<std::string, std::string> const& variableMappings,
+ std::string const& compilerSysroot);
+
+ void SetTargetImpLib(std::string const& targetImpLib)
+ {
+ this->TargetImpLib = targetImpLib;
+ }
+
+ // Create a struct to hold the varibles passed into
+ // ExpandRuleVariables
+ struct RuleVariables
+ {
+ RuleVariables();
+ const char* CMTargetName;
+ const char* CMTargetType;
+ const char* TargetPDB;
+ const char* TargetCompilePDB;
+ const char* TargetVersionMajor;
+ const char* TargetVersionMinor;
+ const char* Language;
+ const char* Objects;
+ const char* Target;
+ const char* LinkLibraries;
+ const char* Source;
+ const char* AssemblySource;
+ const char* PreprocessedSource;
+ const char* Output;
+ const char* Object;
+ const char* ObjectDir;
+ const char* ObjectFileDir;
+ const char* Flags;
+ const char* ObjectsQuoted;
+ const char* SONameFlag;
+ const char* TargetSOName;
+ const char* TargetInstallNameDir;
+ const char* LinkFlags;
+ const char* Manifests;
+ const char* LanguageCompileFlags;
+ const char* Defines;
+ const char* Includes;
+ const char* RuleLauncher;
+ const char* DependencyFile;
+ const char* FilterPrefix;
+ };
+
+ // Expand rule variables in CMake of the type found in language rules
+ void ExpandRuleVariables(cmOutputConverter* outputConverter,
+ std::string& string,
+ const RuleVariables& replaceValues);
+
+ // Expand rule variables in a single string
+ std::string ExpandRuleVariable(cmOutputConverter* outputConverter,
+ std::string const& variable,
+ const RuleVariables& replaceValues);
+
+private:
+ std::string TargetImpLib;
+
+ std::map<std::string, std::string> Compilers;
+ std::map<std::string, std::string> VariableMappings;
+ std::string CompilerSysroot;
+};
+
+#endif