Merge pull request #13131 from Ericson2314/haskell-cross-rebase

Generalize some GHCJS stuff for other cross compilers
This commit is contained in:
Charles Strahan 2016-02-21 13:19:03 -05:00
commit 9482be59e7
9 changed files with 72 additions and 104 deletions

View File

@ -1,8 +1,9 @@
{ stdenv, fetchurl, fetchpatch, ghc, perl, gmp, ncurses, libiconv, binutils, coreutils { stdenv, fetchurl, fetchpatch, bootPkgs, perl, gmp, ncurses, libiconv, binutils, coreutils
, libxml2, libxslt, docbook_xsl, docbook_xml_dtd_45, docbook_xml_dtd_42, hscolour , libxml2, libxslt, docbook_xsl, docbook_xml_dtd_45, docbook_xml_dtd_42, hscolour
}: }:
let let
inherit (bootPkgs) ghc;
buildMK = '' buildMK = ''
libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-gmp-libraries="${gmp}/lib" libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-gmp-libraries="${gmp}/lib"
@ -60,6 +61,10 @@ stdenv.mkDerivation rec {
done done
''; '';
passthru = {
inherit bootPkgs;
};
meta = { meta = {
homepage = "http://haskell.org/ghc"; homepage = "http://haskell.org/ghc";
description = "The Glasgow Haskell Compiler"; description = "The Glasgow Haskell Compiler";

View File

@ -1,8 +1,9 @@
{ stdenv, fetchurl, fetchpatch, ghc, perl, gmp, ncurses, libiconv, binutils, coreutils { stdenv, fetchurl, fetchpatch, bootPkgs, perl, gmp, ncurses, libiconv, binutils, coreutils
, libxml2, libxslt, docbook_xsl, docbook_xml_dtd_45, docbook_xml_dtd_42, hscolour , libxml2, libxslt, docbook_xsl, docbook_xml_dtd_45, docbook_xml_dtd_42, hscolour
}: }:
let let
inherit (bootPkgs) ghc;
docFixes = fetchurl { docFixes = fetchurl {
url = "https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3a.patch"; url = "https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3a.patch";
@ -61,6 +62,10 @@ stdenv.mkDerivation rec {
done done
''; '';
passthru = {
inherit bootPkgs;
};
meta = { meta = {
homepage = "http://haskell.org/ghc"; homepage = "http://haskell.org/ghc";
description = "The Glasgow Haskell Compiler"; description = "The Glasgow Haskell Compiler";

View File

@ -1,7 +1,11 @@
{ stdenv, fetchurl, fetchpatch, ghc, perl, gmp, ncurses, libiconv, binutils, coreutils { stdenv, fetchurl, fetchpatch, bootPkgs, perl, gmp, ncurses, libiconv, binutils, coreutils
, hscolour , hscolour
}: }:
let
inherit (bootPkgs) ghc;
in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "8.0.0.20160204"; version = "8.0.0.20160204";
name = "ghc-${version}"; name = "ghc-${version}";
@ -51,6 +55,10 @@ stdenv.mkDerivation rec {
done done
''; '';
passthru = {
inherit bootPkgs;
};
meta = { meta = {
homepage = "http://haskell.org/ghc"; homepage = "http://haskell.org/ghc";
description = "The Glasgow Haskell Compiler"; description = "The Glasgow Haskell Compiler";

View File

@ -1,8 +1,11 @@
{ stdenv, fetchgit, ghc, perl, gmp, ncurses, libiconv, binutils, coreutils { stdenv, fetchgit, bootPkgs, perl, gmp, ncurses, libiconv, binutils, coreutils
, autoconf, automake, happy, alex , autoconf, automake, happy, alex
}: }:
stdenv.mkDerivation rec { let
inherit (bootPkgs) ghc;
in stdenv.mkDerivation rec {
version = "7.11.20151216"; version = "7.11.20151216";
name = "ghc-${version}"; name = "ghc-${version}";
rev = "28638dfe79e915f33d75a1b22c5adce9e2b62b97"; rev = "28638dfe79e915f33d75a1b22c5adce9e2b62b97";
@ -62,6 +65,10 @@ stdenv.mkDerivation rec {
done done
''; '';
passthru = {
inherit bootPkgs;
};
meta = { meta = {
homepage = "http://haskell.org/ghc"; homepage = "http://haskell.org/ghc";
description = "The Glasgow Haskell Compiler"; description = "The Glasgow Haskell Compiler";

View File

@ -1,6 +1,7 @@
{ stdenv, fetchgit, ghc, perl, gmp, ncurses, libiconv, autoconf, automake, happy, alex }: { stdenv, fetchgit, bootPkgs, perl, gmp, ncurses, libiconv, autoconf, automake, happy, alex }:
let let
inherit (bootPkgs) ghc;
buildMK = '' buildMK = ''
libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-gmp-libraries="${gmp}/lib" libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-gmp-libraries="${gmp}/lib"
@ -66,6 +67,10 @@ stdenv.mkDerivation rec {
# that in turn causes GHCi to abort # that in turn causes GHCi to abort
stripDebugFlags = [ "-S" ] ++ stdenv.lib.optional (!stdenv.isDarwin) "--keep-file-symbols"; stripDebugFlags = [ "-S" ] ++ stdenv.lib.optional (!stdenv.isDarwin) "--keep-file-symbols";
passthru = {
inherit bootPkgs;
};
meta = { meta = {
homepage = "http://haskell.org/ghc"; homepage = "http://haskell.org/ghc";
description = "The dependently-typed 'nokinds' branch of the Glasgow Haskell Compiler by Richard Eisenberg"; description = "The dependently-typed 'nokinds' branch of the Glasgow Haskell Compiler by Richard Eisenberg";

View File

@ -20,7 +20,7 @@
, ghcjs-prim , ghcjs-prim
, regex-posix , regex-posix
, ghc, gmp , bootPkgs, gmp
, jailbreak-cabal , jailbreak-cabal
, runCommand , runCommand
@ -41,8 +41,11 @@
, ghcjsBoot ? import ./ghcjs-boot.nix { inherit fetchgit runCommand; } , ghcjsBoot ? import ./ghcjs-boot.nix { inherit fetchgit runCommand; }
, shims ? import ./shims.nix { inherit fetchFromGitHub; } , shims ? import ./shims.nix { inherit fetchFromGitHub; }
}: }:
let version = "0.2.0"; in let
mkDerivation (rec { inherit (bootPkgs) ghc;
version = "0.2.0";
in mkDerivation (rec {
pname = "ghcjs"; pname = "ghcjs";
inherit version; inherit version;
src = fetchFromGitHub { src = fetchFromGitHub {
@ -114,8 +117,9 @@ mkDerivation (rec {
--with-gmp-libraries ${gmp}/lib --with-gmp-libraries ${gmp}/lib
''; '';
passthru = { passthru = {
inherit bootPkgs;
isCross = true;
isGhcjs = true; isGhcjs = true;
nativeGhc = ghc;
inherit nodejs ghcjsBoot; inherit nodejs ghcjsBoot;
}; };

View File

@ -1,77 +0,0 @@
{ stdenv, ghc, makeWrapper, coreutils, writeScript }:
let
ghcjs = ghc;
packageDBFlag = "-package-db";
GHCGetPackages = writeScript "ghc-get-packages.sh" ''
#! ${stdenv.shell}
# Usage:
# $1: version of GHC
# $2: invocation path of GHC
# $3: prefix
version="$1"
if test -z "$3"; then
prefix="${packageDBFlag} "
else
prefix="$3"
fi
PATH="$PATH:$2"
IFS=":"
for p in $PATH; do
for i in "$p/../share/ghcjs/$system-${ghcjs.version}-${ghcjs.ghc.version}"{,/lib,/ghcjs}"/package.conf.d" "$p/../lib/ghcjs-${ghc.version}_ghc-${ghc.ghc.version}/package.conf.d" ; do
# output takes place here
test -f $i/package.cache && echo -n " $prefix$i"
done
done
'';
GHCPackages = writeScript "ghc-packages.sh" ''
#! ${stdenv.shell} -e
declare -A GHC_PACKAGES_HASH # using bash4 hashs to get uniq paths
for arg in $(${GHCGetPackages} ${ghcjs.version} "$(dirname $0)"); do # Why is ghc.version passed in from here instead of captured in the other script directly?
case "$arg" in
${packageDBFlag}) ;;
*)
CANONICALIZED="$(${coreutils}/bin/readlink -f -- "$arg")"
GHC_PACKAGES_HASH["$CANONICALIZED"]= ;;
esac
done
for path in ''${!GHC_PACKAGES_HASH[@]}; do
echo -n "$path:"
done
'';
in
stdenv.mkDerivation {
name = "ghcjs-ghc${ghcjs.ghc.version}-${ghcjs.version}-wrapper";
buildInputs = [makeWrapper];
propagatedBuildInputs = [ghcjs];
unpackPhase = "true";
installPhase = ''
runHook preInstall
mkdir -p $out/bin
for prg in ghcjs ; do
makeWrapper $ghc/bin/$prg $out/bin/$prg --add-flags "\$(${GHCGetPackages} ${ghcjs.version} \"\$(dirname \$0)\")"
done
for prg in ghcjs-pkg ; do
makeWrapper $ghc/bin/$prg $out/bin/$prg --add-flags "\$(${GHCGetPackages} ${ghcjs.version} \"\$(dirname \$0)\" -${packageDBFlag}=)"
done
mkdir -p $out/nix-support
ln -s $out/nix-support/propagated-build-inputs $out/nix-support/propagated-user-env-packages
mkdir -p $out/share/doc
ln -s $ghc/lib $out/lib
ln -s $ghc/share/doc/ghc $out/share/doc/ghc-${ghcjs.version}
runHook postInstall
'';
ghc = ghcjs;
inherit GHCGetPackages GHCPackages;
inherit (ghcjs) meta version;
}

View File

@ -56,8 +56,17 @@ let
inherit (stdenv.lib) optional optionals optionalString versionOlder inherit (stdenv.lib) optional optionals optionalString versionOlder
concatStringsSep enableFeature optionalAttrs toUpper; concatStringsSep enableFeature optionalAttrs toUpper;
isCross = ghc.isCross or false;
isGhcjs = ghc.isGhcjs or false; isGhcjs = ghc.isGhcjs or false;
nativeGhc = if isGhcjs then ghc.nativeGhc else ghc; packageDbFlag = if isGhcjs || versionOlder "7.6" ghc.version
then "package-db"
else "package-conf";
nativeGhc = if isCross then ghc.bootPkgs.ghc else ghc;
nativeIsCross = nativeGhc.isCross or false;
nativePackageDbFlag = if versionOlder "7.6" nativeGhc.version
then "package-db"
else "package-conf";
newCabalFileUrl = "http://hackage.haskell.org/package/${pname}-${version}/revision/${revision}.cabal"; newCabalFileUrl = "http://hackage.haskell.org/package/${pname}-${version}/revision/${revision}.cabal";
newCabalFile = fetchurl { newCabalFile = fetchurl {
@ -71,9 +80,6 @@ let
main = defaultMain main = defaultMain
''; '';
ghc76xOrLater = isGhcjs || stdenv.lib.versionOlder "7.6" ghc.version;
packageDbFlag = if ghc76xOrLater then "package-db" else "package-conf";
hasActiveLibrary = isLibrary && (enableStaticLibraries || enableSharedLibraries || enableLibraryProfiling); hasActiveLibrary = isLibrary && (enableStaticLibraries || enableSharedLibraries || enableLibraryProfiling);
# We cannot enable -j<n> parallelism for libraries because GHC is far more # We cannot enable -j<n> parallelism for libraries because GHC is far more
@ -97,7 +103,7 @@ let
(optionalString (isGhcjs || versionOlder "7.4" ghc.version) (enableFeature enableSharedExecutables "executable-dynamic")) (optionalString (isGhcjs || versionOlder "7.4" ghc.version) (enableFeature enableSharedExecutables "executable-dynamic"))
(optionalString (isGhcjs || versionOlder "7" ghc.version) (enableFeature doCheck "tests")) (optionalString (isGhcjs || versionOlder "7" ghc.version) (enableFeature doCheck "tests"))
] ++ optionals isGhcjs [ ] ++ optionals isGhcjs [
"--with-hsc2hs=${ghc.nativeGhc}/bin/hsc2hs" "--with-hsc2hs=${nativeGhc}/bin/hsc2hs"
"--ghcjs" "--ghcjs"
]; ];
@ -125,7 +131,7 @@ let
ghcEnv = ghc.withPackages (p: haskellBuildInputs); ghcEnv = ghc.withPackages (p: haskellBuildInputs);
setupBuilder = if 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";
ghcCommandCaps = toUpper ghcCommand; ghcCommandCaps = toUpper ghcCommand;

View File

@ -34,24 +34,29 @@ rec {
ghc784 = callPackage ../development/compilers/ghc/7.8.4.nix { ghc784 = callPackage ../development/compilers/ghc/7.8.4.nix {
ghc = compiler.ghc742Binary; ghc = compiler.ghc742Binary;
}; };
ghc7102 = callPackage ../development/compilers/ghc/7.10.2.nix { ghc7102 = callPackage ../development/compilers/ghc/7.10.2.nix rec {
ghc = compiler.ghc784; inherit (packages.ghc784) hscolour; bootPkgs = packages.ghc784;
inherit (bootPkgs) hscolour;
}; };
ghc7103 = callPackage ../development/compilers/ghc/7.10.3.nix { ghc7103 = callPackage ../development/compilers/ghc/7.10.3.nix rec {
ghc = compiler.ghc784; inherit (packages.ghc784) hscolour; bootPkgs = packages.ghc784;
inherit (bootPkgs) hscolour;
}; };
ghc801 = callPackage ../development/compilers/ghc/8.0.1.nix { ghc801 = callPackage ../development/compilers/ghc/8.0.1.nix rec {
ghc = compiler.ghc7103; inherit (packages.ghc7103) hscolour; bootPkgs = packages.ghc7103;
inherit (bootPkgs) hscolour;
}; };
ghcHEAD = callPackage ../development/compilers/ghc/head.nix { ghcHEAD = callPackage ../development/compilers/ghc/head.nix rec {
inherit (packages.ghc784) ghc alex happy; bootPkgs = packages.ghc784;
inherit (bootPkgs) alex happy;
}; };
ghcNokinds = callPackage ../development/compilers/ghc/nokinds.nix { ghcNokinds = callPackage ../development/compilers/ghc/nokinds.nix rec {
inherit (packages.ghc784) ghc alex happy; bootPkgs = packages.ghc784;
inherit (bootPkgs) alex happy;
}; };
ghcjs = packages.ghc7103.callPackage ../development/compilers/ghcjs { ghcjs = packages.ghc7103.callPackage ../development/compilers/ghcjs {
ghc = compiler.ghc7103; bootPkgs = packages.ghc7103;
}; };
jhc = callPackage ../development/compilers/jhc { jhc = callPackage ../development/compilers/jhc {