1
0
Fork 1
mirror of https://github.com/NixOS/nixpkgs.git synced 2024-09-11 15:08:33 +01:00
nixpkgs/pkgs/development/haskell-modules/configuration-ghcjs.nix
Charles Strahan e6e9970891 ghcjs: don't propagate Cabal to all packages
Previously, we were compiling Setup.hs with ghcjs (instead of  ghc),
and that required that Cabal be available, otherwise the Setup.hs would
fail to compile.

Now that we are compiling Setup.hs with ghc, it's no longer necessary
to add Cabal as a dependency to all ghcjs packages.
2016-02-18 15:00:34 -05:00

138 lines
4.3 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;
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;
});
}