Haskell: experiment with importing a generated hackage-packages.nix file

This commit is contained in:
Peter Simons 2015-11-23 16:59:44 +01:00
parent 64f9b40d28
commit d5ef0d9751

View File

@ -0,0 +1,90 @@
{ pkgs ? (import <nixpkgs> {}).pkgs
, lib ? pkgs.lib
, stdenv ? pkgs.stdenv
}:
let
nixpkgs = pkgs.fetchFromGitHub {
owner = "peti";
repo = "nixpkgs";
rev = "b558bfa7d1e820904ff9d7bbc1f02ad51f690e34";
sha256 = "1n1hicnn5mybd9cm7s2my5ayphsy0hhjv6bc4xcb1v9rpcm8pm16";
};
cabal2nix = pkgs.fetchFromGitHub {
owner = "NixOS";
repo = "cabal2nix";
rev = "116145753cbf05572c127e00d8616385f8faa378";
sha256 = "16zvxs2hjv7wvl1hmwq3v272rc9r6ind2vlcvdx29f3risxpjzkp";
};
hackage = pkgs.fetchFromGitHub {
owner = "commercialhaskell";
repo = "all-cabal-hashes";
rev = "85f28bd0d000706c29f78275100dddd7c1c6c2f6";
sha256 = "0w41lzkjvndcpscn5lyb8vvxpvq0kbg5ggdsk31167psa1g32hrz";
};
lts-haskell = pkgs.fetchFromGitHub {
owner = "fpco";
repo = "lts-haskell";
rev = "89c3b45370ec1742d9e029ff4e5271316031b84b";
sha256 = "0w3cz19g0h8dfxjpwf28rzj0xska11cbn5in5835ss2ypmbr2lwr";
};
stackage-nightly = pkgs.fetchFromGitHub {
owner = "fpco";
repo = "stackage-nightly";
rev = "98e337bf6bf8efb772babe252e3f0027d8b6f859";
sha256 = "1dmc8y72np2np3zrvdl61x539yw3qi4fpyyswib29j0h90pwj93p";
};
haskellPackages = pkgs.haskell.packages.bootstrap.override {
overrides = self: super: {
distribution-nixpkgs = super.distribution-nixpkgs.overrideDerivation (old: { src = cabal2nix; });
cabal2nix = super.cabal2nix.overrideDerivation (old: { src = cabal2nix; });
hackage2nix = super.hackage2nix.overrideDerivation (old: { src = cabal2nix; });
};
};
in
stdenv.mkDerivation {
name = "haskell-update-0";
buildInputs = [ haskellPackages.hackage2nix pkgs.nix ];
src = [ nixpkgs ];
buildPhase = ''
# Processing Hackage requires UTF-8 support.
export LANG="en_US.UTF-8"
${lib.optionalString stdenv.isLinux ''export LOCALE_ARCHIVE="${pkgs.glibcLocales}/lib/locale/locale-archive"''}
# hackage2nix runs nix-env to determine the set of visible package names.
export NIX_STORE_DIR="$TMPDIR/nix/store" NIX_STATE_DIR="$TMPDIR/nix/var"
# Build the preferred-versions file.
for i in "${hackage}/"*/preferred-versions; do
cat >>$TMPDIR/preferred-versions "$i"
echo >>$TMPDIR/preferred-versions
done
# Generate the updated Haskell package set and LTS configuration files.
hackage2nix +RTS -M6G -RTS \
--nixpkgs="$PWD" --preferred-versions="$TMPDIR/preferred-versions" \
--hackage="${hackage}" --lts-haskell="${lts-haskell}" \
--stackage-nightly="${stackage-nightly}"
'';
doCheck = true;
checkPhase = ''
# Verify that all Haskell packages still evaluate properly.
nix-env -qaP -f "$PWD" -A haskellPackages >/dev/null
'';
installPhase = ''
mkdir -p "$out"
cp pkgs/development/haskell-modules/hackage-packages.nix "$out/"
cp pkgs/development/haskell-modules/configuration-lts-*.nix "$out/"
'';
}