aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/development/compilers/nim/nixbuild.patch
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/nim/nixbuild.patch')
-rw-r--r--nixpkgs/pkgs/development/compilers/nim/nixbuild.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/nim/nixbuild.patch b/nixpkgs/pkgs/development/compilers/nim/nixbuild.patch
new file mode 100644
index 00000000000..bdfd04744e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/nim/nixbuild.patch
@@ -0,0 +1,51 @@
+commit 164ba50fc74b980f77047080b2ae1ea099ae9b27
+Author: Emery Hemingway <ehmry@posteo.net>
+Date: Mon Sep 7 14:09:22 2020 +0200
+
+ Load libaries by absolute path on NixOS
+
+ If "nixbuild" is defined then choose dynamic runtime libraries by
+ searching $NIX_LDFLAGS at compile-time.
+
+ Fix #15194
+
+diff --git a/lib/pure/dynlib.nim b/lib/pure/dynlib.nim
+index f31ae94dd..debed9c07 100644
+--- a/lib/pure/dynlib.nim
++++ b/lib/pure/dynlib.nim
+@@ -56,6 +56,9 @@
+
+ import strutils
+
++when defined(nixbuild):
++ import os
++
+ type
+ LibHandle* = pointer ## a handle to a dynamically loaded library
+
+@@ -95,6 +98,25 @@ proc libCandidates*(s: string, dest: var seq[string]) =
+ libCandidates(prefix & middle & suffix, dest)
+ else:
+ add(dest, s)
++ when defined(nixbuild):
++ # Nix doesn't have a global library directory so
++ # load libraries using an absolute path if one
++ # can be derived from NIX_LDFLAGS.
++ #
++ # During Nix/NixOS packaging the line "define:nixbuild"
++ # should be appended to the ../../config/nim.cfg file
++ # to enable this behavior by default.
++ #
++ var libDirs = split(getEnv("LD_LIBRARY_PATH"), ':')
++ for flag in split(getEnv("NIX_LDFLAGS")):
++ if flag.startsWith("-L"):
++ libDirs.add(flag[2..flag.high])
++ for lib in dest:
++ for dir in libDirs:
++ let abs = dir / lib
++ if existsFile(abs):
++ dest = @[abs]
++ return
+
+ proc loadLibPattern*(pattern: string, globalSymbols = false): LibHandle =
+ ## loads a library with name matching `pattern`, similar to what `dlimport`