nim: patch to fix dynamic library loading
This commit is contained in:
parent
a31736120c
commit
06ac3c1d2a
4 changed files with 57 additions and 4 deletions
|
@ -36,8 +36,6 @@ in stdenv.mkDerivation rec {
|
||||||
nativeBuildInputs = [ nim ];
|
nativeBuildInputs = [ nim ];
|
||||||
buildInputs = [ termbox pcre ];
|
buildInputs = [ termbox pcre ];
|
||||||
|
|
||||||
NIX_LDFLAGS = "-lpcre";
|
|
||||||
|
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
export HOME=$TMPDIR;
|
export HOME=$TMPDIR;
|
||||||
nim -p:${noise} -p:${nimbox} -p:${lscolors}/src c -d:release src/nimmm.nim
|
nim -p:${noise} -p:${nimbox} -p:${lscolors}/src c -d:release src/nimmm.nim
|
||||||
|
|
|
@ -26,14 +26,14 @@ in stdenv.mkDerivation rec {
|
||||||
sha256 = "01gm9gj2x2zs4yx6wk761fi1papi7qr3gp4ln1kkn8n2f9y9h849";
|
sha256 = "01gm9gj2x2zs4yx6wk761fi1papi7qr3gp4ln1kkn8n2f9y9h849";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = [ nim ];
|
buildInputs = [ nim htslib pcre ];
|
||||||
|
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
HOME=$TMPDIR
|
HOME=$TMPDIR
|
||||||
nim -p:${hts-nim}/src -p:${docopt}/src c --nilseqs:on -d:release mosdepth.nim
|
nim -p:${hts-nim}/src -p:${docopt}/src c --nilseqs:on -d:release mosdepth.nim
|
||||||
'';
|
'';
|
||||||
|
|
||||||
installPhase = "install -Dt $out/bin mosdepth";
|
installPhase = "install -Dt $out/bin mosdepth";
|
||||||
fixupPhase = "patchelf --set-rpath ${stdenv.lib.makeLibraryPath [ stdenv.cc.cc htslib pcre ]} $out/bin/mosdepth";
|
|
||||||
|
|
||||||
meta = with stdenv.lib; {
|
meta = with stdenv.lib; {
|
||||||
description = "fast BAM/CRAM depth calculation for WGS, exome, or targeted sequencing.";
|
description = "fast BAM/CRAM depth calculation for WGS, exome, or targeted sequencing.";
|
||||||
|
|
|
@ -28,6 +28,10 @@ stdenv.mkDerivation rec {
|
||||||
openssl pcre readline boehmgc sfml sqlite
|
openssl pcre readline boehmgc sfml sqlite
|
||||||
];
|
];
|
||||||
|
|
||||||
|
patches = [ ./nixbuild.patch ];
|
||||||
|
|
||||||
|
postPatch = "echo define:nixbuild >> config/nim.cfg";
|
||||||
|
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
runHook preBuild
|
runHook preBuild
|
||||||
|
|
||||||
|
|
51
pkgs/development/compilers/nim/nixbuild.patch
Normal file
51
pkgs/development/compilers/nim/nixbuild.patch
Normal file
|
@ -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`
|
Loading…
Reference in a new issue