Possible bug in either UnrealBuildTool or UnrealAutomationTool

I think I may have found a bug in the Unreal Build Tool, and just in case it is I would like to report it.
Note that all these tools are compiled by me from the 4.0.2 baseline.

To give some background I am calling the UnrealAutomationTool with the following command line:

BuildCookRun -nocompileeditor -nop4 -project=C:/UE4/ShooterGame/ShooterGame.uproject -cook -allmaps -stage -archive -archivedirectory=C:/PackageTest -package -WindowsNoEditor -clientconfig=Development -ue4exe=UE4Editor-Cmd -clean -pak -targetplatform=Win64 -build

The AutomationTool makes a call into the BuildTool to grab project info.
@Engine\Source\Programs\AutomationTool\Automation.cs:295

// Fill in the project info
UnrealBuildTool.UProjectInfo.FillProjectInfo();

When the call is made the working directory has been set to the engine directory (“C:\UE4” for me) by the line a few before:

@Engine\Source\Programs\AutomationTool\Automation.cs:295

// Change CWD to UE4 root.
Environment.CurrentDirectory = CommandUtils.CmdEnv.LocalRoot;

The line in question where I believe the bug is: @Engine\Source\Programs\UnrealBuildTool\System\UProjectInfo.cs:171

string RelativePath = Utils.MakePathRelativeTo(UProjFile, EngineSourceDirectory);

That causes problems for me, and I can fix it by using:

string RelativePath = Utils.MakePathRelativeTo(UProjFile, Environment.CurrentDirectory);

My current setup uses the engine in C:\UE4, with shootergame in C:\UE4\ShooterGame.

The location of shootergame is picked up via a “*.uprojectdirs” file with a single dot in it.

When the problem line runs, the relative path is set to: “…\…\ShooterGame\ShooterGame.uproject”

This is despite the fact that the working directory was set relative to the engine root not the engine source folder in the AutomationTool.

The problem manifests itself for me when the targets for ShooterGame are picked up:

@Engine\Source\Programs\UnrealBuildTool\System\UProjectInfo.cs:56

string ProjectDir = ProjectFileInfo.DirectoryName;

The code there thinks that ShooterGame is in “C:\ShooterGame”, when in fact it is in “C:\UE4\ShooterGame”. This is because it is using the relative path for the project with respect to the engine source folder, when the working directory is set to the engine root. When I apply the fix above, that no longer happens and the targets are detected.

I am also fairly sure this is not simply a result of debugging in the editor, for when I look at the verbose output of the automation tool for the command line at the top, I see the following output at the spot where the projects are being detected:

UProjectInfo.FillProjectInfo:           Searching C:\UE4
UProjectInfo.FillProjectInfo:                   Found subdir C:\UE4\.git
UProjectInfo.FillProjectInfo:                   Found subdir C:\UE4\Engine
UProjectInfo.FillProjectInfo:                   Found subdir C:\UE4\Samples
UProjectInfo.FillProjectInfo:                   Found subdir C:\UE4\ShooterGame
UProjectInfo.FillProjectInfo:                           ..\..\ShooterGame\ShooterGame.uproject

Where the last line is the relative path from above. With the fix applied the output becomes:

UProjectInfo.FillProjectInfo:           Searching C:\UE4
UProjectInfo.FillProjectInfo:                   Found subdir C:\UE4\.git
UProjectInfo.FillProjectInfo:                   Found subdir C:\UE4\Engine
UProjectInfo.FillProjectInfo:                   Found subdir C:\UE4\Samples
UProjectInfo.FillProjectInfo:                   Found subdir C:\UE4\ShooterGame
UProjectInfo.FillProjectInfo:                           ShooterGame\ShooterGame.uproject

As a consequence of the above the variable “TargetToProjectDictionary” from the UProjectInfo class was not getting populated at the very least (which is how I noticed all this).

Again, no idea if this is a real problem or not, as I only noticed it when stepping through the source, but I fixed it on my end just in case.

EDIT:

After looking at another part of the source, I found a spot @Engine\Source\Programs\AutomationTool\ScriptCompiler.cs:132

Where the working directory is set to the engine source folder, and the path to the project needs to be either relative to that folder or absolute. Right now I’m just trying keeping that path specified above absolute, as in:

string RelativePath = UProjFile;

At this point I’m not entirely sure why the relative path is being passed into AddProject
@Engine\Source\Programs\UnrealBuildTool\System\UProjectInfo.cs:186

Hello,

Thank you for your report. We were not able to investigate this on the engine version you reported, but there have been many version changes to UE4 since this question was first posted. With a new version of the Engine comes new fixes and it is possible that this issue has changed or may no longer occur. Due to timetable of when this issue was first posted, we are marking this post as resolved for tracking purposes.
If you are still experiencing the issue you reported in the current engine version, then please respond to this message with additional information and we will investigate as soon as possible. If you are experiencing a similar, but different issue at this time, please submit a new report for it.

Thank you.