nixpkgs/pkgs/development/haskell-modules/configuration-ghcjs.nix
Charles Strahan 516057ffa9 ghcjs: replace integer-simple with integer-gmp
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.
2016-02-18 18:32:58 -05:00

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;
});
}