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();
 | |
|     }
 | |
| }
 |