// Copyright Epic Games, Inc. All Rights Reserved. namespace UnrealBuildTool { /// /// Interface that defines standard build context parameters that can influence the resolution of build warnings. /// public interface IBuildContextProvider { /// /// Obtains the associated with the provided context provider. /// /// The . public BuildSettingsVersion GetBuildSettings(); } /// /// The default provider that will just specify the as a default. /// public class DefaultBuildContextProvider : IBuildContextProvider { /// public BuildSettingsVersion GetBuildSettings() { return BuildSettingsVersion.V5; } } #region -- Adapters for IBuildContextProvider -- internal class ModuleRulesBuildSettingsProvider : IBuildContextProvider { private readonly ModuleRules _moduleRules; public static implicit operator ModuleRulesBuildSettingsProvider(ModuleRules moduleRules) { return new ModuleRulesBuildSettingsProvider(moduleRules); } public ModuleRulesBuildSettingsProvider(ModuleRules moduleRules) { _moduleRules = moduleRules; } public BuildSettingsVersion GetBuildSettings() { return _moduleRules != null ? _moduleRules.DefaultBuildSettings : (default); } } internal class TargetRulesBuildSettingsProvider : IBuildContextProvider { private readonly TargetRules _targetRules; public static implicit operator TargetRulesBuildSettingsProvider(TargetRules targetRules) { return new TargetRulesBuildSettingsProvider(targetRules); } public TargetRulesBuildSettingsProvider(TargetRules targetRules) { _targetRules = targetRules; } public BuildSettingsVersion GetBuildSettings() { return _targetRules.DefaultBuildSettings; } } #endregion -- Adapters for IBuildContextProvider -- internal class BuildSystemContext { internal BuildSystemContext(IBuildContextProvider context, TargetRules? targetRules = null, ModuleRules? moduleRules = null) { _targetRulesPrivate = targetRules; _moduleRulesPrivate = moduleRules; _buildContext = context; } /// /// Helper method to obtain a readonly target rules from the given context, if at all possible. /// /// The resolved ReadOnlyTargetRules from the current build context. internal ReadOnlyTargetRules? GetReadOnlyTargetRules() { return _targetRulesPrivate != null ? new ReadOnlyTargetRules(_targetRulesPrivate) : _moduleRulesPrivate?.Target; } internal TargetRules? _targetRulesPrivate; internal ModuleRules? _moduleRulesPrivate; internal IBuildContextProvider _buildContext; } }