74f5fe5068
- The haskell lib is very close to not relying on Nixpkgs. I think this is good---simpler to think about and matches Nixpkgs's lib. - The haskell lib is only imported once - stdenv is exposed more shallowly so it can be overriden more easily. I'll eventually use this on Darwin to avoid the Sierra shared library problems (unless changes are to be made system-wide). Closes https://github.com/NixOS/nixpkgs/pull/27840.
214 lines
7.6 KiB
Nix
214 lines
7.6 KiB
Nix
# GHCJS package fixes
|
||
#
|
||
# Please insert new packages *alphabetically*
|
||
# in the OTHER PACKAGES section.
|
||
{ pkgs, haskellLib }:
|
||
|
||
let
|
||
removeLibraryHaskellDepends = pnames: depends:
|
||
builtins.filter (e: !(builtins.elem (e.pname or "") pnames)) depends;
|
||
in
|
||
|
||
with haskellLib;
|
||
|
||
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;
|
||
|
||
# Cabal isn't part of the stage1 packages which form the default package-db
|
||
# that GHCJS provides.
|
||
# Almost all packages require Cabal to build their Setup.hs,
|
||
# but usually they don't declare it explicitly as they don't need to for normal GHC.
|
||
# To account for that we add Cabal by default.
|
||
mkDerivation = args: super.mkDerivation (args // {
|
||
setupHaskellDepends = (args.setupHaskellDepends or []) ++
|
||
(if args.pname == "Cabal" then [ ]
|
||
# Break the dependency cycle between Cabal and hscolour
|
||
else if args.pname == "hscolour" then [ (dontHyperlinkSource self.Cabal) ]
|
||
else [ self.Cabal ]);
|
||
});
|
||
|
||
## 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: {
|
||
setupHaskellDepends = (drv.setupHaskellDepends or []) ++ [ self.Cabal_1_24_2_0 ];
|
||
libraryHaskellDepends = (drv.libraryHaskellDepends or []) ++ [ 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.*
|
||
|
||
# These are the correct dependencies specified when calling `cabal2nix --compiler ghcjs`
|
||
# By default, the `miso` derivation present in hackage-packages.nix
|
||
# does not contain dependencies suitable for ghcjs
|
||
miso = overrideCabal super.miso (drv: {
|
||
libraryHaskellDepends = with self; [
|
||
BoundedChan bytestring containers ghcjs-base aeson base
|
||
http-api-data http-types network-uri scientific servant text
|
||
transformers unordered-containers vector
|
||
];
|
||
});
|
||
|
||
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;
|
||
}
|