66 lines
2.1 KiB
Nix
66 lines
2.1 KiB
Nix
# Derive a fully static Haskell package based on musl instead of glibc.
|
|
{ nixpkgs, system, compiler, patches, allOverlays }:
|
|
|
|
name: src:
|
|
let
|
|
# The nh2/static-haskell-nix project does all the hard work for us.
|
|
static-haskell-nix =
|
|
let
|
|
rev = "bd66b86b72cff4479e1c76d5916a853c38d09837";
|
|
in
|
|
builtins.fetchTarball {
|
|
url = "https://github.com/nh2/static-haskell-nix/archive/${rev}.tar.gz";
|
|
sha256 = "0rnsxaw7v27znsg9lgqk1i4007ydqrc8gfgimrmhf24lv6galbjh";
|
|
};
|
|
|
|
patched-static-haskell-nix =
|
|
patches.applyPatches "patched-static-haskell-nix"
|
|
static-haskell-nix
|
|
[
|
|
patches.static-haskell-nix-ncurses
|
|
patches.static-haskell-nix-ghc-bignum
|
|
patches.static-haskell-nix-openssl
|
|
];
|
|
|
|
extraOverrides =
|
|
final: prev:
|
|
rec {
|
|
# We need to add our package needs to the package set that we pass to
|
|
# static-haskell-nix. Using callCabal2nix on the haskellPackages that
|
|
# it returns would result in a dynamic build based on musl, and not the
|
|
# fully static build that we want.
|
|
"${name}" = prev.callCabal2nix name src { };
|
|
};
|
|
|
|
overlays =
|
|
[
|
|
allOverlays.postgresql-future
|
|
(allOverlays.postgresql-default { inherit patches; })
|
|
(allOverlays.haskell-packages { inherit compiler extraOverrides; })
|
|
# Disable failing tests for postgresql on musl that should have no impact
|
|
# on the libpq that we need (collate.icu.utf8 and foreign regression
|
|
# tests)
|
|
(self: super:
|
|
{ postgresql = super.postgresql.overrideAttrs (_: { doCheck = false; }); }
|
|
)
|
|
];
|
|
|
|
# Apply our overlay to nixpkgs.
|
|
normalPkgs =
|
|
import nixpkgs { inherit overlays system; };
|
|
|
|
defaultCabalPackageVersionComingWithGhc =
|
|
{
|
|
ghc924 = "Cabal_3_6_3_0";
|
|
}."${compiler}";
|
|
|
|
# The static-haskell-nix 'survey' derives a full static set of Haskell
|
|
# packages, applying fixes where necessary.
|
|
survey =
|
|
import "${patched-static-haskell-nix}/survey" { inherit normalPkgs compiler defaultCabalPackageVersionComingWithGhc; };
|
|
in
|
|
{
|
|
inherit survey;
|
|
package = survey.haskellPackages."${name}";
|
|
}
|