516057ffa9
GHCJS uses integer-gmp, but cabal2nix generates a dependency list that includes integer-simple instead. This tweaks the stage2 generator to replace any instance of integer-simple with integer-gmp. Things currently still work without this change (assuming integer-simple is defined as null), as ghcjs includes integer-gmp in its stage1 packages - so it's always available. However, this change makes things a bit more explicit, rather than leaving things to chance. If at any point the stage1 packages are also split up into separate derivations, the integer-gmp package will need to be passed along to the packages that depend on it. This change should prevent some confusion going forward.
141 lines
4.5 KiB
Nix
141 lines
4.5 KiB
Nix
{ pkgs }:
|
|
|
|
let
|
|
removeLibraryHaskellDepends = pnames: depends:
|
|
builtins.filter (e: !(builtins.elem (e.pname or "") pnames)) depends;
|
|
in
|
|
|
|
with import ./lib.nix { inherit pkgs; };
|
|
|
|
self: super:
|
|
# The stage 2 packages. Regenerate with ./ghcjs/gen-stage2.rb
|
|
let stage2 =
|
|
(import ./ghcjs/stage2.nix {
|
|
inherit (self) callPackage;
|
|
inherit (self.ghc) ghcjsBoot;
|
|
}); in stage2 // {
|
|
|
|
old-time = overrideCabal stage2.old-time (drv: {
|
|
postPatch = ''
|
|
${pkgs.autoconf}/bin/autoreconf --install --force --verbose
|
|
'';
|
|
});
|
|
|
|
# LLVM is not supported on this GHC; use the latest one.
|
|
inherit (pkgs) llvmPackages;
|
|
|
|
inherit (pkgs.haskell.packages.ghc7103) jailbreak-cabal alex happy gtk2hs-buildtools rehoo hoogle;
|
|
|
|
# This is the list of the Stage 1 packages that are built into a booted ghcjs installation
|
|
# It can be generated with the command:
|
|
# nix-shell -p haskell.packages.ghcjs.ghc --command "ghcjs-pkg list | sed -n 's/^ \(.*\)-\([0-9.]*\)$/\1_\2/ p' | sed 's/\./_/g' | sed 's/-\(.\)/\U\1/' | sed 's/^\([^_]*\)\(.*\)$/\1 = null;/'"
|
|
array = null;
|
|
base = null;
|
|
binary = null;
|
|
rts = null;
|
|
bytestring = null;
|
|
containers = null;
|
|
deepseq = null;
|
|
directory = null;
|
|
filepath = null;
|
|
ghc-prim = null;
|
|
ghcjs-prim = null;
|
|
integer-gmp = null;
|
|
old-locale = null;
|
|
pretty = null;
|
|
primitive = null;
|
|
process = null;
|
|
template-haskell = null;
|
|
time = null;
|
|
transformers = null;
|
|
unix = null;
|
|
|
|
# Don't set integer-simple to null!
|
|
# GHCJS uses integer-gmp, so any package expression that depends on
|
|
# integer-simple is wrong.
|
|
#integer-simple = null;
|
|
|
|
# These packages are core libraries in GHC 7.10.x, but not here.
|
|
bin-package-db = null;
|
|
haskeline = self.haskeline_0_7_2_1;
|
|
hoopl = self.hoopl_3_10_2_1;
|
|
hpc = self.hpc_0_6_0_2;
|
|
terminfo = self.terminfo_0_4_0_1;
|
|
xhtml = self.xhtml_3000_2_1;
|
|
|
|
pqueue = overrideCabal super.pqueue (drv: {
|
|
postPatch = ''
|
|
sed -i -e '12s|null|Data.PQueue.Internals.null|' Data/PQueue/Internals.hs
|
|
sed -i -e '64s|null|Data.PQueue.Internals.null|' Data/PQueue/Internals.hs
|
|
sed -i -e '32s|null|Data.PQueue.Internals.null|' Data/PQueue/Min.hs
|
|
sed -i -e '32s|null|Data.PQueue.Max.null|' Data/PQueue/Max.hs
|
|
sed -i -e '42s|null|Data.PQueue.Prio.Internals.null|' Data/PQueue/Prio/Min.hs
|
|
sed -i -e '42s|null|Data.PQueue.Prio.Max.null|' Data/PQueue/Prio/Max.hs
|
|
'';
|
|
});
|
|
|
|
transformers-compat = overrideCabal super.transformers-compat (drv: {
|
|
configureFlags = [];
|
|
});
|
|
|
|
profunctors = overrideCabal super.profunctors (drv: {
|
|
preConfigure = ''
|
|
sed -i 's/^{-# ANN .* #-}//' src/Data/Profunctor/Unsafe.hs
|
|
'';
|
|
});
|
|
|
|
ghcjs-ffiqq = self.callPackage
|
|
({ mkDerivation, base, template-haskell, ghcjs-base, split, containers, text, ghc-prim
|
|
}:
|
|
mkDerivation {
|
|
pname = "ghcjs-ffiqq";
|
|
version = "0.1.0.0";
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "ghcjs";
|
|
repo = "ghcjs-ffiqq";
|
|
rev = "da31b18582542fcfceade5ef6b2aca66662b9e20";
|
|
sha256 = "1mkp8p9hispyzvkb5v607ihjp912jfip61id8d42i19k554ssp8y";
|
|
};
|
|
libraryHaskellDepends = [
|
|
base template-haskell ghcjs-base split containers text ghc-prim
|
|
];
|
|
description = "FFI QuasiQuoter for GHCJS";
|
|
license = stdenv.lib.licenses.mit;
|
|
}) {};
|
|
|
|
ghcjs-dom = overrideCabal super.ghcjs-dom (drv: {
|
|
libraryHaskellDepends = [ self.ghcjs-base ] ++
|
|
removeLibraryHaskellDepends [
|
|
"glib" "gtk" "gtk3" "webkitgtk" "webkitgtk3"
|
|
] drv.libraryHaskellDepends;
|
|
});
|
|
|
|
ghc-paths = overrideCabal super.ghc-paths (drv: {
|
|
patches = [ ./patches/ghc-paths-nix-ghcjs.patch ];
|
|
});
|
|
|
|
# reflex 0.3, made compatible with the newest GHCJS.
|
|
reflex = overrideCabal super.reflex (drv: {
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "ryantrinkle";
|
|
repo = "reflex";
|
|
rev = "cc62c11a6cde31412582758c236919d4bb766ada";
|
|
sha256 = "1j4vw0636bkl46lj8ry16i04vgpivjc6bs3ls54ppp1wfp63q7w4";
|
|
};
|
|
});
|
|
|
|
# reflex-dom 0.2, made compatible with the newest GHCJS.
|
|
reflex-dom = overrideCabal super.reflex-dom (drv: {
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "ryantrinkle";
|
|
repo = "reflex-dom";
|
|
rev = "639d9ca13c2def075e83344c9afca6eafaf24219";
|
|
sha256 = "0166ihbh3dbfjiym9w561svpgvj0x4i8i8ws70xaafi0cmpsxrar";
|
|
};
|
|
libraryHaskellDepends =
|
|
removeLibraryHaskellDepends [
|
|
"glib" "gtk3" "webkitgtk3" "webkitgtk3-javascriptcore" "raw-strings-qq" "unix"
|
|
] drv.libraryHaskellDepends;
|
|
});
|
|
|
|
}
|