nixpkgs/pkgs/by-name/ni/nim-unwrapped/nixbuild.patch
eveeifyeve 81daafea8c nim: remove 1_0, 2_0 and 2_2 versions and aliases; nim: 2.2.4 -> 2.2.10
writers/writeNim: migrate package to nim
nim: remove nativeStacktraces and gnuReadline args
nim: use pname instead

It's time that we remove nim1, nim1 has been a package for a while and
nim has moved on during that time to the v2 versions.
It's also time that nim had some attention in nixpkgs and upgrade the
nim 2 versions.

Also fixes an issue with nim-unwrapped missing the pname and version.
See #485742 for more info.

Co-authored-by: éclairevoyant
<848000+eclairevoyant@users.noreply.github.com>
2026-07-02 13:36:59 +10:00

40 lines
1.3 KiB
Diff

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) and not defined(windows):
+ 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) and not defined(windows):
+ # 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(replace(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`