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:
Niklas Hambüchen 2021-09-19 12:16:59 +00:00 committed by sterni
parent de37be3299
commit 14d020bf06
2 changed files with 45 additions and 22 deletions

View file

@ -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

View file

@ -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@" {} \;