diff options
Diffstat (limited to 'compiler/gorgeimpl.nim')
-rw-r--r-- | compiler/gorgeimpl.nim | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/compiler/gorgeimpl.nim b/compiler/gorgeimpl.nim index 44ad46136..da911c84c 100644 --- a/compiler/gorgeimpl.nim +++ b/compiler/gorgeimpl.nim @@ -9,8 +9,14 @@ ## Module that implements ``gorge`` for the compiler. -import msgs, std / sha1, os, osproc, streams, strutils, options, - lineinfos +import msgs, options, lineinfos, pathutils + +import std/[os, osproc, streams] + +when defined(nimPreviewSlimSystem): + import std/syncio + +import ../dist/checksums/src/checksums/sha1 proc readOutput(p: Process): (string, int) = result[0] = "" @@ -24,35 +30,45 @@ proc readOutput(p: Process): (string, int) = proc opGorge*(cmd, input, cache: string, info: TLineInfo; conf: ConfigRef): (string, int) = let workingDir = parentDir(toFullPath(conf, info)) - if cache.len > 0:# and optForceFullMake notin gGlobalOptions: + result = ("", 0) + if cache.len > 0: let h = secureHash(cmd & "\t" & input & "\t" & cache) - let filename = options.toGeneratedFile(conf, "gorge_" & $h, "txt") - var f: File - if open(f, filename): + let filename = toGeneratedFile(conf, AbsoluteFile("gorge_" & $h), "txt").string + var f: File = default(File) + if optForceFullMake notin conf.globalOptions and open(f, filename): result = (f.readAll, 0) f.close return var readSuccessful = false try: var p = startProcess(cmd, workingDir, - options={poEvalCommand, poStderrToStdout}) + options={poEvalCommand, poStdErrToStdOut}) if input.len != 0: p.inputStream.write(input) p.inputStream.close() result = p.readOutput + p.close() readSuccessful = true # only cache successful runs: if result[1] == 0: writeFile(filename, result[0]) except IOError, OSError: - if not readSuccessful: result = ("", -1) + if not readSuccessful: + when defined(nimLegacyGorgeErrors): + result = ("", -1) + else: + result = ("Error running startProcess: " & getCurrentExceptionMsg(), -1) else: try: var p = startProcess(cmd, workingDir, - options={poEvalCommand, poStderrToStdout}) + options={poEvalCommand, poStdErrToStdOut}) if input.len != 0: p.inputStream.write(input) p.inputStream.close() result = p.readOutput + p.close() except IOError, OSError: - result = ("", -1) + when defined(nimLegacyGorgeErrors): + result = ("", -1) + else: + result = ("Error running startProcess: " & getCurrentExceptionMsg(), -1) |