2018-05-12 06:06:47 +01:00
|
|
|
{ stdenv
|
|
|
|
, callPackage
|
|
|
|
, fetchgit
|
|
|
|
, ghcjsSrcJson ? null
|
|
|
|
, ghcjsSrc ? fetchgit (builtins.fromJSON (builtins.readFile ghcjsSrcJson))
|
|
|
|
, bootPkgs
|
|
|
|
, alex
|
|
|
|
, happy
|
|
|
|
, stage0
|
|
|
|
, haskellLib
|
|
|
|
, cabal-install
|
|
|
|
, nodejs
|
|
|
|
, makeWrapper
|
|
|
|
, xorg
|
|
|
|
, gmp
|
2018-05-17 10:26:48 +01:00
|
|
|
, pkgconfig
|
2018-05-12 06:06:47 +01:00
|
|
|
, lib
|
|
|
|
, ghcjsDepOverrides ? (_:_:{})
|
|
|
|
}:
|
|
|
|
|
|
|
|
let
|
|
|
|
passthru = {
|
|
|
|
configuredSrc = callPackage ./configured-ghcjs-src.nix {
|
|
|
|
inherit ghcjsSrc alex happy;
|
|
|
|
inherit (bootPkgs) ghc;
|
|
|
|
};
|
|
|
|
genStage0 = callPackage ./mk-stage0.nix { inherit (passthru) configuredSrc; };
|
|
|
|
bootPkgs = bootPkgs.extend (lib.foldr lib.composeExtensions (_:_:{}) [
|
|
|
|
(self: _: import stage0 {
|
|
|
|
inherit (passthru) configuredSrc;
|
|
|
|
inherit (self) callPackage;
|
|
|
|
})
|
|
|
|
|
|
|
|
(callPackage ./common-overrides.nix { inherit haskellLib alex happy; })
|
|
|
|
ghcjsDepOverrides
|
|
|
|
]);
|
|
|
|
|
|
|
|
targetPrefix = "";
|
2018-05-16 08:10:52 +01:00
|
|
|
inherit (bootGhcjs) version;
|
2018-05-12 06:06:47 +01:00
|
|
|
isGhcjs = true;
|
|
|
|
|
|
|
|
# Relics of the old GHCJS build system
|
|
|
|
stage1Packages = [];
|
|
|
|
mkStage2 = _: {};
|
|
|
|
};
|
|
|
|
|
2018-05-16 08:10:52 +01:00
|
|
|
bootGhcjs = haskellLib.justStaticExecutables passthru.bootPkgs.ghcjs;
|
2018-05-12 06:06:47 +01:00
|
|
|
libexec =
|
2018-05-16 08:10:52 +01:00
|
|
|
if builtins.compareVersions bootGhcjs.version "8.3" <= 0
|
|
|
|
then "${bootGhcjs}/bin"
|
|
|
|
else "${bootGhcjs}/libexec/${stdenv.system}-${passthru.bootPkgs.ghc.name}/${bootGhcjs.name}";
|
2018-05-12 06:06:47 +01:00
|
|
|
|
|
|
|
in stdenv.mkDerivation {
|
|
|
|
name = "ghcjs";
|
|
|
|
src = passthru.configuredSrc;
|
2018-05-16 08:10:52 +01:00
|
|
|
nativeBuildInputs = [
|
|
|
|
bootGhcjs
|
|
|
|
passthru.bootPkgs.ghc
|
|
|
|
cabal-install
|
|
|
|
nodejs
|
|
|
|
makeWrapper
|
|
|
|
xorg.lndir
|
|
|
|
gmp
|
2018-05-17 10:26:48 +01:00
|
|
|
pkgconfig
|
2018-05-16 08:10:52 +01:00
|
|
|
];
|
2018-05-12 06:06:47 +01:00
|
|
|
phases = ["unpackPhase" "buildPhase"];
|
|
|
|
buildPhase = ''
|
|
|
|
export HOME=$TMP
|
|
|
|
cd lib/boot
|
|
|
|
|
|
|
|
mkdir -p $out/bin
|
|
|
|
mkdir -p $out/libexec
|
|
|
|
lndir ${libexec} $out/bin
|
|
|
|
|
2018-05-16 08:10:52 +01:00
|
|
|
wrapProgram $out/bin/ghcjs --add-flags "-B$out/libexec -dcore-lint"
|
2018-05-12 06:06:47 +01:00
|
|
|
wrapProgram $out/bin/haddock-ghcjs --add-flags "-B$out/libexec"
|
|
|
|
wrapProgram $out/bin/ghcjs-pkg --add-flags "--global-package-db=$out/libexec/package.conf.d"
|
|
|
|
|
|
|
|
env PATH=$out/bin:$PATH $out/bin/ghcjs-boot -j $NIX_BUILD_CORES --with-ghcjs-bin $out/bin
|
|
|
|
'';
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
inherit passthru;
|
|
|
|
|
|
|
|
meta.platforms = passthru.bootPkgs.ghc.meta.platforms;
|
|
|
|
}
|
|
|
|
|