* Streamline the stdenv bootstrap and resulting closure by removing

some redundant builds (e.g., GMP was built three times).
* Updated GMP to 5.0.2.
* Updated PPL to 0.11.2.
* Remove ad hoc flags to build GCC's dependencies statically.
  Instead, use the ‘makeStaticLibraries’ stdenv adapter.
* Build GMP with C++ support by default.

svn path=/nixpkgs/branches/stdenv-updates/; revision=30891
This commit is contained in:
Eelco Dolstra 2011-12-14 14:31:56 +00:00
parent 9eb4c4ddef
commit cfde88976b
13 changed files with 94 additions and 198 deletions

View File

@ -220,11 +220,6 @@ stdenv.mkDerivation ({
++ (optionals langVhdl [gnat]) ++ (optionals langVhdl [gnat])
; ;
configureFlagsArray = stdenv.lib.optionals
(ppl != null && ppl.dontDisableStatic == true)
[ "--with-host-libstdcxx=-lstdc++ -lgcc_s"
"--with-stage1-libs=-lstdc++ -lgcc_s" ];
configureFlags = " configureFlags = "
${if enableMultilib then "" else "--disable-multilib"} ${if enableMultilib then "" else "--disable-multilib"}
${if enableShared then "" else "--disable-shared"} ${if enableShared then "" else "--disable-shared"}

View File

@ -1,15 +1,4 @@
{ fetchurl, stdenv, ppl, static ? false }: { fetchurl, stdenv, ppl }:
let
# --with-host-libstdcxx helps when *ppl* is built statically.
# But I will suppose that this is statically built only when ppl is also
# statically built.
staticFlags =
assert static -> ppl.dontDisableStatic == true;
if static then " --enable-static --disable-shared --with-host-libstdcxx=-lstdc++" else "";
in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "cloog-ppl-0.15.11"; name = "cloog-ppl-0.15.11";
@ -21,11 +10,10 @@ stdenv.mkDerivation rec {
propagatedBuildInputs = [ ppl ]; propagatedBuildInputs = [ ppl ];
configureFlags = "--with-ppl=${ppl}" + staticFlags; configureFlags = "--with-ppl=${ppl}";
dontDisableStatic = if static then true else false;
crossAttrs = { crossAttrs = {
configureFlags = "--with-ppl=${ppl.hostDrv}" + staticFlags; configureFlags = "--with-ppl=${ppl.hostDrv}";
}; };
doCheck = true; doCheck = true;

View File

@ -1,6 +1,4 @@
{ fetchurl, stdenv, gmp, isl, static ? false }: { fetchurl, stdenv, gmp, isl }:
assert static -> isl.dontDisableStatic;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "cloog-0.16.3"; name = "cloog-0.16.3";
@ -14,10 +12,7 @@ stdenv.mkDerivation rec {
propagatedBuildInputs = [ isl ]; propagatedBuildInputs = [ isl ];
configureFlags = [ "--with-isl=system" ] configureFlags = [ "--with-isl=system" ];
++ (stdenv.lib.optionals static [ "--enable-static" "--disable-shared" ]);
dontDisableStatic = static;
doCheck = true; doCheck = true;

View File

@ -1,28 +1,19 @@
{stdenv, fetchurl, m4, cxx ? true, static ? false}: { stdenv, fetchurl, m4, cxx ? true }:
let
staticFlags = stdenv.lib.optionals static
[ "--enable-static" "--disable-shared" ];
in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "gmp-5.0.1"; name = "gmp-5.0.2";
src = fetchurl { src = fetchurl {
url = "mirror://gnu/gmp/${name}.tar.bz2"; url = "mirror://gnu/gmp/${name}.tar.bz2";
sha256 = "1yrr14l6vvhm1g27y8nb3c75j0i4ii4k1gw7ik08safk3zq119m2"; sha256 = "0a2ch2kpbzrsf3c1pfc6sph87hk2xmwa6np3sn2rzsflzmvdphnv";
}; };
buildNativeInputs = [m4]; buildNativeInputs = [ m4 ];
configureFlags = configureFlags =
# Build a "fat binary", with routines for several sub-architectures (x86). # Build a "fat binary", with routines for several sub-architectures (x86).
[ "--enable-fat" ] [ "--enable-fat" ]
++ (if cxx then [ "--enable-cxx" ] else [ "--disable-cxx" ]);
++ (if cxx then [ "--enable-cxx" ] else [ "--disable-cxx" ])
++ staticFlags;
dontDisableStatic = if static then true else false;
doCheck = true; doCheck = true;

View File

@ -1,7 +1,7 @@
{stdenv, fetchurl, gmp, static ? false}: { stdenv, fetchurl, gmp }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "isl-0.07"; # CLooG 0.16.3 fails to build with ISL 0.08. name = "isl-0.07"; # CLooG 0.16.3 fails to build with ISL 0.08.
src = fetchurl { src = fetchurl {
url = "http://www.kotnet.org/~skimo/isl/${name}.tar.bz2"; url = "http://www.kotnet.org/~skimo/isl/${name}.tar.bz2";
@ -10,10 +10,6 @@ stdenv.mkDerivation rec {
buildInputs = [ gmp ]; buildInputs = [ gmp ];
dontDisableStatic = static;
configureFlags =
stdenv.lib.optionals static [ " --enable-static" "--disable-shared" ];
meta = { meta = {
homepage = http://www.kotnet.org/~skimo/isl/; homepage = http://www.kotnet.org/~skimo/isl/;
license = "LGPLv2.1"; license = "LGPLv2.1";

View File

@ -1,50 +0,0 @@
{ fetchurl, stdenv, gmpxx, perl, gnum4, static ? false }:
let
version = "0.11";
staticFlags = if static then " --enable-static --disable-shared --disable-watchdog" else "";
in
stdenv.mkDerivation rec {
name = "ppl-${version}";
src = fetchurl {
url = "mirror://gcc/infrastructure/ppl-${version}.tar.gz";
sha256 = "0xqwyaj232gi0pgm6z2rihk6p8l1rngbbibnhmcrbq4jq550clrl";
};
buildNativeInputs = [ perl gnum4 ];
propagatedBuildInputs = [ gmpxx ];
dontDisableStatic = if static then true else false;
configureFlags = staticFlags;
# Beware! It took ~6 hours to compile PPL and run its tests on a 1.2 GHz
# x86_64 box. Nevertheless, being a dependency of GCC, it probably ought
# to be tested.
doCheck = false;
meta = {
description = "PPL: The Parma Polyhedra Library";
longDescription = ''
The Parma Polyhedra Library (PPL) provides numerical abstractions
especially targeted at applications in the field of analysis and
verification of complex systems. These abstractions include convex
polyhedra, defined as the intersection of a finite number of (open or
closed) halfspaces, each described by a linear inequality (strict or
non-strict) with rational coefficients; some special classes of
polyhedra shapes that offer interesting complexity/precision tradeoffs;
and grids which represent regularly spaced points that satisfy a set of
linear congruence relations. The library also supports finite
powersets and products of (any kind of) polyhedra and grids and a mixed
integer linear programming problem solver using an exact-arithmetic
version of the simplex algorithm.
'';
homepage = http://www.cs.unipr.it/ppl/;
license = "GPLv3+";
maintainers = [ stdenv.lib.maintainers.ludo ];
};
}

View File

@ -1,50 +1,49 @@
{ fetchurl, stdenv, gmpxx, perl, gnum4, static ? false }: { fetchurl, stdenv, gmpxx, perl, gnum4 }:
let let version = "0.11.2"; in
version = "0.11";
staticFlags = if static then " --enable-static --disable-shared --disable-watchdog" else "";
in
stdenv.mkDerivation rec {
name = "ppl-${version}";
src = fetchurl { stdenv.mkDerivation rec {
url = "mirror://gcc/infrastructure/ppl-${version}.tar.gz"; name = "ppl-${version}";
sha256 = "0xqwyaj232gi0pgm6z2rihk6p8l1rngbbibnhmcrbq4jq550clrl";
};
buildNativeInputs = [ perl gnum4 ]; src = fetchurl {
propagatedBuildInputs = [ gmpxx ]; url = "http://bugseng.com/products/ppl/download/ftp/releases/${version}/ppl-${version}.tar.bz2";
sha256 = "1sxviip4yk6gp453pid5scy1ba66dzdpr02i1416yk7lkv0x3yz3";
};
dontDisableStatic = if static then true else false; buildNativeInputs = [ perl gnum4 ];
configureFlags = staticFlags; propagatedBuildInputs = [ gmpxx ];
# Beware! It took ~6 hours to compile PPL and run its tests on a 1.2 GHz configureFlags = "--disable-watchdog";
# x86_64 box. Nevertheless, being a dependency of GCC, it probably ought
# to be tested.
doCheck = false;
meta = { # Beware! It took ~6 hours to compile PPL and run its tests on a 1.2 GHz
description = "PPL: The Parma Polyhedra Library"; # x86_64 box. Nevertheless, being a dependency of GCC, it probably ought
# to be tested.
doCheck = false;
longDescription = '' enableParallelBuilding = true;
The Parma Polyhedra Library (PPL) provides numerical abstractions
especially targeted at applications in the field of analysis and
verification of complex systems. These abstractions include convex
polyhedra, defined as the intersection of a finite number of (open or
closed) halfspaces, each described by a linear inequality (strict or
non-strict) with rational coefficients; some special classes of
polyhedra shapes that offer interesting complexity/precision tradeoffs;
and grids which represent regularly spaced points that satisfy a set of
linear congruence relations. The library also supports finite
powersets and products of (any kind of) polyhedra and grids and a mixed
integer linear programming problem solver using an exact-arithmetic
version of the simplex algorithm.
'';
homepage = http://www.cs.unipr.it/ppl/; meta = {
description = "PPL: The Parma Polyhedra Library";
license = "GPLv3+"; longDescription = ''
The Parma Polyhedra Library (PPL) provides numerical abstractions
especially targeted at applications in the field of analysis and
verification of complex systems. These abstractions include convex
polyhedra, defined as the intersection of a finite number of (open or
closed) halfspaces, each described by a linear inequality (strict or
non-strict) with rational coefficients; some special classes of
polyhedra shapes that offer interesting complexity/precision tradeoffs;
and grids which represent regularly spaced points that satisfy a set of
linear congruence relations. The library also supports finite
powersets and products of (any kind of) polyhedra and grids and a mixed
integer linear programming problem solver using an exact-arithmetic
version of the simplex algorithm.
'';
maintainers = [ stdenv.lib.maintainers.ludo ]; homepage = http://www.cs.unipr.it/ppl/;
};
} license = "GPLv3+";
maintainers = [ stdenv.lib.maintainers.ludo ];
};
}

View File

@ -45,6 +45,8 @@ stdenv.mkDerivation rec {
+ stdenv.lib.optionalString (cross != null) " --target=${cross.config}" + stdenv.lib.optionalString (cross != null) " --target=${cross.config}"
+ stdenv.lib.optionalString gold " --enable-gold"; + stdenv.lib.optionalString gold " --enable-gold";
enableParallelBuilding = true;
meta = { meta = {
description = "GNU Binutils, tools for manipulating binaries (linker, assembler, etc.)"; description = "GNU Binutils, tools for manipulating binaries (linker, assembler, etc.)";

View File

@ -4,7 +4,7 @@ assert cross == null -> stdenv.isLinux;
let let
version = "2.6.35.14"; version = "2.6.35.14";
kernelHeadersBaseConfig = if (cross == null) then kernelHeadersBaseConfig = if cross == null then
stdenv.platform.kernelHeadersBaseConfig stdenv.platform.kernelHeadersBaseConfig
else else
cross.platform.kernelHeadersBaseConfig; cross.platform.kernelHeadersBaseConfig;

View File

@ -109,13 +109,14 @@ rec {
} // {inherit fetchurl;}; } // {inherit fetchurl;};
# Return a modified stdenv that enables building static libraries. # Return a modified stdenv that builds static libraries instead of
enableStaticLibraries = stdenv: stdenv // # shared libraries.
makeStaticLibraries = stdenv: stdenv //
{ mkDerivation = args: stdenv.mkDerivation (args // { { mkDerivation = args: stdenv.mkDerivation (args // {
dontDisableStatic = true; dontDisableStatic = true;
configureFlags = configureFlags =
(if args ? configureFlags then args.configureFlags else "") (if args ? configureFlags then toString args.configureFlags else "")
+ " --enable-static"; + " --enable-static --disable-shared";
}); });
} // {inherit fetchurl;}; } // {inherit fetchurl;};

View File

@ -1,6 +1,6 @@
{ system, name, preHook ? null, postHook ? null, initialPath, gcc, shell { system, name, preHook ? null, postHook ? null, initialPath, gcc, shell
, param1 ? "", param2 ? "", param3 ? "", param4 ? "", param5 ? "" , param1 ? "", param2 ? "", param3 ? "", param4 ? "", param5 ? ""
, extraAttrs ? {}, overrides ? {} , extraAttrs ? {}, overrides ? (pkgs: {})
, # The `fetchurl' to use for downloading curl and its dependencies , # The `fetchurl' to use for downloading curl and its dependencies
# (see all-packages.nix). # (see all-packages.nix).

View File

@ -5,7 +5,7 @@
# ensuring purity of components produced by it. # ensuring purity of components produced by it.
# The function defaults are for easy testing. # The function defaults are for easy testing.
{ system ? "i686-linux" { system ? builtins.currentSystem
, allPackages ? import ../../top-level/all-packages.nix , allPackages ? import ../../top-level/all-packages.nix
, platform ? null }: , platform ? null }:
@ -77,7 +77,7 @@ rec {
# This function builds the various standard environments used during # This function builds the various standard environments used during
# the bootstrap. # the bootstrap.
stdenvBootFun = stdenvBootFun =
{gcc, extraAttrs ? {}, overrides ? {}, extraPath ? [], fetchurl}: {gcc, extraAttrs ? {}, overrides ? (pkgs: {}), extraPath ? [], fetchurl}:
import ../generic { import ../generic {
inherit system; inherit system;
@ -97,7 +97,7 @@ rec {
# Having the proper 'platform' in all the stdenvs allows getting proper # Having the proper 'platform' in all the stdenvs allows getting proper
# linuxHeaders for example. # linuxHeaders for example.
extraAttrs = extraAttrs // { inherit platform; }; extraAttrs = extraAttrs // { inherit platform; };
overrides = overrides // { overrides = pkgs: (overrides pkgs) // {
inherit fetchurl; inherit fetchurl;
}; };
}; };
@ -156,23 +156,25 @@ rec {
# 2) These are the packages that we can build with the first # 2) These are the packages that we can build with the first
# stdenv. We only need binutils, because recent glibcs # stdenv. We only need binutils, because recent Glibcs
# require recent binutils, and those in bootstrap-tools may # require recent Binutils, and those in bootstrap-tools may
# be too old. (in step 3). # be too old.
stdenvLinuxBoot1Pkgs = allPackages { stdenvLinuxBoot1Pkgs = allPackages {
inherit system platform; inherit system platform;
bootStdenv = stdenvLinuxBoot1; bootStdenv = stdenvLinuxBoot1;
}; };
firstBinutils = stdenvLinuxBoot1Pkgs.binutils;
# 3) 2nd stdenv that we will use to build only the glibc. # 3) 2nd stdenv that we will use to build only the glibc.
stdenvLinuxBoot2 = stdenvBootFun { stdenvLinuxBoot2 = stdenvBootFun {
gcc = wrapGCC { gcc = wrapGCC {
libc = bootstrapGlibc; libc = bootstrapGlibc;
binutils = firstBinutils; binutils = stdenvLinuxBoot1Pkgs.binutils;
coreutils = bootstrapTools; coreutils = bootstrapTools;
}; };
overrides = pkgs: {
inherit (stdenvLinuxBoot1Pkgs) perl;
};
inherit fetchurl; inherit fetchurl;
}; };
@ -199,9 +201,18 @@ rec {
coreutils = bootstrapTools; coreutils = bootstrapTools;
libc = stdenvLinuxGlibc; libc = stdenvLinuxGlibc;
}; };
overrides = { overrides = pkgs: {
glibc = stdenvLinuxGlibc; glibc = stdenvLinuxGlibc;
inherit (stdenvLinuxBoot1Pkgs) perl; inherit (stdenvLinuxBoot1Pkgs) perl;
# Link GCC statically against GMP etc. This makes sense because
# these builds of the libraries are only used by GCC, so it
# reduces the size of the stdenv closure.
gmp = pkgs.gmp.override { stdenv = pkgs.makeStaticLibraries pkgs.stdenv; };
mpfr = pkgs.mpfr.override { stdenv = pkgs.makeStaticLibraries pkgs.stdenv; };
mpc = pkgs.mpc.override { stdenv = pkgs.makeStaticLibraries pkgs.stdenv; };
isl = pkgs.isl.override { stdenv = pkgs.makeStaticLibraries pkgs.stdenv; };
cloog = pkgs.cloog.override { stdenv = pkgs.makeStaticLibraries pkgs.stdenv; };
ppl = pkgs.ppl.override { stdenv = pkgs.makeStaticLibraries pkgs.stdenv; };
}; };
inherit fetchurl; inherit fetchurl;
}; };
@ -213,22 +224,7 @@ rec {
bootStdenv = stdenvLinuxBoot3; bootStdenv = stdenvLinuxBoot3;
}; };
gccWithStaticLibs = stdenvLinuxBoot3Pkgs.gcc.gcc.override (rec {
ppl = stdenvLinuxBoot3Pkgs.ppl.override {
static = true;
gmpxx = stdenvLinuxBoot3Pkgs.gmpxx.override {
static = true;
};
};
cloog = stdenvLinuxBoot3Pkgs.cloog.override {
isl = stdenvLinuxBoot3Pkgs.isl.override {
static = true;
};
static = true;
};
cloogppl = null;
});
# 8) Construct a fourth stdenv identical to the second, except that # 8) Construct a fourth stdenv identical to the second, except that
# this one uses the dynamically linked GCC and Binutils from step # this one uses the dynamically linked GCC and Binutils from step
# 5. The other tools (e.g. coreutils) are still from the # 5. The other tools (e.g. coreutils) are still from the
@ -238,11 +234,12 @@ rec {
inherit (stdenvLinuxBoot3Pkgs) binutils; inherit (stdenvLinuxBoot3Pkgs) binutils;
coreutils = bootstrapTools; coreutils = bootstrapTools;
libc = stdenvLinuxGlibc; libc = stdenvLinuxGlibc;
gcc = gccWithStaticLibs; gcc = stdenvLinuxBoot3Pkgs.gcc.gcc;
name = ""; name = "";
}; };
overrides = { overrides = pkgs: {
inherit (stdenvLinuxBoot1Pkgs) perl; inherit (stdenvLinuxBoot1Pkgs) perl;
inherit (stdenvLinuxBoot3Pkgs) gettext gnum4 xz gmp;
}; };
inherit fetchurl; inherit fetchurl;
}; };
@ -277,7 +274,7 @@ rec {
inherit (stdenvLinuxBoot3Pkgs) binutils; inherit (stdenvLinuxBoot3Pkgs) binutils;
inherit (stdenvLinuxBoot4Pkgs) coreutils; inherit (stdenvLinuxBoot4Pkgs) coreutils;
libc = stdenvLinuxGlibc; libc = stdenvLinuxGlibc;
gcc = gccWithStaticLibs; gcc = stdenvLinuxBoot3Pkgs.gcc.gcc;
shell = stdenvLinuxBoot4Pkgs.bash + "/bin/bash"; shell = stdenvLinuxBoot4Pkgs.bash + "/bin/bash";
name = ""; name = "";
}; };
@ -291,7 +288,7 @@ rec {
inherit platform; inherit platform;
}; };
overrides = { overrides = pkgs: {
inherit gcc; inherit gcc;
inherit (stdenvLinuxBoot3Pkgs) binutils glibc; inherit (stdenvLinuxBoot3Pkgs) binutils glibc;
inherit (stdenvLinuxBoot4Pkgs) inherit (stdenvLinuxBoot4Pkgs)

View File

@ -108,7 +108,7 @@ let
# overrided packages will not be built with the crossStdenv # overrided packages will not be built with the crossStdenv
# adapter. # adapter.
overrides = overrider pkgsOrig // overrides = overrider pkgsOrig //
(lib.optionalAttrs (pkgsOrig.stdenv ? overrides && crossSystem == null) pkgsOrig.stdenv.overrides); (lib.optionalAttrs (pkgsOrig.stdenv ? overrides && crossSystem == null) (pkgsOrig.stdenv.overrides pkgsOrig));
# The un-overriden packages, passed to `overrider'. # The un-overriden packages, passed to `overrider'.
pkgsOrig = pkgsFun pkgs {}; pkgsOrig = pkgsFun pkgs {};
@ -1208,11 +1208,8 @@ let
ppl = callPackage ../development/libraries/ppl { }; ppl = callPackage ../development/libraries/ppl { };
ppl0_11 = callPackage ../development/libraries/ppl/0.11.nix { };
/* WARNING: this version is unsuitable for using with a setuid wrapper */ /* WARNING: this version is unsuitable for using with a setuid wrapper */
ppp = builderDefsPackage (import ../tools/networking/ppp) { ppp = builderDefsPackage (import ../tools/networking/ppp) { };
};
pptp = callPackage ../tools/networking/pptp {}; pptp = callPackage ../tools/networking/pptp {};
@ -1777,8 +1774,7 @@ let
gcc46_realCross = lib.addMetaAttrs { platforms = []; } gcc46_realCross = lib.addMetaAttrs { platforms = []; }
(makeOverridable (import ../development/compilers/gcc-4.6) { (makeOverridable (import ../development/compilers/gcc-4.6) {
inherit fetchurl stdenv texinfo gmp mpfr mpc libelf zlib inherit fetchurl stdenv texinfo gmp mpfr mpc libelf zlib
cloog gettext which noSysDirs; cloog ppl gettext which noSysDirs;
ppl = ppl0_11;
binutilsCross = binutilsCross; binutilsCross = binutilsCross;
libcCross = libcCross; libcCross = libcCross;
profiledCompiler = false; profiledCompiler = false;
@ -1878,9 +1874,6 @@ let
libcCross = null; libcCross = null;
binutilsCross = null; binutilsCross = null;
ppl = ppl0_11;
cloogppl = null;
# bootstrapping a profiled compiler does not work in the sheevaplug: # bootstrapping a profiled compiler does not work in the sheevaplug:
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43944 # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43944
profiledCompiler = if stdenv.system == "armv5tel-linux" then false else true; profiledCompiler = if stdenv.system == "armv5tel-linux" then false else true;
@ -1894,9 +1887,6 @@ let
cross = null; cross = null;
libcCross = null; libcCross = null;
binutilsCross = null; binutilsCross = null;
ppl = ppl0_11;
cloogppl = null;
})); }));
gccApple = gccApple =
@ -2047,7 +2037,6 @@ let
gnatboot = gnat45; gnatboot = gnat45;
# We can't use the ppl stuff, because we would have # We can't use the ppl stuff, because we would have
# libstdc++ problems. # libstdc++ problems.
cloogppl = null;
ppl = null; ppl = null;
cloog = null; cloog = null;
}); });
@ -2547,7 +2536,8 @@ let
# compatibility issues in 2.47 - at list 2.44.1 is known good # compatibility issues in 2.47 - at list 2.44.1 is known good
# for sbcl bootstrap # for sbcl bootstrap
clisp_2_44_1 = callPackage ../development/interpreters/clisp/2.44.1.nix { clisp_2_44_1 = callPackage ../development/interpreters/clisp/2.44.1.nix {
libsigsegv = libsigsegv_25; }; libsigsegv = libsigsegv_25;
};
clojure = callPackage ../development/interpreters/clojure { }; clojure = callPackage ../development/interpreters/clojure { };
@ -3555,17 +3545,9 @@ let
gmp = gmp =
if stdenv.system == "i686-darwin" then if stdenv.system == "i686-darwin" then
# GMP 4.3.2 is broken on Darwin, so use 4.3.1. # GMP 4.3.2 is broken on Darwin, so use 4.3.1.
makeOverridable (import ../development/libraries/gmp/4.3.1.nix) { callPackage ../development/libraries/gmp/4.3.1.nix { }
inherit stdenv fetchurl m4;
cxx = false;
}
else else
# We temporarily leave gmp 4 here, waiting for a new ppl/cloog-ppl that callPackage ../development/libraries/gmp { };
# would build well with gmp 5.
makeOverridable (import ../development/libraries/gmp/4.nix) {
inherit stdenv fetchurl m4;
cxx = false;
};
gmpxx = gmp.override { cxx = true; }; gmpxx = gmp.override { cxx = true; };