diff options
-rw-r--r-- | compiler/scriptconfig.nim | 2 | ||||
-rw-r--r-- | lib/system/nimscript.nim | 13 |
2 files changed, 15 insertions, 0 deletions
diff --git a/compiler/scriptconfig.nim b/compiler/scriptconfig.nim index 833444788..8b2653bc9 100644 --- a/compiler/scriptconfig.nim +++ b/compiler/scriptconfig.nim @@ -130,6 +130,8 @@ proc setupVM*(module: PSym; scriptName: string): PEvalContext = elif not isAbsolute(val): val = vthisDir / val gModuleOverrides[key] = val + cbconf selfExe: + setResult(a, os.getAppFilename()) proc runNimScript*(scriptName: string; freshDefines=true) = passes.gIncludeFile = includeModule diff --git a/lib/system/nimscript.nim b/lib/system/nimscript.nim index ad2b154d4..fc6b8c99d 100644 --- a/lib/system/nimscript.nim +++ b/lib/system/nimscript.nim @@ -122,6 +122,10 @@ proc existsDir*(dir: string): bool = ## An alias for ``dirExists``. dirExists(dir) +proc selfExe*(): string = + ## Returns the currently running nim or nimble executable. + builtin + proc toExe*(filename: string): string = ## On Windows adds ".exe" to `filename`, else returns `filename` unmodified. (when defined(windows): filename & ".exe" else: filename) @@ -208,6 +212,15 @@ proc exec*(command: string, input: string, cache = "") {. log "exec: " & command: echo staticExec(command, input, cache) +proc selfExec*(command: string) = + ## Executes an external command with the current nim/nimble executable. + ## ``Command`` must not contain the "nim " part. + let c = selfExe() & " " & command + log "exec: " & c: + if rawExec(c) != 0: + raise newException(OSError, "FAILED: " & c) + checkOsError() + proc put*(key, value: string) = ## Sets a configuration 'key' like 'gcc.options.always' to its value. builtin |