about summary refs log tree commit diff
path: root/pkgs/development/tools/haskell
diff options
context:
space:
mode:
authorsternenseemann <sternenseemann@systemli.org>2022-02-08 18:53:57 +0100
committersterni <sternenseemann@systemli.org>2022-02-14 18:36:53 +0100
commitdcb9ff59ca1bf844ed28ba6d232e6d6163aec9a5 (patch)
tree9d010ebcb7ea072328c1824d4ad0cf662a36b92b /pkgs/development/tools/haskell
parent55f5fe385ca518a2cff3995a056235a945d0b799 (diff)
downloadnixlib-dcb9ff59ca1bf844ed28ba6d232e6d6163aec9a5.tar
nixlib-dcb9ff59ca1bf844ed28ba6d232e6d6163aec9a5.tar.gz
nixlib-dcb9ff59ca1bf844ed28ba6d232e6d6163aec9a5.tar.bz2
nixlib-dcb9ff59ca1bf844ed28ba6d232e6d6163aec9a5.tar.lz
nixlib-dcb9ff59ca1bf844ed28ba6d232e6d6163aec9a5.tar.xz
nixlib-dcb9ff59ca1bf844ed28ba6d232e6d6163aec9a5.tar.zst
nixlib-dcb9ff59ca1bf844ed28ba6d232e6d6163aec9a5.zip
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.
Diffstat (limited to 'pkgs/development/tools/haskell')
-rw-r--r--pkgs/development/tools/haskell/haskell-language-server/withWrapper.nix29
1 files 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 [