diff -r 1ba79f2126df -r 7d70bcf940a9 patches/gcc/3.3.6/100-fix-fixincl.patch --- a/patches/gcc/3.3.6/100-fix-fixincl.patch Wed Oct 28 12:03:38 2009 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -See http://gcc.gnu.org/PR22541 - -From: Dan Kegel - -When building gcc-3.4.3 or gcc-4.0.0 as a cross into a clean $PREFIX -(the only two I've tried like this), the configure script happily copies -the glibc include files from include to sys-include; here's the line -from the log file (with $PREFIX instead of the real prefix): - -Copying $PREFIX/i686-unknown-linux-gnu/include to $PREFIX/i686-unknown-linux-gnu/sys-include - -But later, when running fixincludes, it gives the error message - The directory that should contain system headers does not exist: - $PREFIX/lib/gcc/i686-unknown-linux-gnu/3.4.3/../../../../i686-unknown-linux-gnu/sys-include - -Nevertheless, it continues building; the header files it installs in - $PREFIX/lib/gcc/i686-unknown-linux-gnu/3.4.3/include -do not include the boilerplate that would cause it to #include_next the -glibc headers in the system header directory. -Thus the resulting toolchain can't compile the following program: -#include -int x = PATH_MAX; -because its limits.h doesn't include the glibc header. - -That's not nice. I suspect the problem is that gcc/Makefile.in assumes that -it can refer to $PREFIX/i686-unknown-linux-gnu with the path - $PREFIX/lib/../i686-unknown-linux-gnu, but -that fails because the directory $PREFIX/lib doesn't exist during 'make all'; -it is only created later, during 'make install'. (Which makes this problem -confusing, since one only notices the breakage well after 'make install', -at which point the path configure complained about does exist, and has the -right stuff in it.) - -A possible fix is to replace the line in gcc/Makefile.in that says - SYSTEM_HEADER_DIR = @SYSTEM_HEADER_DIR@ -with a version that gets rid of extra ..'s, e.g. - SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER_DIR@ | sed -e :a -e "s,[^/]*/\.\.\/,,;ta"` -(hey, that's the first time I've ever used a label in a sed script; thanks to the sed faq -for explaining the :a ... ta method of looping to repeat a search-and-replace until it doesn't match.) - - ---- gcc-3.4.3/gcc/Makefile.in.foo 2005-05-20 11:41:39.000000000 -0700 -+++ gcc-3.4.3/gcc/Makefile.in 2005-05-20 12:08:46.000000000 -0700 -@@ -350,7 +350,10 @@ - CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@ - - # autoconf sets SYSTEM_HEADER_DIR to one of the above. --SYSTEM_HEADER_DIR = @SYSTEM_HEADER_DIR@ -+# Purge it of unneccessary internal relative paths -+# to directories that might not exist yet. -+# The sed idiom for this is to repeat the search-and-replace until it doesn't match, using :a ... ta. -+SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER_DIR@ | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta` - - # Control whether to run fixproto and fixincludes. - STMP_FIXPROTO = @STMP_FIXPROTO@ -@@ -2532,11 +2535,13 @@ - $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(gcc_tooldir) - - # Build fixed copies of system files. -+# Abort if no system headers available, unless building a crosscompiler. -+# FIXME: abort unless building --without-headers would be more accurate and less ugly - stmp-fixinc: fixinc.sh gsyslimits.h - @if test ! -d ${SYSTEM_HEADER_DIR}; then \ - echo The directory that should contain system headers does not exist: >&2 ; \ - echo " ${SYSTEM_HEADER_DIR}" >&2 ; \ -- if test "x${SYSTEM_HEADER_DIR}" = "x${gcc_tooldir}/sys-include"; \ -+ if test "x${SYSTEM_HEADER_DIR}" = "x`echo "${gcc_tooldir}/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`"; \ - then sleep 1; else exit 1; fi; \ - fi - rm -rf include; mkdir include