// 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;
}
}