ghcWithPackages: handle the boot dylib links separately for GHC 9.6

From GHC 9.6 on, the boot libraries (dependencies of the ghc library) are
present in a separate directory after the installation, and thus the
wrapper environment provided by ghcWithPackages needs to handle the links
to the boot dynamic libraries separately than other ordinary ones.
This commit is contained in:
Ian-Woo Kim 2023-04-03 14:33:07 -07:00
parent 91c754d381
commit b1600b5672

View file

@ -55,6 +55,12 @@ let
libDir = if isHaLVM then "$out/lib/HaLVM-${ghc.version}"
else "$out/lib/${ghc.targetPrefix}${ghc.haskellCompilerName}"
+ lib.optionalString (ghc ? hadrian) "/lib";
# Boot libraries for GHC are present in a separate directory.
bootLibDir = let arch = if stdenv.targetPlatform.isAarch64
then "aarch64"
else "x86_64";
platform = if stdenv.targetPlatform.isDarwin then "osx" else "linux";
in "${ghc}/lib/${ghc.haskellCompilerName}/lib/${arch}-${platform}-${ghc.haskellCompilerName}";
docDir = "$out/share/doc/ghc/html";
packageCfgDir = "${libDir}/package.conf.d";
paths = lib.concatLists (
@ -131,11 +137,17 @@ symlinkJoin {
'' + (lib.optionalString (stdenv.targetPlatform.isDarwin && !isGhcjs && !stdenv.targetPlatform.isiOS) ''
# Work around a linker limit in macOS Sierra (see generic-builder.nix):
local packageConfDir="${packageCfgDir}";
local dynamicLinksDir="$out/lib/links"
local dynamicLinksDir="$out/lib/links";
mkdir -p $dynamicLinksDir
# Clean up the old links that may have been (transitively) included by
# symlinkJoin:
rm -f $dynamicLinksDir/*
# Boot libraries are located differently than other libraries since GHC 9.6, so handle them separately.
if [[ -x "${bootLibDir}" ]]; then
ln -s "${bootLibDir}"/*.dylib $dynamicLinksDir
fi
for d in $(grep -Poz "dynamic-library-dirs:\s*\K .+\n" $packageConfDir/*|awk '{print $2}'|sort -u); do
ln -s $d/*.dylib $dynamicLinksDir
done