about summary refs log tree commit diff
path: root/pkgs/development/compilers
diff options
context:
space:
mode:
authorArmijn Hemel <armijn@gpl-violations.org>2005-11-28 11:20:59 +0000
committerArmijn Hemel <armijn@gpl-violations.org>2005-11-28 11:20:59 +0000
commit2748236699d7a152a0abfbd3c72cc0d0d41e1a26 (patch)
tree2ea3da40c2459e6b079431f15ab3a7c29d0eda82 /pkgs/development/compilers
parente261da07cf6a3b3d8f01711d33cce2997d664acf (diff)
downloadnixlib-2748236699d7a152a0abfbd3c72cc0d0d41e1a26.tar
nixlib-2748236699d7a152a0abfbd3c72cc0d0d41e1a26.tar.gz
nixlib-2748236699d7a152a0abfbd3c72cc0d0d41e1a26.tar.bz2
nixlib-2748236699d7a152a0abfbd3c72cc0d0d41e1a26.tar.lz
nixlib-2748236699d7a152a0abfbd3c72cc0d0d41e1a26.tar.xz
nixlib-2748236699d7a152a0abfbd3c72cc0d0d41e1a26.tar.zst
nixlib-2748236699d7a152a0abfbd3c72cc0d0d41e1a26.zip
add cross compilers for ARM, only able to compile C code
svn path=/nixpkgs/trunk/; revision=4313
Diffstat (limited to 'pkgs/development/compilers')
-rw-r--r--pkgs/development/compilers/gcc-3.4-arm/builder.sh87
-rw-r--r--pkgs/development/compilers/gcc-3.4-arm/default.nix21
-rw-r--r--pkgs/development/compilers/gcc-3.4-arm/no-sys-dirs.patch170
-rw-r--r--pkgs/development/compilers/gcc-4.0-arm/builder.sh97
-rw-r--r--pkgs/development/compilers/gcc-4.0-arm/default.nix25
-rw-r--r--pkgs/development/compilers/gcc-4.0-arm/no-sys-dirs.patch182
6 files changed, 582 insertions, 0 deletions
diff --git a/pkgs/development/compilers/gcc-3.4-arm/builder.sh b/pkgs/development/compilers/gcc-3.4-arm/builder.sh
new file mode 100644
index 000000000000..f66e7b7ce281
--- /dev/null
+++ b/pkgs/development/compilers/gcc-3.4-arm/builder.sh
@@ -0,0 +1,87 @@
+. $stdenv/setup
+
+
+export NIX_FIXINC_DUMMY=$NIX_BUILD_TOP/dummy
+mkdir $NIX_FIXINC_DUMMY
+
+
+if test "$noSysDirs" = "1"; then
+
+    if test "$noSysDirs" = "1"; then
+        # Figure out what extra flags to pass to the gcc compilers
+        # being generated to make sure that they use our glibc.
+        if test -e $NIX_GCC/nix-support/orig-glibc; then
+            glibc=$(cat $NIX_GCC/nix-support/orig-glibc)
+            # Ugh.  Copied from gcc-wrapper/builder.sh.  We can't just
+            # source in $NIX_GCC/nix-support/add-flags, since that
+            # would cause *this* GCC to be linked against the
+            # *previous* GCC.  Need some more modularity there.
+            extraCFlags="-B$glibc/lib -isystem $glibc/include"
+            extraLDFlags="-B$glibc/lib -L$glibc/lib -Wl,-s \
+              -Wl,-dynamic-linker,$glibc/lib/ld-linux.so.2"
+
+            # Oh, what a hack.  I should be shot for this.
+            # In stage 1, we should link against the previous GCC, but
+            # not afterwards.  Otherwise we retain a dependency.
+            # However, ld-wrapper, which adds the linker flags for the
+            # previous GCC, is also used in stage 2/3.  We can prevent
+            # it from adding them by NIX_GLIBC_FLAGS_SET, but then
+            # gcc-wrapper will also not add them, thereby causing
+            # stage 1 to fail.  So we use a trick to only set the
+            # flags in gcc-wrapper.
+            hook=$(pwd)/ld-wrapper-hook
+            echo "NIX_GLIBC_FLAGS_SET=1" > $hook
+            export NIX_LD_WRAPPER_START_HOOK=$hook
+        fi
+
+        export NIX_EXTRA_CFLAGS=$extraCFlags
+        export NIX_EXTRA_LDFLAGS=$extraLDFlags
+        export CFLAGS=$extraCFlags
+        export LDFLAGS=$extraLDFlags
+    fi
+
+else
+    patches=""
+fi
+
+
+preConfigure=preConfigure
+preConfigure() {
+    
+    # Determine the frontends to build.
+    langs="c"
+    if test -n "$langCC"; then
+        langs="$langs,c++"
+    fi
+    if test -n "$langF77"; then
+        langs="$langs,f77"
+    fi
+
+    # Perform the build in a different directory.
+    mkdir ../build
+    cd ../build
+
+    configureScript=../$sourceRoot/configure
+    configureFlags="--enable-languages=$langs --target=$platform --disable-threads"
+}
+
+
+postInstall=postInstall
+postInstall() {
+    # Remove precompiled headers for now.  They are very big and
+    # probably not very useful yet.
+    find $out/include -name "*.gch" -exec rm -rf {} \; -prune
+
+    # Remove `fixincl' to prevent a retained dependency on the
+    # previous gcc.
+    rm -rf $out/libexec/gcc/*/*/install-tools
+}
+
+
+#if test -z "$profiledCompiler"; then
+#    makeFlags="bootstrap"
+#else    
+#    makeFlags="profiledbootstrap"
+#fi
+
+genericBuild
diff --git a/pkgs/development/compilers/gcc-3.4-arm/default.nix b/pkgs/development/compilers/gcc-3.4-arm/default.nix
new file mode 100644
index 000000000000..7a701cc236f0
--- /dev/null
+++ b/pkgs/development/compilers/gcc-3.4-arm/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, noSysDirs
+, langC ? true, langCC ? true, langF77 ? false
+, profiledCompiler ? false
+, binutilsArm
+}:
+
+assert langC;
+
+stdenv.mkDerivation {
+  name = "gcc-3.4.4-arm";
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://ftp.gnu.org/gnu/gcc/gcc-3.4.4/gcc-3.4.4.tar.bz2;
+    md5 = "b594ff4ea4fbef4ba9220887de713dfe";
+  };
+  # !!! apply only if noSysDirs is set
+  patches = [./no-sys-dirs.patch];
+  inherit noSysDirs langC langCC langF77 profiledCompiler;
+  buildInputs = [binutilsArm];
+  platform = "arm-linux";
+}
diff --git a/pkgs/development/compilers/gcc-3.4-arm/no-sys-dirs.patch b/pkgs/development/compilers/gcc-3.4-arm/no-sys-dirs.patch
new file mode 100644
index 000000000000..2159893cde2b
--- /dev/null
+++ b/pkgs/development/compilers/gcc-3.4-arm/no-sys-dirs.patch
@@ -0,0 +1,170 @@
+diff -rc gcc-orig/gcc/cppdefault.c gcc-patched/gcc/cppdefault.c
+*** gcc-orig/gcc/cppdefault.c	2003-03-01 15:31:12.000000000 +0100
+--- gcc-patched/gcc/cppdefault.c	2004-06-29 10:08:45.000000000 +0200
+***************
+*** 41,46 ****
+--- 41,50 ----
+  # undef CROSS_INCLUDE_DIR
+  #endif
+  
++ #undef LOCAL_INCLUDE_DIR
++ #undef SYSTEM_INCLUDE_DIR
++ #undef STANDARD_INCLUDE_DIR
++ 
+  const struct default_include cpp_include_defaults[]
+  #ifdef INCLUDE_DEFAULTS
+  = INCLUDE_DEFAULTS;
+diff -rc gcc-orig/gcc/Makefile.in gcc-patched/gcc/Makefile.in
+*** gcc-orig/gcc/Makefile.in	2004-04-01 18:47:54.000000000 +0200
+--- gcc-patched/gcc/Makefile.in	2004-06-29 13:50:45.000000000 +0200
+***************
+*** 199,205 ****
+  CPPFLAGS = @CPPFLAGS@
+  
+  # These exists to be overridden by the x-* and t-* files, respectively.
+! X_CFLAGS =
+  T_CFLAGS =
+  
+  X_CPPFLAGS =
+--- 199,205 ----
+  CPPFLAGS = @CPPFLAGS@
+  
+  # These exists to be overridden by the x-* and t-* files, respectively.
+! X_CFLAGS = $(NIX_EXTRA_CFLAGS) $(NIX_EXTRA_LDFLAGS)
+  T_CFLAGS =
+  
+  X_CPPFLAGS =
+***************
+*** 345,351 ****
+  PARTITION_H = $(srcdir)/../include/partition.h
+  
+  # Default native SYSTEM_HEADER_DIR, to be overridden by targets.
+! NATIVE_SYSTEM_HEADER_DIR = /usr/include
+  # Default cross SYSTEM_HEADER_DIR, to be overridden by targets.
+  CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
+  
+--- 345,355 ----
+  PARTITION_H = $(srcdir)/../include/partition.h
+  
+  # Default native SYSTEM_HEADER_DIR, to be overridden by targets.
+! # Nix: we override NATIVE_SYSTEM_HEADER_DIR in order to prevent
+! # `fixinc' from fixing header files in /usr/include.  However,
+! # NATIVE_SYSTEM_HEADER_DIR must point to an existing directory, so set
+! # it to some dummy directory.
+! NATIVE_SYSTEM_HEADER_DIR = $(NIX_FIXINC_DUMMY)
+  # Default cross SYSTEM_HEADER_DIR, to be overridden by targets.
+  CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
+  
+diff -rc gcc-orig/libstdc++-v3/include/Makefile.in gcc-patched/libstdc++-v3/include/Makefile.in
+*** gcc-orig/libstdc++-v3/include/Makefile.in	2004-03-18 18:36:43.000000000 +0100
+--- gcc-patched/libstdc++-v3/include/Makefile.in	2004-06-29 19:01:33.000000000 +0200
+***************
+*** 896,903 ****
+  	if [ ! -d "${pch_output_builddir}" ]; then \
+  	  mkdir -p ${pch_output_builddir}; \
+  	fi; \
+! 	$(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) ${pch_source} -O0 -g -o ${pch_output_builddir}/O0g; \
+! 	$(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) ${pch_source} -O2 -g -o ${pch_output_builddir}/O2g;
+  
+  # For robustness sake (in light of junk files or in-source
+  # configuration), copy from the build or source tree to the install
+--- 896,903 ----
+  	if [ ! -d "${pch_output_builddir}" ]; then \
+  	  mkdir -p ${pch_output_builddir}; \
+  	fi; \
+! 	$(CXX) $(CFLAGS) $(PCHFLAGS) $(AM_CPPFLAGS) ${pch_source} -O0 -g -o ${pch_output_builddir}/O0g; \
+! 	$(CXX) $(CFLAGS) $(PCHFLAGS) $(AM_CPPFLAGS) ${pch_source} -O2 -g -o ${pch_output_builddir}/O2g;
+  
+  # For robustness sake (in light of junk files or in-source
+  # configuration), copy from the build or source tree to the install
+diff -rc gcc-orig/ltcf-cxx.sh gcc-patched/ltcf-cxx.sh
+*** gcc-orig/ltcf-cxx.sh	2003-11-19 06:29:32.000000000 +0100
+--- gcc-patched/ltcf-cxx.sh	2004-06-29 15:26:01.000000000 +0200
+***************
+*** 985,991 ****
+    # the conftest object file.
+    pre_test_object_deps_done=no
+  
+!   for p in `eval $output_verbose_link_cmd`; do
+  
+      case $p in
+  
+--- 985,991 ----
+    # the conftest object file.
+    pre_test_object_deps_done=no
+  
+!   for p in `true`; do
+  
+      case $p in
+  
+diff -rc gcc-orig/Makefile.in gcc-patched/Makefile.in
+*** gcc-orig/Makefile.in	2004-01-14 21:09:37.000000000 +0100
+--- gcc-patched/Makefile.in	2004-06-29 16:21:36.000000000 +0200
+***************
+*** 228,234 ****
+  NM = @NM@
+  
+  LD = @LD@
+! LDFLAGS = 
+  
+  RANLIB = @RANLIB@
+  
+--- 228,234 ----
+  NM = @NM@
+  
+  LD = @LD@
+! LDFLAGS = $(NIX_EXTRA_LDFLAGS)
+  
+  RANLIB = @RANLIB@
+  
+***************
+*** 277,283 ****
+  # CFLAGS will be just -g.  We want to ensure that TARGET libraries
+  # (which we know are built with gcc) are built with optimizations so
+  # prepend -O2 when setting CFLAGS_FOR_TARGET.
+! CFLAGS_FOR_TARGET = -O2 $(CFLAGS)
+  # If GCC_FOR_TARGET is not overriden on the command line, then this
+  # variable is passed down to the gcc Makefile, where it is used to
+  # build libgcc2.a.  We define it here so that it can itself be
+--- 277,283 ----
+  # CFLAGS will be just -g.  We want to ensure that TARGET libraries
+  # (which we know are built with gcc) are built with optimizations so
+  # prepend -O2 when setting CFLAGS_FOR_TARGET.
+! CFLAGS_FOR_TARGET = -O2 $(CFLAGS) $(NIX_EXTRA_CFLAGS)
+  # If GCC_FOR_TARGET is not overriden on the command line, then this
+  # variable is passed down to the gcc Makefile, where it is used to
+  # build libgcc2.a.  We define it here so that it can itself be
+***************
+*** 290,296 ****
+  RAW_CXX_FOR_TARGET = @RAW_CXX_FOR_TARGET@
+  CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = @CXX_FOR_TARGET_FOR_RECURSIVE_MAKE@
+  RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = @RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE@
+! CXXFLAGS_FOR_TARGET = $(CXXFLAGS)
+  LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
+  
+  DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
+--- 290,296 ----
+  RAW_CXX_FOR_TARGET = @RAW_CXX_FOR_TARGET@
+  CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = @CXX_FOR_TARGET_FOR_RECURSIVE_MAKE@
+  RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = @RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE@
+! CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(NIX_EXTRA_CFLAGS)
+  LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
+  
+  DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
+***************
+*** 321,327 ****
+      fi; \
+    fi`
+  
+! LDFLAGS_FOR_TARGET = 
+  
+  NM_FOR_TARGET=@NM_FOR_TARGET@
+  USUAL_NM_FOR_TARGET = ` \
+--- 321,327 ----
+      fi; \
+    fi`
+  
+! LDFLAGS_FOR_TARGET = $(NIX_EXTRA_LDFLAGS)
+  
+  NM_FOR_TARGET=@NM_FOR_TARGET@
+  USUAL_NM_FOR_TARGET = ` \
diff --git a/pkgs/development/compilers/gcc-4.0-arm/builder.sh b/pkgs/development/compilers/gcc-4.0-arm/builder.sh
new file mode 100644
index 000000000000..c89cae9a16c3
--- /dev/null
+++ b/pkgs/development/compilers/gcc-4.0-arm/builder.sh
@@ -0,0 +1,97 @@
+. $stdenv/setup
+
+
+export NIX_FIXINC_DUMMY=$NIX_BUILD_TOP/dummy
+mkdir $NIX_FIXINC_DUMMY
+
+
+if test "$noSysDirs" = "1"; then
+
+    if test "$noSysDirs" = "1"; then
+        # Figure out what extra flags to pass to the gcc compilers
+        # being generated to make sure that they use our glibc.
+        if test -e $NIX_GCC/nix-support/orig-glibc; then
+            glibc=$(cat $NIX_GCC/nix-support/orig-glibc)
+            # Ugh.  Copied from gcc-wrapper/builder.sh.  We can't just
+            # source in $NIX_GCC/nix-support/add-flags, since that
+            # would cause *this* GCC to be linked against the
+            # *previous* GCC.  Need some more modularity there.
+            extraCFlags="-B$glibc/lib -isystem $glibc/include"
+            extraLDFlags="-B$glibc/lib -L$glibc/lib -Wl,-s \
+              -Wl,-dynamic-linker,$glibc/lib/ld-linux.so.2"
+
+            # Oh, what a hack.  I should be shot for this.
+            # In stage 1, we should link against the previous GCC, but
+            # not afterwards.  Otherwise we retain a dependency.
+            # However, ld-wrapper, which adds the linker flags for the
+            # previous GCC, is also used in stage 2/3.  We can prevent
+            # it from adding them by NIX_GLIBC_FLAGS_SET, but then
+            # gcc-wrapper will also not add them, thereby causing
+            # stage 1 to fail.  So we use a trick to only set the
+            # flags in gcc-wrapper.
+            hook=$(pwd)/ld-wrapper-hook
+            echo "NIX_GLIBC_FLAGS_SET=1" > $hook
+            export NIX_LD_WRAPPER_START_HOOK=$hook
+        fi
+
+        export NIX_EXTRA_CFLAGS=$extraCFlags
+        export NIX_EXTRA_LDFLAGS=$extraLDFlags
+        export CFLAGS=$extraCFlags
+        export CXXFLAGS=$extraCFlags
+        export LDFLAGS=$extraLDFlags
+    fi
+
+else
+    patches=""
+fi
+
+
+preConfigure=preConfigure
+preConfigure() {
+    
+    # Determine the frontends to build.
+    langs="c"
+    if test -n "$langCC"; then
+        langs="$langs,c++"
+    fi
+    if test -n "$langF77"; then
+        langs="$langs,f77"
+    fi
+
+    # Cross compiler evilness
+    ensureDir $out
+    ensureDir $out/arm-linux
+    ensureDir $out/arm-linux/bin
+    ln -s $binutilsArm/arm-linux/bin/as $out/arm-linux/bin/as
+    ln -s $binutilsArm/arm-linux/bin/ld $out/arm-linux/bin/ld
+    ln -s $binutilsArm/arm-linux/bin/ar $out/arm-linux/bin/ar
+    ln -s $binutilsArm/arm-linux/bin/ranlib $out/arm-linux/bin/ranlib
+
+    # Perform the build in a different directory.
+    mkdir ../build
+    cd ../build
+
+    configureScript=../$sourceRoot/configure
+    configureFlags="--enable-languages=$langs --target=$platform --disable-threads --disable-libmudflap --disable-shared --with-headers=$kernelHeadersArm/include --disable-multilib"
+}
+
+
+postInstall=postInstall
+postInstall() {
+    # Remove precompiled headers for now.  They are very big and
+    # probably not very useful yet.
+    find $out/include -name "*.gch" -exec rm -rf {} \; -prune
+
+    # Remove `fixincl' to prevent a retained dependency on the
+    # previous gcc.
+    rm -rf $out/libexec/gcc/*/*/install-tools
+}
+
+
+#if test -z "$profiledCompiler"; then
+    #makeFlags="bootstrap"
+#else    
+    #makeFlags="profiledbootstrap"
+#fi
+
+genericBuild
diff --git a/pkgs/development/compilers/gcc-4.0-arm/default.nix b/pkgs/development/compilers/gcc-4.0-arm/default.nix
new file mode 100644
index 000000000000..e6a6ec53d594
--- /dev/null
+++ b/pkgs/development/compilers/gcc-4.0-arm/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, noSysDirs
+, langC ? true, langCC ? true, langF77 ? false
+, profiledCompiler ? false
+, binutilsArm
+, kernelHeadersArm
+}:
+
+assert langC;
+
+stdenv.mkDerivation {
+  name = "gcc-4.0.2-arm";
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/gcc/gcc-4.0.2/gcc-core-4.0.2.tar.bz2;
+    md5 = "f7781398ada62ba255486673e6274b26";
+    #url = ftp://ftp.nluug.nl/pub/gnu/gcc/gcc-4.0.2/gcc-4.0.2.tar.bz2;
+    #md5 = "a659b8388cac9db2b13e056e574ceeb0";
+  };
+  # !!! apply only if noSysDirs is set
+  patches = [./no-sys-dirs.patch ./gcc-inhibit.patch];
+  inherit noSysDirs langC langCC langF77 profiledCompiler;
+  buildInputs = [binutilsArm];
+  inherit kernelHeadersArm binutilsArm;
+  platform = "arm-linux";
+}
diff --git a/pkgs/development/compilers/gcc-4.0-arm/no-sys-dirs.patch b/pkgs/development/compilers/gcc-4.0-arm/no-sys-dirs.patch
new file mode 100644
index 000000000000..c19c171c3c22
--- /dev/null
+++ b/pkgs/development/compilers/gcc-4.0-arm/no-sys-dirs.patch
@@ -0,0 +1,182 @@
+diff -rc gcc-4.0.0-orig/gcc/cppdefault.c gcc-4.0.0/gcc/cppdefault.c
+*** gcc-4.0.0-orig/gcc/cppdefault.c	2004-11-03 04:23:49.000000000 +0100
+--- gcc-4.0.0/gcc/cppdefault.c	2005-04-22 09:53:28.000000000 +0200
+***************
+*** 41,46 ****
+--- 41,50 ----
+  # undef CROSS_INCLUDE_DIR
+  #endif
+  
++ #undef LOCAL_INCLUDE_DIR
++ #undef SYSTEM_INCLUDE_DIR
++ #undef STANDARD_INCLUDE_DIR
++ 
+  const struct default_include cpp_include_defaults[]
+  #ifdef INCLUDE_DEFAULTS
+  = INCLUDE_DEFAULTS;
+diff -rc gcc-4.0.0-orig/gcc/Makefile.in gcc-4.0.0/gcc/Makefile.in
+*** gcc-4.0.0-orig/gcc/Makefile.in	2005-04-04 21:45:13.000000000 +0200
+--- gcc-4.0.0/gcc/Makefile.in	2005-04-22 10:38:50.000000000 +0200
+***************
+*** 213,219 ****
+  CPPFLAGS = @CPPFLAGS@
+  
+  # These exists to be overridden by the x-* and t-* files, respectively.
+! X_CFLAGS =
+  T_CFLAGS =
+  
+  X_CPPFLAGS =
+--- 213,219 ----
+  CPPFLAGS = @CPPFLAGS@
+  
+  # These exists to be overridden by the x-* and t-* files, respectively.
+! X_CFLAGS = $(NIX_EXTRA_CFLAGS) $(NIX_EXTRA_LDFLAGS)
+  T_CFLAGS =
+  
+  X_CPPFLAGS =
+***************
+*** 373,379 ****
+  MD5_H	    = $(srcdir)/../include/md5.h
+  
+  # Default native SYSTEM_HEADER_DIR, to be overridden by targets.
+! NATIVE_SYSTEM_HEADER_DIR = /usr/include
+  # Default cross SYSTEM_HEADER_DIR, to be overridden by targets.
+  CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
+  
+--- 373,383 ----
+  MD5_H	    = $(srcdir)/../include/md5.h
+  
+  # Default native SYSTEM_HEADER_DIR, to be overridden by targets.
+! # Nix: we override NATIVE_SYSTEM_HEADER_DIR in order to prevent
+! # `fixinc' from fixing header files in /usr/include.  However,
+! # NATIVE_SYSTEM_HEADER_DIR must point to an existing directory, so set
+! # it to some dummy directory.
+! NATIVE_SYSTEM_HEADER_DIR = $(NIX_FIXINC_DUMMY)
+  # Default cross SYSTEM_HEADER_DIR, to be overridden by targets.
+  CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
+  
+***************
+*** 385,391 ****
+  STMP_FIXINC = @STMP_FIXINC@
+  
+  # Test to see whether <limits.h> exists in the system header files.
+! LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
+  
+  # Directory for prefix to system directories, for
+  # each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
+--- 389,395 ----
+  STMP_FIXINC = @STMP_FIXINC@
+  
+  # Test to see whether <limits.h> exists in the system header files.
+! LIMITS_H_TEST = true
+  
+  # Directory for prefix to system directories, for
+  # each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
+***************
+*** 2677,2683 ****
+    -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
+    -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_noncanonical)\" \
+    -DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \
+!   -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \
+    -DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \
+    -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
+    @TARGET_SYSTEM_ROOT_DEFINE@
+--- 2681,2687 ----
+    -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
+    -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_noncanonical)\" \
+    -DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \
+!   -DLOCAL_INCLUDE_DIR=\"/no-such-dir\" \
+    -DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \
+    -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
+    @TARGET_SYSTEM_ROOT_DEFINE@
+Only in gcc-4.0.0: ltcf-cxx.sh.orig
+diff -rc gcc-4.0.0-orig/ltconfig gcc-4.0.0/ltconfig
+*** gcc-4.0.0-orig/ltconfig	2004-10-02 18:33:06.000000000 +0200
+--- gcc-4.0.0/ltconfig	2005-04-22 13:33:33.000000000 +0200
+***************
+*** 2321,2326 ****
+--- 2321,2331 ----
+  # A language-specific compiler.
+  CC=$CC
+  
++ # Ugly hack to get libmudflap (and possibly other libraries) to build.
++ # Libtool filters out \`-B' flags when linking (why?), so the \`-B' flag
++ # to Glibc gets lost.  Here we forcibly add it to any invocation.
++ CC="\$CC $NIX_EXTRA_LDFLAGS"
++ 
+  # Is the compiler the GNU C compiler?
+  with_gcc=$with_gcc
+  
+Only in gcc-4.0.0: ltconfig~
+diff -rc gcc-4.0.0-orig/Makefile.in gcc-4.0.0/Makefile.in
+*** gcc-4.0.0-orig/Makefile.in	2005-04-21 09:04:10.000000000 +0200
+--- gcc-4.0.0/Makefile.in	2005-04-22 09:53:28.000000000 +0200
+***************
+*** 336,342 ****
+  NM = @NM@
+  
+  LD = @LD@
+! LDFLAGS = 
+  
+  RANLIB = @RANLIB@
+  
+--- 336,342 ----
+  NM = @NM@
+  
+  LD = @LD@
+! LDFLAGS = $(NIX_EXTRA_LDFLAGS)
+  
+  RANLIB = @RANLIB@
+  
+***************
+*** 387,393 ****
+  # CFLAGS will be just -g.  We want to ensure that TARGET libraries
+  # (which we know are built with gcc) are built with optimizations so
+  # prepend -O2 when setting CFLAGS_FOR_TARGET.
+! CFLAGS_FOR_TARGET = -O2 $(CFLAGS)
+  # If GCC_FOR_TARGET is not overriden on the command line, then this
+  # variable is passed down to the gcc Makefile, where it is used to
+  # build libgcc2.a.  We define it here so that it can itself be
+--- 387,393 ----
+  # CFLAGS will be just -g.  We want to ensure that TARGET libraries
+  # (which we know are built with gcc) are built with optimizations so
+  # prepend -O2 when setting CFLAGS_FOR_TARGET.
+! CFLAGS_FOR_TARGET = -O2 $(CFLAGS) $(NIX_EXTRA_CFLAGS)
+  # If GCC_FOR_TARGET is not overriden on the command line, then this
+  # variable is passed down to the gcc Makefile, where it is used to
+  # build libgcc2.a.  We define it here so that it can itself be
+***************
+*** 400,406 ****
+  RAW_CXX_FOR_TARGET = @RAW_CXX_FOR_TARGET@
+  CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = @CXX_FOR_TARGET_FOR_RECURSIVE_MAKE@
+  RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = @RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE@
+! CXXFLAGS_FOR_TARGET = $(CXXFLAGS)
+  LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
+  
+  DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
+--- 400,406 ----
+  RAW_CXX_FOR_TARGET = @RAW_CXX_FOR_TARGET@
+  CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = @CXX_FOR_TARGET_FOR_RECURSIVE_MAKE@
+  RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = @RAW_CXX_FOR_TARGET_FOR_RECURSIVE_MAKE@
+! CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(NIX_EXTRA_CFLAGS)
+  LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
+  
+  DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
+***************
+*** 434,440 ****
+      fi; \
+    fi`
+  
+! LDFLAGS_FOR_TARGET = 
+  
+  NM_FOR_TARGET=@NM_FOR_TARGET@
+  CONFIGURED_NM_FOR_TARGET=@CONFIGURED_NM_FOR_TARGET@
+--- 434,440 ----
+      fi; \
+    fi`
+  
+! LDFLAGS_FOR_TARGET = $(NIX_EXTRA_LDFLAGS)
+  
+  NM_FOR_TARGET=@NM_FOR_TARGET@
+  CONFIGURED_NM_FOR_TARGET=@CONFIGURED_NM_FOR_TARGET@
+Only in gcc-4.0.0: Makefile.in.orig