65 lines
2.2 KiB
C#
65 lines
2.2 KiB
C#
|
|
namespace UnrealSharpBuildTool.Actions;
|
|||
|
|
|
|||
|
|
public class WeaveProject : BuildToolAction
|
|||
|
|
{
|
|||
|
|
readonly string _outputDirectory;
|
|||
|
|
|
|||
|
|
public WeaveProject(string outputDirectory = "")
|
|||
|
|
{
|
|||
|
|
_outputDirectory = string.IsNullOrEmpty(outputDirectory) ? Program.GetOutputPath() : outputDirectory;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override bool RunAction()
|
|||
|
|
{
|
|||
|
|
string weaverPath = Program.GetWeaver();
|
|||
|
|
|
|||
|
|
if (!File.Exists(weaverPath))
|
|||
|
|
{
|
|||
|
|
throw new Exception("Couldn't find the weaver");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
DirectoryInfo scriptRootDirInfo = new DirectoryInfo(Program.GetProjectDirectory());
|
|||
|
|
return Weave(scriptRootDirInfo, weaverPath);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private bool Weave(DirectoryInfo scriptFolder, string weaverPath)
|
|||
|
|
{
|
|||
|
|
Dictionary<string, List<FileInfo>> projectFiles = Program.GetProjectFilesByDirectory(scriptFolder);
|
|||
|
|
List<FileInfo> allProjectFiles = projectFiles.Values.SelectMany(x => x).ToList();
|
|||
|
|
|
|||
|
|
if (allProjectFiles.Count == 0)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine("No project files found. Skipping weaving...");
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
using BuildToolProcess weaveProcess = new BuildToolProcess();
|
|||
|
|
weaveProcess.StartInfo.ArgumentList.Add(weaverPath);
|
|||
|
|
weaveProcess.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory();
|
|||
|
|
|
|||
|
|
bool foundValidProject = false;
|
|||
|
|
foreach (FileInfo projectFile in allProjectFiles)
|
|||
|
|
{
|
|||
|
|
weaveProcess.StartInfo.ArgumentList.Add("-p");
|
|||
|
|
string csProjName = Path.GetFileNameWithoutExtension(projectFile.Name);
|
|||
|
|
string assemblyPath = Path.Combine(projectFile.DirectoryName!, "bin",
|
|||
|
|
Program.GetBuildConfiguration(), Program.GetVersion(), csProjName + ".dll");
|
|||
|
|
|
|||
|
|
weaveProcess.StartInfo.ArgumentList.Add(assemblyPath);
|
|||
|
|
foundValidProject = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!foundValidProject)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine("No valid project found to weave. Skipping weaving...");
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Add path to the output folder for the weaver.
|
|||
|
|
weaveProcess.StartInfo.ArgumentList.Add("-o");
|
|||
|
|
weaveProcess.StartInfo.ArgumentList.Add($"{Program.FixPath(_outputDirectory)}");
|
|||
|
|
|
|||
|
|
return weaveProcess.StartBuildToolProcess();
|
|||
|
|
}
|
|||
|
|
}
|