/* 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 #include #include "cmPlaceholderExpander.h" class cmOutputConverter; class cmRulePlaceholderExpander : public cmPlaceholderExpander { public: cmRulePlaceholderExpander( std::map compilers, std::map 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* Linker = 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* SwiftOutputFileMapOption = nullptr; const char* SwiftSources = nullptr; const char* ISPCHeader = nullptr; const char* CudaCompileMode = 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); private: std::string ExpandVariable(std::string const& variable) override; std::string TargetImpLib; std::map Compilers; std::map VariableMappings; std::string CompilerSysroot; std::string LinkerSysroot; cmOutputConverter* OutputConverter = nullptr; RuleVariables const* ReplaceValues = nullptr; };