summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/extccomp.nim33
-rw-r--r--compiler/lineinfos.nim2
-rw-r--r--koch.nim9
-rw-r--r--tools/kochdocs.nim18
4 files changed, 34 insertions, 28 deletions
diff --git a/compiler/extccomp.nim b/compiler/extccomp.nim
index 4cc5043f8..6b4223433 100644
--- a/compiler/extccomp.nim
+++ b/compiler/extccomp.nim
@@ -705,6 +705,11 @@ proc addExternalFileToCompile*(conf: ConfigRef; filename: AbsoluteFile) =
     flags: {CfileFlag.External})
   addExternalFileToCompile(conf, c)
 
+proc displayProgressCC(conf: ConfigRef, path: string): string =
+  if conf.hasHint(hintCC):
+    let (_, name, _) = splitFile(path)
+    result = MsgKindToStr[hintCC] % demanglePackageName(name)
+
 proc compileCFiles(conf: ConfigRef; list: CfileList, script: var Rope, cmds: var TStringSeq,
                   prettyCmds: var TStringSeq) =
   var currIdx = 0
@@ -715,8 +720,7 @@ proc compileCFiles(conf: ConfigRef; list: CfileList, script: var Rope, cmds: var
     inc currIdx
     if optCompileOnly notin conf.globalOptions:
       cmds.add(compileCmd)
-      let (_, name, _) = splitFile(it.cname)
-      prettyCmds.add(if conf.hasHint(hintCC): "CC: " & demanglePackageName(name) else: "")
+      prettyCmds.add displayProgressCC(conf, $it.cname)
     if optGenScript in conf.globalOptions:
       script.add(compileCmd)
       script.add("\n")
@@ -908,6 +912,11 @@ proc hcrLinkTargetName(conf: ConfigRef, objFile: string, isMain = false): Absolu
                    else: platform.OS[conf.target.targetOS].dllFrmt % basename
   result = conf.getNimcacheDir / RelativeFile(targetName)
 
+template callbackPrettyCmd(cmd) =
+  when declared(echo):
+    let cmd2 = cmd
+    if cmd2.len > 0: echo cmd2
+
 proc callCCompiler*(conf: ConfigRef) =
   var
     linkCmd: string
@@ -918,10 +927,7 @@ proc callCCompiler*(conf: ConfigRef) =
   var script: Rope = nil
   var cmds: TStringSeq = @[]
   var prettyCmds: TStringSeq = @[]
-  let prettyCb = proc (idx: int) =
-    when declared(echo):
-      let cmd = prettyCmds[idx]
-      if cmd != "": echo cmd
+  let prettyCb = proc (idx: int) = callbackPrettyCmd(prettyCmds[idx])
   compileCFiles(conf, conf.toCompile, script, cmds, prettyCmds)
   if optCompileOnly notin conf.globalOptions:
     execCmdsInParallel(conf, cmds, prettyCb)
@@ -1126,12 +1132,9 @@ proc runJsonBuildInstructions*(conf: ConfigRef; projectfile: AbsoluteFile) =
       doAssert c.len >= 2
 
       cmds.add(c[1].getStr)
-      let (_, name, _) = splitFile(c[0].getStr)
-      prettyCmds.add("CC: " & demanglePackageName(name))
+      prettyCmds.add displayProgressCC(conf, c[0].getStr)
 
-    let prettyCb = proc (idx: int) =
-      when declared(echo):
-        echo prettyCmds[idx]
+    let prettyCb = proc (idx: int) = callbackPrettyCmd(prettyCmds[idx])
     execCmdsInParallel(conf, cmds, prettyCb)
 
     let linkCmd = data["linkcmd"]
@@ -1146,9 +1149,11 @@ proc runJsonBuildInstructions*(conf: ConfigRef; projectfile: AbsoluteFile) =
         execExternalProgram(conf, cmd2, hintExecuting)
 
   except:
-    when declared(echo):
-      echo getCurrentException().getStackTrace()
-    quit "error evaluating JSON file: " & jsonFile.string
+    let e = getCurrentException()
+    var msg = "\ncaught exception:n" & e.msg & "\nstacktrace:\n" &
+      getCurrentException().getStackTrace() &
+      "error evaluating JSON file: " & jsonFile.string
+    quit msg
 
 proc genMappingFiles(conf: ConfigRef; list: CfileList): Rope =
   for it in list:
diff --git a/compiler/lineinfos.nim b/compiler/lineinfos.nim
index 9095dd13d..5ac65201e 100644
--- a/compiler/lineinfos.nim
+++ b/compiler/lineinfos.nim
@@ -99,7 +99,7 @@ const
     hintSuccess: "operation successful: $#",
     # keep in sync with `pegSuccess` see testament.nim
     hintSuccessX: "$loc LOC; $sec sec; $mem; $build build; proj: $project; out: $output",
-    hintCC: "CC: \'$1\'", # unused
+    hintCC: "CC: $1",
     hintLineTooLong: "line too long",
     hintXDeclaredButNotUsed: "'$1' is declared but not used",
     hintConvToBaseNotNeeded: "conversion to base object is not needed",
diff --git a/koch.nim b/koch.nim
index 75d504758..982517656 100644
--- a/koch.nim
+++ b/koch.nim
@@ -265,15 +265,12 @@ when false:
 
 proc findStartNim: string =
   # we try several things before giving up:
+  # * nimExe
   # * bin/nim
   # * $PATH/nim
   # If these fail, we try to build nim with the "build.(sh|bat)" script.
-  var nim = "nim".exe
-  result = "bin" / nim
-  if existsFile(result): return
-  for dir in split(getEnv("PATH"), PathSep):
-    if existsFile(dir / nim): return dir / nim
-
+  let (nim, ok) = findNimImpl()
+  if ok: return nim
   when defined(Posix):
     const buildScript = "build.sh"
     if existsFile(buildScript):
diff --git a/tools/kochdocs.nim b/tools/kochdocs.nim
index a5166973a..75df629e3 100644
--- a/tools/kochdocs.nim
+++ b/tools/kochdocs.nim
@@ -18,15 +18,19 @@ proc exe*(f: string): string =
   when defined(windows):
     result = result.replace('/','\\')
 
-proc findNim*(): string =
-  if nimExe.len > 0: return nimExe
-  var nim = "nim".exe
-  result = "bin" / nim
-  if existsFile(result): return
+proc findNimImpl*(): tuple[path: string, ok: bool] =
+  if nimExe.len > 0: return (nimExe, true)
+  let nim = "nim".exe
+  result.path = "bin" / nim
+  result.ok = true
+  if existsFile(result.path): return
   for dir in split(getEnv("PATH"), PathSep):
-    if existsFile(dir / nim): return dir / nim
+    result.path = dir / nim
+    if existsFile(result.path): return
   # assume there is a symlink to the exe or something:
-  return nim
+  return (nim, false)
+
+proc findNim*(): string = findNimImpl().path
 
 proc exec*(cmd: string, errorcode: int = QuitFailure, additionalPath = "") =
   let prevPath = getEnv("PATH")