Skip to content

Commit cbd4e63

Browse files
committed
store/load ConfigRef fields
1 parent a0bde89 commit cbd4e63

File tree

1 file changed

+151
-0
lines changed

1 file changed

+151
-0
lines changed

compiler/nimconfcache.nim

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
190234
proc 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+
357478
proc 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

Comments
 (0)