Files
postgrest/nix/static/default.nix
T
Remo RechkemmerandGitHub 7c0fbf9b3f Add static build with Nix (fixes #1295) (#1494)
* Include modifications to nixpkgs and static-haskell-nix as patches.

* use the patched static-haskell-nix version

* Add cachix postgrest
2020-05-12 13:31:37 -05:00

90 lines
3.2 KiB
Nix

# Turn a Haskell source package (given its name and source) into a derivation
# for a fully static executable.
{ nixpkgs, compiler, name, src, patches }:
let
# The nh2/static-haskell-nix project does all the hard work for us for
# building static Haskell executables. We apply a patch for PostgREST below
# until the respective pull request is merged. See:
# https://github.com/nh2/static-haskell-nix/pull/91
# statix-haskell-nix builds everything based on Musl instead of glibc, so
# there will be a _lot_ to rebuild if you don't use a binary cache.
static-haskell-nix =
let
rev = "749707fc90b781c3e653e67917a7d571fe82ae7b";
in
builtins.fetchTarball {
url = "https://github.com/nh2/static-haskell-nix/archive/${rev}.tar.gz";
sha256 = "155spda2lww378bhx68w6dxwqd5y6s9kin3qbgl2m23r3vmk3m3w";
};
patched-static-haskell-nix =
patches.applyPatches "patched-static-haskell-nix" static-haskell-nix
[
patches.static-haskell-nix-postgrest-libpq
];
haskellPackagesOverrides =
lib: final: prev:
{
# Add our source package.
"${name}" = prev.callCabal2nix name src {};
# cabal2nix depends on Cabal 3.0.*, while our pinned version of Nixpkgs
# only provides 2.4 or 3.2. So we pinned 3.0.0.0 in ./Cabal.nix
cabal2nix =
prev.cabal2nix.overrideScope
(self: super: { Cabal = self.callPackage ./Cabal.nix {}; });
# Pinned version of protolude.
protolude =
prev.callPackage ../overlays/haskell-packages/protolude.nix {};
# The tests for the packages below took a long time on static
# builds, so we disable them for now - to be investigated.
happy = lib.dontCheck prev.happy;
};
# This overlay adds our source package and applies adjustments to the
# derivation of other packages that it depends on. The overlay applies to
# Haskell packages for the given compiler, which we will later use
# with the static-haskell-nix survey.
overlay =
self: super:
# Override the set of Haskell packages at
# pkgs.haskell.packages."${compiler}".
{
haskell = super.haskell // {
packages = super.haskell.packages // {
"${compiler}" =
super.haskell.packages."${compiler}".override
{ overrides = haskellPackagesOverrides self.haskell.lib; };
};
};
};
patchedNixpkgs =
patches.applyPatches "patched-nixpkgs" nixpkgs
[
patches.nixpkgs-revert-ghc-bootstrap
];
# Apply our overlay to the given pkgs.
normalPkgs =
(import patchedNixpkgs {}).appendOverlays [ overlay ];
# Each version of GHC needs a specific version of Cabal.
defaultCabalPackageVersionComingWithGhc =
{
ghc883 = "Cabal_3_2_0_0";
}."${compiler}";
# Let the static-haskell-nix project do the hard work of deriving a set of
# fully static Haskell executables, including one for the our source package
# that we added through the overlay.
survey =
import "${patched-static-haskell-nix}/survey"
{ inherit normalPkgs compiler defaultCabalPackageVersionComingWithGhc; };
in
# Return the fully static derivation of our source package.
survey.haskellPackages."${name}"