1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-16 23:34:10 +02:00

Improved prebuild/postbuild external program execution

This commit is contained in:
Brian Fiete 2023-12-09 09:11:52 -05:00
parent 90ba850618
commit 90626036c6
2 changed files with 30 additions and 19 deletions

View file

@ -8784,8 +8784,11 @@ namespace IDE
shellArgs.Append("/c "); shellArgs.Append("/c ");
shellArgs.Append("\""); shellArgs.Append("\"");
IDEUtils.AppendWithOptionalQuotes(shellArgs, fileName); IDEUtils.AppendWithOptionalQuotes(shellArgs, fileName);
shellArgs.Append(" "); if (!args.IsEmpty)
shellArgs.Append(args); {
shellArgs.Append(" ");
shellArgs.Append(args);
}
shellArgs.Append("\""); shellArgs.Append("\"");
startInfo.SetFileName("cmd.exe"); startInfo.SetFileName("cmd.exe");
startInfo.SetArguments(shellArgs); startInfo.SetArguments(shellArgs);

View file

@ -1260,18 +1260,20 @@ namespace IDE
} }
} }
public Project GetProject() public Project GetProject(bool allowFail = false)
{ {
if (!mScriptManager.mCurCmd.mSrcFile.StartsWith("project ")) if (!mScriptManager.mCurCmd.mSrcFile.StartsWith("project "))
{ {
mScriptManager.Fail("Only usable in the context of a project"); if (!allowFail)
mScriptManager.Fail("Only usable in the context of a project");
return null; return null;
} }
let projectName = scope String()..Append(mScriptManager.mCurCmd.mSrcFile, "Project ".Length); let projectName = scope String()..Append(mScriptManager.mCurCmd.mSrcFile, "Project ".Length);
let project = gApp.mWorkspace.FindProject(projectName); let project = gApp.mWorkspace.FindProject(projectName);
if (project == null) if (project == null)
{ {
mScriptManager.Fail("Unable to find project '{}'", projectName); if (!allowFail)
mScriptManager.Fail("Unable to find project '{}'", projectName);
return null; return null;
} }
return project; return project;
@ -1384,31 +1386,37 @@ namespace IDE
spacePos = cmd.IndexOf(' '); spacePos = cmd.IndexOf(' ');
if (spacePos != -1) if (spacePos != -1)
exePath.Append(cmd, 0, spacePos); exePath.Append(cmd, 0, spacePos);
else
exePath.Set(cmd);
} }
if ((spacePos == -1) && (!cmd.IsEmpty)) exePath.Trim();
if (exePath.IsEmpty)
{ {
mScriptManager.Fail("Invalid command '{0}' in '{1}'", cmd, mScriptManager.mCurCmd.mSrcFile); mScriptManager.Fail("Invalid command '{0}' in '{1}'", cmd, mScriptManager.mCurCmd.mSrcFile);
return; return;
} }
var exeArgs = scope String();
if (spacePos > 0) if (spacePos > 0)
{
var exeArgs = scope String();
exeArgs.Append(cmd, spacePos + 1); exeArgs.Append(cmd, spacePos + 1);
IDEApp.RunFlags runFlags = .None; IDEApp.RunFlags runFlags = .None;
if (!exePath.EndsWith(".exe", .OrdinalIgnoreCase)) if (!exePath.EndsWith(".exe", .OrdinalIgnoreCase))
runFlags = .ShellCommand; runFlags = .ShellCommand;
// Hande re-encoded embedded newlines // Hande re-encoded embedded newlines
if (exeArgs.Contains('\v')) if (exeArgs.Contains('\v'))
{ {
exeArgs.Replace('\v', '\n'); exeArgs.Replace('\v', '\n');
runFlags = .BatchCommand; runFlags = .BatchCommand;
}
gApp.DoRun(exePath, exeArgs, gApp.mInstallDir, .None, null, null, runFlags);
} }
String dir = scope .();
dir.Set(gApp.mInstallDir);
var project = GetProject(true);
if (project?.mProjectDir.IsEmpty == false)
dir.Set(project.mProjectDir);
gApp.DoRun(exePath, exeArgs, dir, .None, null, null, runFlags);
} }
[IDECommand] [IDECommand]