// Copyright Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections.Generic;
#pragma warning disable CA1715 // Identifiers should have correct prefix
namespace EpicGames.Core
{
///
/// This interface exists to allow the CsProjBuilder in EpicGames.MsBuild to call back out
/// into EpicGames.Build. It is EXTREMELY important that any type definitions that must be
/// referenced or implemented in EpicGames.Build for use by EpicGame.MsBuild *NOT* be defined
/// in EpicGames.MsBuild. If they are, there is a strong chance of running into an issue
/// gathering types (Assembly.GetTypes()) on EpicGames.Build.
///
public interface CsProjBuildHook
{
///
/// Test the cache for a given file to get the last write time of the given file
///
/// Base path of the file.
/// Relative path of the file
/// Last write time of the file.
DateTime GetLastWriteTime(DirectoryReference basePath, string relativeFilePath);
///
/// Test the cache for a given file to get the last write time of the given file
///
/// Base path of the file.
/// Relative path of the file
/// Last write time of the file.
DateTime GetLastWriteTime(string basePath, string relativeFilePath);
///
/// Return the build record directory for the given base path (i.e. engine dir or project dir)
///
/// The base path for the directory
/// Directory for the build records
DirectoryReference GetBuildRecordDirectory(DirectoryReference basePath);
///
/// Validate the given build records for the project
///
/// Build records being validated. This also includes build records for dependencies.
/// Path of the project
void ValidateRecursively(Dictionary buildRecords, FileReference projectPath);
///
/// (Optional) Sets of existing build records that are valid
///
/// The records to set
void SetValidBuildRecords(IReadOnlyDictionary records);
///
/// (Optional) Collection of existing build records for projects already been registered as valid, which could be skipped when building
///
IReadOnlyDictionary ValidBuildRecords { get; }
///
/// Unreal engine directory
///
DirectoryReference EngineDirectory { get; }
///
/// Dotnet directory shipped with the engine
///
DirectoryReference DotnetDirectory { get; }
///
/// Dotnet program
///
FileReference DotnetPath { get; }
}
}