haskell-language-server: make linking configureable in wrapper

haskell-language-server will now default to building a shared
executable, as upstream does, complete with a huge closure. By passing
{ dynamic = false; } via override, it is still possible to build a
"statically linked" variant of HLS, as it used to be.

Note: Before this change HLS would fail to compile on aarch64.
This commit is contained in:
sternenseemann
2022-02-14 18:36:53 +01:00
committed by sterni
parent 55f5fe385c
commit dcb9ff59ca
@@ -2,6 +2,7 @@
, stdenv
, supportedGhcVersions ? [ "884" "8107" "902" ]
++ lib.optionals (!stdenv.hostPlatform.isAarch64) [ "921" ]
, dynamic ? true
, haskellPackages
, haskell
}:
@@ -13,19 +14,25 @@
# for example. Read more about this in the haskell-language-server section of the nixpkgs manual.
#
let
inherit (lib) concatStringsSep concatMapStringsSep take splitString;
inherit (lib) concatStringsSep concatMapStringsSep take splitString pipe optionals;
inherit (haskell.lib.compose) justStaticExecutables overrideCabal enableCabalFlag disableCabalFlag;
getPackages = version: haskell.packages."ghc${version}";
tunedHls = hsPkgs:
haskell.lib.compose.justStaticExecutables
(haskell.lib.compose.overrideCabal (old: {
postInstall = ''
remove-references-to -t ${hsPkgs.ghc} $out/bin/haskell-language-server
remove-references-to -t ${hsPkgs.shake.data} $out/bin/haskell-language-server
remove-references-to -t ${hsPkgs.js-jquery.data} $out/bin/haskell-language-server
remove-references-to -t ${hsPkgs.js-dgtable.data} $out/bin/haskell-language-server
remove-references-to -t ${hsPkgs.js-flot.data} $out/bin/haskell-language-server
'';
}) hsPkgs.haskell-language-server);
lib.pipe hsPkgs.haskell-language-server ([
(haskell.lib.compose.overrideCabal (old: {
enableSharedExecutables = dynamic;
postInstall = ''
remove-references-to -t ${hsPkgs.ghc} $out/bin/haskell-language-server
remove-references-to -t ${hsPkgs.shake.data} $out/bin/haskell-language-server
remove-references-to -t ${hsPkgs.js-jquery.data} $out/bin/haskell-language-server
remove-references-to -t ${hsPkgs.js-dgtable.data} $out/bin/haskell-language-server
remove-references-to -t ${hsPkgs.js-flot.data} $out/bin/haskell-language-server
'';
}))
((if dynamic then enableCabalFlag else disableCabalFlag) "dynamic")
] ++ optionals (!dynamic) [
justStaticExecutables
]);
targets = version:
let packages = getPackages version;
in [