mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-01 23:22:37 +00:00
b9c7d291bc
GHCJS is effectively a backend for GHC, so all the GHC version specific package set overrides should in general apply to the GHCJS package sets, too.
191 lines
6.4 KiB
Nix
191 lines
6.4 KiB
Nix
# GHCJS package fixes
|
||
#
|
||
# Please insert new packages *alphabetically*
|
||
# in the OTHER PACKAGES section.
|
||
{ pkgs }:
|
||
|
||
let
|
||
removeLibraryHaskellDepends = pnames: depends:
|
||
builtins.filter (e: !(builtins.elem (e.pname or "") pnames)) depends;
|
||
in
|
||
|
||
with import ./lib.nix { inherit pkgs; };
|
||
|
||
self: super:
|
||
|
||
## GENERAL SETUP BASE PACKAGES
|
||
|
||
let # The stage 1 packages
|
||
stage1 = pkgs.lib.genAttrs super.ghc.stage1Packages (pkg: null);
|
||
# The stage 2 packages. Regenerate with ../compilers/ghcjs/gen-stage2.rb
|
||
stage2 = super.ghc.mkStage2 {
|
||
inherit (self) callPackage;
|
||
};
|
||
in stage1 // stage2 // {
|
||
|
||
old-time = overrideCabal stage2.old-time (drv: {
|
||
postPatch = ''
|
||
${pkgs.autoconf}/bin/autoreconf --install --force --verbose
|
||
'';
|
||
buildTools = pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.darwin.libiconv;
|
||
});
|
||
|
||
network = addBuildTools super.network (pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.darwin.libiconv);
|
||
zlib = addBuildTools super.zlib (pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.darwin.libiconv);
|
||
unix-compat = addBuildTools super.unix-compat (pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.darwin.libiconv);
|
||
|
||
# LLVM is not supported on this GHC; use the latest one.
|
||
inherit (pkgs) llvmPackages;
|
||
|
||
inherit (self.ghc.bootPkgs)
|
||
jailbreak-cabal alex happy gtk2hs-buildtools rehoo hoogle;
|
||
|
||
# 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_3_1;
|
||
hoopl = self.hoopl_3_10_2_1;
|
||
hpc = self.hpc_0_6_0_2;
|
||
terminfo = self.terminfo_0_4_0_2;
|
||
xhtml = self.xhtml_3000_2_1;
|
||
|
||
|
||
## OTHER PACKAGES
|
||
|
||
cereal = addBuildDepend super.cereal [ self.fail ];
|
||
|
||
entropy = overrideCabal super.entropy (old: {
|
||
postPatch = old.postPatch or "" + ''
|
||
# cabal doesn’t find ghc in this script, since it’s in the bootPkgs
|
||
sed -e '/Simple.Program/a import Distribution.Simple.Program.Types' \
|
||
-e 's|mConf.*=.*$|mConf = Just $ simpleConfiguredProgram "ghc" (FoundOnSystem "${self.ghc.bootPkgs.ghc}/bin/ghc")|g' -i Setup.hs
|
||
'';
|
||
});
|
||
|
||
# https://github.com/kazu-yamamoto/logger/issues/97
|
||
fast-logger = overrideCabal super.fast-logger (old: {
|
||
postPatch = old.postPatch or "" + ''
|
||
# remove the Safe extensions, since ghcjs-boot directory
|
||
# doesn’t provide Trustworthy
|
||
sed -ie '/LANGUAGE Safe/d' System/Log/FastLogger/*.hs
|
||
cat System/Log/FastLogger/Date.hs
|
||
'';
|
||
});
|
||
|
||
# experimental
|
||
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 = "b52338c2dcd3b0707bc8aff2e171411614d4aedb";
|
||
sha256 = "08zxfm1i6zb7n8vbz3dywdy67vkixfyw48580rwfp48rl1s2z1c7";
|
||
};
|
||
libraryHaskellDepends = [
|
||
base template-haskell ghcjs-base split containers text ghc-prim
|
||
];
|
||
description = "FFI QuasiQuoter for GHCJS";
|
||
license = pkgs.stdenv.lib.licenses.mit;
|
||
}) {};
|
||
# experimental
|
||
ghcjs-vdom = self.callPackage
|
||
({ mkDerivation, base, ghc-prim, ghcjs-ffiqq, ghcjs-base, ghcjs-prim
|
||
, containers, split, template-haskell
|
||
}:
|
||
mkDerivation rec {
|
||
pname = "ghcjs-vdom";
|
||
version = "0.2.0.0";
|
||
src = pkgs.fetchFromGitHub {
|
||
owner = "ghcjs";
|
||
repo = pname;
|
||
rev = "1c1175ba22eca6d7efa96f42a72290ade193c148";
|
||
sha256 = "0c6l1dk2anvz94yy5qblrfh2iv495rjq4qmhlycc24dvd02f7n9m";
|
||
};
|
||
libraryHaskellDepends = [
|
||
base ghc-prim ghcjs-ffiqq ghcjs-base ghcjs-prim containers split
|
||
template-haskell
|
||
];
|
||
license = pkgs.stdenv.lib.licenses.mit;
|
||
description = "bindings for https://github.com/Matt-Esch/virtual-dom";
|
||
inherit (src) homepage;
|
||
}) {};
|
||
|
||
ghcjs-dom = overrideCabal super.ghcjs-dom (drv: {
|
||
libraryHaskellDepends = with self; [
|
||
ghcjs-base ghcjs-dom-jsffi text transformers
|
||
];
|
||
configureFlags = [ "-fjsffi" "-f-webkit" ];
|
||
});
|
||
|
||
ghcjs-dom-jsffi = overrideCabal super.ghcjs-dom-jsffi (drv: {
|
||
libraryHaskellDepends = [ self.ghcjs-base self.text ];
|
||
isLibrary = true;
|
||
});
|
||
|
||
ghc-paths = overrideCabal super.ghc-paths (drv: {
|
||
patches = [ ./patches/ghc-paths-nix-ghcjs.patch ];
|
||
});
|
||
|
||
http2 = addBuildDepends super.http2 [ self.aeson self.aeson-pretty self.hex self.unordered-containers self.vector self.word8 ];
|
||
# ghcjsBoot uses async 2.0.1.6, protolude wants 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
|
||
'';
|
||
});
|
||
|
||
profunctors = overrideCabal super.profunctors (drv: {
|
||
preConfigure = ''
|
||
sed -i 's/^{-# ANN .* #-}//' src/Data/Profunctor/Unsafe.hs
|
||
'';
|
||
});
|
||
|
||
protolude = doJailbreak super.protolude;
|
||
|
||
# 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;
|
||
});
|
||
|
||
transformers-compat = overrideCabal super.transformers-compat (drv: {
|
||
configureFlags = [];
|
||
});
|
||
|
||
# triggers an internal pattern match failure in haddock
|
||
# https://github.com/haskell/haddock/issues/553
|
||
wai = dontHaddock super.wai;
|
||
}
|