patches/gcc/4.0.1/100-fix-fixincl.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Apr 26 21:31:05 2008 +0000 (2008-04-26)
changeset 454 372b2f397baa
permissions -rw-r--r--
Configure tsocks with a simple heuristic.

Consider the proxy has to be in a 'local' network. It means it is directly
reachable by the local machine, even if the local machine has to hop through
one or more gates to reach the proxy (often the case in enterprise networks
where class A 10.0.0.0/8 is in fact sub-divided into smaller networks, each
one of them in a different location, eg. 10.1.0.0/16 in a place, while
10.2.0.0/16 would be on the other side of the world). Not being in the same
subnet does not mean the proxy is not available.

So we will build a mask with at most high bits set, which defines a network
that has both the local machine and the proxy. Because a machine may have
more than one interface, build a mask for each of them, removing 127.0.0.1
which is added automagically by tsocks, and removing duplicate masks.

If all of this does not work, then it means the local machine can NOT in fact
reach the proxy, which in turn means the user mis-configured something (most
probably a typo...).

/trunk/scripts/crosstool.sh | 61 52 9 0 +++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 52 insertions(+), 9 deletions(-)
     1 See http://gcc.gnu.org/PR22541
     2 
     3 From: Dan Kegel
     4 
     5 When building gcc-3.4.3 or gcc-4.0.[01] into a clean $PREFIX (the only two I've tried like this),
     6 the configure script happily copies the glibc include files from include to sys-include;
     7 here's the line from the log file (with $PREFIX instead of the real prefix):
     8 
     9 Copying $PREFIX/i686-unknown-linux-gnu/include to $PREFIX/i686-unknown-linux-gnu/sys-include
    10 
    11 But later, when running fixincludes, it gives the error message
    12  The directory that should contain system headers does not exist:
    13   $PREFIX/lib/gcc/i686-unknown-linux-gnu/3.4.3/../../../../i686-unknown-linux-gnu/sys-include
    14 
    15 Nevertheless, it continues building; the header files it installs in
    16  $PREFIX/lib/gcc/i686-unknown-linux-gnu/3.4.3/include
    17 do not include the boilerplate that would cause it to #include_next the
    18 glibc headers in the system header directory.
    19 Thus the resulting toolchain can't compile the following program:
    20 #include <limits.h>
    21 int x = PATH_MAX;
    22 because its limits.h doesn't include the glibc header.
    23 
    24 That's not nice.  I suspect the problem is that gcc/Makefile.in assumes that
    25 it can refer to $PREFIX/i686-unknown-linux-gnu  with the path 
    26                 $PREFIX/lib/../i686-unknown-linux-gnu, but
    27 that fails because the directory $PREFIX/lib doesn't exist during 'make all';
    28 it is only created later, during 'make install'.  (Which makes this problem
    29 confusing, since one only notices the breakage well after 'make install',
    30 at which point the path configure complained about does exist, and has the
    31 right stuff in it.)
    32 
    33 A possible fix is to replace the line in gcc/Makefile.in that says
    34     SYSTEM_HEADER_DIR = @SYSTEM_HEADER_DIR@
    35 with a version that gets rid of extra ..'s, e.g.
    36     SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER_DIR@ | sed -e :a -e "s,[^/]*/\.\.\/,,;ta"`
    37 (hey, that's the first time I've ever used a label in a sed script; thanks to the sed faq
    38 for explaining the :a ... ta method of looping to repeat a search-and-replace until it doesn't match.)
    39 
    40 [rediffed against gcc-4.0.0]
    41 
    42 --- gcc-4.0.0/gcc/Makefile.in.orig	2005-04-04 12:45:13.000000000 -0700
    43 +++ gcc-4.0.0/gcc/Makefile.in	2005-05-20 12:33:43.000000000 -0700
    44 @@ -378,7 +378,10 @@
    45  CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
    46  
    47  # autoconf sets SYSTEM_HEADER_DIR to one of the above.
    48 -SYSTEM_HEADER_DIR = @SYSTEM_HEADER_DIR@
    49 +# Purge it of unneccessary internal relative paths
    50 +# to directories that might not exist yet.
    51 +# The sed idiom for this is to repeat the search-and-replace until it doesn't match, using :a ... ta.
    52 +SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER_DIR@ | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`
    53  
    54  # Control whether to run fixproto and fixincludes.
    55  STMP_FIXPROTO = @STMP_FIXPROTO@
    56 @@ -2838,13 +2841,15 @@
    57  ../$(build_subdir)/fixincludes/fixincl: ; @ :
    58  
    59  # Build fixed copies of system files.
    60 +# Abort if no system headers available, unless building a crosscompiler.
    61 +# FIXME: abort unless building --without-headers would be more accurate and less ugly
    62  stmp-fixinc: gsyslimits.h macro_list \
    63    ../$(build_subdir)/fixincludes/fixincl \
    64    ../$(build_subdir)/fixincludes/fixinc.sh
    65  	@if test ! -d ${SYSTEM_HEADER_DIR}; then \
    66  	  echo The directory that should contain system headers does not exist: >&2 ; \
    67  	  echo "  ${SYSTEM_HEADER_DIR}" >&2 ; \
    68 -	  if test "x${SYSTEM_HEADER_DIR}" = "x${gcc_tooldir}/sys-include"; \
    69 +	  if test "x${SYSTEM_HEADER_DIR}" = "x`echo "${gcc_tooldir}/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`"; \
    70  	  then sleep 1; else exit 1; fi; \
    71  	fi
    72  	rm -rf include; mkdir include