From dcb9ff59ca1bf844ed28ba6d232e6d6163aec9a5 Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Tue, 8 Feb 2022 18:53:57 +0100 Subject: [PATCH] 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. --- .../haskell-language-server/withWrapper.nix | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix b/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix index f8f1f85b2703..b55fd6aa6ba7 100644 --- a/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix +++ b/pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix @@ -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 [