diff --git a/pkgs/development/compilers/gcc-4.5/default.nix b/pkgs/development/compilers/gcc-4.5/default.nix index db6417e3795a..b5a5d20f501c 100644 --- a/pkgs/development/compilers/gcc-4.5/default.nix +++ b/pkgs/development/compilers/gcc-4.5/default.nix @@ -196,6 +196,11 @@ stdenv.mkDerivation ({ ++ (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 = " ${if enableMultilib then "" else "--disable-multilib"} ${if enableShared then "" else "--disable-shared"} diff --git a/pkgs/development/libraries/cloog-ppl/default.nix b/pkgs/development/libraries/cloog-ppl/default.nix index 5738f76682a8..0919afd83c27 100644 --- a/pkgs/development/libraries/cloog-ppl/default.nix +++ b/pkgs/development/libraries/cloog-ppl/default.nix @@ -1,19 +1,28 @@ -{ fetchurl, stdenv, ppl }: +{ fetchurl, stdenv, ppl, static ? false }: + +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 { - name = "cloog-ppl-0.15.7"; + name = "cloog-ppl-0.15.9"; src = fetchurl { url = "mirror://gcc/infrastructure/${name}.tar.gz"; - sha256 = "0zb96524jk2l78gr5gw0wq3dnvdsmyr2av59v89zv5xcps417q55"; + sha256 = "19a2n75k3d3n8llng25f2g88lpvd4zn0lm073rkndjw6l6yd8m4c"; }; propagatedBuildInputs = [ ppl ]; - configureFlags = "--with-ppl=${ppl}"; + configureFlags = "--with-ppl=${ppl}" + staticFlags; + dontDisableStatic = if static then true else false; crossAttrs = { - configureFlags = "--with-ppl=${ppl.hostDrv}"; + configureFlags = "--with-ppl=${ppl.hostDrv}" + staticFlags; }; doCheck = true; diff --git a/pkgs/development/libraries/gmp/4.nix b/pkgs/development/libraries/gmp/4.nix index 8dffdcd7e6d5..198fe15deeac 100644 --- a/pkgs/development/libraries/gmp/4.nix +++ b/pkgs/development/libraries/gmp/4.nix @@ -1,4 +1,8 @@ -{stdenv, fetchurl, m4, cxx ? true}: +{stdenv, fetchurl, m4, cxx ? true, static ? false}: + +let + staticFlags = if static then " --enable-static --disable-shared" else ""; +in stdenv.mkDerivation rec { name = "gmp-4.3.2"; @@ -14,7 +18,11 @@ stdenv.mkDerivation rec { # instructions (e.g., SSE2 on i686). preConfigure = "ln -sf configfsf.guess config.guess"; - configureFlags = if cxx then "--enable-cxx" else "--disable-cxx"; + configureFlags = (if cxx then "--enable-cxx" else "--disable-cxx") + + staticFlags; + + dontDisableStatic = if static then true else false; + doCheck = true; diff --git a/pkgs/development/libraries/gmp/default.nix b/pkgs/development/libraries/gmp/default.nix index 08a03d715c2f..338debaa81e7 100644 --- a/pkgs/development/libraries/gmp/default.nix +++ b/pkgs/development/libraries/gmp/default.nix @@ -1,4 +1,8 @@ -{stdenv, fetchurl, m4, cxx ? true}: +{stdenv, fetchurl, m4, cxx ? true, static ? false}: + +let + staticFlags = if static then " --enable-static --disable-shared" else ""; +in stdenv.mkDerivation rec { name = "gmp-5.0.1"; @@ -14,7 +18,10 @@ stdenv.mkDerivation rec { # instructions (e.g., SSE2 on i686). preConfigure = "ln -sf configfsf.guess config.guess"; - configureFlags = if cxx then "--enable-cxx" else "--disable-cxx"; + configureFlags = if cxx then "--enable-cxx" else "--disable-cxx" + + staticFlags; + + dontDisableStatic = if static then true else false; doCheck = true; diff --git a/pkgs/development/libraries/ppl/default.nix b/pkgs/development/libraries/ppl/default.nix index cbe6ee21ecd6..677d578e2425 100644 --- a/pkgs/development/libraries/ppl/default.nix +++ b/pkgs/development/libraries/ppl/default.nix @@ -1,6 +1,9 @@ -{ fetchurl, stdenv, gmpxx, perl, gnum4 }: +{ fetchurl, stdenv, gmpxx, perl, gnum4, static ? false }: -let version = "0.10.2"; in +let + version = "0.10.2"; + staticFlags = if static then " --enable-static --disable-shared" else ""; +in stdenv.mkDerivation rec { name = "ppl-${version}"; @@ -12,6 +15,9 @@ let version = "0.10.2"; in 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. diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 971ef7cc3b7c..a050f3ecaf43 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -183,6 +183,18 @@ rec { bootStdenv = stdenvLinuxBoot2; }; + gccWithStaticLibs = stdenvLinuxBoot2Pkgs.gcc.gcc.override (rec { + ppl = stdenvLinuxBoot2Pkgs.ppl.override { + static = true; + gmpxx = stdenvLinuxBoot2Pkgs.gmpxx.override { + static = true; + }; + }; + cloogppl = stdenvLinuxBoot2Pkgs.cloogppl.override { + inherit ppl; + static = true; + }; + }); # 6) Construct a third stdenv identical to the second, except that # this one uses the dynamically linked GCC and Binutils from step @@ -193,7 +205,7 @@ rec { inherit (stdenvLinuxBoot2Pkgs) binutils; coreutils = bootstrapTools; libc = stdenvLinuxGlibc; - gcc = stdenvLinuxBoot2Pkgs.gcc.gcc; + gcc = gccWithStaticLibs; name = ""; }; extraAttrs = { @@ -231,7 +243,7 @@ rec { inherit (stdenvLinuxBoot2Pkgs) binutils; inherit (stdenvLinuxBoot3Pkgs) coreutils; libc = stdenvLinuxGlibc; - gcc = stdenvLinuxBoot2Pkgs.gcc.gcc; + gcc = gccWithStaticLibs; shell = stdenvLinuxBoot3Pkgs.bash + "/bin/bash"; name = ""; };