From 90626036c64393a753b5f76492e8ccb14492c818 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sat, 9 Dec 2023 09:11:52 -0500 Subject: [PATCH] Improved prebuild/postbuild external program execution --- IDE/src/IDEApp.bf | 7 +++++-- IDE/src/ScriptManager.bf | 42 ++++++++++++++++++++++++---------------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/IDE/src/IDEApp.bf b/IDE/src/IDEApp.bf index 45477335..84eb1048 100644 --- a/IDE/src/IDEApp.bf +++ b/IDE/src/IDEApp.bf @@ -8784,8 +8784,11 @@ namespace IDE shellArgs.Append("/c "); shellArgs.Append("\""); IDEUtils.AppendWithOptionalQuotes(shellArgs, fileName); - shellArgs.Append(" "); - shellArgs.Append(args); + if (!args.IsEmpty) + { + shellArgs.Append(" "); + shellArgs.Append(args); + } shellArgs.Append("\""); startInfo.SetFileName("cmd.exe"); startInfo.SetArguments(shellArgs); diff --git a/IDE/src/ScriptManager.bf b/IDE/src/ScriptManager.bf index eeafdc84..aa6f7c99 100644 --- a/IDE/src/ScriptManager.bf +++ b/IDE/src/ScriptManager.bf @@ -1260,18 +1260,20 @@ namespace IDE } } - public Project GetProject() + public Project GetProject(bool allowFail = false) { 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; } let projectName = scope String()..Append(mScriptManager.mCurCmd.mSrcFile, "Project ".Length); let project = gApp.mWorkspace.FindProject(projectName); if (project == null) { - mScriptManager.Fail("Unable to find project '{}'", projectName); + if (!allowFail) + mScriptManager.Fail("Unable to find project '{}'", projectName); return null; } return project; @@ -1384,31 +1386,37 @@ namespace IDE spacePos = cmd.IndexOf(' '); if (spacePos != -1) 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); return; } + var exeArgs = scope String(); if (spacePos > 0) - { - var exeArgs = scope String(); exeArgs.Append(cmd, spacePos + 1); - IDEApp.RunFlags runFlags = .None; - if (!exePath.EndsWith(".exe", .OrdinalIgnoreCase)) - runFlags = .ShellCommand; + IDEApp.RunFlags runFlags = .None; + if (!exePath.EndsWith(".exe", .OrdinalIgnoreCase)) + runFlags = .ShellCommand; - // Hande re-encoded embedded newlines - if (exeArgs.Contains('\v')) - { - exeArgs.Replace('\v', '\n'); - runFlags = .BatchCommand; - } - - gApp.DoRun(exePath, exeArgs, gApp.mInstallDir, .None, null, null, runFlags); + // Hande re-encoded embedded newlines + if (exeArgs.Contains('\v')) + { + exeArgs.Replace('\v', '\n'); + runFlags = .BatchCommand; } + + 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]