diff --git a/pkgs/development/haskell-modules/generate-hackage-package-set.nix b/pkgs/development/haskell-modules/generate-hackage-package-set.nix new file mode 100644 index 00000000000..b96494513ee --- /dev/null +++ b/pkgs/development/haskell-modules/generate-hackage-package-set.nix @@ -0,0 +1,90 @@ +{ pkgs ? (import {}).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/" + ''; + +}