@@ -187,6 +187,50 @@ proc configToNif(conf: ConfigRef; dest: var TokenBuf) =
187187 dest.addStrLit conf.libpath.toNifPath
188188 dest.addStrLit conf.nimcacheDir.toNifPath
189189
190+ dest.buildTree " dllOverrides" :
191+ for s in conf.dllOverrides.keys:
192+ dest.addStrLit s
193+
194+ dest.toNif " moduleOverrides" , conf.moduleOverrides
195+
196+ dest.buildTree " implicitImports" :
197+ for m in conf.implicitImports:
198+ dest.addStrLit m
199+
200+ dest.buildTree " implicitIncludes" :
201+ for m in conf.implicitIncludes:
202+ dest.addStrLit m
203+
204+ dest.addStrLit conf.docSeeSrcUrl
205+ dest.addStrLit conf.docRoot
206+ dest.addStrLit conf.docCmd
207+
208+ dest.buildTree " configFiles" :
209+ for c in conf.configFiles:
210+ dest.addStrLit c.toNifPath
211+
212+ dest.buildTree " cIncludes" :
213+ for d in conf.cIncludes:
214+ dest.addStrLit d.toNifPath
215+
216+ dest.buildTree " cLibs" :
217+ for d in conf.cLibs:
218+ dest.addStrLit d.toNifPath
219+
220+ dest.buildTree " cLinkedLibs" :
221+ for l in conf.cLinkedLibs:
222+ dest.addStrLit l
223+
224+ dest.buildTree " externalToLink" :
225+ for f in conf.externalToLink:
226+ dest.addStrLit f
227+
228+ dest.addStrLit conf.linkOptionsCmd
229+
230+ dest.buildTree " compileOptionsCmd" :
231+ for c in conf.compileOptionsCmd:
232+ dest.addStrLit c
233+
190234proc cfgCachePath (conf: ConfigRef ): (AbsoluteDir , RelativeFile ) =
191235 (conf.projectPath / RelativeDir " nimcache" , RelativeFile " cache.cfg.nif" )
192236
@@ -354,6 +398,83 @@ proc loadConfigsFromNif(conf: ConfigRef; n: var Cursor) =
354398 fromNif (conf.libpath, n)
355399 fromNif (conf.nimcacheDir, n)
356400
401+ expectTag n, " dllOverrides"
402+ inc n
403+ while n.kind != ParRi :
404+ conf.inclDynlibOverride (pool.strings[n.litId])
405+ inc n
406+ inc n
407+
408+ expectTag n, " moduleOverrides"
409+ inc n
410+ fromNif (conf.moduleOverrides, n)
411+
412+ expectTag n, " implicitImports"
413+ inc n
414+ while n.kind != ParRi :
415+ conf.implicitImports.add pool.strings[n.litId]
416+ inc n
417+ inc n
418+
419+ expectTag n, " implicitIncludes"
420+ inc n
421+ while n.kind != ParRi :
422+ conf.implicitIncludes.add pool.strings[n.litId]
423+ inc n
424+ inc n
425+
426+ conf.docSeeSrcUrl = pool.strings[n.litId]
427+ inc n
428+ conf.docRoot = pool.strings[n.litId]
429+ inc n
430+ conf.docCmd = pool.strings[n.litId]
431+ inc n
432+
433+ expectTag n, " configFiles"
434+ inc n
435+ while n.kind != ParRi :
436+ conf.configFiles.add pool.strings[n.litId].toAbsolute (getCurrentDir ().AbsoluteDir )
437+ inc n
438+ inc n
439+
440+ expectTag n, " cIncludes"
441+ inc n
442+ while n.kind != ParRi :
443+ conf.cIncludes.add pool.strings[n.litId].toAbsoluteDir
444+ inc n
445+ inc n
446+
447+ expectTag n, " cLibs"
448+ inc n
449+ while n.kind != ParRi :
450+ conf.cLibs.add pool.strings[n.litId].toAbsoluteDir
451+ inc n
452+ inc n
453+
454+ expectTag n, " cLinkedLibs"
455+ inc n
456+ while n.kind != ParRi :
457+ conf.cLinkedLibs.add pool.strings[n.litId]
458+ inc n
459+ inc n
460+
461+ expectTag n, " externalToLink"
462+ inc n
463+ while n.kind != ParRi :
464+ conf.externalToLink.add pool.strings[n.litId]
465+ inc n
466+ inc n
467+
468+ conf.linkOptionsCmd = pool.strings[n.litId]
469+ inc n
470+
471+ expectTag n, " compileOptionsCmd"
472+ inc n
473+ while n.kind != ParRi :
474+ conf.compileOptionsCmd.add pool.strings[n.litId]
475+ inc n
476+ inc n
477+
357478proc sourceChanged * (conf: ConfigRef ): HashSet [string ] =
358479 result = HashSet [string ]()
359480 let (dir, file) = conf.cfgCachePath ()
@@ -451,6 +572,20 @@ when isMainModule:
451572 assertImpl prefixDir
452573 assertImpl libpath
453574 assertImpl nimcacheDir
575+ assert eqlKeys (x.dllOverrides, y.dllOverrides)
576+ assertImpl moduleOverrides
577+ assertImpl implicitImports
578+ assertImpl implicitIncludes
579+ assertImpl docSeeSrcUrl
580+ assertImpl docRoot
581+ assertImpl docCmd
582+ assertImpl configFiles
583+ assertImpl cIncludes
584+ assertImpl cLibs
585+ assertImpl cLinkedLibs
586+ assertImpl externalToLink
587+ assertImpl linkOptionsCmd
588+ assertImpl compileOptionsCmd
454589
455590 proc testConfig (conf1: ConfigRef ) =
456591 var dest = createTokenBuf ()
@@ -521,4 +656,20 @@ when isMainModule:
521656 conf.prefixDir = AbsoluteDir " /home/foo/Nim"
522657 conf.libpath = AbsoluteDir " /home/foo/Nim/lib"
523658 conf.nimcacheDir = AbsoluteDir " /root/nimcache"
659+ conf.inclDynlibOverride (" foolib" )
660+ conf.inclDynlibOverride (" libbar" )
661+ conf.moduleOverrides[" foo" ] = " overridefoo"
662+ conf.moduleOverrides[" bar" ] = " overridebar"
663+ conf.implicitImports = @ [" foo" , " bar" ]
664+ conf.implicitIncludes = @ [" foo" , " bar" ]
665+ conf.docSeeSrcUrl = " doc see src url"
666+ conf.docRoot = " doc root"
667+ conf.docCmd = " doc command"
668+ conf.configFiles = @ [AbsoluteFile " /foo/nim.cfg" , AbsoluteFile " /bar/baz/config.nims" ]
669+ conf.cIncludes = @ [AbsoluteDir " /include" , AbsoluteDir " /foo/bar" ]
670+ conf.cLibs = @ [AbsoluteDir " /lib" , AbsoluteDir " /foo/bar" ]
671+ conf.cLinkedLibs = @ [" foolib" , " libbar" ]
672+ conf.externalToLink = @ [" foo" , " bar" ]
673+ conf.linkOptionsCmd = " --foo -lbar"
674+ conf.compileOptionsCmd = @ [" -O3" , " -g" ]
524675 testConfig conf
0 commit comments