pkgsMusl.haskell.compiler.ghc8107Binary: Remove now-incorrect gmp dependency.
GHC HQ switched the musl bindists from gmp to `integer-simple`
with GHC >= 8.10.6, but this was not reflected in the nixpkgs update:
* commit 6f1242469a
: ghc: 8.10.5-binary -> 8.10.7-binary
From PR #135453
See also #130441.
This commit is contained in:
parent
de37be3299
commit
14d020bf06
2 changed files with 45 additions and 22 deletions
|
@ -46,6 +46,7 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
{ nixPackage = gmp; fileToCheckFor = null; }
|
||||||
# The i686-linux bindist provided by GHC HQ is currently built on Debian 9,
|
# The i686-linux bindist provided by GHC HQ is currently built on Debian 9,
|
||||||
# which link it against `libtinfo.so.5` (ncurses 5).
|
# which link it against `libtinfo.so.5` (ncurses 5).
|
||||||
# Other bindists are linked `libtinfo.so.6` (ncurses 6).
|
# Other bindists are linked `libtinfo.so.6` (ncurses 6).
|
||||||
|
@ -59,6 +60,7 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
{ nixPackage = gmp; fileToCheckFor = null; }
|
||||||
{ nixPackage = ncurses6; fileToCheckFor = "libtinfo.so.6"; }
|
{ nixPackage = ncurses6; fileToCheckFor = "libtinfo.so.6"; }
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
@ -69,6 +71,7 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
{ nixPackage = gmp; fileToCheckFor = null; }
|
||||||
{ nixPackage = ncurses6; fileToCheckFor = "libtinfo.so.6"; }
|
{ nixPackage = ncurses6; fileToCheckFor = "libtinfo.so.6"; }
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
@ -79,6 +82,7 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
{ nixPackage = gmp; fileToCheckFor = null; }
|
||||||
{ nixPackage = ncurses6; fileToCheckFor = "libtinfo.so.6"; }
|
{ nixPackage = ncurses6; fileToCheckFor = "libtinfo.so.6"; }
|
||||||
{ nixPackage = numactl; fileToCheckFor = null; }
|
{ nixPackage = numactl; fileToCheckFor = null; }
|
||||||
];
|
];
|
||||||
|
@ -90,6 +94,7 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = null; # we don't have a library check for darwin yet
|
exePathForLibraryCheck = null; # we don't have a library check for darwin yet
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
{ nixPackage = gmp; fileToCheckFor = null; }
|
||||||
{ nixPackage = ncurses6; fileToCheckFor = null; }
|
{ nixPackage = ncurses6; fileToCheckFor = null; }
|
||||||
{ nixPackage = libiconv; fileToCheckFor = null; }
|
{ nixPackage = libiconv; fileToCheckFor = null; }
|
||||||
];
|
];
|
||||||
|
@ -104,6 +109,7 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = "bin/ghc";
|
exePathForLibraryCheck = "bin/ghc";
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
{ nixPackage = gmp; fileToCheckFor = null; }
|
||||||
# In contrast to glibc builds, the musl-bindist uses `libncursesw.so.*`
|
# In contrast to glibc builds, the musl-bindist uses `libncursesw.so.*`
|
||||||
# instead of `libtinfo.so.*.`
|
# instead of `libtinfo.so.*.`
|
||||||
{ nixPackage = ncurses6; fileToCheckFor = "libncursesw.so.6"; }
|
{ nixPackage = ncurses6; fileToCheckFor = "libncursesw.so.6"; }
|
||||||
|
@ -121,11 +127,8 @@ let
|
||||||
|
|
||||||
libPath =
|
libPath =
|
||||||
lib.makeLibraryPath (
|
lib.makeLibraryPath (
|
||||||
[
|
|
||||||
gmp
|
|
||||||
]
|
|
||||||
# Add arch-specific libraries.
|
# Add arch-specific libraries.
|
||||||
++ map ({ nixPackage, ... }: nixPackage) binDistUsed.archSpecificLibraries
|
map ({ nixPackage, ... }: nixPackage) binDistUsed.archSpecificLibraries
|
||||||
);
|
);
|
||||||
|
|
||||||
libEnvVar = lib.optionalString stdenv.hostPlatform.isDarwin "DY"
|
libEnvVar = lib.optionalString stdenv.hostPlatform.isDarwin "DY"
|
||||||
|
@ -140,6 +143,12 @@ stdenv.mkDerivation rec {
|
||||||
|
|
||||||
src = fetchurl binDistUsed.src;
|
src = fetchurl binDistUsed.src;
|
||||||
|
|
||||||
|
# Note that for GHC 8.10 versions <= 8.10.5, the GHC HQ musl bindist
|
||||||
|
# has a `gmp` dependency:
|
||||||
|
# https://gitlab.haskell.org/ghc/ghc/-/commit/8306501020cd66f683ad9c215fa8e16c2d62357d
|
||||||
|
# Related nixpkgs issues:
|
||||||
|
# * https://github.com/NixOS/nixpkgs/pull/130441#issuecomment-922452843
|
||||||
|
|
||||||
nativeBuildInputs = [ perl ];
|
nativeBuildInputs = [ perl ];
|
||||||
propagatedBuildInputs =
|
propagatedBuildInputs =
|
||||||
lib.optionals useLLVM [ llvmPackages.llvm ]
|
lib.optionals useLLVM [ llvmPackages.llvm ]
|
||||||
|
@ -147,6 +156,9 @@ stdenv.mkDerivation rec {
|
||||||
# libgmp is (see not [musl bindists have no .buildinfo]), we need
|
# libgmp is (see not [musl bindists have no .buildinfo]), we need
|
||||||
# to propagate `gmp`, otherwise programs built by this ghc will
|
# to propagate `gmp`, otherwise programs built by this ghc will
|
||||||
# fail linking with `cannot find -lgmp` errors.
|
# fail linking with `cannot find -lgmp` errors.
|
||||||
|
# Concrete cases are listed in:
|
||||||
|
# https://github.com/NixOS/nixpkgs/pull/130441#issuecomment-922459988
|
||||||
|
#
|
||||||
# Also, as of writing, the release pages of musl bindists claim
|
# Also, as of writing, the release pages of musl bindists claim
|
||||||
# that they use `integer-simple` and do not require `gmp`; however
|
# that they use `integer-simple` and do not require `gmp`; however
|
||||||
# that is incorrect, so `gmp` is required until a release has been
|
# that is incorrect, so `gmp` is required until a release has been
|
||||||
|
@ -154,6 +166,12 @@ stdenv.mkDerivation rec {
|
||||||
# (Note that for packaging the `-binary` compiler, nixpkgs does not care
|
# (Note that for packaging the `-binary` compiler, nixpkgs does not care
|
||||||
# about whether or not `gmp` is used; this comment is just here to explain
|
# about whether or not `gmp` is used; this comment is just here to explain
|
||||||
# why the `gmp` dependency exists despite what the release page says.)
|
# why the `gmp` dependency exists despite what the release page says.)
|
||||||
|
#
|
||||||
|
# For GHC >= 8.10.6, `gmp` was switched out for `integer-simple`
|
||||||
|
# (https://gitlab.haskell.org/ghc/ghc/-/commit/8306501020cd66f683ad9c215fa8e16c2d62357d),
|
||||||
|
# fixing the above-mentioned release issue,
|
||||||
|
# and for GHC >= 9.* it is not clear as of writing whether that switch
|
||||||
|
# will be made there too.
|
||||||
++ lib.optionals stdenv.hostPlatform.isMusl [ gmp ]; # musl bindist needs this
|
++ lib.optionals stdenv.hostPlatform.isMusl [ gmp ]; # musl bindist needs this
|
||||||
|
|
||||||
# Set LD_LIBRARY_PATH or equivalent so that the programs running as part
|
# Set LD_LIBRARY_PATH or equivalent so that the programs running as part
|
||||||
|
|
|
@ -47,6 +47,7 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
{ nixPackage = gmp; fileToCheckFor = null; }
|
||||||
# The i686-linux bindist provided by GHC HQ is currently built on Debian 9,
|
# The i686-linux bindist provided by GHC HQ is currently built on Debian 9,
|
||||||
# which link it against `libtinfo.so.5` (ncurses 5).
|
# which link it against `libtinfo.so.5` (ncurses 5).
|
||||||
# Other bindists are linked `libtinfo.so.6` (ncurses 6).
|
# Other bindists are linked `libtinfo.so.6` (ncurses 6).
|
||||||
|
@ -60,6 +61,7 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
{ nixPackage = gmp; fileToCheckFor = null; }
|
||||||
{ nixPackage = ncurses6; fileToCheckFor = "libtinfo.so.6"; }
|
{ nixPackage = ncurses6; fileToCheckFor = "libtinfo.so.6"; }
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
@ -70,6 +72,7 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
{ nixPackage = gmp; fileToCheckFor = null; }
|
||||||
{ nixPackage = ncurses6; fileToCheckFor = "libtinfo.so.6"; }
|
{ nixPackage = ncurses6; fileToCheckFor = "libtinfo.so.6"; }
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
@ -80,6 +83,7 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
exePathForLibraryCheck = "ghc/stage2/build/tmp/ghc-stage2";
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
{ nixPackage = gmp; fileToCheckFor = null; }
|
||||||
{ nixPackage = ncurses6; fileToCheckFor = "libtinfo.so.6"; }
|
{ nixPackage = ncurses6; fileToCheckFor = "libtinfo.so.6"; }
|
||||||
{ nixPackage = numactl; fileToCheckFor = null; }
|
{ nixPackage = numactl; fileToCheckFor = null; }
|
||||||
];
|
];
|
||||||
|
@ -91,6 +95,7 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = null; # we don't have a library check for darwin yet
|
exePathForLibraryCheck = null; # we don't have a library check for darwin yet
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
{ nixPackage = gmp; fileToCheckFor = null; }
|
||||||
{ nixPackage = ncurses6; fileToCheckFor = null; }
|
{ nixPackage = ncurses6; fileToCheckFor = null; }
|
||||||
{ nixPackage = libiconv; fileToCheckFor = null; }
|
{ nixPackage = libiconv; fileToCheckFor = null; }
|
||||||
];
|
];
|
||||||
|
@ -102,6 +107,7 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = null; # we don't have a library check for darwin yet
|
exePathForLibraryCheck = null; # we don't have a library check for darwin yet
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
{ nixPackage = gmp; fileToCheckFor = null; }
|
||||||
{ nixPackage = ncurses6; fileToCheckFor = null; }
|
{ nixPackage = ncurses6; fileToCheckFor = null; }
|
||||||
{ nixPackage = libiconv; fileToCheckFor = null; }
|
{ nixPackage = libiconv; fileToCheckFor = null; }
|
||||||
];
|
];
|
||||||
|
@ -116,6 +122,8 @@ let
|
||||||
};
|
};
|
||||||
exePathForLibraryCheck = "bin/ghc";
|
exePathForLibraryCheck = "bin/ghc";
|
||||||
archSpecificLibraries = [
|
archSpecificLibraries = [
|
||||||
|
# No `gmp` here, since this is an `integer-simple` bindist.
|
||||||
|
|
||||||
# In contrast to glibc builds, the musl-bindist uses `libncursesw.so.*`
|
# In contrast to glibc builds, the musl-bindist uses `libncursesw.so.*`
|
||||||
# instead of `libtinfo.so.*.`
|
# instead of `libtinfo.so.*.`
|
||||||
{ nixPackage = ncurses6; fileToCheckFor = "libncursesw.so.6"; }
|
{ nixPackage = ncurses6; fileToCheckFor = "libncursesw.so.6"; }
|
||||||
|
@ -133,11 +141,8 @@ let
|
||||||
|
|
||||||
libPath =
|
libPath =
|
||||||
lib.makeLibraryPath (
|
lib.makeLibraryPath (
|
||||||
[
|
|
||||||
gmp
|
|
||||||
]
|
|
||||||
# Add arch-specific libraries.
|
# Add arch-specific libraries.
|
||||||
++ map ({ nixPackage, ... }: nixPackage) binDistUsed.archSpecificLibraries
|
map ({ nixPackage, ... }: nixPackage) binDistUsed.archSpecificLibraries
|
||||||
);
|
);
|
||||||
|
|
||||||
libEnvVar = lib.optionalString stdenv.hostPlatform.isDarwin "DY"
|
libEnvVar = lib.optionalString stdenv.hostPlatform.isDarwin "DY"
|
||||||
|
@ -152,21 +157,21 @@ stdenv.mkDerivation rec {
|
||||||
|
|
||||||
src = fetchurl binDistUsed.src;
|
src = fetchurl binDistUsed.src;
|
||||||
|
|
||||||
|
# Note that for GHC 8.10 versions >= 8.10.6, the GHC HQ musl bindist
|
||||||
|
# uses `integer-simple` and has no `gmp` dependency:
|
||||||
|
# https://gitlab.haskell.org/ghc/ghc/-/commit/8306501020cd66f683ad9c215fa8e16c2d62357d
|
||||||
|
# Related nixpkgs issues:
|
||||||
|
# * https://github.com/NixOS/nixpkgs/pull/130441#issuecomment-922452843
|
||||||
|
# TODO: When this file is copied to `ghc-9.*-binary.nix`, determine whether
|
||||||
|
# the GHC 9 branch also switched from `gmp` to `integer-simple` via the
|
||||||
|
# currently-open issue:
|
||||||
|
# https://gitlab.haskell.org/ghc/ghc/-/issues/20059
|
||||||
|
# and update this comment accordingly.
|
||||||
|
|
||||||
nativeBuildInputs = [ perl ];
|
nativeBuildInputs = [ perl ];
|
||||||
propagatedBuildInputs =
|
propagatedBuildInputs =
|
||||||
lib.optionals useLLVM [ llvmPackages.llvm ]
|
lib.optionals useLLVM [ llvmPackages.llvm ]
|
||||||
# Because musl bindists currently provide no way to tell where
|
;
|
||||||
# libgmp is (see not [musl bindists have no .buildinfo]), we need
|
|
||||||
# to propagate `gmp`, otherwise programs built by this ghc will
|
|
||||||
# fail linking with `cannot find -lgmp` errors.
|
|
||||||
# Also, as of writing, the release pages of musl bindists claim
|
|
||||||
# that they use `integer-simple` and do not require `gmp`; however
|
|
||||||
# that is incorrect, so `gmp` is required until a release has been
|
|
||||||
# made that includes https://gitlab.haskell.org/ghc/ghc/-/issues/20059.
|
|
||||||
# (Note that for packaging the `-binary` compiler, nixpkgs does not care
|
|
||||||
# about whether or not `gmp` is used; this comment is just here to explain
|
|
||||||
# why the `gmp` dependency exists despite what the release page says.)
|
|
||||||
++ lib.optionals stdenv.hostPlatform.isMusl [ gmp ]; # musl bindist needs this
|
|
||||||
|
|
||||||
# Set LD_LIBRARY_PATH or equivalent so that the programs running as part
|
# Set LD_LIBRARY_PATH or equivalent so that the programs running as part
|
||||||
# of the bindist installer can find the libraries they expect.
|
# of the bindist installer can find the libraries they expect.
|
||||||
|
@ -227,9 +232,9 @@ stdenv.mkDerivation rec {
|
||||||
patchShebangs ghc-${version}/configure
|
patchShebangs ghc-${version}/configure
|
||||||
'' +
|
'' +
|
||||||
# We have to patch the GMP paths for the integer-gmp package.
|
# We have to patch the GMP paths for the integer-gmp package.
|
||||||
# Note [musl bindists have no .buildinfo]
|
# Note that musl bindists do not contain them,
|
||||||
# Note that musl bindists do not contain them; unclear if that's intended;
|
|
||||||
# see: https://gitlab.haskell.org/ghc/ghc/-/issues/20073#note_363231
|
# see: https://gitlab.haskell.org/ghc/ghc/-/issues/20073#note_363231
|
||||||
|
# However, musl bindists >= 8.10.6 use `integer-simple`, not `gmp`.
|
||||||
''
|
''
|
||||||
find . -name integer-gmp.buildinfo \
|
find . -name integer-gmp.buildinfo \
|
||||||
-exec sed -i "s@extra-lib-dirs: @extra-lib-dirs: ${gmp.out}/lib@" {} \;
|
-exec sed -i "s@extra-lib-dirs: @extra-lib-dirs: ${gmp.out}/lib@" {} \;
|
||||||
|
|
Loading…
Reference in a new issue