about summary refs log tree commit diff
path: root/pkgs/development/compilers/gcc/builder.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/compilers/gcc/builder.sh')
-rwxr-xr-xpkgs/development/compilers/gcc/builder.sh65
1 files changed, 65 insertions, 0 deletions
diff --git a/pkgs/development/compilers/gcc/builder.sh b/pkgs/development/compilers/gcc/builder.sh
new file mode 100755
index 0000000000000..ce772d07a78c6
--- /dev/null
+++ b/pkgs/development/compilers/gcc/builder.sh
@@ -0,0 +1,65 @@
+#! /bin/sh -e
+
+buildinputs="$binutils"
+. $stdenv/setup
+
+tar xvfj $src
+
+if test "$enforcePurity" = "1"; then
+    # Disable the standard include directories.
+    cd gcc-*
+    cat >> ./gcc/cppdefault.h <<EOF
+#undef LOCAL_INCLUDE_DIR
+#undef SYSTEM_INCLUDE_DIR
+#undef STANDARD_INCLUDE_DIR
+EOF
+    cd ..
+fi
+
+langs="c"
+if test -n "$langCC"; then
+    langs="$langs,c++"
+fi
+if test -n "$langF77"; then
+    langs="$langs,f77"
+fi
+
+# Configure.
+mkdir build
+cd build
+../gcc-*/configure --prefix=$out --enable-languages="$langs"
+
+if test "$enforcePurity" = "1"; then
+    # Patch some of the makefiles to force linking against our own glibc.
+    . $NIX_GCC/nix-support/add-flags # add glibc/gcc flags
+    extraflags="-Wl,-s $NIX_CFLAGS_COMPILE $NIX_CFLAGS_LINK"
+    for i in $NIX_LDFLAGS; do
+        extraflags="$extraflags -Wl,$i"
+    done
+
+    mf=Makefile
+    sed \
+        -e "s^FLAGS_FOR_TARGET =\(.*\)^FLAGS_FOR_TARGET = \1 $extraflags^" \
+        < $mf > $mf.tmp
+    mv $mf.tmp $mf
+
+    mf=gcc/Makefile
+    sed \
+        -e "s^X_CFLAGS =\(.*\)^X_CFLAGS = \1 $extraflags^" \
+        < $mf > $mf.tmp
+    mv $mf.tmp $mf
+
+    # Patch gcc/Makefile to prevent fixinc.sh from "fixing" system header files
+    # from /usr/include.
+    mf=gcc/Makefile
+    sed \
+        -e "s^NATIVE_SYSTEM_HEADER_DIR =\(.*\)^NATIVE_SYSTEM_HEADER_DIR = /fixinc-disabled^" \
+        < $mf > $mf.tmp
+    mv $mf.tmp $mf
+fi
+
+# Build and install.
+make bootstrap
+make install
+
+find $out -name "*.a" -exec strip -S {} \;