haskell: use GHCJS to build Setup.hs for GHCJS packages
Closes https://github.com/NixOS/nixpkgs/pull/23614.
This commit is contained in:
parent
80a52e22b3
commit
2553ceb982
@ -327,6 +327,7 @@
|
|||||||
version = "1.22.8.0";
|
version = "1.22.8.0";
|
||||||
src = "${ghcjsBoot}/boot/cabal/Cabal";
|
src = "${ghcjsBoot}/boot/cabal/Cabal";
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
|
hyperlinkSource = false;
|
||||||
libraryHaskellDepends = [
|
libraryHaskellDepends = [
|
||||||
array base binary bytestring containers deepseq directory filepath
|
array base binary bytestring containers deepseq directory filepath
|
||||||
pretty process time unix
|
pretty process time unix
|
||||||
|
@ -53,6 +53,14 @@ self: super:
|
|||||||
terminfo = self.terminfo_0_4_0_2;
|
terminfo = self.terminfo_0_4_0_2;
|
||||||
xhtml = self.xhtml_3000_2_1;
|
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:
|
||||||
|
if args.pname == "Cabal" then super.mkDerivation args else super.mkDerivation (args //
|
||||||
|
{ setupHaskellDepends = (args.setupHaskellDepends or []) ++ [ self.Cabal ]; });
|
||||||
|
|
||||||
## OTHER PACKAGES
|
## OTHER PACKAGES
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ let
|
|||||||
mkDerivationImpl = pkgs.callPackage ./generic-builder.nix {
|
mkDerivationImpl = pkgs.callPackage ./generic-builder.nix {
|
||||||
inherit stdenv;
|
inherit stdenv;
|
||||||
inherit (pkgs) fetchurl pkgconfig glibcLocales coreutils gnugrep gnused;
|
inherit (pkgs) fetchurl pkgconfig glibcLocales coreutils gnugrep gnused;
|
||||||
|
nodejs = pkgs.nodejs-slim;
|
||||||
jailbreak-cabal = if (self.ghc.cross or null) != null
|
jailbreak-cabal = if (self.ghc.cross or null) != null
|
||||||
then self.ghc.bootPkgs.jailbreak-cabal
|
then self.ghc.bootPkgs.jailbreak-cabal
|
||||||
else self.jailbreak-cabal;
|
else self.jailbreak-cabal;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{ stdenv, fetchurl, ghc, pkgconfig, glibcLocales, coreutils, gnugrep, gnused
|
{ stdenv, fetchurl, ghc, pkgconfig, glibcLocales, coreutils, gnugrep, gnused
|
||||||
, jailbreak-cabal, hscolour, cpphs
|
, jailbreak-cabal, hscolour, cpphs, nodejs
|
||||||
}: let isCross = (ghc.cross or null) != null; in
|
}: let isCross = (ghc.cross or null) != null; in
|
||||||
|
|
||||||
{ pname
|
{ pname
|
||||||
@ -133,6 +133,7 @@ let
|
|||||||
|
|
||||||
setupCompileFlags = [
|
setupCompileFlags = [
|
||||||
(optionalString (!coreSetup) "-${packageDbFlag}=$packageConfDir")
|
(optionalString (!coreSetup) "-${packageDbFlag}=$packageConfDir")
|
||||||
|
(optionalString isGhcjs "-build-runner")
|
||||||
(optionalString (isGhcjs || isHaLVM || versionOlder "7.8" ghc.version) "-j$NIX_BUILD_CORES")
|
(optionalString (isGhcjs || isHaLVM || versionOlder "7.8" ghc.version) "-j$NIX_BUILD_CORES")
|
||||||
# https://github.com/haskell/cabal/issues/2398
|
# https://github.com/haskell/cabal/issues/2398
|
||||||
(optionalString (versionOlder "7.10" ghc.version && !isHaLVM) "-threaded")
|
(optionalString (versionOlder "7.10" ghc.version && !isHaLVM) "-threaded")
|
||||||
@ -157,7 +158,7 @@ let
|
|||||||
|
|
||||||
ghcEnv = ghc.withPackages (p: haskellBuildInputs);
|
ghcEnv = ghc.withPackages (p: haskellBuildInputs);
|
||||||
|
|
||||||
setupBuilder = if isCross || isGhcjs then "${nativeGhc}/bin/ghc" else ghcCommand;
|
setupBuilder = if isCross then "${nativeGhc}/bin/ghc" else ghcCommand;
|
||||||
setupCommand = "./Setup";
|
setupCommand = "./Setup";
|
||||||
ghcCommand' = if isGhcjs then "ghcjs" else "ghc";
|
ghcCommand' = if isGhcjs then "ghcjs" else "ghc";
|
||||||
crossPrefix = if (ghc.cross or null) != null then "${ghc.cross.config}-" else "";
|
crossPrefix = if (ghc.cross or null) != null then "${ghc.cross.config}-" else "";
|
||||||
@ -294,6 +295,14 @@ stdenv.mkDerivation ({
|
|||||||
local pkgId=$( ${gnused}/bin/sed -n -e 's|^id: ||p' $packageConfFile )
|
local pkgId=$( ${gnused}/bin/sed -n -e 's|^id: ||p' $packageConfFile )
|
||||||
mv $packageConfFile $packageConfDir/$pkgId.conf
|
mv $packageConfFile $packageConfDir/$pkgId.conf
|
||||||
''}
|
''}
|
||||||
|
${optionalString isGhcjs ''
|
||||||
|
for exeDir in "$out/bin/"*.jsexe; do
|
||||||
|
exe="''${exeDir%.jsexe}"
|
||||||
|
printf '%s\n' '#!${nodejs}/bin/node' > "$exe"
|
||||||
|
cat "$exeDir/all.js" >> "$exe"
|
||||||
|
chmod +x "$exe"
|
||||||
|
done
|
||||||
|
''}
|
||||||
${optionalString doCoverage "mkdir -p $out/share && cp -r dist/hpc $out/share"}
|
${optionalString doCoverage "mkdir -p $out/share && cp -r dist/hpc $out/share"}
|
||||||
${optionalString (enableSharedExecutables && isExecutable && !isGhcjs && stdenv.isDarwin && stdenv.lib.versionOlder ghc.version "7.10") ''
|
${optionalString (enableSharedExecutables && isExecutable && !isGhcjs && stdenv.isDarwin && stdenv.lib.versionOlder ghc.version "7.10") ''
|
||||||
for exe in "$out/bin/"* ; do
|
for exe in "$out/bin/"* ; do
|
||||||
|
@ -38,6 +38,9 @@ rec {
|
|||||||
addPkgconfigDepend = drv: x: addPkgconfigDepends drv [x];
|
addPkgconfigDepend = drv: x: addPkgconfigDepends drv [x];
|
||||||
addPkgconfigDepends = drv: xs: overrideCabal drv (drv: { pkgconfigDepends = (drv.pkgconfigDepends or []) ++ xs; });
|
addPkgconfigDepends = drv: xs: overrideCabal drv (drv: { pkgconfigDepends = (drv.pkgconfigDepends or []) ++ xs; });
|
||||||
|
|
||||||
|
addSetupDepend = drv: x: addSetupDepends drv [x];
|
||||||
|
addSetupDepends = drv: xs: overrideCabal drv (drv: { setupHaskellDepends = (drv.setupHaskellDepends or []) ++ xs; });
|
||||||
|
|
||||||
enableCabalFlag = drv: x: appendConfigureFlag (removeConfigureFlag drv "-f-${x}") "-f${x}";
|
enableCabalFlag = drv: x: appendConfigureFlag (removeConfigureFlag drv "-f-${x}") "-f${x}";
|
||||||
disableCabalFlag = drv: x: appendConfigureFlag (removeConfigureFlag drv "-f${x}") "-f-${x}";
|
disableCabalFlag = drv: x: appendConfigureFlag (removeConfigureFlag drv "-f${x}") "-f-${x}";
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user