| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file Copyright.txt or https://cmake.org/licensing for details. */ |
| |
| #pragma once |
| |
| #include "cmConfigure.h" // IWYU pragma: keep |
| |
| #include <map> |
| #include <string> |
| |
| class cmOutputConverter; |
| |
| class cmRulePlaceholderExpander |
| { |
| public: |
| cmRulePlaceholderExpander( |
| std::map<std::string, std::string> compilers, |
| std::map<std::string, std::string> variableMappings, |
| std::string compilerSysroot, std::string linkerSysroot); |
| |
| void SetTargetImpLib(std::string const& targetImpLib) |
| { |
| this->TargetImpLib = targetImpLib; |
| } |
| |
| // Create a struct to hold the variables passed into |
| // ExpandRuleVariables |
| struct RuleVariables |
| { |
| const char* CMTargetName = nullptr; |
| const char* CMTargetType = nullptr; |
| const char* TargetPDB = nullptr; |
| const char* TargetCompilePDB = nullptr; |
| const char* TargetVersionMajor = nullptr; |
| const char* TargetVersionMinor = nullptr; |
| const char* Language = nullptr; |
| const char* AIXExports = nullptr; |
| const char* Objects = nullptr; |
| const char* Target = nullptr; |
| const char* LinkLibraries = nullptr; |
| const char* Source = nullptr; |
| const char* AssemblySource = nullptr; |
| const char* PreprocessedSource = nullptr; |
| const char* DynDepFile = nullptr; |
| const char* Output = nullptr; |
| const char* Object = nullptr; |
| const char* ObjectDir = nullptr; |
| const char* ObjectFileDir = nullptr; |
| const char* Flags = nullptr; |
| const char* ObjectsQuoted = nullptr; |
| const char* SONameFlag = nullptr; |
| const char* TargetSOName = nullptr; |
| const char* TargetInstallNameDir = nullptr; |
| const char* LinkFlags = nullptr; |
| const char* Manifests = nullptr; |
| const char* LanguageCompileFlags = nullptr; |
| const char* Defines = nullptr; |
| const char* Includes = nullptr; |
| const char* DependencyFile = nullptr; |
| const char* DependencyTarget = nullptr; |
| const char* FilterPrefix = nullptr; |
| const char* SwiftLibraryName = nullptr; |
| const char* SwiftModule = nullptr; |
| const char* SwiftModuleName = nullptr; |
| const char* SwiftOutputFileMap = nullptr; |
| const char* SwiftSources = nullptr; |
| const char* ISPCHeader = nullptr; |
| const char* Fatbinary = nullptr; |
| const char* RegisterFile = nullptr; |
| const char* Launcher = nullptr; |
| }; |
| |
| // 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; |
| std::string LinkerSysroot; |
| }; |