summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/extccomp.nim16
-rw-r--r--compiler/pragmas.nim6
2 files changed, 12 insertions, 10 deletions
diff --git a/compiler/extccomp.nim b/compiler/extccomp.nim
index fd223388e..02028cf72 100644
--- a/compiler/extccomp.nim
+++ b/compiler/extccomp.nim
@@ -658,16 +658,16 @@ proc externalFileChanged(cfile: Cfile): bool =
       f.writeLine($currentHash)
       close(f)
 
+proc addExternalFileToCompile*(c: var Cfile) =
+  if optForceFullMake notin gGlobalOptions and not externalFileChanged(c):
+    c.flags.incl CfileFlag.Cached
+  toCompile.add(c)
+
 proc addExternalFileToCompile*(filename: string) =
-  let c = Cfile(cname: filename,
+  var c = Cfile(cname: filename,
     obj: toObjFile(completeCFilePath(changeFileExt(filename, ""), false)),
     flags: {CfileFlag.External})
-  if optForceFullMake in gGlobalOptions or externalFileChanged(c):
-    toCompile.add(c)
-
-proc addExternalFileToCompile*(c: Cfile) =
-  if optForceFullMake in gGlobalOptions or externalFileChanged(c):
-    toCompile.add(c)
+  addExternalFileToCompile(c)
 
 proc compileCFile(list: CFileList, script: var Rope, cmds: var TStringSeq,
                   prettyCmds: var TStringSeq) =
@@ -782,7 +782,7 @@ proc callCCompiler*(projectfile: string) =
       it = PStrEntry(it.next)
     for x in toCompile:
       add(objfiles, ' ')
-      add(objfiles, quoteShell(x.obj))
+      add(objfiles, x.obj)
 
     linkCmd = getLinkCmd(projectfile, objfiles)
     if optCompileOnly notin gGlobalOptions:
diff --git a/compiler/pragmas.nim b/compiler/pragmas.nim
index 3808b8f58..e750cc390 100644
--- a/compiler/pragmas.nim
+++ b/compiler/pragmas.nim
@@ -419,8 +419,10 @@ proc processCompile(c: PContext, n: PNode) =
     var found = parentDir(n.info.toFullPath) / s
     for f in os.walkFiles(found):
       let nameOnly = extractFilename(f)
-      extccomp.addExternalFileToCompile(Cfile(cname: f,
-          obj: dest % nameOnly, flags: {CfileFlag.External}))
+      var cf = Cfile(cname: f,
+          obj: completeCFilePath(dest % nameOnly),
+          flags: {CfileFlag.External})
+      extccomp.addExternalFileToCompile(cf)
   else:
     let s = expectStrLit(c, n)
     var found = parentDir(n.info.toFullPath) / s