diff --git a/Source/cmCommonTargetGenerator.cxx b/Source/cmCommonTargetGenerator.cxx index 867f1af298..616975019e 100644 --- a/Source/cmCommonTargetGenerator.cxx +++ b/Source/cmCommonTargetGenerator.cxx @@ -11,6 +11,7 @@ #include #include "cmComputeLinkInformation.h" +#include "cmGenExContext.h" #include "cmGeneratorExpression.h" #include "cmGeneratorExpressionDAGChecker.h" #include "cmGeneratorTarget.h" @@ -521,13 +522,14 @@ std::string cmCommonTargetGenerator::GetLinkerLauncher( std::string propName = lang + "_LINKER_LAUNCHER"; cmValue launcherProp = this->GeneratorTarget->GetProperty(propName); if (cmNonempty(launcherProp)) { + cm::GenEx::Context context(this->LocalCommonGenerator, config, lang); cmGeneratorExpressionDAGChecker dagChecker{ - this->GeneratorTarget, propName, nullptr, nullptr, - this->LocalCommonGenerator, config, + this->GeneratorTarget, propName, nullptr, nullptr, context.LG, + context.Config }; std::string evaluatedLinklauncher = cmGeneratorExpression::Evaluate( - *launcherProp, this->LocalCommonGenerator, config, this->GeneratorTarget, - &dagChecker, this->GeneratorTarget, lang); + *launcherProp, context.LG, context.Config, this->GeneratorTarget, + &dagChecker, this->GeneratorTarget, context.Language); // Convert ;-delimited list to single string cmList args{ evaluatedLinklauncher, cmList::EmptyElements::Yes }; if (!args.empty()) { diff --git a/Source/cmComputeLinkDepends.cxx b/Source/cmComputeLinkDepends.cxx index ed23958f16..adb4be5aa3 100644 --- a/Source/cmComputeLinkDepends.cxx +++ b/Source/cmComputeLinkDepends.cxx @@ -19,6 +19,7 @@ #include "cmsys/RegularExpression.hxx" #include "cmComputeComponentGraph.h" +#include "cmGenExContext.h" #include "cmGeneratorExpression.h" #include "cmGeneratorExpressionDAGChecker.h" #include "cmGeneratorTarget.h" @@ -599,29 +600,31 @@ std::string const& cmComputeLinkDepends::LinkEntry::DEFAULT = cmLinkItem::DEFAULT; cmComputeLinkDepends::cmComputeLinkDepends(cmGeneratorTarget const* target, - std::string const& config, - std::string const& linkLanguage, + std::string config, + std::string linkLanguage, LinkLibrariesStrategy strategy) : Target(target) , Makefile(this->Target->Target->GetMakefile()) , GlobalGenerator(this->Target->GetLocalGenerator()->GetGlobalGenerator()) , CMakeInstance(this->GlobalGenerator->GetCMakeInstance()) - , Config(config) + , Config(std::move(config)) , DebugMode(this->Makefile->IsOn("CMAKE_LINK_DEPENDS_DEBUG_MODE") || this->Target->GetProperty("LINK_DEPENDS_DEBUG_MODE").IsOn()) - , LinkLanguage(linkLanguage) + , LinkLanguage(std::move(linkLanguage)) , LinkType(ComputeLinkType( this->Config, this->Makefile->GetCMakeInstance()->GetDebugConfigs())) , Strategy(strategy) { + cm::GenEx::Context context(this->Target->LocalGenerator, this->Config, + this->LinkLanguage); // target oriented feature override property takes precedence over // global override property cm::string_view lloPrefix = "LINK_LIBRARY_OVERRIDE_"_s; auto const& keys = this->Target->GetPropertyKeys(); std::for_each( keys.cbegin(), keys.cend(), - [this, &lloPrefix, &config, &linkLanguage](std::string const& key) { + [this, &lloPrefix, &context](std::string const& key) { if (cmHasPrefix(key, lloPrefix)) { if (cmValue feature = this->Target->GetProperty(key)) { if (!feature->empty() && key.length() > lloPrefix.length()) { @@ -631,13 +634,13 @@ cmComputeLinkDepends::cmComputeLinkDepends(cmGeneratorTarget const* target, "LINK_LIBRARY_OVERRIDE", nullptr, nullptr, - this->Target->GetLocalGenerator(), - config, + context.LG, + context.Config, this->Target->GetBacktrace(), }; auto overrideFeature = cmGeneratorExpression::Evaluate( - *feature, this->Target->GetLocalGenerator(), config, - this->Target, &dagChecker, this->Target, linkLanguage); + *feature, context.LG, context.Config, this->Target, &dagChecker, + this->Target, context.Language); this->LinkLibraryOverride.emplace(item, overrideFeature); } } @@ -647,17 +650,17 @@ cmComputeLinkDepends::cmComputeLinkDepends(cmGeneratorTarget const* target, if (cmValue linkLibraryOverride = this->Target->GetProperty("LINK_LIBRARY_OVERRIDE")) { cmGeneratorExpressionDAGChecker dagChecker{ - target, + this->Target, "LINK_LIBRARY_OVERRIDE", nullptr, nullptr, - target->GetLocalGenerator(), - config, - target->GetBacktrace(), + context.LG, + context.Config, + this->Target->GetBacktrace(), }; auto overrideValue = cmGeneratorExpression::Evaluate( - *linkLibraryOverride, target->GetLocalGenerator(), config, target, - &dagChecker, target, linkLanguage); + *linkLibraryOverride, context.LG, context.Config, this->Target, + &dagChecker, this->Target, context.Language); std::vector overrideList = cmTokenize(overrideValue, ',', cmTokenizerMode::New); diff --git a/Source/cmComputeLinkDepends.h b/Source/cmComputeLinkDepends.h index a82db2b693..3f9f6e2a4f 100644 --- a/Source/cmComputeLinkDepends.h +++ b/Source/cmComputeLinkDepends.h @@ -39,9 +39,8 @@ enum class LinkLibrariesStrategy class cmComputeLinkDepends { public: - cmComputeLinkDepends(cmGeneratorTarget const* target, - std::string const& config, - std::string const& linkLanguage, + cmComputeLinkDepends(cmGeneratorTarget const* target, std::string config, + std::string linkLanguage, LinkLibrariesStrategy strategy); ~cmComputeLinkDepends(); diff --git a/Source/cmDyndepCollation.cxx b/Source/cmDyndepCollation.cxx index 54d283bc16..bc79df5832 100644 --- a/Source/cmDyndepCollation.cxx +++ b/Source/cmDyndepCollation.cxx @@ -20,6 +20,7 @@ #include "cmExportBuildFileGenerator.h" #include "cmExportSet.h" #include "cmFileSet.h" +#include "cmGenExContext.h" #include "cmGeneratedFileStream.h" #include "cmGeneratorExpression.h" // IWYU pragma: keep #include "cmGeneratorTarget.h" @@ -50,6 +51,7 @@ TdiSourceInfo CollationInformationSources(cmGeneratorTarget const* gt, std::string const& config, cmDyndepGeneratorCallbacks const& cb) { + cm::GenEx::Context const context(gt->LocalGenerator, config); TdiSourceInfo info; cmTarget const* tgt = gt->Target; auto all_file_sets = tgt->GetAllFileSetNames(); @@ -109,11 +111,11 @@ TdiSourceInfo CollationInformationSources(cmGeneratorTarget const* gt, auto directoryEntries = file_set->CompileDirectoryEntries(); auto directories = file_set->EvaluateDirectoryEntries( - directoryEntries, gt->LocalGenerator, config, gt); + directoryEntries, context.LG, context.Config, gt); std::map> files_per_dirs; for (auto const& entry : fileEntries) { file_set->EvaluateFileEntry(directories, files_per_dirs, entry, - gt->LocalGenerator, config, gt); + context.LG, context.Config, gt); } Json::Value fs_dest = Json::nullValue; diff --git a/Source/cmExportBuildCMakeConfigGenerator.cxx b/Source/cmExportBuildCMakeConfigGenerator.cxx index 1e58d79889..e66e88f8fc 100644 --- a/Source/cmExportBuildCMakeConfigGenerator.cxx +++ b/Source/cmExportBuildCMakeConfigGenerator.cxx @@ -17,6 +17,7 @@ #include "cmCryptoHash.h" #include "cmExportSet.h" #include "cmFileSet.h" +#include "cmGenExContext.h" #include "cmGeneratedFileStream.h" #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" @@ -176,8 +177,9 @@ std::string cmExportBuildCMakeConfigGenerator::GetFileSetDirectories( auto directoryEntries = fileSet->CompileDirectoryEntries(); for (auto const& config : configs) { + cm::GenEx::Context context(gte->LocalGenerator, config); auto directories = fileSet->EvaluateDirectoryEntries( - directoryEntries, gte->LocalGenerator, config, gte); + directoryEntries, context.LG, context.Config, gte); bool const contextSensitive = std::any_of(directoryEntries.begin(), directoryEntries.end(), @@ -226,13 +228,14 @@ std::string cmExportBuildCMakeConfigGenerator::GetFileSetFiles( auto directoryEntries = fileSet->CompileDirectoryEntries(); for (auto const& config : configs) { + cm::GenEx::Context context(gte->LocalGenerator, config); auto directories = fileSet->EvaluateDirectoryEntries( - directoryEntries, gte->LocalGenerator, config, gte); + directoryEntries, context.LG, context.Config, gte); std::map> files; for (auto const& entry : fileEntries) { - fileSet->EvaluateFileEntry(directories, files, entry, - gte->LocalGenerator, config, gte); + fileSet->EvaluateFileEntry(directories, files, entry, context.LG, + context.Config, gte); } bool const contextSensitive = diff --git a/Source/cmExportInstallCMakeConfigGenerator.cxx b/Source/cmExportInstallCMakeConfigGenerator.cxx index 166833d3c4..7ebeb723ff 100644 --- a/Source/cmExportInstallCMakeConfigGenerator.cxx +++ b/Source/cmExportInstallCMakeConfigGenerator.cxx @@ -16,6 +16,7 @@ #include "cmExportFileGenerator.h" #include "cmExportSet.h" #include "cmFileSet.h" +#include "cmGenExContext.h" #include "cmGeneratedFileStream.h" #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" @@ -339,13 +340,14 @@ std::string cmExportInstallCMakeConfigGenerator::GetFileSetFiles( te->FileSetGenerators.at(fileSet->GetName())->GetDestination()); for (auto const& config : configs) { + cm::GenEx::Context context(gte->LocalGenerator, config); auto directories = fileSet->EvaluateDirectoryEntries( - directoryEntries, gte->LocalGenerator, config, gte); + directoryEntries, context.LG, context.Config, gte); std::map> files; for (auto const& entry : fileEntries) { - fileSet->EvaluateFileEntry(directories, files, entry, - gte->LocalGenerator, config, gte); + fileSet->EvaluateFileEntry(directories, files, entry, context.LG, + context.Config, gte); } auto unescapedDest = destCge->Evaluate(gte->LocalGenerator, config, gte); auto dest = diff --git a/Source/cmExportTryCompileFileGenerator.cxx b/Source/cmExportTryCompileFileGenerator.cxx index e67df5f7b7..ac9cfbbdc4 100644 --- a/Source/cmExportTryCompileFileGenerator.cxx +++ b/Source/cmExportTryCompileFileGenerator.cxx @@ -9,6 +9,7 @@ #include #include "cmFileSet.h" +#include "cmGenExContext.h" #include "cmGeneratorExpression.h" #include "cmGeneratorExpressionDAGChecker.h" #include "cmGeneratorTarget.h" @@ -76,6 +77,8 @@ std::string cmExportTryCompileFileGenerator::FindTargets( return std::string(); } + cm::GenEx::Context context(tgt->LocalGenerator, this->Config, language); + cmGeneratorExpression ge(*tgt->Makefile->GetCMakeInstance()); std::unique_ptr parentDagChecker; @@ -83,16 +86,10 @@ std::string cmExportTryCompileFileGenerator::FindTargets( // To please constraint checks of DAGChecker, this property must have // LINK_OPTIONS property as parent parentDagChecker = cm::make_unique( - tgt, "LINK_OPTIONS", nullptr, nullptr, tgt->GetLocalGenerator(), - this->Config); + tgt, "LINK_OPTIONS", nullptr, nullptr, context.LG, context.Config); } cmGeneratorExpressionDAGChecker dagChecker{ - tgt, - propName, - nullptr, - parentDagChecker.get(), - tgt->GetLocalGenerator(), - this->Config, + tgt, propName, nullptr, parentDagChecker.get(), context.LG, context.Config, }; std::unique_ptr cge = ge.Parse(*prop); @@ -103,8 +100,8 @@ std::string cmExportTryCompileFileGenerator::FindTargets( cmGeneratorTarget gDummyHead(&dummyHead, tgt->GetLocalGenerator()); - std::string result = cge->Evaluate(tgt->GetLocalGenerator(), this->Config, - &gDummyHead, &dagChecker, tgt, language); + std::string result = cge->Evaluate(context.LG, context.Config, &gDummyHead, + &dagChecker, tgt, context.Language); std::set const& allTargets = cge->GetAllTargetsSeen(); diff --git a/Source/cmFileAPICodemodel.cxx b/Source/cmFileAPICodemodel.cxx index 3d6041211f..240c96bf44 100644 --- a/Source/cmFileAPICodemodel.cxx +++ b/Source/cmFileAPICodemodel.cxx @@ -24,6 +24,7 @@ #include "cmExportSet.h" #include "cmFileAPI.h" #include "cmFileSet.h" +#include "cmGenExContext.h" #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" @@ -1080,16 +1081,17 @@ Json::Value DirectoryObject::DumpInstaller(cmInstallGenerator* gen) auto* target = installFileSet->GetTarget(); + cm::GenEx::Context context(target->LocalGenerator, this->Config); + auto dirCges = fileSet->CompileDirectoryEntries(); - auto dirs = fileSet->EvaluateDirectoryEntries( - dirCges, target->GetLocalGenerator(), this->Config, target); + auto dirs = fileSet->EvaluateDirectoryEntries(dirCges, context.LG, + context.Config, target); auto entryCges = fileSet->CompileFileEntries(); std::map> entries; for (auto const& entryCge : entryCges) { - fileSet->EvaluateFileEntry(dirs, entries, entryCge, - target->GetLocalGenerator(), this->Config, - target); + fileSet->EvaluateFileEntry(dirs, entries, entryCge, context.LG, + context.Config, target); } Json::Value files = Json::arrayValue; @@ -1608,19 +1610,20 @@ std::pair Target::DumpFileSets() continue; } + cm::GenEx::Context context(this->GT->LocalGenerator, this->Config); + auto fileEntries = fs->CompileFileEntries(); auto directoryEntries = fs->CompileDirectoryEntries(); auto directories = fs->EvaluateDirectoryEntries( - directoryEntries, this->GT->LocalGenerator, this->Config, this->GT); + directoryEntries, context.LG, context.Config, this->GT); fsJson.append(this->DumpFileSet(fs, directories)); std::map> files_per_dirs; for (auto const& entry : fileEntries) { - fs->EvaluateFileEntry(directories, files_per_dirs, entry, - this->GT->LocalGenerator, this->Config, - this->GT); + fs->EvaluateFileEntry(directories, files_per_dirs, entry, context.LG, + context.Config, this->GT); } for (auto const& files_per_dir : files_per_dirs) { diff --git a/Source/cmGeneratorExpression.cxx b/Source/cmGeneratorExpression.cxx index ef6e19721b..cba6049bdb 100644 --- a/Source/cmGeneratorExpression.cxx +++ b/Source/cmGeneratorExpression.cxx @@ -454,17 +454,20 @@ std::string const& cmGeneratorExpressionInterpreter::Evaluate( this->CompiledGeneratorExpression = this->GeneratorExpression.Parse(std::move(expression)); + cm::GenEx::Context context(this->LocalGenerator, this->Config, + this->Language); + // Specify COMPILE_OPTIONS to DAGchecker, same semantic as COMPILE_FLAGS cmGeneratorExpressionDAGChecker dagChecker{ this->HeadTarget, property == "COMPILE_FLAGS" ? "COMPILE_OPTIONS" : property, nullptr, nullptr, - this->LocalGenerator, - this->Config, + context.LG, + context.Config, }; return this->CompiledGeneratorExpression->Evaluate( - this->LocalGenerator, this->Config, this->HeadTarget, &dagChecker, nullptr, - this->Language); + context.LG, context.Config, this->HeadTarget, &dagChecker, nullptr, + context.Language); } diff --git a/Source/cmGeneratorExpressionEvaluationFile.cxx b/Source/cmGeneratorExpressionEvaluationFile.cxx index 9dd6177cde..d1c352fe97 100644 --- a/Source/cmGeneratorExpressionEvaluationFile.cxx +++ b/Source/cmGeneratorExpressionEvaluationFile.cxx @@ -8,6 +8,7 @@ #include "cmsys/FStream.hxx" +#include "cmGenExContext.h" #include "cmGeneratedFileStream.h" #include "cmGlobalGenerator.h" #include "cmListFileCache.h" @@ -39,11 +40,12 @@ void cmGeneratorExpressionEvaluationFile::Generate( cmCompiledGeneratorExpression* inputExpression, std::map& outputFiles, mode_t perm) { + cm::GenEx::Context context(lg, config, lang); std::string rawCondition = this->Condition->GetInput(); cmGeneratorTarget* target = lg->FindGeneratorTargetToUse(this->Target); if (!rawCondition.empty()) { - std::string condResult = - this->Condition->Evaluate(lg, config, target, nullptr, nullptr, lang); + std::string condResult = this->Condition->Evaluate( + context.LG, context.Config, target, nullptr, nullptr, context.Language); if (condResult == "0") { return; } @@ -58,10 +60,10 @@ void cmGeneratorExpressionEvaluationFile::Generate( } } - std::string const outputFileName = - this->GetOutputFileName(lg, target, config, lang); - std::string const& outputContent = - inputExpression->Evaluate(lg, config, target, nullptr, nullptr, lang); + std::string const outputFileName = this->GetOutputFileName( + context.LG, target, context.Config, context.Language); + std::string const& outputContent = inputExpression->Evaluate( + context.LG, context.Config, target, nullptr, nullptr, context.Language); auto it = outputFiles.find(outputFileName); @@ -207,13 +209,15 @@ std::string cmGeneratorExpressionEvaluationFile::GetOutputFileName( cmLocalGenerator const* lg, cmGeneratorTarget* target, std::string const& config, std::string const& lang) { - std::string outputFileName = - this->OutputFileExpr->Evaluate(lg, config, target, nullptr, nullptr, lang); + cm::GenEx::Context context(lg, config, lang); + std::string outputFileName = this->OutputFileExpr->Evaluate( + context.LG, context.Config, target, nullptr, nullptr, context.Language); if (cmSystemTools::FileIsFullPath(outputFileName)) { outputFileName = cmSystemTools::CollapseFullPath(outputFileName); } else { - outputFileName = this->FixRelativePath(outputFileName, PathForOutput, lg); + outputFileName = + this->FixRelativePath(outputFileName, PathForOutput, context.LG); } return outputFileName; diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index 60df703dc3..276af84778 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -27,6 +27,7 @@ #include "cmExperimental.h" #include "cmFileSet.h" #include "cmFileTimes.h" +#include "cmGenExContext.h" #include "cmGeneratedFileStream.h" #include "cmGeneratorExpression.h" #include "cmGeneratorExpressionDAGChecker.h" @@ -630,7 +631,7 @@ std::vector const* cmGeneratorTarget::GetSourceDepends( } namespace { -void handleSystemIncludesDep(cmLocalGenerator* lg, +void handleSystemIncludesDep(cmLocalGenerator const* lg, cmGeneratorTarget const* depTgt, std::string const& config, cmGeneratorTarget const* headTarget, @@ -737,12 +738,13 @@ std::string cmGeneratorTarget::GetLinkerTypeProperty( std::string propName{ "LINKER_TYPE" }; auto linkerType = this->GetProperty(propName); if (!linkerType.IsEmpty()) { + cm::GenEx::Context context(this->LocalGenerator, config, lang); cmGeneratorExpressionDAGChecker dagChecker{ - this, propName, nullptr, nullptr, this->LocalGenerator, config, + this, propName, nullptr, nullptr, context.LG, context.Config, }; - auto ltype = - cmGeneratorExpression::Evaluate(*linkerType, this->GetLocalGenerator(), - config, this, &dagChecker, this, lang); + auto ltype = cmGeneratorExpression::Evaluate( + *linkerType, context.LG, context.Config, this, &dagChecker, this, + context.Language); if (this->IsDeviceLink()) { cmList list{ ltype }; auto const DL_BEGIN = ""_s; @@ -1199,24 +1201,26 @@ void cmGeneratorTarget::AddSystemIncludeCacheKey( std::string const& key, std::string const& config, std::string const& language) const { + cm::GenEx::Context context(this->LocalGenerator, config, language); cmGeneratorExpressionDAGChecker dagChecker{ - this, "SYSTEM_INCLUDE_DIRECTORIES", nullptr, - nullptr, this->LocalGenerator, config, + this, "SYSTEM_INCLUDE_DIRECTORIES", nullptr, nullptr, context.LG, + context.Config, }; bool excludeImported = this->GetPropertyAsBool("NO_SYSTEM_FROM_IMPORTED"); cmList result; for (std::string const& it : this->Target->GetSystemIncludeDirectories()) { - result.append(cmGeneratorExpression::Evaluate( - it, this->LocalGenerator, config, this, &dagChecker, nullptr, language)); + result.append( + cmGeneratorExpression::Evaluate(it, context.LG, context.Config, this, + &dagChecker, nullptr, context.Language)); } std::vector const& deps = this->GetLinkImplementationClosure(config, UseTo::Compile); for (cmGeneratorTarget const* dep : deps) { - handleSystemIncludesDep(this->LocalGenerator, dep, config, this, - &dagChecker, result, excludeImported, language); + handleSystemIncludesDep(context.LG, dep, context.Config, this, &dagChecker, + result, excludeImported, context.Language); } cmLinkImplementation const* impl = @@ -1226,9 +1230,9 @@ void cmGeneratorTarget::AddSystemIncludeCacheKey( if (runtimeEntries != impl->LanguageRuntimeLibraries.end()) { for (auto const& lib : runtimeEntries->second) { if (lib.Target) { - handleSystemIncludesDep(this->LocalGenerator, lib.Target, config, - this, &dagChecker, result, excludeImported, - language); + handleSystemIncludesDep(context.LG, lib.Target, context.Config, this, + &dagChecker, result, excludeImported, + context.Language); } } } @@ -1975,11 +1979,12 @@ void cmGeneratorTarget::GetAutoUicOptions(std::vector& result, return; } + cm::GenEx::Context context(this->LocalGenerator, config); cmGeneratorExpressionDAGChecker dagChecker{ - this, "AUTOUIC_OPTIONS", nullptr, nullptr, this->LocalGenerator, config, + this, "AUTOUIC_OPTIONS", nullptr, nullptr, context.LG, context.Config, }; - cmExpandList(cmGeneratorExpression::Evaluate(prop, this->LocalGenerator, - config, this, &dagChecker), + cmExpandList(cmGeneratorExpression::Evaluate( + prop, context.LG, context.Config, this, &dagChecker), result); } @@ -5439,17 +5444,18 @@ bool cmGeneratorTarget::AddHeaderSetVerification() bool first = true; for (auto const& config : this->Makefile->GetGeneratorConfigs( cmMakefile::GeneratorConfigQuery::IncludeEmptyConfig)) { + cm::GenEx::Context context(this->LocalGenerator, config); if (first || dirCgesContextSensitive) { - dirs = fileSet->EvaluateDirectoryEntries(dirCges, this->LocalGenerator, - config, this); + dirs = fileSet->EvaluateDirectoryEntries(dirCges, context.LG, + context.Config, this); dirCgesContextSensitive = std::any_of(dirCges.begin(), dirCges.end(), contextSensitive); } if (first || fileCgesContextSensitive) { filesPerDir.clear(); for (auto const& fileCge : fileCges) { - fileSet->EvaluateFileEntry(dirs, filesPerDir, fileCge, - this->LocalGenerator, config, this); + fileSet->EvaluateFileEntry(dirs, filesPerDir, fileCge, context.LG, + context.Config, this); if (fileCge->GetHadContextSensitiveCondition()) { fileCgesContextSensitive = true; } @@ -5980,15 +5986,17 @@ void cmGeneratorTarget::BuildFileSetInfoCache(std::string const& config) const continue; } + cm::GenEx::Context context(this->LocalGenerator, config); + auto fileEntries = file_set->CompileFileEntries(); auto directoryEntries = file_set->CompileDirectoryEntries(); auto directories = file_set->EvaluateDirectoryEntries( - directoryEntries, this->LocalGenerator, config, this); + directoryEntries, context.LG, context.Config, this); std::map> files; for (auto const& entry : fileEntries) { - file_set->EvaluateFileEntry(directories, files, entry, - this->LocalGenerator, config, this); + file_set->EvaluateFileEntry(directories, files, entry, context.LG, + context.Config, this); } for (auto const& it : files) { diff --git a/Source/cmGeneratorTarget_IncludeDirectories.cxx b/Source/cmGeneratorTarget_IncludeDirectories.cxx index f3161fe74e..1e1bd15734 100644 --- a/Source/cmGeneratorTarget_IncludeDirectories.cxx +++ b/Source/cmGeneratorTarget_IncludeDirectories.cxx @@ -17,6 +17,7 @@ #include #include "cmEvaluatedTargetProperty.h" +#include "cmGenExContext.h" #include "cmGeneratorExpressionDAGChecker.h" #include "cmGlobalGenerator.h" #include "cmLinkItem.h" @@ -44,15 +45,16 @@ std::string AddLangSpecificInterfaceIncludeDirectories( cmGeneratorTarget const* root, cmGeneratorTarget const* target, std::string const& lang, std::string const& config, std::string const& propertyName, IncludeDirectoryFallBack mode, - cmGeneratorExpressionDAGChecker* context) + cmGeneratorExpressionDAGChecker* dagCheckerParent) { + cm::GenEx::Context context(target->LocalGenerator, config); cmGeneratorExpressionDAGChecker dagChecker{ target, propertyName, nullptr, - context, - target->GetLocalGenerator(), - config, + dagCheckerParent, + context.LG, + context.Config, target->GetBacktrace(), }; switch (dagChecker.Check()) { @@ -103,14 +105,10 @@ void AddLangSpecificImplicitIncludeDirectories( { if (auto const* libraries = target->GetLinkImplementationLibraries(config, UseTo::Compile)) { + cm::GenEx::Context context(target->LocalGenerator, config, lang); cmGeneratorExpressionDAGChecker dagChecker{ - target, - propertyName, - nullptr, - nullptr, - target->GetLocalGenerator(), - config, - target->GetBacktrace(), + target, propertyName, nullptr, nullptr, context.LG, + context.Config, target->GetBacktrace(), }; for (cmLinkImplItem const& library : libraries->Libraries) { @@ -137,8 +135,8 @@ void AddLangSpecificImplicitIncludeDirectories( } cmExpandList(AddLangSpecificInterfaceIncludeDirectories( - target, dependency, lang, config, propertyName, mode, - &dagChecker), + target, dependency, context.Language, context.Config, + propertyName, mode, &dagChecker), entry.Values); entries.Entries.emplace_back(std::move(entry)); } @@ -231,9 +229,10 @@ std::vector> cmGeneratorTarget::GetIncludeDirectories( std::vector> includes; std::unordered_set uniqueIncludes; + cm::GenEx::Context context(this->LocalGenerator, config, lang); + cmGeneratorExpressionDAGChecker dagChecker{ - this, "INCLUDE_DIRECTORIES", nullptr, - nullptr, this->LocalGenerator, config, + this, "INCLUDE_DIRECTORIES", nullptr, nullptr, context.LG, context.Config, }; cmList debugProperties{ this->Makefile->GetDefinition( @@ -244,7 +243,8 @@ std::vector> cmGeneratorTarget::GetIncludeDirectories( this->DebugIncludesDone = true; EvaluatedTargetPropertyEntries entries = EvaluateTargetPropertyEntries( - this, config, lang, &dagChecker, this->IncludeDirectoriesEntries); + this, context.Config, context.Language, &dagChecker, + this->IncludeDirectoriesEntries); if (lang == "Swift") { AddLangSpecificImplicitIncludeDirectories( @@ -271,8 +271,9 @@ std::vector> cmGeneratorTarget::GetIncludeDirectories( entries); } - AddInterfaceEntries(this, config, "INTERFACE_INCLUDE_DIRECTORIES", lang, - &dagChecker, entries, IncludeRuntimeInterface::Yes); + AddInterfaceEntries(this, context.Config, "INTERFACE_INCLUDE_DIRECTORIES", + context.Language, &dagChecker, entries, + IncludeRuntimeInterface::Yes); processIncludeDirectories(this, entries, includes, uniqueIncludes, debugIncludes); diff --git a/Source/cmGeneratorTarget_Link.cxx b/Source/cmGeneratorTarget_Link.cxx index 39517553a8..370d4711de 100644 --- a/Source/cmGeneratorTarget_Link.cxx +++ b/Source/cmGeneratorTarget_Link.cxx @@ -25,6 +25,7 @@ #include "cmAlgorithms.h" #include "cmComputeLinkInformation.h" +#include "cmGenExContext.h" #include "cmGeneratorExpression.h" #include "cmGeneratorExpressionDAGChecker.h" #include "cmGlobalGenerator.h" @@ -541,13 +542,15 @@ void cmGeneratorTarget::ExpandLinkItems(std::string const& prop, return; } // Keep this logic in sync with ComputeLinkImplementationLibraries. + cm::GenEx::Context context(this->LocalGenerator, config, + headTarget->LinkerLanguage); cmGeneratorExpressionDAGChecker dagChecker{ this, prop, nullptr, nullptr, - this->LocalGenerator, - config, + context.LG, + context.Config, cmListFileBacktrace(), cmGeneratorExpressionDAGChecker::ComputingLinkLibraries::Yes, }; @@ -565,9 +568,8 @@ void cmGeneratorTarget::ExpandLinkItems(std::string const& prop, entry.Backtrace); std::unique_ptr cge = ge.Parse(entry.Value); cge->SetEvaluateForBuildsystem(true); - cmList libs{ cge->Evaluate(this->LocalGenerator, config, headTarget, - &dagChecker, this, - headTarget->LinkerLanguage) }; + cmList libs{ cge->Evaluate(context.LG, context.Config, headTarget, + &dagChecker, this, context.Language) }; auto linkFeature = cmLinkItem::DEFAULT; for (auto const& lib : libs) { @@ -1133,6 +1135,8 @@ void cmGeneratorTarget::ComputeLinkImplementationLibraries( std::string const& config, cmOptionalLinkImplementation& impl, UseTo usage) const { + cm::GenEx::Context context(this->LocalGenerator, config, + this->LinkerLanguage); cmLocalGenerator const* lg = this->LocalGenerator; cmMakefile const* mf = lg->GetMakefile(); cmBTStringRange entryRange = this->Target->GetLinkImplementationEntries(); @@ -1145,8 +1149,8 @@ void cmGeneratorTarget::ComputeLinkImplementationLibraries( "LINK_LIBRARIES", nullptr, nullptr, - this->LocalGenerator, - config, + context.LG, + context.Config, cmListFileBacktrace(), cmGeneratorExpressionDAGChecker::ComputingLinkLibraries::Yes, }; @@ -1169,8 +1173,8 @@ void cmGeneratorTarget::ComputeLinkImplementationLibraries( ge.Parse(entry.Value); cge->SetEvaluateForBuildsystem(true); std::string const& evaluated = - cge->Evaluate(this->LocalGenerator, config, this, &dagChecker, nullptr, - this->LinkerLanguage); + cge->Evaluate(context.LG, context.Config, this, &dagChecker, nullptr, + context.Language); cmList llibs(evaluated); if (cge->GetHadHeadSensitiveCondition()) { impl.HadHeadSensitiveCondition = true; diff --git a/Source/cmGeneratorTarget_LinkDirectories.cxx b/Source/cmGeneratorTarget_LinkDirectories.cxx index 4846d6ffa1..8360dbe72f 100644 --- a/Source/cmGeneratorTarget_LinkDirectories.cxx +++ b/Source/cmGeneratorTarget_LinkDirectories.cxx @@ -14,6 +14,7 @@ #include #include "cmEvaluatedTargetProperty.h" +#include "cmGenExContext.h" #include "cmGeneratorExpressionDAGChecker.h" #include "cmLinkItem.h" #include "cmList.h" @@ -122,8 +123,10 @@ std::vector> cmGeneratorTarget::GetLinkDirectories( std::vector> result; std::unordered_set uniqueDirectories; + cm::GenEx::Context context(this->LocalGenerator, config, language); + cmGeneratorExpressionDAGChecker dagChecker{ - this, "LINK_DIRECTORIES", nullptr, nullptr, this->LocalGenerator, config, + this, "LINK_DIRECTORIES", nullptr, nullptr, context.LG, context.Config, }; cmList debugProperties{ this->Makefile->GetDefinition( @@ -136,11 +139,11 @@ std::vector> cmGeneratorTarget::GetLinkDirectories( EvaluatedTargetPropertyEntries entries = EvaluateTargetPropertyEntries( this, config, language, &dagChecker, this->LinkDirectoriesEntries); - AddInterfaceEntries(this, config, "INTERFACE_LINK_DIRECTORIES", language, - &dagChecker, entries, IncludeRuntimeInterface::Yes, - this->GetPolicyStatusCMP0099() == cmPolicies::NEW - ? UseTo::Link - : UseTo::Compile); + AddInterfaceEntries( + this, context.Config, "INTERFACE_LINK_DIRECTORIES", context.Language, + &dagChecker, entries, IncludeRuntimeInterface::Yes, + this->GetPolicyStatusCMP0099() == cmPolicies::NEW ? UseTo::Link + : UseTo::Compile); processLinkDirectories(this, entries, result, uniqueDirectories, debugDirectories); diff --git a/Source/cmGeneratorTarget_Options.cxx b/Source/cmGeneratorTarget_Options.cxx index 63baa1d544..ec623f6a51 100644 --- a/Source/cmGeneratorTarget_Options.cxx +++ b/Source/cmGeneratorTarget_Options.cxx @@ -18,6 +18,7 @@ #include #include "cmEvaluatedTargetProperty.h" +#include "cmGenExContext.h" #include "cmGeneratorExpressionDAGChecker.h" #include "cmList.h" #include "cmListFileCache.h" @@ -230,8 +231,10 @@ std::vector> cmGeneratorTarget::GetCompileOptions( std::vector> result; std::unordered_set uniqueOptions; + cm::GenEx::Context context(this->LocalGenerator, config, language); + cmGeneratorExpressionDAGChecker dagChecker{ - this, "COMPILE_OPTIONS", nullptr, nullptr, this->LocalGenerator, config, + this, "COMPILE_OPTIONS", nullptr, nullptr, context.LG, context.Config, }; cmList debugProperties{ this->Makefile->GetDefinition( @@ -241,11 +244,13 @@ std::vector> cmGeneratorTarget::GetCompileOptions( this->DebugCompileOptionsDone = true; - EvaluatedTargetPropertyEntries entries = EvaluateTargetPropertyEntries( - this, config, language, &dagChecker, this->CompileOptionsEntries); + EvaluatedTargetPropertyEntries entries = + EvaluateTargetPropertyEntries(this, context.Config, context.Language, + &dagChecker, this->CompileOptionsEntries); - AddInterfaceEntries(this, config, "INTERFACE_COMPILE_OPTIONS", language, - &dagChecker, entries, IncludeRuntimeInterface::Yes); + AddInterfaceEntries(this, context.Config, "INTERFACE_COMPILE_OPTIONS", + context.Language, &dagChecker, entries, + IncludeRuntimeInterface::Yes); processOptions(this, entries, result, uniqueOptions, debugOptions, "compile options", OptionsParse::Shell); @@ -270,8 +275,11 @@ std::vector> cmGeneratorTarget::GetCompileFeatures( std::vector> result; std::unordered_set uniqueFeatures; + cm::GenEx::Context context(this->LocalGenerator, config, + /*language=*/std::string()); + cmGeneratorExpressionDAGChecker dagChecker{ - this, "COMPILE_FEATURES", nullptr, nullptr, this->LocalGenerator, config, + this, "COMPILE_FEATURES", nullptr, nullptr, context.LG, context.Config, }; cmList debugProperties{ this->Makefile->GetDefinition( @@ -281,11 +289,12 @@ std::vector> cmGeneratorTarget::GetCompileFeatures( this->DebugCompileFeaturesDone = true; - EvaluatedTargetPropertyEntries entries = EvaluateTargetPropertyEntries( - this, config, std::string(), &dagChecker, this->CompileFeaturesEntries); + EvaluatedTargetPropertyEntries entries = + EvaluateTargetPropertyEntries(this, context.Config, context.Language, + &dagChecker, this->CompileFeaturesEntries); - AddInterfaceEntries(this, config, "INTERFACE_COMPILE_FEATURES", - std::string(), &dagChecker, entries, + AddInterfaceEntries(this, context.Config, "INTERFACE_COMPILE_FEATURES", + context.Language, &dagChecker, entries, IncludeRuntimeInterface::Yes); processOptions(this, entries, result, uniqueFeatures, debugFeatures, @@ -319,9 +328,10 @@ std::vector> cmGeneratorTarget::GetCompileDefinitions( std::vector> list; std::unordered_set uniqueOptions; + cm::GenEx::Context context(this->LocalGenerator, config, language); + cmGeneratorExpressionDAGChecker dagChecker{ - this, "COMPILE_DEFINITIONS", nullptr, - nullptr, this->LocalGenerator, config, + this, "COMPILE_DEFINITIONS", nullptr, nullptr, context.LG, context.Config, }; cmList debugProperties{ this->Makefile->GetDefinition( @@ -332,10 +342,12 @@ std::vector> cmGeneratorTarget::GetCompileDefinitions( this->DebugCompileDefinitionsDone = true; EvaluatedTargetPropertyEntries entries = EvaluateTargetPropertyEntries( - this, config, language, &dagChecker, this->CompileDefinitionsEntries); + this, context.Config, context.Language, &dagChecker, + this->CompileDefinitionsEntries); - AddInterfaceEntries(this, config, "INTERFACE_COMPILE_DEFINITIONS", language, - &dagChecker, entries, IncludeRuntimeInterface::Yes); + AddInterfaceEntries(this, context.Config, "INTERFACE_COMPILE_DEFINITIONS", + context.Language, &dagChecker, entries, + IncludeRuntimeInterface::Yes); processOptions(this, entries, list, uniqueOptions, debugDefines, "compile definitions", OptionsParse::None); @@ -356,8 +368,10 @@ std::vector> cmGeneratorTarget::GetPrecompileHeaders( } std::unordered_set uniqueOptions; + cm::GenEx::Context context(this->LocalGenerator, config, language); + cmGeneratorExpressionDAGChecker dagChecker{ - this, "PRECOMPILE_HEADERS", nullptr, nullptr, this->LocalGenerator, config, + this, "PRECOMPILE_HEADERS", nullptr, nullptr, context.LG, context.Config, }; cmList debugProperties{ this->Makefile->GetDefinition( @@ -368,11 +382,13 @@ std::vector> cmGeneratorTarget::GetPrecompileHeaders( this->DebugPrecompileHeadersDone = true; - EvaluatedTargetPropertyEntries entries = EvaluateTargetPropertyEntries( - this, config, language, &dagChecker, this->PrecompileHeadersEntries); + EvaluatedTargetPropertyEntries entries = + EvaluateTargetPropertyEntries(this, context.Config, context.Language, + &dagChecker, this->PrecompileHeadersEntries); - AddInterfaceEntries(this, config, "INTERFACE_PRECOMPILE_HEADERS", language, - &dagChecker, entries, IncludeRuntimeInterface::Yes); + AddInterfaceEntries(this, context.Config, "INTERFACE_PRECOMPILE_HEADERS", + context.Language, &dagChecker, entries, + IncludeRuntimeInterface::Yes); std::vector> list; processOptions(this, entries, list, uniqueOptions, debugDefines, @@ -413,8 +429,10 @@ std::vector> cmGeneratorTarget::GetLinkOptions( std::vector> result; std::unordered_set uniqueOptions; + cm::GenEx::Context context(this->LocalGenerator, config, language); + cmGeneratorExpressionDAGChecker dagChecker{ - this, "LINK_OPTIONS", nullptr, nullptr, this->LocalGenerator, config, + this, "LINK_OPTIONS", nullptr, nullptr, context.LG, context.Config, }; cmList debugProperties{ this->Makefile->GetDefinition( @@ -424,14 +442,15 @@ std::vector> cmGeneratorTarget::GetLinkOptions( this->DebugLinkOptionsDone = true; - EvaluatedTargetPropertyEntries entries = EvaluateTargetPropertyEntries( - this, config, language, &dagChecker, this->LinkOptionsEntries); + EvaluatedTargetPropertyEntries entries = + EvaluateTargetPropertyEntries(this, context.Config, context.Language, + &dagChecker, this->LinkOptionsEntries); - AddInterfaceEntries(this, config, "INTERFACE_LINK_OPTIONS", language, - &dagChecker, entries, IncludeRuntimeInterface::Yes, - this->GetPolicyStatusCMP0099() == cmPolicies::NEW - ? UseTo::Link - : UseTo::Compile); + AddInterfaceEntries( + this, context.Config, "INTERFACE_LINK_OPTIONS", context.Language, + &dagChecker, entries, IncludeRuntimeInterface::Yes, + this->GetPolicyStatusCMP0099() == cmPolicies::NEW ? UseTo::Link + : UseTo::Compile); processOptions(this, entries, result, uniqueOptions, debugOptions, "link options", OptionsParse::Shell, this->IsDeviceLink()); @@ -595,9 +614,11 @@ std::vector> cmGeneratorTarget::GetStaticLibraryLinkOptions( std::vector> result; std::unordered_set uniqueOptions; + cm::GenEx::Context context(this->LocalGenerator, config, language); + cmGeneratorExpressionDAGChecker dagChecker{ - this, "STATIC_LIBRARY_OPTIONS", nullptr, - nullptr, this->LocalGenerator, config, + this, "STATIC_LIBRARY_OPTIONS", nullptr, nullptr, + context.LG, context.Config, }; EvaluatedTargetPropertyEntries entries; @@ -605,7 +626,7 @@ std::vector> cmGeneratorTarget::GetStaticLibraryLinkOptions( std::unique_ptr entry = TargetPropertyEntry::Create( *this->LocalGenerator->GetCMakeInstance(), *linkOptions); entries.Entries.emplace_back(EvaluateTargetPropertyEntry( - this, config, language, &dagChecker, *entry)); + this, context.Config, context.Language, &dagChecker, *entry)); } processOptions(this, entries, result, uniqueOptions, false, "static library link options", OptionsParse::Shell); @@ -640,8 +661,9 @@ std::vector> cmGeneratorTarget::GetLinkDepends( { std::vector> result; std::unordered_set uniqueOptions; + cm::GenEx::Context context(this->LocalGenerator, config, language); cmGeneratorExpressionDAGChecker dagChecker{ - this, "LINK_DEPENDS", nullptr, nullptr, this->LocalGenerator, config, + this, "LINK_DEPENDS", nullptr, nullptr, context.LG, context.Config, }; EvaluatedTargetPropertyEntries entries; @@ -651,14 +673,14 @@ std::vector> cmGeneratorTarget::GetLinkDepends( std::unique_ptr entry = TargetPropertyEntry::Create( *this->LocalGenerator->GetCMakeInstance(), depend); entries.Entries.emplace_back(EvaluateTargetPropertyEntry( - this, config, language, &dagChecker, *entry)); + this, context.Config, context.Language, &dagChecker, *entry)); } } - AddInterfaceEntries(this, config, "INTERFACE_LINK_DEPENDS", language, - &dagChecker, entries, IncludeRuntimeInterface::Yes, - this->GetPolicyStatusCMP0099() == cmPolicies::NEW - ? UseTo::Link - : UseTo::Compile); + AddInterfaceEntries( + this, context.Config, "INTERFACE_LINK_DEPENDS", context.Language, + &dagChecker, entries, IncludeRuntimeInterface::Yes, + this->GetPolicyStatusCMP0099() == cmPolicies::NEW ? UseTo::Link + : UseTo::Compile); processOptions(this, entries, result, uniqueOptions, false, "link depends", OptionsParse::None); diff --git a/Source/cmGeneratorTarget_Sources.cxx b/Source/cmGeneratorTarget_Sources.cxx index fa27998ae3..586c8c01eb 100644 --- a/Source/cmGeneratorTarget_Sources.cxx +++ b/Source/cmGeneratorTarget_Sources.cxx @@ -24,6 +24,7 @@ #include "cmAlgorithms.h" #include "cmEvaluatedTargetProperty.h" #include "cmFileSet.h" +#include "cmGenExContext.h" #include "cmGeneratorExpression.h" #include "cmGeneratorExpressionDAGChecker.h" #include "cmGlobalGenerator.h" @@ -84,9 +85,11 @@ void addFileSetEntry(cmGeneratorTarget const* headTarget, cmFileSet const* fileSet, EvaluatedTargetPropertyEntries& entries) { + cm::GenEx::Context context(headTarget->GetLocalGenerator(), config, + /*language=*/std::string()); auto dirCges = fileSet->CompileDirectoryEntries(); auto dirs = fileSet->EvaluateDirectoryEntries( - dirCges, headTarget->GetLocalGenerator(), config, headTarget, dagChecker); + dirCges, context.LG, context.Config, headTarget, dagChecker); bool contextSensitiveDirs = false; for (auto const& dirCge : dirCges) { if (dirCge->GetHadContextSensitiveCondition()) { @@ -98,8 +101,8 @@ void addFileSetEntry(cmGeneratorTarget const* headTarget, for (auto& entryCge : fileSet->CompileFileEntries()) { auto tpe = cmGeneratorTarget::TargetPropertyEntry::CreateFileSet( dirs, contextSensitiveDirs, std::move(entryCge), fileSet); - entries.Entries.emplace_back( - EvaluateTargetPropertyEntry(headTarget, config, "", dagChecker, *tpe)); + entries.Entries.emplace_back(EvaluateTargetPropertyEntry( + headTarget, context.Config, context.Language, dagChecker, *tpe)); EvaluatedTargetPropertyEntry const& entry = entries.Entries.back(); for (auto const& file : entry.Values) { auto* sf = headTarget->Makefile->GetOrCreateSource(file); @@ -240,12 +243,15 @@ std::vector> cmGeneratorTarget::GetSourceFilePaths( this->DebugSourcesDone = true; + cm::GenEx::Context context(this->LocalGenerator, config, + /*language=*/std::string()); + cmGeneratorExpressionDAGChecker dagChecker{ - this, "SOURCES", nullptr, nullptr, this->LocalGenerator, config, + this, "SOURCES", nullptr, nullptr, context.LG, context.Config, }; EvaluatedTargetPropertyEntries entries = EvaluateTargetPropertyEntries( - this, config, std::string(), &dagChecker, this->SourceEntries); + this, context.Config, context.Language, &dagChecker, this->SourceEntries); std::unordered_set uniqueSrcs; bool contextDependentDirectSources = @@ -253,9 +259,9 @@ std::vector> cmGeneratorTarget::GetSourceFilePaths( // Collect INTERFACE_SOURCES of all direct link-dependencies. EvaluatedTargetPropertyEntries linkInterfaceSourcesEntries; - AddInterfaceEntries(this, config, "INTERFACE_SOURCES", std::string(), - &dagChecker, linkInterfaceSourcesEntries, - IncludeRuntimeInterface::No, UseTo::Compile); + AddInterfaceEntries( + this, context.Config, "INTERFACE_SOURCES", context.Language, &dagChecker, + linkInterfaceSourcesEntries, IncludeRuntimeInterface::No, UseTo::Compile); bool contextDependentInterfaceSources = processSources( this, linkInterfaceSourcesEntries, files, uniqueSrcs, debugSources); @@ -263,7 +269,7 @@ std::vector> cmGeneratorTarget::GetSourceFilePaths( bool contextDependentObjects = false; if (this->GetType() != cmStateEnums::OBJECT_LIBRARY) { EvaluatedTargetPropertyEntries linkObjectsEntries; - AddObjectEntries(this, config, &dagChecker, linkObjectsEntries); + AddObjectEntries(this, context.Config, &dagChecker, linkObjectsEntries); contextDependentObjects = processSources(this, linkObjectsEntries, files, uniqueSrcs, debugSources); // Note that for imported targets or multi-config generators supporting @@ -274,7 +280,7 @@ std::vector> cmGeneratorTarget::GetSourceFilePaths( // Collect this target's file sets. EvaluatedTargetPropertyEntries fileSetEntries; - AddFileSetEntries(this, config, &dagChecker, fileSetEntries); + AddFileSetEntries(this, context.Config, &dagChecker, fileSetEntries); bool contextDependentFileSets = processSources(this, fileSetEntries, files, uniqueSrcs, debugSources); diff --git a/Source/cmInstallFileSetGenerator.cxx b/Source/cmInstallFileSetGenerator.cxx index e92f4299d7..1331661872 100644 --- a/Source/cmInstallFileSetGenerator.cxx +++ b/Source/cmInstallFileSetGenerator.cxx @@ -12,6 +12,7 @@ #include #include "cmFileSet.h" +#include "cmGenExContext.h" #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" @@ -122,14 +123,16 @@ cmInstallFileSetGenerator::CalculateFilesPerDir( { std::map> result; + cm::GenEx::Context context(this->LocalGenerator, config); + auto dirCges = this->FileSet->CompileDirectoryEntries(); auto dirs = this->FileSet->EvaluateDirectoryEntries( - dirCges, this->LocalGenerator, config, this->Target); + dirCges, context.LG, context.Config, this->Target); auto fileCges = this->FileSet->CompileFileEntries(); for (auto const& fileCge : fileCges) { - this->FileSet->EvaluateFileEntry( - dirs, result, fileCge, this->LocalGenerator, config, this->Target); + this->FileSet->EvaluateFileEntry(dirs, result, fileCge, context.LG, + context.Config, this->Target); } return result; diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index 5187f5ed1a..73fed489d5 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -23,6 +23,7 @@ #include "cmCustomCommand.h" #include "cmCustomCommandGenerator.h" #include "cmFileSet.h" +#include "cmGenExContext.h" #include "cmGeneratedFileStream.h" #include "cmGeneratorExpression.h" #include "cmGeneratorOptions.h" @@ -205,6 +206,7 @@ void cmMakefileTargetGenerator::CreateRuleFile() void cmMakefileTargetGenerator::WriteTargetBuildRules() { + cm::GenEx::Context context(this->LocalGenerator, this->GetConfigName()); this->GeneratorTarget->CheckCxxModuleStatus(this->GetConfigName()); // -- Write the custom commands for this target @@ -362,14 +364,12 @@ void cmMakefileTargetGenerator::WriteTargetBuildRules() auto fileEntries = file_set->CompileFileEntries(); auto directoryEntries = file_set->CompileDirectoryEntries(); auto directories = file_set->EvaluateDirectoryEntries( - directoryEntries, this->LocalGenerator, this->GetConfigName(), - this->GeneratorTarget); + directoryEntries, context.LG, context.Config, this->GeneratorTarget); std::map> files; for (auto const& entry : fileEntries) { - file_set->EvaluateFileEntry(directories, files, entry, - this->LocalGenerator, this->GetConfigName(), - this->GeneratorTarget); + file_set->EvaluateFileEntry(directories, files, entry, context.LG, + context.Config, this->GeneratorTarget); } for (auto const& it : files) { diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx index 36d75afeb1..a7bbc8c16a 100644 --- a/Source/cmQtAutoGenInitializer.cxx +++ b/Source/cmQtAutoGenInitializer.cxx @@ -31,6 +31,7 @@ #include "cmCustomCommand.h" #include "cmCustomCommandLines.h" #include "cmEvaluatedTargetProperty.h" +#include "cmGenExContext.h" #include "cmGeneratedFileStream.h" #include "cmGeneratorExpression.h" #include "cmGeneratorExpressionDAGChecker.h" @@ -1966,24 +1967,26 @@ bool cmQtAutoGenInitializer::SetupWriteAutogenInfo() if (this->MultiConfig) { for (auto const& cfg : this->ConfigsList) { if (!cfg.empty()) { + cm::GenEx::Context context(this->LocalGen, cfg, "CXX"); cmGeneratorExpressionDAGChecker dagChecker{ - this->GenTarget, "AUTOMOC_MACRO_NAMES", nullptr, - nullptr, this->LocalGen, cfg, + this->GenTarget, "AUTOMOC_MACRO_NAMES", nullptr, nullptr, + context.LG, context.Config, }; - AddInterfaceEntries(this->GenTarget, cfg, - "INTERFACE_AUTOMOC_MACRO_NAMES", "CXX", - &dagChecker, InterfaceAutoMocMacroNamesEntries, - IncludeRuntimeInterface::Yes); + AddInterfaceEntries( + this->GenTarget, context.Config, "INTERFACE_AUTOMOC_MACRO_NAMES", + context.Language, &dagChecker, InterfaceAutoMocMacroNamesEntries, + IncludeRuntimeInterface::Yes); } } } else { + cm::GenEx::Context context(this->LocalGen, this->ConfigDefault, "CXX"); cmGeneratorExpressionDAGChecker dagChecker{ - this->GenTarget, "AUTOMOC_MACRO_NAMES", nullptr, - nullptr, this->LocalGen, this->ConfigDefault, + this->GenTarget, "AUTOMOC_MACRO_NAMES", nullptr, nullptr, + context.LG, context.Config, }; - AddInterfaceEntries(this->GenTarget, this->ConfigDefault, - "INTERFACE_AUTOMOC_MACRO_NAMES", "CXX", &dagChecker, - InterfaceAutoMocMacroNamesEntries, + AddInterfaceEntries(this->GenTarget, context.Config, + "INTERFACE_AUTOMOC_MACRO_NAMES", context.Language, + &dagChecker, InterfaceAutoMocMacroNamesEntries, IncludeRuntimeInterface::Yes); }