Path: blob/develop/nix-utils/hackage/default.nix
1 views
{ reflex-platform ? import ../.. { hideDeprecated = true; }
, pkgs ? reflex-platform.nixpkgs
, haskellPackages ? reflex-platform.ghc
}:
rec {
attrsToList = s: map (name: { inherit name; value = builtins.getAttr name s; }) (builtins.attrNames s);
mapSet = f: s: builtins.listToAttrs (map ({name, value}: {
inherit name;
value = f value;
}) (attrsToList s));
mkSdist = pkg: pkg.override (oldArgs: {
mkDerivation = drv: oldArgs.mkDerivation (drv // {
pname = drv.pname + "-sdist";
postConfigure = ''
./Setup sdist
mkdir "$out"
mv dist/*.tar.gz "$out/${drv.pname}-${drv.version}.tar.gz"
exit 0
'';
doHaddock = false;
});
});
sdists = mapSet mkSdist haskellPackages;
mkHackageDocs = pkg: pkg.override (oldArgs: {
mkDerivation = drv: oldArgs.mkDerivation (drv // {
postConfigure = ''
./Setup haddock --hoogle --hyperlink-source --html --for-hackage --haddock-option=--built-in-themes
cd dist/doc/html
mkdir "$out"
tar cz --format=ustar -f "$out/${drv.pname}-${drv.version}-docs.tar.gz" "${drv.pname}-${drv.version}-docs"
exit 0
'';
doHaddock = false;
});
});
hackageDocs = mapSet mkHackageDocs haskellPackages;
mkReleaseCandidate = pkg: pkgs.stdenv.mkDerivation (rec {
name = pkg.name + "-rc";
sdist = mkSdist pkg + "/${pkg.pname}-${pkg.version}.tar.gz";
docs = mkHackageDocs pkg + "/${pkg.pname}-${pkg.version}-docs.tar.gz";
builder = builtins.toFile "builder.sh" ''
source $stdenv/setup
mkdir "$out"
echo -n "${pkg.pname}-${pkg.version}" >"$out/pkgname"
ln -s "$sdist" "$docs" "$out"
'';
# 'checked' isn't used, but it is here so that the build will fail
# if tests fail
checked = pkgs.haskell.lib.overrideCabal pkg (drv: {
doCheck = true;
src = sdist;
});
});
releaseCandidates = mapSet mkReleaseCandidate haskellPackages;
}