aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Yakimowich-Payne <jyapayne@gmail.com>2018-06-20 13:59:46 +0900
committerJoey Yakimowich-Payne <jyapayne@gmail.com>2018-07-08 12:08:43 +0900
commit467d0c4eae83d49e677bc03f8c3300a71bd9fcf1 (patch)
tree535651921492692c4450d884aa60312d4bde64b1
parentbfd9e50652110a2262e8700fd381dc5e36cf6499 (diff)
downloadnimgen-467d0c4eae83d49e677bc03f8c3300a71bd9fcf1.tar.gz
nimgen-467d0c4eae83d49e677bc03f8c3300a71bd9fcf1.zip
Add ability to use environment vars
-rw-r--r--nimgen.nim54
1 files changed, 43 insertions, 11 deletions
diff --git a/nimgen.nim b/nimgen.nim
index 3f9a104..e1e16b7 100644
--- a/nimgen.nim
+++ b/nimgen.nim
@@ -35,6 +35,33 @@ Options:
# ###
# Helpers
+proc addEnv(str: string): string =
+ var newStr = str
+ for pair in envPairs():
+ try:
+ newStr = newStr % [pair.key, pair.value.string]
+ except ValueError:
+ # Ignore if there are no values to replace. We
+ # want to continue anyway
+ discard
+
+ try:
+ newStr = newStr % ["output", gOutput]
+ except ValueError:
+ # Ignore if there are no values to replace. We
+ # want to continue anyway
+ discard
+
+ # if there are still format args, print a warning
+ if newStr.contains("${"):
+ echo "WARNING: \"", newStr, "\" still contains an uninterpolated value!"
+
+ return newStr
+
+proc `[]`(table: OrderedTableRef[string, string], key: string): string =
+ ## Gets table values with env vars inserted
+ tables.`[]`(table, key).addEnv
+
proc execProc(cmd: string): string =
result = ""
var
@@ -497,6 +524,7 @@ proc c2nim(fl, outfile: string, c2nimConfig: c2nimConfigObj) =
outpragma &= "{." & prag & ".}\n"
let fname = file.splitFile().name.replace(re"[\.\-]", "_")
+
if c2nimConfig.dynlib.len() != 0:
let
win = "when defined(Windows):\n"
@@ -599,7 +627,9 @@ proc runFile(file: string, cfgin: OrderedTableRef) =
if action == "create":
createDir(file.splitPath().head)
writeFile(file, cfg[act])
- elif action in @["prepend", "append", "replace", "comment", "rename", "compile", "dynlib", "pragma", "pipe"] and sfile != "":
+ elif action in @["prepend", "append", "replace", "comment",
+ "rename", "compile", "dynlib", "pragma",
+ "pipe"] and sfile != "":
if action == "prepend":
if srch != "":
prepend(sfile, cfg[act], cfg[srch])
@@ -700,30 +730,31 @@ proc runCfg(cfg: string) =
if gConfig.hasKey("n.include"):
for inc in gConfig["n.include"].keys():
- gIncludes.add(inc)
+ gIncludes.add(inc.addEnv())
if gConfig.hasKey("n.exclude"):
for excl in gConfig["n.exclude"].keys():
- gExcludes.add(excl)
+ gExcludes.add(excl.addEnv())
if gConfig.hasKey("n.prepare"):
for prep in gConfig["n.prepare"].keys():
let (key, val) = getKey(prep)
if val == true:
+ let prepVal = gConfig["n.prepare"][prep]
if key == "download":
- downloadUrl(gConfig["n.prepare"][prep])
+ downloadUrl(prepVal)
elif key == "extract":
- extractZip(gConfig["n.prepare"][prep])
+ extractZip(prepVal)
elif key == "git":
- gitRemotePull(gConfig["n.prepare"][prep])
+ gitRemotePull(prepVal)
elif key == "gitremote":
- gitRemotePull(gConfig["n.prepare"][prep], false)
+ gitRemotePull(prepVal, false)
elif key == "gitsparse":
- gitSparseCheckout(gConfig["n.prepare"][prep])
+ gitSparseCheckout(prepVal)
elif key == "execute":
- discard execProc(gConfig["n.prepare"][prep])
+ discard execProc(prepVal)
elif key == "copy":
- doCopy(gConfig["n.prepare"][prep])
+ doCopy(prepVal)
if gConfig.hasKey("n.wildcard"):
var wildcard = ""
@@ -733,7 +764,8 @@ proc runCfg(cfg: string) =
if key == "wildcard":
wildcard = gConfig["n.wildcard"][wild]
else:
- gWildcards.setSectionKey(wildcard, wild, gConfig["n.wildcard"][wild])
+ gWildcards.setSectionKey(wildcard, wild,
+ gConfig["n.wildcard"][wild])
for file in gConfig.keys():
if file in @["n.global", "n.include", "n.exclude", "n.prepare", "n.wildcard"]: