about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/nim-packages/nim_builder/nim_builder.nim
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/nim-packages/nim_builder/nim_builder.nim')
-rw-r--r--nixpkgs/pkgs/development/nim-packages/nim_builder/nim_builder.nim19
1 files changed, 16 insertions, 3 deletions
diff --git a/nixpkgs/pkgs/development/nim-packages/nim_builder/nim_builder.nim b/nixpkgs/pkgs/development/nim-packages/nim_builder/nim_builder.nim
index b8881b700047..90dcb46588b7 100644
--- a/nixpkgs/pkgs/development/nim-packages/nim_builder/nim_builder.nim
+++ b/nixpkgs/pkgs/development/nim-packages/nim_builder/nim_builder.nim
@@ -64,6 +64,19 @@ proc getNimbleValues(filePath, key: string): seq[string] =
     if s.len > 0 and s[0] == '"':
       s = s.unescape()
 
+proc getOutputDir(name: string): string =
+  ## Return the output directory for output `name`.
+  ## If `name` is not a valid output then the first output
+  ## is returned as a default.
+  let outputs = splitWhitespace getEnv("outputs")
+  doAssert(outputs.len > 0)
+  if outputs.contains name:
+    result = getEnv(name)
+  if result == "":
+    result = getEnv("out")
+  if result == "":
+    result = getEnv(outputs[0], "/dev/null")
+
 proc configurePhase*() =
   ## Generate "config.nims" which will be read by the Nim
   ## compiler during later phases.
@@ -103,14 +116,14 @@ proc buildPhase*() =
     nf = getNimbleFilePath()
     bins = nf.getNimbleValues("bin")
     srcDir = nf.getNimbleValue("srcDir", ".")
-    binDir = getenv("outputBin", getenv("out", "/dev/null")) / "bin"
+    binDir = getOutputDir("bin") / "bin"
   if bins != @[]:
     for bin in bins:
       cmds.add("nim compile $# --outdir:$# $#" %
           [getenv"nimFlags", binDir, normalizedPath(srcDir / bin)])
   if getEnvBool"nimDoc":
     echo "generating documentation"
-    let docDir = getenv("outputDoc", (getenv("out", "/dev/null") / "doc"))
+    let docDir = getOutputDir("doc") / "doc"
     for path in walkFiles(srcDir / "*.nim"):
       cmds.add("nim doc --outdir:$# $#" % [docDir, path])
   if cmds.len > 0:
@@ -126,7 +139,7 @@ proc installPhase*() =
     let
       nf = getNimbleFilePath()
       srcDir = nf.getNimbleValue("srcDir", ".")
-      devDir = getenv("outputDev", getenv("out", "/dev/null"))
+      devDir = getOutputDir "dev"
     echo "Install ", srcDir, " to ", devDir
     copyDir(normalizedPath(srcDir), normalizedPath(devDir / srcDir))
     copyFile(nf, devDir / nf.extractFilename)