OSDN Git Service

* Makefile.in (TARGET_TOOLPREFIX): No longer define.
[pf3gnuchains/gcc-fork.git] / gcc / configure.in
index 4d991f9..41917f4 100644 (file)
@@ -1,7 +1,7 @@
 # configure.in for GNU CC
 # Process this file with autoconf to generate a configuration script.
 
-# Copyright (C) 1997 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1998 Free Software Foundation, Inc.
 
 #This file is part of GNU CC.
 
@@ -22,7 +22,7 @@
 
 # Initialization and defaults
 AC_INIT(tree.c)
-AC_CONFIG_HEADER(config.h:config.in)
+AC_CONFIG_HEADER(auto-host.h:config.in)
 
 remove=rm
 hard_link=ln
@@ -34,25 +34,25 @@ copy=cp
 # With GNU ld
 AC_ARG_WITH(gnu-ld,
 [  --with-gnu-ld           arrange to work with GNU ld.],
-gnu_ld=yes,
-gnu_ld=no)
+gnu_ld_flag="$with_gnu_ld",
+gnu_ld_flag=no)
 
 # With GNU as
 AC_ARG_WITH(gnu-as,
 [  --with-gnu-as           arrange to work with GNU as.],
-gas=yes,
-gas=no)
+gas_flag="$with_gnu_as",
+gas_flag=no)
 
 # With stabs
 AC_ARG_WITH(stabs,
 [  --with-stabs            arrange to use stabs instead of host debug format.],
-stabs=yes,
+stabs="$with_stabs",
 stabs=no)
 
 # With ELF
 AC_ARG_WITH(elf,
 [  --with-elf              arrange to use ELF instead of host debug format.],
-elf=yes,
+elf="$with_elf",
 elf=no)
 
 # Specify the local prefix
@@ -78,6 +78,12 @@ if [[ x$gxx_include_dir = x ]]; then
        gxx_include_dir='${prefix}/include/g++'
 fi
 
+# Enable expensive internal checks
+AC_ARG_ENABLE(checking,
+[  --enable-checking       enable expensive run-time checks.],
+AC_DEFINE(ENABLE_CHECKING)  
+)
+
 # Enable use of cpplib for C.
 AC_ARG_ENABLE(c-cpplib,
 [  --enable-c-cpplib       Use cpplib for C.],
@@ -85,6 +91,19 @@ if [[[ x$enable_c_cpplib != xno ]]]; then
   extra_c_objs="${extra_c_objs} cpplib.o cppexp.o cpphash.o cpperror.o"
   extra_c_flags=-DUSE_CPPLIB=1
 fi)
+  
+# Enable Haifa scheduler.
+AC_ARG_ENABLE(haifa,
+[  --enable-haifa          Use the experimental scheduler.
+  --disable-haifa         Don't use the experimental scheduler for the
+                          targets which normally enable it.])
+# Fast fixincludes
+#
+# This is a work in progress...
+AC_ARG_WITH(fast-fixincludes,
+[  --with-fast-fixincludes    Use a faster fixinclude program.  Experimental],
+fast_fixinc="$with_fast_fixincludes",
+fast_fixinc=no)
 
 # Enable threads
 # Pass with no value to take the default
@@ -97,19 +116,20 @@ if [[[ x$enable_threads = xno ]]]; then
 fi,
 enable_threads='')
 
+enable_threads_flag=$enable_threads
 # Check if a valid thread package
-case x${enable_threads} in
+case x${enable_threads_flag} in
        x | xno)
                # No threads
-               thread_file='single'
+               target_thread_file='single'
                ;;
        xyes)
                # default
-               thread_file=''
+               target_thread_file=''
                ;;
        xdecosf1 | xirix | xmach | xos2 | xposix | xpthreads | xsingle | \
-       xsolaris | xwin32)
-               thread_file=$enable_threads
+       xsolaris | xwin32 | xdce | xvxworks)
+               target_thread_file=$enable_threads_flag
                ;;
        *)
                echo "$enable_threads is an unknown thread package" 1>&2
@@ -120,30 +140,66 @@ esac
 # Determine the host, build, and target systems
 AC_CANONICAL_SYSTEM
 
+# Find the native compiler
+AC_PROG_CC
+AC_PROG_MAKE_SET
+
 # Find some useful tools
 AC_PROG_AWK
 AC_PROG_LEX
 GCC_PROG_LN
 GCC_PROG_LN_S
+GCC_C_VOLATILE
 AC_PROG_RANLIB
 AC_PROG_YACC
 EGCS_PROG_INSTALL
 
-# Find the native compiler
-AC_PROG_CC
-AC_PROG_MAKE_SET
-
-AC_CHECK_HEADERS(stddef.h string.h strings.h stdlib.h time.h unistd.h varargs.h sys/varargs.h)
+AC_HEADER_STDC
+AC_HEADER_TIME
+AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h fcntl.h unistd.h stab.h sys/file.h sys/time.h sys/resource.h sys/param.h sys/times.h wait.h sys/wait.h)
+
+# Check for thread headers.
+AC_CHECK_HEADER(thread.h, [have_thread_h=yes], [have_thread_h=])
+AC_CHECK_HEADER(pthread.h, [have_pthread_h=yes], [have_pthread_h=])
+
+# See if the system preprocessor understands the ANSI C preprocessor
+# stringification operator.
+AC_MSG_CHECKING(whether cpp understands the stringify operator)
+AC_CACHE_VAL(gcc_cv_c_have_stringify,
+[AC_TRY_COMPILE(,
+[#define S(x)   #x
+char *test = S(foo);],
+gcc_cv_c_have_stringify=yes, gcc_cv_c_have_stringify=no)])
+AC_MSG_RESULT($gcc_cv_c_have_stringify)
+if test $gcc_cv_c_have_stringify = yes; then
+  AC_DEFINE(HAVE_CPP_STRINGIFY)
+fi
 
-GCC_NEED_DECLARATION(malloc)
-GCC_NEED_DECLARATION(realloc)
-GCC_NEED_DECLARATION(calloc)
-GCC_NEED_DECLARATION(free)
+# Use <inttypes.h> only if it exists,
+# doesn't clash with <sys/types.h>, and declares intmax_t.
+AC_MSG_CHECKING(for inttypes.h)
+AC_CACHE_VAL(gcc_cv_header_inttypes_h,
+[AC_TRY_COMPILE(
+  [#include <sys/types.h>
+#include <inttypes.h>],
+  [intmax_t i = -1;],
+  [AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H)
+   gcc_cv_header_inttypes_h=yes],
+  gcc_cv_header_inttypes_h=no)])
+AC_MSG_RESULT($gcc_cv_header_inttypes_h)
+
+AC_CHECK_FUNCS(strtoul bsearch strerror putenv popen bcopy bzero bcmp \
+       index rindex strchr strrchr kill getrlimit setrlimit atoll atoq \
+       sysconf isascii)
+
+GCC_FUNC_VFPRINTF_DOPRNT
+GCC_FUNC_PRINTF_PTR
+
+GCC_NEED_DECLARATIONS(malloc realloc calloc free bcopy bzero bcmp \
+       index rindex getenv atol sbrk abort atof)
 
 AC_DECL_SYS_SIGLIST
 
-AC_CHECK_FUNCS(strerror)
-
 # File extensions
 manext='.1'
 objext='.o'
@@ -151,11 +207,14 @@ AC_SUBST(manext)
 AC_SUBST(objext)
 
 build_xm_file=
+build_xm_defines=
 build_install_headers_dir=install-headers-tar
 build_exeext=
 host_xm_file=
+host_xm_defines=
 host_xmake_file=
 host_truncate_target=
+host_exeext=
 
 # Decode the host machine, then the target machine.
 # For the host machine, we save the xm_file variable as host_xm_file;
@@ -173,13 +232,16 @@ for machine in $build $host $target; do
        extra_objs=
        extra_host_objs=
        extra_gcc_objs=
+       xm_defines=
        float_format=
        # Set this to force installation and use of collect2.
        use_collect2=
        # Set this to override the default target model.
        target_cpu_default=
        # Set this to control which fixincludes program to use.
-       fixincludes=fixincludes
+       if [[ x$fast_fixinc != xyes ]] ; then
+               fixincludes=fixincludes
+       else fixincludes=fixinc.sh ; fi
        # Set this to control how the header file directory is installed.
        install_headers_dir=install-headers-tar
        # Set this to a non-empty list of args to pass to cpp if the target
@@ -192,6 +254,13 @@ for machine in $build $host $target; do
        # Set this if the build machine requires executables to have a
        # file name suffix.
        exeext=
+       # Set this to control which thread package will be used.
+       thread_file=
+       # Reinitialize these from the flag values every loop pass, since some
+       # configure entries modify them.
+       gas="$gas_flag"
+       gnu_ld="$gnu_ld_flag"
+       enable_threads=$enable_threads_flag
 
        # Set default cpu_type, tm_file and xm_file so it can be updated in
        # each machine entry.
@@ -206,7 +275,7 @@ for machine in $build $host $target; do
        c*-convex-*)
                cpu_type=convex
                ;;
-       i[[3456]]86-*-*)
+       i[[34567]]86-*-*)
                cpu_type=i386
                ;;
        hppa*-*-*)
@@ -232,6 +301,13 @@ for machine in $build $host $target; do
        tm_file=${cpu_type}/${cpu_type}.h
        xm_file=${cpu_type}/xm-${cpu_type}.h
        
+       # Set the default macros to define for GNU/Linux systems.
+       case $machine in
+       *-*-linux-gnu*)
+               xm_defines="HAVE_ATEXIT POSIX NO_STAB_H BSTRING"
+               ;;
+       esac
+
        case $machine in
        # Support site-specific machine types.
        *local*)
@@ -252,7 +328,7 @@ for machine in $build $host $target; do
                ;;
        a29k-*-bsd* | a29k-*-sym1*)
                tm_file="${tm_file} a29k/unix.h"
-               xm_file=a29k/xm-unix.h
+               xm_defines=USG
                xmake_file=a29k/x-unix
                use_collect2=yes
                ;;
@@ -260,40 +336,39 @@ for machine in $build $host $target; do
                tm_file="${tm_file} dbxcoff.h a29k/udi.h"
                tmake_file=a29k/t-a29kbare
                ;;
-       a29k-*-vxworks*)
+       a29k-wrs-vxworks*)
                tm_file="${tm_file} dbxcoff.h a29k/udi.h a29k/vx29k.h"
                tmake_file=a29k/t-vx29k
                extra_parts="crtbegin.o crtend.o"
+               thread_file='vxworks'
                ;;
        a29k-*-*)                       # Default a29k environment.
                use_collect2=yes
                ;;
        alpha*-*-linux-gnuecoff*)
-               tm_file="${tm_file} alpha/linux.h"
-               xm_file="${xm_file} alpha/xm-linux.h"
+               tm_file="${tm_file} alpha/linux-ecoff.h alpha/linux.h"
                target_cpu_default="MASK_GAS"
                gas=no
                xmake_file=none
-               fixincludes=Makefile.in
                gas=yes gnu_ld=yes
                ;;
        alpha*-*-linux-gnulibc1*)
-               tm_file="${tm_file} alpha/linux.h alpha/elf.h"
-               xm_file="${xm_file} alpha/xm-linux.h"
+               tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h"
                target_cpu_default="MASK_GAS"
-               tmake_file="t-linux t-linux-gnulibc1 alpha/t-linux"
+               tmake_file="t-linux t-linux-gnulibc1 alpha/t-linux alpha/t-crtbe"
+               extra_parts="crtbegin.o crtend.o"
+               fixincludes=fixinc.wrap
                xmake_file=none
-               fixincludes=Makefile.in
                gas=yes gnu_ld=yes
                if [[ x$enable_threads = xyes ]]; then
                        thread_file='posix'
                fi
                ;;
        alpha*-*-linux-gnu*)
-               tm_file="${tm_file} alpha/linux.h alpha/elf.h"
-               xm_file="${xm_file} alpha/xm-linux.h"
+               tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h"
                target_cpu_default="MASK_GAS"
-               tmake_file="t-linux alpha/t-linux"
+               tmake_file="t-linux alpha/t-linux alpha/t-crtbe"
+               extra_parts="crtbegin.o crtend.o"
                xmake_file=none
                fixincludes=Makefile.in
                gas=yes gnu_ld=yes
@@ -301,7 +376,17 @@ for machine in $build $host $target; do
                        thread_file='posix'
                fi
                ;;
-       alpha*-dec-osf[[456789]]*)
+       alpha*-*-netbsd*)
+               tm_file="${tm_file} alpha/elf.h alpha/netbsd.h alpha/netbsdl-elf.h"
+               target_cpu_default="MASK_GAS"
+               tmake_file="alpha/t-crtbe"
+               extra_parts="crtbegin.o crtend.o"
+               xmake_file=none
+               fixincludes=fixinc.wrap
+               gas=yes gnu_ld=yes
+               ;;
+               
+       alpha*-dec-osf*)
                if [[ x$stabs = xyes ]]
                then
                        tm_file="${tm_file} dbx.h"
@@ -311,52 +396,28 @@ for machine in $build $host $target; do
                        extra_passes="mips-tfile mips-tdump"
                fi
                use_collect2=yes
-               # Some versions of OSF4 (specifically X4.0-9 296.7) have
-               # a broken tar, so we use cpio instead.
                case $machine in
-                 alpha*-dec-osf4*)
+                 *-*-osf1*)
+                   tm_file="${tm_file} alpha/osf.h alpha/osf12.h alpha/osf2or3.h"
+                   ;;
+                 *-*-osf[[23]]*)
+                   tm_file="${tm_file} alpha/osf.h alpha/osf2or3.h"
+                   ;;
+                 *-*-osf4*)
+                   tm_file="${tm_file} alpha/osf.h"
+                   # Some versions of OSF4 (specifically X4.0-9 296.7) have
+                   # a broken tar, so we use cpio instead.
                    install_headers_dir=install-headers-cpio
                    ;;
                esac
+               case $machine in
+                 *-*-osf4.0[[b-z]] | *-*-osf4.[[1-9]]*)
+                   target_cpu_default=MASK_SUPPORT_ARCH
+                   ;;
+               esac
                ;;
-       alpha*-dec-osf[[23]]*)
-               tm_file="${tm_file} alpha/osf2or3.h"
-               if [[ x$stabs = xyes ]]
-               then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               if [[ x$gas != xyes ]]
-               then
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               use_collect2=yes
-               ;;
-       alpha*-dec-osf1.2)
-               tm_file="${tm_file} alpha/osf12.h"
-               if [[ x$stabs = xyes ]]
-               then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               if [[ x$gas != xyes ]]
-               then
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               use_collect2=yes
-               ;;
-       alpha*-*-osf*)
-               if [[ x$stabs = xyes ]]
-               then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               if [[ x$gas != xyes ]]
-               then
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               use_collect2=yes
-               ;;
-       alpha*-*-winnt3*)
+       alpha*-*-winnt*)
                tm_file="${tm_file} alpha/win-nt.h"
-               target_cpu_default=MASK_WINDOWS_NT
                xm_file="${xm_file} config/winnt/xm-winnt.h alpha/xm-winnt.h"
                tmake_file=t-libc-ok
                xmake_file=winnt/x-winnt
@@ -411,15 +472,13 @@ for machine in $build $host $target; do
                ;;
        arm-*-netbsd*)
                tm_file=arm/netbsd.h
-               xm_file=arm/xm-netbsd.h
-               tmake_file=arm/t-netbsd
+               xm_file="xm-siglist.h ${xm_file}"
+               tmake_file="t-netbsd arm/t-netbsd"
                # On NetBSD, the headers are already okay, except for math.h.
-               fixincludes=fixinc.math
-               use_collect2=yes
+               fixincludes=fixinc.wrap
                ;;
-       arm-*-linux-gnuaout*)           # ARM Linux
+       arm-*-linux-gnuaout*)           # ARM GNU/Linux
                cpu_type=arm
-               xm_file=arm/xm-linux.h
                xmake_file=x-linux
                tm_file=arm/linux-gas.h
                tmake_file=arm/t-linux
@@ -428,6 +487,7 @@ for machine in $build $host $target; do
                ;;
        arm-*-aout)
                tm_file=arm/aout.h
+               tmake_file=arm/t-bare
                ;;
        c1-convex-*)                    # Convex C1
                target_cpu_default=1
@@ -474,57 +534,36 @@ for machine in $build $host $target; do
                float_format=i32
                ;;
        hppa1.1-*-pro*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                tm_file="pa/pa-pro.h ${tm_file} pa/pa-pro-end.h libgloss.h"
                xm_file=pa/xm-papro.h
                tmake_file=pa/t-pro
                ;;
        hppa1.1-*-osf*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                target_cpu_default=1
                tm_file="${tm_file} pa/pa-osf.h"
                use_collect2=yes
                fixincludes=Makefile.in
                ;;
        hppa1.1-*-rtems*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                tm_file="pa/pa-pro.h ${tm_file} pa/pa-pro-end.h libgloss.h pa/rtems.h"
                xm_file=pa/xm-papro.h
                tmake_file=pa/t-pro
                ;;
        hppa1.0-*-osf*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                tm_file="${tm_file} pa/pa-osf.h"
                use_collect2=yes
                fixincludes=Makefile.in
                ;;
        hppa1.1-*-bsd*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                target_cpu_default=1
                use_collect2=yes
                fixincludes=Makefile.in
                ;;
        hppa1.0-*-bsd*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                use_collect2=yes
                fixincludes=Makefile.in
                ;;
        hppa1.0-*-hpux7*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                tm_file="pa/pa-oldas.h ${tm_file} pa/pa-hpux7.h"
                xm_file=pa/xm-pahpux.h
                xmake_file=pa/x-pa-hpux
@@ -536,9 +575,6 @@ for machine in $build $host $target; do
                use_collect2=yes
                ;;
        hppa1.0-*-hpux8.0[[0-2]]*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                tm_file="${tm_file} pa/pa-hpux.h"
                xm_file=pa/xm-pahpux.h
                xmake_file=pa/x-pa-hpux
@@ -552,9 +588,6 @@ for machine in $build $host $target; do
                use_collect2=yes
                ;;
        hppa1.1-*-hpux8.0[[0-2]]*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                target_cpu_default=1
                tm_file="${tm_file} pa/pa-hpux.h"
                xm_file=pa/xm-pahpux.h
@@ -569,9 +602,6 @@ for machine in $build $host $target; do
                use_collect2=yes
                ;;
        hppa1.1-*-hpux8*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                target_cpu_default=1
                tm_file="${tm_file} pa/pa-hpux.h"
                xm_file=pa/xm-pahpux.h
@@ -584,9 +614,6 @@ for machine in $build $host $target; do
                use_collect2=yes
                ;;
        hppa1.0-*-hpux8*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                tm_file="${tm_file} pa/pa-hpux.h"
                xm_file=pa/xm-pahpux.h
                xmake_file=pa/x-pa-hpux
@@ -598,24 +625,26 @@ for machine in $build $host $target; do
                use_collect2=yes
                ;;
        hppa1.1-*-hpux10*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                target_cpu_default=1
                tm_file="${tm_file} pa/pa-hpux.h pa/pa-hpux10.h"
                xm_file=pa/xm-pahpux.h
                xmake_file=pa/x-pa-hpux
+               tmake_file=pa/t-pa
                if [[ x$gas = xyes ]]
                then
                        tm_file="${tm_file} pa/pa-gas.h"
                fi
+               if [[ x$enable_threads = x ]]; then
+                   enable_threads=$have_pthread_h
+               fi
+               if [[ x$enable_threads = xyes ]]; then
+                       thread_file='dce'
+                       tmake_file="${tmake_file} pa/t-dce-thr"
+               fi
                install_headers_dir=install-headers-cpio
                use_collect2=yes
                ;;
        hppa1.0-*-hpux10*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                tm_file="${tm_file} pa/pa-hpux.h pa/pa-hpux10.h"
                xm_file=pa/xm-pahpux.h
                xmake_file=pa/x-pa-hpux
@@ -623,13 +652,17 @@ for machine in $build $host $target; do
                then
                        tm_file="${tm_file} pa/pa-gas.h"
                fi
+               if [[ x$enable_threads = x ]]; then
+                   enable_threads=$have_pthread_h
+               fi
+               if [[ x$enable_threads = xyes ]]; then
+                       thread_file='dce'
+                       tmake_file="${tmake_file} pa/t-dce-thr"
+               fi
                install_headers_dir=install-headers-cpio
                use_collect2=yes
                ;;
        hppa1.1-*-hpux*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                target_cpu_default=1
                tm_file="${tm_file} pa/pa-hpux.h pa/pa-hpux9.h"
                xm_file=pa/xm-pahpux.h
@@ -642,9 +675,6 @@ for machine in $build $host $target; do
                use_collect2=yes
                ;;
        hppa1.0-*-hpux*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                tm_file="${tm_file} pa/pa-hpux.h pa/pa-hpux9.h"
                xm_file=pa/xm-pahpux.h
                xmake_file=pa/x-pa-hpux
@@ -656,9 +686,6 @@ for machine in $build $host $target; do
                use_collect2=yes
                ;;
        hppa1.1-*-hiux*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                target_cpu_default=1
                tm_file="${tm_file} pa/pa-hpux.h pa/pa-hiux.h"
                xm_file=pa/xm-pahpux.h
@@ -671,9 +698,6 @@ for machine in $build $host $target; do
                use_collect2=yes
                ;;
        hppa1.0-*-hiux*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                tm_file="${tm_file} pa/pa-hpux.h pa/pa-hiux.h"
                xm_file=pa/xm-pahpux.h
                xmake_file=pa/x-pa-hpux
@@ -685,16 +709,13 @@ for machine in $build $host $target; do
                use_collect2=yes
                ;;
        hppa*-*-lites*)
-               if [[ x$enable_haifa != xno ]]; then
-                       enable_haifa=yes
-               fi
                target_cpu_default=1
                use_collect2=yes
                fixincludes=Makefile.in
                ;;
        i370-*-mvs*)
                ;;
-       i[[3456]]86-ibm-aix*)           # IBM PS/2 running AIX
+       i[[34567]]86-ibm-aix*)          # IBM PS/2 running AIX
                 if [[ x$gas = xyes ]]
                then
                        tm_file=i386/aix386.h
@@ -704,11 +725,13 @@ for machine in $build $host $target; do
                        tm_file=i386/aix386ng.h
                        use_collect2=yes
                fi
-               xm_file=i386/xm-aix.h
+               xm_file="xm-alloca.h i386/xm-aix.h ${xm_file}"
+               xm_defines=USG
                xmake_file=i386/x-aix
                ;;
-       i486-ncr-sysv4*)                # NCR 3000 - i486 running system V.4
-               xm_file=i386/xm-sysv4.h
+       i[[34567]]86-ncr-sysv4*)        # NCR 3000 - ix86 running system V.4
+               xm_file="xm-siglist.h xm-alloca.h ${xm_file}"
+               xm_defines="USG POSIX SMALL_ARG_MAX"
                xmake_file=i386/x-ncr3000
                if [[ x$stabs = xyes -a x$gas = xyes ]]
                then
@@ -719,7 +742,7 @@ for machine in $build $host $target; do
                extra_parts="crtbegin.o crtend.o"
                tmake_file=i386/t-crtpic
                ;;
-       i[[3456]]86-next-*)
+       i[[34567]]86-next-*)
                tm_file=i386/next.h
                xm_file=i386/xm-next.h
                tmake_file=i386/t-next
@@ -729,7 +752,7 @@ for machine in $build $host $target; do
                        thread_file='mach'
                fi
                ;;
-       i[[3456]]86-sequent-bsd*)               # 80386 from Sequent
+       i[[34567]]86-sequent-bsd*)              # 80386 from Sequent
                use_collect2=yes
                if [[ x$gas = xyes ]]
                then
@@ -738,8 +761,8 @@ for machine in $build $host $target; do
                        tm_file=i386/sequent.h
                fi
                ;;
-       i[[3456]]86-sequent-ptx1*)
-               xm_file=i386/xm-sysv3.h
+       i[[34567]]86-sequent-ptx1*)
+               xm_defines="USG SVR3"
                xmake_file=i386/x-sysv3
                tm_file=i386/seq-sysv3.h
                tmake_file=i386/t-crtstuff
@@ -747,8 +770,8 @@ for machine in $build $host $target; do
                extra_parts="crtbegin.o crtend.o"
                install_headers_dir=install-headers-cpio
                ;;
-       i[[3456]]86-sequent-ptx2* | i[[3456]]86-sequent-sysv3*)
-               xm_file=i386/xm-sysv3.h
+       i[[34567]]86-sequent-ptx2* | i[[34567]]86-sequent-sysv3*)
+               xm_defines="USG SVR3"
                xmake_file=i386/x-sysv3
                tm_file=i386/seq2-sysv3.h
                tmake_file=i386/t-crtstuff
@@ -756,8 +779,9 @@ for machine in $build $host $target; do
                fixincludes=fixinc.ptx
                install_headers_dir=install-headers-cpio
                ;;
-       i[[3456]]86-sequent-ptx4* | i[[3456]]86-sequent-sysv4*)
-               xm_file=i386/xm-sysv4.h
+       i[[34567]]86-sequent-ptx4* | i[[34567]]86-sequent-sysv4*)
+               xm_file="xm-siglist.h xm-alloca.h ${xm_file}"
+               xm_defines="USG POSIX SMALL_ARG_MAX"
                xmake_file=x-svr4
                tm_file=i386/ptx4-i.h
                tmake_file=t-svr4
@@ -766,58 +790,58 @@ for machine in $build $host $target; do
                install_headers_dir=install-headers-cpio
                ;;
        i386-sun-sunos*)                # Sun i386 roadrunner
-               xm_file=i386/xm-sun.h
+               xm_defines=USG
                tm_file=i386/sun.h
                use_collect2=yes
                ;;
-       i[[3456]]86-*-aout*)
+       i[[34567]]86-wrs-vxworks*)
+               tm_file=i386/vxi386.h
+               tmake_file=i386/t-i386bare
+               ;;
+       i[[34567]]86-*-aout*)
                tm_file=i386/i386-aout.h
                tmake_file=i386/t-i386bare
                ;;
-       i[[3456]]86-*-bsdi* | i[[345]]86-*-bsd386*)
+       i[[34567]]86-*-bsdi* | i[[34567]]86-*-bsd386*)
                tm_file=i386/bsd386.h
-               xm_file=i386/xm-bsd386.h
 #              tmake_file=t-libc-ok
                ;;
-       i[[3456]]86-*-bsd*)
+       i[[34567]]86-*-bsd*)
                tm_file=i386/386bsd.h
-               xm_file=i386/xm-bsd386.h
 #              tmake_file=t-libc-ok
 # Next line turned off because both 386BSD and BSD/386 use GNU ld.
 #              use_collect2=yes
                ;;
-       i[[3456]]86-*-freebsdelf*)
+       i[[34567]]86-*-freebsdelf*)
                tm_file="i386/i386.h i386/att.h linux.h i386/freebsd-elf.h i386/perform.h"
-               xm_file=i386/xm-freebsd.h
                # On FreeBSD, the headers are already ok, except for math.h.
-               fixincludes=fixinc.math
+               fixincludes=fixinc.wrap
                tmake_file=i386/t-freebsd
                gas=yes
                gnu_ld=yes
                stabs=yes
                ;;
-       i[[3456]]86-*-freebsd*)
+       i[[34567]]86-*-freebsd*)
                tm_file=i386/freebsd.h
-               xm_file=i386/xm-freebsd.h
                # On FreeBSD, the headers are already ok, except for math.h.
-               fixincludes=fixinc.math
+               fixincludes=fixinc.wrap
                tmake_file=i386/t-freebsd
                ;;
-       i[[3456]]86-*-netbsd*)
+       i[[34567]]86-*-netbsd*)
                tm_file=i386/netbsd.h
-               xm_file=i386/xm-netbsd.h
                # On NetBSD, the headers are already okay, except for math.h.
-               fixincludes=fixinc.math
+               fixincludes=fixinc.wrap
                tmake_file=t-netbsd
                ;;
-       i[[3456]]86-*-coff*)
+       i[[34567]]86-*-coff*)
                tm_file=i386/i386-coff.h
                tmake_file=i386/t-i386bare
                ;;
-       i[[3456]]86-*-isc*)             # 80386 running ISC system
-               xm_file=i386/xm-isc.h
+       i[[34567]]86-*-isc*)            # 80386 running ISC system
+               xm_file="${xm_file} i386/xm-isc.h"
+               xm_defines="USG SVR3"
                case $machine in
-                 i[[345]]86-*-isc[[34]]*)
+                 i[[34567]]86-*-isc[[34]]*)
                    xmake_file=i386/x-isc3
                    ;;
                  *)
@@ -836,26 +860,28 @@ for machine in $build $host $target; do
                fi
                install_headers_dir=install-headers-cpio
                ;;
-       i[[3456]]86-*-linux-gnuoldld*)  # Intel 80386's running Linux
-               xm_file=i386/xm-linux.h # with a.out format using pre BFD linkers
+       i[[34567]]86-*-linux-gnuoldld*) # Intel 80386's running GNU/Linux
+                                       # with a.out format using
+                                       # pre BFD linkers
                xmake_file=x-linux-aout
                tmake_file="t-linux-aout i386/t-crtstuff"
                tm_file=i386/linux-oldld.h
                fixincludes=Makefile.in #On Linux, the headers are ok already.
                gnu_ld=yes
                ;;
-       i[[3456]]86-*-linux-gnuaout*)           # Intel 80386's running Linux
-               xm_file=i386/xm-linux.h         # with a.out format
+       i[[34567]]86-*-linux-gnuaout*)  # Intel 80386's running GNU/Linux
+                                       # with a.out format
                xmake_file=x-linux-aout
                tmake_file="t-linux-aout i386/t-crtstuff"
                tm_file=i386/linux-aout.h
                fixincludes=Makefile.in #On Linux, the headers are ok already.
                gnu_ld=yes
                ;;
-       i[[3456]]86-*-linux-gnulibc1)
-               xm_file=i386/xm-linux.h # Intel 80386's running Linux
-               xmake_file=x-linux      # with ELF format using the
-               tm_file=i386/linux.h    # Linux C library 5
+       i[[34567]]86-*-linux-gnulibc1)  # Intel 80386's running GNU/Linux
+                                       # with ELF format using the
+                                       # GNU/Linux C library 5
+               xmake_file=x-linux      
+               tm_file=i386/linux.h    
                tmake_file="t-linux t-linux-gnulibc1 i386/t-crtstuff"
                extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
                fixincludes=Makefile.in #On Linux, the headers are ok already.
@@ -864,9 +890,10 @@ for machine in $build $host $target; do
                        thread_file='single'
                fi
                ;;
-       i[[3456]]86-*-linux-gnu*)               # Intel 80386's running Linux
-               xm_file=i386/xm-linux.h # with ELF format using glibc 2
-               xmake_file=x-linux      # aka Linux C library 6
+       i[[34567]]86-*-linux-gnu*)      # Intel 80386's running GNU/Linux
+                                       # with ELF format using glibc 2
+                                       # aka GNU/Linux C library 6
+               xmake_file=x-linux
                tm_file=i386/linux.h
                tmake_file="t-linux i386/t-crtstuff"
                extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
@@ -876,21 +903,28 @@ for machine in $build $host $target; do
                        thread_file='posix'
                fi
                ;;
-       i[[3456]]86-*-gnu*)
+       i[[34567]]86-*-gnu*)
+               ;;
+       i[[34567]]86-go32-msdos | i[[34567]]86-*-go32*)
+               xm_file=i386/xm-go32.h
+               tm_file=i386/go32.h
+               tmake_file=i386/t-go32
                ;;
-       i[[3456]]86-go32-msdos | i[[3456]]86-*-go32*)
+       i[[34567]]86-pc-msdosdjgpp*)
                xm_file=i386/xm-go32.h
                tm_file=i386/go32.h
                tmake_file=i386/t-go32
+               gnu_ld=yes
+               gas=yes
                ;;
-       i[[3456]]86-moss-msdos* | i[[3456]]86-*-moss*)
+       i[[34567]]86-moss-msdos* | i[[34567]]86-*-moss*)
                tm_file=i386/moss.h
                tmake_file=t-libc-ok
                fixincludes=Makefile.in
                gnu_ld=yes
                gas=yes
                ;;
-       i[[3456]]86-*-lynxos*)
+       i[[34567]]86-*-lynxos*)
                if [[ x$gas = xyes ]]
                then
                        tm_file=i386/lynx.h
@@ -901,12 +935,12 @@ for machine in $build $host $target; do
                tmake_file=i386/t-i386bare
                xmake_file=x-lynx
                ;;
-       i[[3456]]86-*-mach*)
+       i[[34567]]86-*-mach*)
                tm_file=i386/mach.h
 #              tmake_file=t-libc-ok
                use_collect2=yes
                ;;
-       i[[3456]]86-*-osfrose*)         # 386 using OSF/rose
+       i[[34567]]86-*-osfrose*)                # 386 using OSF/rose
                 if [[ x$elf = xyes ]]
                then
                        tm_file=i386/osfelf.h
@@ -915,32 +949,40 @@ for machine in $build $host $target; do
                        tm_file=i386/osfrose.h
                        use_collect2=yes
                fi
-               xm_file=i386/xm-osf.h
+               xm_file="i386/xm-osf.h ${xm_file}"
                xmake_file=i386/x-osfrose
                tmake_file=i386/t-osf
                extra_objs=halfpic.o
                ;;
-       i[[345]]86-go32-rtems*)
+       i[[34567]]86-go32-rtems*)
                cpu_type=i386
                xm_file=i386/xm-go32.h
                tm_file=i386/go32-rtems.h
                tmake_file="i386/t-go32 t-rtems"
                ;;
-       i[[345]]86-*-rtems*)
+       i[[34567]]86-*-rtemself*)
+               cpu_type=i386
+               tm_file=i386/rtemself.h
+               tmake_file="i386/t-i386bare t-rtems"
+               ;;
+       i[[34567]]86-*-rtems*)
                cpu_type=i386
                tm_file=i386/rtems.h
                tmake_file="i386/t-i386bare t-rtems"
                ;;
-       i[[3456]]86-*-sco3.2v5*)                # 80386 running SCO Open Server 5
-               xm_file=i386/xm-sco5.h
+       i[[34567]]86-*-sco3.2v5*)       # 80386 running SCO Open Server 5
+               xm_file="xm-siglist.h xm-alloca.h ${xm_file} i386/xm-sco5.h"
+               xm_defines="USG SVR3"
                xmake_file=i386/x-sco5
                fixincludes=fixinc.sco
+               install_headers_dir=install-headers-cpio
                tm_file=i386/sco5.h
                tmake_file=i386/t-sco5
                extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
                ;;
-       i[[3456]]86-*-sco3.2v4*)                # 80386 running SCO 3.2v4 system
-               xm_file=i386/xm-sco.h
+       i[[34567]]86-*-sco3.2v4*)       # 80386 running SCO 3.2v4 system
+               xm_file="${xm_file} i386/xm-sco.h"
+               xm_defines="USG SVR3 BROKEN_LDEXP SMALL_ARG_MAX NO_SYS_SIGLIST"
                xmake_file=i386/x-sco4
                fixincludes=fixinc.sco
                install_headers_dir=install-headers-cpio
@@ -956,7 +998,7 @@ for machine in $build $host $target; do
                fi
                truncate_target=yes
                ;;
-       i[[3456]]86-*-sco*)             # 80386 running SCO system
+       i[[34567]]86-*-sco*)            # 80386 running SCO system
                xm_file=i386/xm-sco.h
                xmake_file=i386/x-sco
                install_headers_dir=install-headers-cpio
@@ -972,8 +1014,9 @@ for machine in $build $host $target; do
                fi
                truncate_target=yes
                ;;
-       i[[3456]]86-*-solaris2*)
-               xm_file=i386/xm-sysv4.h
+       i[[34567]]86-*-solaris2*)
+               xm_file="xm-siglist.h xm-alloca.h ${xm_file}"
+               xm_defines="USG POSIX SMALL_ARG_MAX"
                if [[ x$stabs = xyes ]]
                then
                        tm_file=i386/sol2dbg.h
@@ -981,15 +1024,34 @@ for machine in $build $host $target; do
                        tm_file=i386/sol2.h
                fi
                tmake_file=i386/t-sol2
-               extra_parts="crt1.o crti.o crtn.o crtbegin.o crtend.o"
+               extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
                xmake_file=x-svr4
-               fixincludes=fixinc.svr4
+               case $machine in
+               *-*-solaris2.[[0-4]])
+                       fixincludes=fixinc.svr4;;
+               *)
+                       fixincludes=fixinc.wrap;;
+               esac
                if [[ x$enable_threads = xyes ]]; then
                        thread_file='solaris'
                fi
                ;;
-       i[[3456]]86-*-sysv4*)           # Intel 80386's running system V.4
-               xm_file=i386/xm-sysv4.h
+       i[[34567]]86-*-sysv5*)           # Intel x86 on System V Release 5
+               xm_file="xm-alloca.h xm-siglist.h ${xm_file}"
+               xm_defines="USG POSIX"
+               tm_file=i386/sysv4.h
+               if [[ x$stabs = xyes ]]
+               then
+                       tm_file="${tm_file} dbx.h"
+               fi
+               tmake_file=i386/t-crtpic
+               xmake_file=x-svr4
+               extra_parts="crtbegin.o crtend.o"
+               fixincludes=Makefile.in # The headers are just fine, thank you.
+               ;;
+       i[[34567]]86-*-sysv4*)          # Intel 80386's running system V.4
+               xm_file="xm-siglist.h xm-alloca.h ${xm_file}"
+               xm_defines="USG POSIX SMALL_ARG_MAX"
                tm_file=i386/sysv4.h
                if [[ x$stabs = xyes ]]
                then
@@ -999,8 +1061,23 @@ for machine in $build $host $target; do
                xmake_file=x-svr4
                extra_parts="crtbegin.o crtend.o"
                ;;
-       i[[3456]]86-*-sysv*)            # Intel 80386's running system V
-               xm_file=i386/xm-sysv3.h
+       i[[34567]]86-*-osf1*)           # Intel 80386's running OSF/1 1.3+
+               cpu_type=i386
+               xm_file="${xm_file} xm-svr4.h i386/xm-sysv4.h i386/xm-osf1elf.h"
+               xm_defines="USE_C_ALLOCA SMALL_ARG_MAX"
+               fixincludes=Makefile.in #Don't do it on OSF/1
+               if [[ x$stabs = xyes ]]
+               then
+                       tm_file=i386/osf1elfgdb.h
+               else
+                       tm_file=i386/osf1elf.h
+               fi
+               tmake_file=i386/t-osf1elf
+               xmake_file=i386/x-osf1elf
+               extra_parts="crti.o crtn.o crtbegin.o crtend.o"
+               ;;
+       i[[34567]]86-*-sysv*)           # Intel 80386's running system V
+               xm_defines="USG SVR3"
                xmake_file=i386/x-sysv3
                if [[ x$gas = xyes ]]
                then
@@ -1021,12 +1098,12 @@ for machine in $build $host $target; do
                fi
                ;;
        i386-*-vsta)                    # Intel 80386's running VSTa kernel
-               xm_file=i386/xm-vsta.h
+               xm_file="${xm_file} i386/xm-vsta.h"
                tm_file=i386/vsta.h
                tmake_file=i386/t-vsta
                xmake_file=i386/x-vsta
                ;;
-       i[[3456]]86-*-pe | i[[3456]]86-*-cygwin32)
+       i[[34567]]86-*-pe | i[[34567]]86-*-cygwin32)
                xm_file="${xm_file} i386/xm-cygwin32.h"
                tmake_file=i386/t-cygwin32
                tm_file=i386/cygwin32.h
@@ -1038,7 +1115,7 @@ for machine in $build $host $target; do
                fi
                exeext=.exe
                ;;
-       i[[3456]]86-*-mingw32)
+       i[[34567]]86-*-mingw32*)
                tm_file=i386/mingw32.h
                xm_file="${xm_file} i386/xm-mingw32.h"
                tmake_file=i386/t-cygwin32
@@ -1049,11 +1126,18 @@ for machine in $build $host $target; do
                        thread_file='win32'
                fi
                exeext=.exe
+               case $machine in
+                       *mingw32msv*)
+                               ;;
+                       *minwg32crt* | *mingw32*)
+                               tm_file="${tm_file} i386/crtdll.h"
+                               ;;
+               esac
                ;;
-       i[[3456]]86-*-winnt3*)
+       i[[34567]]86-*-winnt3*)
                tm_file=i386/win-nt.h
                out_file=i386/i386.c
-               xm_file=i386/xm-winnt.h
+               xm_file="xm-winnt.h ${xm_file}"
                xmake_file=winnt/x-winnt
                tmake_file=i386/t-winnt
                extra_host_objs="winnt.o oldnames.o"
@@ -1067,8 +1151,9 @@ for machine in $build $host $target; do
                        thread_file='win32'
                fi
                ;;
-       i[[3456]]86-dg-dgux)
-               xm_file=i386/xm-dgux.h
+       i[[34567]]86-dg-dgux*)
+               xm_file="xm-alloca.h xm-siglist.h ${xm_file}"
+               xm_defines="USG POSIX"
                out_file=i386/dgux.c
                tm_file=i386/dgux.h
                tmake_file=i386/t-dgux
@@ -1078,7 +1163,7 @@ for machine in $build $host $target; do
               ;;
        i860-alliant-*)         # Alliant FX/2800
                tm_file="${tm_file} svr4.h i860/sysv4.h i860/fx2800.h"
-               xm_file="${xm_file} i860/xm-fx2800.h"
+               xm_file="${xm_file}"
                xmake_file=i860/x-fx2800
                tmake_file=i860/t-fx2800
                extra_parts="crtbegin.o crtend.o"
@@ -1097,18 +1182,18 @@ for machine in $build $host $target; do
                ;;
        i860-*-osf*)                    # Intel Paragon XP/S, OSF/1AD
                tm_file="${tm_file} svr3.h i860/paragon.h"
-               xm_file="${xm_file} xm-svr3.h"
+               xm_defines="USG SVR3"
                tmake_file=t-osf
                ;;
        i860-*-sysv3*)
                tm_file="${tm_file} svr3.h i860/sysv3.h"
-               xm_file="${tm_file} xm-svr3.h"
+               xm_defines="USG SVR3"
                xmake_file=i860/x-sysv3
                extra_parts="crtbegin.o crtend.o"
                ;;
        i860-*-sysv4*)
                tm_file="${tm_file} svr4.h i860/sysv4.h"
-               xm_file="${xm_file} xm-svr3.h"
+               xm_defines="USG SVR3"
                xmake_file=i860/x-sysv4
                tmake_file=t-svr4
                extra_parts="crtbegin.o crtend.o"
@@ -1117,16 +1202,19 @@ for machine in $build $host $target; do
                tm_file="${tm_file} i960/vx960.h"
                tmake_file=i960/t-vxworks960
                use_collect2=yes
+               thread_file='vxworks'
                ;;
-       i960-wrs-vxworks5*)
+       i960-wrs-vxworks5* | i960-wrs-vxworks)
                tm_file="${tm_file} dbxcoff.h i960/i960-coff.h i960/vx960-coff.h"
                tmake_file=i960/t-vxworks960
                use_collect2=yes
+               thread_file='vxworks'
                ;;
        i960-wrs-vxworks*)
                tm_file="${tm_file} i960/vx960.h"
                tmake_file=i960/t-vxworks960
                use_collect2=yes
+               thread_file='vxworks'
                ;;
        i960-*-coff*)
                tm_file="${tm_file} dbxcoff.h i960/i960-coff.h libgloss.h"
@@ -1146,7 +1234,8 @@ for machine in $build $host $target; do
                ;;
        m68000-convergent-sysv*)
                tm_file=m68k/ctix.h
-               xm_file=m68k/xm-3b1.h
+               xm_file="m68k/xm-3b1.h ${xm_file}"
+               xm_defines=USG
                use_collect2=yes
                extra_headers=math-68881.h
                ;;
@@ -1157,7 +1246,8 @@ for machine in $build $host $target; do
                extra_headers=math-68881.h
                ;;
        m68000-hp-hpux*)                # HP 9000 series 300
-               xm_file=m68k/xm-hp320.h
+               xm_file="xm_alloca.h ${xm_file}"
+               xm_defines="USG NO_SYS_SIGLIST"
                if [[ x$gas = xyes ]]
                then
                        xmake_file=m68k/x-hp320g
@@ -1181,7 +1271,8 @@ for machine in $build $host $target; do
                extra_headers=math-68881.h
                ;;
        m68000-att-sysv*)
-               xm_file=m68k/xm-3b1.h
+               xm_file="m68k/xm-3b1.h ${xm_file}"
+               xm_defines=USG
                if [[ x$gas = xyes ]]
                then
                        tm_file=m68k/3b1g.h
@@ -1192,7 +1283,7 @@ for machine in $build $host $target; do
                extra_headers=math-68881.h
                ;;
        m68k-apple-aux*)                # Apple Macintosh running A/UX
-               xm_file=m68k/xm-aux.h
+               xm_defines="USG AUX"
                tmake_file=m68k/t-aux
                install_headers_dir=install-headers-cpio
                extra_headers=math-68881.h
@@ -1222,7 +1313,7 @@ for machine in $build $host $target; do
                if [[ x$gas = xyes ]]
                then
                        tm_file=m68k/altos3068.h
-                       xm_file=m68k/xm-altos3068.h
+                       xm_defines=USG
                else
                        echo "The Altos is supported only with the GNU assembler" 1>&2
                        exit 1
@@ -1241,21 +1332,24 @@ for machine in $build $host $target; do
                else
                        tm_file=m68k/dpx2.h
                fi
-               xm_file=m68k/xm-m68kv.h
+               xm_file="xm-alloca.h ${xm_file}"
+               xm_defines=USG
                xmake_file=m68k/x-dpx2
                use_collect2=yes
                extra_headers=math-68881.h
                ;;
        m68k-atari-sysv4*)              # Atari variant of V.4.
                tm_file=m68k/atari.h
-               xm_file=m68k/xm-atari.h
+               xm_file="xm-alloca.h ${xm_file}"
+               xm_defines="USG FULL_PROTOTYPES"
                tmake_file=t-svr4
                extra_parts="crtbegin.o crtend.o"
                extra_headers=math-68881.h
                ;;
        m68k-motorola-sysv*)
                tm_file=m68k/mot3300.h
-               xm_file=m68k/xm-mot3300.h
+               xm_file="xm-alloca.h m68k/xm-mot3300.h ${xm_file}"
+               xm_defines=NO_SYS_SIGLIST
                if [[ x$gas = xyes ]]
                then
                        xmake_file=m68k/x-mot3300-gas
@@ -1282,24 +1376,27 @@ for machine in $build $host $target; do
                ;;
        m68k-ncr-sysv*)                 # NCR Tower 32 SVR3
                tm_file=m68k/tower-as.h
-               xm_file=m68k/xm-tower.h
+               xm_defines="USG SVR3"
                xmake_file=m68k/x-tower
                extra_parts="crtbegin.o crtend.o"
                extra_headers=math-68881.h
                ;;
         m68k-plexus-sysv*)
                tm_file=m68k/plexus.h
-               xm_file=m68k/xm-plexus.h
+               xm_file="xm-alloca.h m68k/xm-plexus.h ${xm_file}"
+               xm_defines=USG
                use_collect2=yes
                extra_headers=math-68881.h
                ;;
        m68k-tti-*)
                tm_file=m68k/pbb.h
-               xm_file=m68k/xm-m68kv.h
+               xm_file="xm-alloca.h ${xm_file}"
+               xm_defines=USG
                extra_headers=math-68881.h
                ;;
        m68k-crds-unos*)
-               xm_file=m68k/xm-crds.h
+               xm_file="xm-alloca.h m68k/xm-crds.h ${xm_file}"
+               xm_defines="USG unos"
                xmake_file=m68k/x-crds
                tm_file=m68k/crds.h
                use_collect2=yes
@@ -1307,7 +1404,8 @@ for machine in $build $host $target; do
                ;;
        m68k-cbm-sysv4*)                # Commodore variant of V.4.
                tm_file=m68k/amix.h
-               xm_file=m68k/xm-amix.h
+               xm_file="xm-alloca.h ${xm_file}"
+               xm_defines="USG FULL_PROTOTYPES"
                xmake_file=m68k/x-amix
                tmake_file=t-svr4
                extra_parts="crtbegin.o crtend.o"
@@ -1341,7 +1439,8 @@ for machine in $build $host $target; do
                extra_headers=math-68881.h
                ;;
        m68k-hp-hpux7*) # HP 9000 series 300 running HPUX version 7.
-               xm_file=m68k/xm-hp320.h
+               xm_file="xm_alloca.h ${xm_file}"
+               xm_defines="USG NO_SYS_SIGLIST"
                if [[ x$gas = xyes ]]
                then
                        xmake_file=m68k/x-hp320g
@@ -1355,7 +1454,8 @@ for machine in $build $host $target; do
                extra_headers=math-68881.h
                ;;
        m68k-hp-hpux*)  # HP 9000 series 300
-               xm_file=m68k/xm-hp320.h
+               xm_file="xm_alloca.h ${xm_file}"
+               xm_defines="USG NO_SYS_SIGLIST"
                if [[ x$gas = xyes ]]
                then
                        xmake_file=m68k/x-hp320g
@@ -1395,7 +1495,7 @@ for machine in $build $host $target; do
                ;;
        m68k-next-nextstep2*)
                tm_file=m68k/next21.h
-               xm_file=m68k/xm-next.h
+               xm_file="m68k/xm-next.h ${xm_file}"
                tmake_file=m68k/t-next
                xmake_file=m68k/x-next
                extra_objs=nextstep.o
@@ -1404,7 +1504,7 @@ for machine in $build $host $target; do
                 ;;
        m68k-next-nextstep3*)
                tm_file=m68k/next.h
-               xm_file=m68k/xm-next.h
+               xm_file="m68k/xm-next.h ${xm_file}"
                tmake_file=m68k/t-next
                xmake_file=m68k/x-next
                extra_objs=nextstep.o
@@ -1430,7 +1530,6 @@ for machine in $build $host $target; do
                else
                        tm_file=m68k/sun3.h
                fi
-               xm_file=m68k/xm-sun3.h
                use_collect2=yes
                extra_headers=math-68881.h
                ;;
@@ -1438,6 +1537,7 @@ for machine in $build $host $target; do
                tm_file=m68k/vxm68k.h
                tmake_file=m68k/t-vxworks68
                extra_headers=math-68881.h
+               thread_file='vxworks'
                ;;
        m68k-*-aout*)
                tmake_file=m68k/t-m68kbare
@@ -1463,50 +1563,53 @@ for machine in $build $host $target; do
                ;;
        m68k-*-netbsd*)
                tm_file=m68k/netbsd.h
-               xm_file=m68k/xm-netbsd.h
                # On NetBSD, the headers are already okay, except for math.h.
-               fixincludes=fixinc.math
+               fixincludes=fixinc.wrap
                tmake_file=t-netbsd
                ;;
        m68k-*-sysv3*)                  # Motorola m68k's running system V.3
-               xm_file=m68k/xm-m68kv.h
+               xm_file="xm-alloca.h ${xm_file}"
+               xm_defines=USG
                xmake_file=m68k/x-m68kv
                extra_parts="crtbegin.o crtend.o"
                extra_headers=math-68881.h
                ;;
        m68k-*-sysv4*)                  # Motorola m68k's running system V.4
                tm_file=m68k/m68kv4.h
-               xm_file=m68k/xm-m68kv.h
+               xm_file="xm-alloca.h ${xm_file}"
+               xm_defines=USG
                tmake_file=t-svr4
                extra_parts="crtbegin.o crtend.o"
                extra_headers=math-68881.h
                ;;
-       m68k-*-linux-gnuaout*)          # Motorola m68k's running Linux
-               xm_file=m68k/xm-linux.h # with a.out format
+       m68k-*-linux-gnuaout*)          # Motorola m68k's running GNU/Linux
+                                       # with a.out format
                xmake_file=x-linux
                tm_file=m68k/linux-aout.h
                tmake_file="t-linux-aout m68k/t-linux-aout"
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
+               fixincludes=Makefile.in # The headers are ok already.
                extra_headers=math-68881.h
                gnu_ld=yes
                ;;
-       m68k-*-linux-gnulibc1)          # Motorola m68k's running Linux
-               xm_file=m68k/xm-linux.h # with ELF format using the
-               xmake_file=x-linux      # Linux C library 5
+       m68k-*-linux-gnulibc1)          # Motorola m68k's running GNU/Linux
+                                       # with ELF format using the
+                                       # GNU/Linux C library 5
+               xmake_file=x-linux
                tm_file=m68k/linux.h
                tmake_file="t-linux t-linux-gnulibc1 m68k/t-linux"
                extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
+               fixincludes=Makefile.in # The headers are ok already.
                extra_headers=math-68881.h
                gnu_ld=yes
                ;;
-       m68k-*-linux-gnu*)                      # Motorola m68k's running Linux
-               xm_file=m68k/xm-linux.h # with ELF format using glibc 2
-               xmake_file=x-linux      # aka the Linux C library 6.
+       m68k-*-linux-gnu*)              # Motorola m68k's running GNU/Linux
+                                       # with ELF format using glibc 2
+                                       # aka the GNU/Linux C library 6.
+               xmake_file=x-linux
                tm_file=m68k/linux.h
                tmake_file="t-linux m68k/t-linux"
                extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
+               fixincludes=Makefile.in # The headers are ok already.
                extra_headers=math-68881.h
                gnu_ld=yes
                if [[ x$enable_threads = xyes ]]; then
@@ -1546,7 +1649,7 @@ for machine in $build $host $target; do
        m88k-dolphin-sysv3*)
                tm_file=m88k/dolph.h
                extra_parts="crtbegin.o crtend.o"
-               xm_file=m88k/xm-sysv3.h
+               xm_file="m88k/xm-sysv3.h ${xm_file}"
                xmake_file=m88k/x-dolph
                if [[ x$gas = xyes ]]
                then
@@ -1556,7 +1659,7 @@ for machine in $build $host $target; do
        m88k-tektronix-sysv3)
                tm_file=m88k/tekXD88.h
                extra_parts="crtbegin.o crtend.o"
-               xm_file=m88k/xm-sysv3.h
+               xm_file="m88k/xm-sysv3.h ${xm_file}"
                xmake_file=m88k/x-tekXD88
                if [[ x$gas = xyes ]]
                then
@@ -1583,7 +1686,7 @@ for machine in $build $host $target; do
        m88k-*-sysv3*)
                tm_file=m88k/sysv3.h
                extra_parts="crtbegin.o crtend.o"
-               xm_file=m88k/xm-sysv3.h
+               xm_file="m88k/xm-sysv3.h ${xm_file}"
                xmake_file=m88k/x-sysv3
                if [[ x$gas = xyes ]]
                then
@@ -1606,9 +1709,17 @@ for machine in $build $host $target; do
                        thread_file='irix'
                fi
                ;;
+       mips-wrs-vxworks)
+               tm_file="mips/elf.h libgloss.h"
+               tmake_file=mips/t-ecoff
+               gas=yes
+               gnu_ld=yes
+               extra_parts="crtbegin.o crtend.o"
+#              thread_file='vxworks'
+               ;;
        mips-sgi-irix5cross64)          # Irix5 host, Irix 6 target, cross64
-               tm_file=mips/cross64.h
-               xm_file=mips/xm-iris5.h
+               tm_file="mips/iris6.h mips/cross64.h"
+               xm_defines="USG HAVE_INTTYPES_H"
                fixincludes=Makefile.in
                xmake_file=mips/x-iris
                tmake_file=mips/t-cross64
@@ -1625,12 +1736,12 @@ for machine in $build $host $target; do
                        then
                                tm_file=mips/iris5gdb.h
                        else
-                               tm_file=mips/sni-gas.h
+                               tm_file="mips/sni-svr4.h mips/sni-gas.h"
                        fi
                else
                        tm_file=mips/sni-svr4.h
                fi
-                xm_file=mips/xm-sysv.h
+               xm_defines=USG
                 xmake_file=mips/x-sni-svr4
                 tmake_file=mips/t-mips-gas
                 if [[ x$gnu_ld != xyes ]]
@@ -1641,7 +1752,7 @@ for machine in $build $host $target; do
        mips-sgi-irix5*)                # SGI System V.4., IRIX 5
                if [[ x$gas = xyes ]]
                then
-                       tm_file=mips/iris5gas.h
+                       tm_file="mips/iris5.h mips/iris5gas.h"
                        if [[ x$stabs = xyes ]]
                        then
                                tm_file="${tm_file} dbx.h"
@@ -1649,7 +1760,7 @@ for machine in $build $host $target; do
                else
                        tm_file=mips/iris5.h
                fi
-               xm_file=mips/xm-iris5.h
+               xm_defines="USG HAVE_INTTYPES_H"
                fixincludes=fixinc.irix
                xmake_file=mips/x-iris
                # mips-tfile doesn't work yet
@@ -1661,11 +1772,11 @@ for machine in $build $host $target; do
                fi
                ;;
        mips-sgi-irix4loser*)           # Mostly like a MIPS.
-               tm_file=mips/iris4loser.h
+               tm_file="mips/iris4loser.h mips/iris3.h ${tm_file} mips/iris4.h"
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
-               xm_file=mips/xm-iris4.h
+               xm_defines=USG
                xmake_file=mips/x-iris
                if [[ x$gas = xyes ]]
                then
@@ -1682,11 +1793,11 @@ for machine in $build $host $target; do
                fi
                ;;
        mips-sgi-irix4*)                # Mostly like a MIPS.
-               tm_file=mips/iris4.h
+               tm_file="mips/iris3.h ${tm_file} mips/iris4.h"
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
-               xm_file=mips/xm-iris4.h
+               xm_defines=USG
                xmake_file=mips/x-iris
                if [[ x$gas = xyes ]]
                then
@@ -1703,11 +1814,11 @@ for machine in $build $host $target; do
                fi
                ;;
        mips-sgi-*)                     # Mostly like a MIPS.
-               tm_file=mips/iris3.h
+               tm_file="mips/iris3.h ${tm_file}"
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
-               xm_file=mips/xm-iris3.h
+               xm_defines=USG
                xmake_file=mips/x-iris3
                if [[ x$gas = xyes ]]
                then
@@ -1721,7 +1832,7 @@ for machine in $build $host $target; do
                fi
                ;;
        mips-dec-osfrose*)              # Decstation running OSF/1 reference port with OSF/rose.
-               tm_file=mips/osfrose.h
+               tm_file="mips/osfrose.h ${tm_file}"
                xmake_file=mips/x-osfrose
                tmake_file=mips/t-osfrose
                extra_objs=halfpic.o
@@ -1762,13 +1873,12 @@ for machine in $build $host $target; do
              ;;
        mips-dec-netbsd*)                  # Decstation running NetBSD
                tm_file=mips/netbsd.h
-               xm_file=mips/xm-netbsd.h
                # On NetBSD, the headers are already okay, except for math.h.
-               fixincludes=fixinc.math
+               fixincludes=fixinc.wrap
                tmake_file=t-netbsd
                ;;
        mips-sony-bsd* | mips-sony-newsos*)     # Sony NEWS 3600 or risc/news.
-               tm_file=mips/news4.h
+               tm_file="mips/news4.h ${tm_file}"
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
@@ -1787,11 +1897,12 @@ for machine in $build $host $target; do
        mips-sony-sysv*)                # Sony NEWS 3800 with NEWSOS5.0.
                                        # That is based on svr4.
                # t-svr4 is not right because this system doesn't use ELF.
-               tm_file=mips/news5.h
+               tm_file="mips/news5.h ${tm_file}"
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
-               xm_file=mips/xm-news.h
+               xm_file="xm-siglist.h ${xm_file}"
+               xm_defines=USG
                if [[ x$gas = xyes ]]
                then
                        tmake_file=mips/t-mips-gas
@@ -1804,11 +1915,12 @@ for machine in $build $host $target; do
                fi
                ;;
        mips-tandem-sysv4*)             # Tandem S2 running NonStop UX
-               tm_file=mips/svr4-t.h
+               tm_file="mips/svr4-5.h mips/svr4-t.h"
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
-               xm_file=mips/xm-sysv4.h
+               xm_file="xm-siglist.h ${xm_file}"
+               xm_defines=USG
                xmake_file=mips/x-sysv
                if [[ x$gas = xyes ]]
                then
@@ -1824,7 +1936,7 @@ for machine in $build $host $target; do
                fi
                ;;
        mips-*-ultrix* | mips-dec-mach3)        # Decstation.
-               tm_file=mips/ultrix.h
+               tm_file="mips/ultrix.h ${tm_file}"
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
@@ -1859,7 +1971,7 @@ for machine in $build $host $target; do
                fi
                ;;
        mips-*-bsd* | mips-*-riscosbsd* | mips-*-riscos[[1234]]bsd*)
-               tm_file=mips/bsd-4.h    # MIPS BSD 4.3, RISC-OS 4.0
+               tm_file="mips/bsd-4.h ${tm_file}" # MIPS BSD 4.3, RISC-OS 4.0
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
@@ -1880,7 +1992,7 @@ for machine in $build $host $target; do
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
-               xm_file=mips/xm-sysv4.h
+               xm_file="xm-siglist.h ${xm_file}"
                xmake_file=mips/x-sysv
                if [[ x$gas = xyes ]]
                then
@@ -1895,11 +2007,11 @@ for machine in $build $host $target; do
                fi
                ;;
        mips-*-sysv4* | mips-*-riscos[[1234]]sysv4* | mips-*-riscossysv4*)
-               tm_file=mips/svr4-4.h   # MIPS System V.4. RISC-OS 4.0
+               tm_file="mips/svr4-4.h ${tm_file}"
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
-               xm_file=mips/xm-sysv.h
+               xm_defines=USG
                xmake_file=mips/x-sysv
                if [[ x$gas = xyes ]]
                then
@@ -1918,7 +2030,7 @@ for machine in $build $host $target; do
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
-               xm_file=mips/xm-sysv.h
+               xm_defines=USG
                xmake_file=mips/x-sysv
                if [[ x$gas = xyes ]]
                then
@@ -1933,11 +2045,11 @@ for machine in $build $host $target; do
                fi
                ;;
        mips-*-sysv* | mips-*-riscos*sysv*)
-               tm_file=mips/svr3-4.h   # MIPS System V.3, RISC-OS 4.0
+               tm_file="mips/svr3-4.h ${tm_file}"
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
-               xm_file=mips/xm-sysv.h
+               xm_defines=USG
                xmake_file=mips/x-sysv
                if [[ x$gas = xyes ]]
                then
@@ -1977,7 +2089,7 @@ for machine in $build $host $target; do
                tmake_file=mips/t-ecoff
                ;;
        mips-*-ecoff*)
-               tm_file=mips/ecoff.h
+               tm_file="gofast.h mips/ecoff.h"
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
                fi
@@ -1996,7 +2108,7 @@ for machine in $build $host $target; do
                tmake_file=mips/t-ecoff
                ;;
        mips64orionel-*-elf*)
-               tm_file="mips/elflorion.h libgloss.h"
+               tm_file="mips/elforion.h mips/elfl64.h libgloss.h"
                tmake_file=mips/t-ecoff
                ;;
        mips64-*-elf*)
@@ -2004,13 +2116,21 @@ for machine in $build $host $target; do
                tmake_file=mips/t-ecoff
                ;;
        mips64orion-*-elf*)
-               tm_file="mips/elforion.h libgloss.h"
+               tm_file="mips/elforion.h mips/elf64.h libgloss.h"
                tmake_file=mips/t-ecoff
                ;;
        mips64orion-*-rtems*)
-               tm_file=mips/rtems64.h
+               tm_file="mips/elforion.h mips/elfl64.h mips/rtems64.h"
                tmake_file="mips/t-ecoff t-rtems"
                ;;
+       mipstx39el-*-elf*)
+               tm_file="mips/r3900.h mips/elfl.h mips/abi64.h libgloss.h"
+               tmake_file=mips/t-r3900
+               ;;
+       mipstx39-*-elf*)
+               tm_file="mips/r3900.h mips/elf.h mips/abi64.h libgloss.h"
+               tmake_file=mips/t-r3900
+               ;;
        mips-*-*)                               # Default MIPS RISC-OS 4.0.
                if [[ x$stabs = xyes ]]; then
                        tm_file="${tm_file} dbx.h"
@@ -2062,7 +2182,7 @@ for machine in $build $host $target; do
                ;;
 # This has not been updated to GCC 2.
 #      ns32k-ns-genix*)
-#              xm_file=ns32k/xm-genix.h
+#              xm_defines=USG
 #              xmake_file=ns32k/x-genix
 #              tm_file=ns32k/genix.h
 #              use_collect2=yes
@@ -2077,14 +2197,14 @@ for machine in $build $host $target; do
                ;;
        ns32k-pc532-minix*)
                tm_file=ns32k/pc532-min.h
-               xm_file=ns32k/xm-pc532-min.h
+               xm_file="ns32k/xm-pc532-min.h ${xm-file}"
+               xm_defines=USG
                use_collect2=yes
                ;;
        ns32k-pc532-netbsd*)
                tm_file=ns32k/netbsd.h
-               xm_file=ns32k/xm-netbsd.h
                # On NetBSD, the headers are already okay, except for math.h.
-               fixincludes=fixinc.math
+               fixincludes=fixinc.wrap
                tmake_file=t-netbsd
                ;;
         pdp11-*-bsd)
@@ -2104,9 +2224,17 @@ for machine in $build $host $target; do
                xmake_file=romp/x-mach
                use_collect2=yes
                ;;
+       powerpc-*-beos*)
+               cpu_type=rs6000
+               tm_file=rs6000/beos.h
+               xm_file=rs6000/xm-beos.h
+               tmake_file=rs6000/t-beos
+               xmake_file=rs6000/x-beos
+               ;;
        powerpc-*-sysv* | powerpc-*-elf*)
                tm_file=rs6000/sysv4.h
-               xm_file=rs6000/xm-sysv4.h
+               xm_file="xm-siglist.h rs6000/xm-sysv4.h"
+               xm_defines="USG POSIX"
                extra_headers=ppc-asm.h
                if [[ x$gas = xyes ]]
                then
@@ -2150,12 +2278,31 @@ for machine in $build $host $target; do
                fixincludes=Makefile.in
                extra_headers=ppc-asm.h
                ;;
-       powerpc-*-linux-gnu*)
+       powerpc-*-linux-gnulibc1)
                tm_file=rs6000/linux.h
                xm_file=rs6000/xm-sysv4.h
                out_file=rs6000/rs6000.c
                if [[ x$gas = xyes ]]
                then
+                       tmake_file="rs6000/t-ppcos t-linux t-linux-gnulibc1 rs6000/t-ppccomm"
+               else
+                       tmake_file="rs6000/t-ppc t-linux t-linux-gnulibc1 rs6000/t-ppccomm"
+               fi
+               xmake_file=x-linux
+               fixincludes=Makefile.in
+               extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+               extra_headers=ppc-asm.h
+               if [[ x$enable_threads = xyes ]]; then
+                       thread_file='posix'
+               fi
+               ;;
+       powerpc-*-linux-gnu*)
+               tm_file=rs6000/linux.h
+               xm_file="xm-siglist.h rs6000/xm-sysv4.h"
+               xm_defines="USG ${xm_defines}"
+               out_file=rs6000/rs6000.c
+               if [[ x$gas = xyes ]]
+               then
                        tmake_file="rs6000/t-ppcos t-linux rs6000/t-ppccomm"
                else
                        tmake_file="rs6000/t-ppc t-linux rs6000/t-ppccomm"
@@ -2168,16 +2315,19 @@ for machine in $build $host $target; do
                        thread_file='posix'
                fi
                ;;
-        powerpc-*-vxworks*)
+        powerpc-wrs-vxworks*)
                 cpu_type=rs6000
-                xm_file=rs6000/xm-sysv4.h
+               xm_file="xm-siglist.h rs6000/xm-sysv4.h"
+               xm_defines="USG POSIX"
                 tm_file=rs6000/vxppc.h
                 tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
                extra_headers=ppc-asm.h
+               thread_file='vxworks'
                 ;;
        powerpcle-*-sysv* | powerpcle-*-elf*)
                tm_file=rs6000/sysv4le.h
-               xm_file=rs6000/xm-sysv4.h
+               xm_file="xm-siglist.h rs6000/xm-sysv4.h"
+               xm_defines="USG POSIX"
                if [[ x$gas = xyes ]]
                then
                        tmake_file="rs6000/t-ppcos rs6000/t-ppccomm"
@@ -2216,7 +2366,8 @@ for machine in $build $host $target; do
                ;;
        powerpcle-*-pe | powerpcle-*-cygwin32)
                tm_file=rs6000/cygwin32.h
-               xm_file=rs6000/xm-cygwin32.h
+               xm_file="rs6000/xm-cygwin32.h ${xm_file}"
+               xm_defines=NO_STAB_H
                tmake_file=rs6000/t-winnt
                xmake_file=rs6000/x-cygwin32
 #              extra_objs=pe.o
@@ -2229,7 +2380,8 @@ for machine in $build $host $target; do
                ;;
        powerpcle-*-solaris2*)
                tm_file=rs6000/sol2.h
-               xm_file=rs6000/xm-sysv4.h
+               xm_file="xm-siglist.h rs6000/xm-sysv4.h"
+               xm_defines="USG POSIX"
                if [[ x$gas = xyes ]]
                then
                        tmake_file="rs6000/t-ppcos rs6000/t-ppccomm"
@@ -2237,7 +2389,12 @@ for machine in $build $host $target; do
                        tmake_file="rs6000/t-ppc rs6000/t-ppccomm"
                fi
                xmake_file=rs6000/x-sysv4
-               fixincludes=fixinc.svr4
+               case $machine in
+               *-*-solaris2.[[0-4]])
+                       fixincludes=fixinc.svr4;;
+               *)
+                       fixincludes=fixinc.wrap;;
+               esac
                extra_headers=ppc-asm.h
                ;;
        rs6000-ibm-aix3.[[01]]*)
@@ -2274,7 +2431,7 @@ for machine in $build $host $target; do
                ;;
        rs6000-*-mach*)
                tm_file=rs6000/mach.h
-               xm_file=rs6000/xm-mach.h
+               xm_file="${xm_file} rs6000/xm-mach.h"
                xmake_file=rs6000/x-mach
                use_collect2=yes
                ;;
@@ -2299,12 +2456,14 @@ for machine in $build $host $target; do
                ;;
        sparc-tti-*)
                tm_file=sparc/pbd.h
-               xm_file=sparc/xm-pbd.h
+               xm_file="xm-alloca.h ${xm_file}"
+               xm_defines=USG
                ;;
        sparc-wrs-vxworks* | sparclite-wrs-vxworks*)
                tm_file=sparc/vxsparc.h
                tmake_file=sparc/t-vxsparc
                use_collect2=yes
+               thread_file='vxworks'
                ;;
        sparc-*-aout*)
                tmake_file=sparc/t-sparcbare
@@ -2312,35 +2471,41 @@ for machine in $build $host $target; do
                ;;
        sparc-*-netbsd*)
                tm_file=sparc/netbsd.h
-               xm_file=sparc/xm-netbsd.h
                # On NetBSD, the headers are already okay, except for math.h.
-               fixincludes=fixinc.math
+               fixincludes=fixinc.wrap
                tmake_file=t-netbsd
                ;;
        sparc-*-bsd*)
                tm_file=sparc/bsd.h
                ;;
-       sparc-*-linux-gnuaout*)         # Sparc's running Linux, a.out
-               xm_file=sparc/xm-linux.h
+       sparc-*-elf*)
+               tm_file=sparc/elf.h
+               tmake_file=sparc/t-elf
+               extra_parts="crti.o crtn.o crtbegin.o crtend.o"
+               #float_format=i128
+               float_format=i64
+               ;;
+       sparc-*-linux-gnuaout*)         # Sparc's running GNU/Linux, a.out
+               xm_file="${xm_file} sparc/xm-linux.h"
                tm_file=sparc/linux-aout.h
                xmake_file=x-linux
                fixincludes=Makefile.in #On Linux, the headers are ok already.
                gnu_ld=yes
                ;;
-       sparc-*-linux-gnulibc1*)                 # Sparc's running Linux
-               xm_file=sparc/xm-linux.h # with ELF format using the
-               xmake_file=x-linux       # Linux C library 5.
+       sparc-*-linux-gnulibc1*)        # Sparc's running GNU/Linux, libc5
+               xm_file="${xm_file} sparc/xm-linux.h"
+               xmake_file=x-linux
                tm_file=sparc/linux.h
-               tmake_file="t-linux t-linux-gnulibc1 sparc/t-linux"
+               tmake_file="t-linux t-linux-gnulibc1"
                extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
                fixincludes=Makefile.in #On Linux, the headers are ok already.
                gnu_ld=yes
                ;;
-       sparc-*-linux-gnu*)                      # Sparc's running Linux
-               xm_file=sparc/xm-linux.h # with ELF format using glibc 2
-               xmake_file=x-linux       # aka the Linux C library 6.
+       sparc-*-linux-gnu*)             # Sparc's running GNU/Linux, libc6
+               xm_file="${xm_file} sparc/xm-linux.h"
+               xmake_file=x-linux
                tm_file=sparc/linux.h
-               tmake_file="t-linux sparc/t-linux"
+               tmake_file="t-linux"
                extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
                fixincludes=Makefile.in #On Linux, the headers are ok already.
                gnu_ld=yes
@@ -2364,14 +2529,36 @@ for machine in $build $host $target; do
                tm_file=sparc/rtems.h
                ;;
        sparc-*-solaris2*)
-               tm_file=sparc/sol2.h
-               xm_file=sparc/xm-sol2.h
+               if [[ x$gnu_ld = xyes ]]
+               then
+                       tm_file=sparc/sol2.h
+               else
+                       tm_file=sparc/sol2-sld.h
+               fi
+               xm_file="xm-siglist.h sparc/xm-sysv4.h sparc/xm-sol2.h"
+               xm_defines="USG POSIX"
                tmake_file=sparc/t-sol2
                xmake_file=sparc/x-sysv4
                extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
-               fixincludes=fixinc.svr4
-               if [[ x$enable_threads = xyes ]]; then
+               case $machine in
+               *-*-solaris2.[[0-4]])
+                       fixincludes=fixinc.svr4;;
+               *)
+                       fixincludes=fixinc.wrap;;
+               esac
+               float_format=i128
+               if [[ x${enable_threads} = x ]]; then
+                   enable_threads=$have_pthread_h
+                   if [[ x${enable_threads} = x ]]; then
+                       enable_threads=$have_thread_h
+                   fi
+               fi
+               if [[ x${enable_threads} = xyes ]]; then
+                   if [[ x${have_pthread_h} = xyes ]]; then
+                       thread_file='posix'
+                   else
                        thread_file='solaris'
+                   fi
                fi
                ;;
        sparc-*-sunos4.0*)
@@ -2393,13 +2580,15 @@ for machine in $build $host $target; do
                ;;
        sparc-*-sysv4*)
                tm_file=sparc/sysv4.h
-               xm_file=sparc/xm-sysv4.h
+               xm_file="xm-siglist.h sparc/xm-sysv4.h"
+               xm_defines="USG POSIX"
                tmake_file=t-svr4
                xmake_file=sparc/x-sysv4
                extra_parts="crtbegin.o crtend.o"
                ;;
        sparc-*-vxsim*)
-               xm_file=sparc/xm-sol2.h
+               xm_file="xm-siglist.h sparc/xm-sysv4.h sparc/xm-sol2.h"
+               xm_defines="USG POSIX"
                tm_file=sparc/vxsim.h
                tmake_file=sparc/t-vxsparc
                xmake_file=sparc/x-sysv4
@@ -2425,12 +2614,27 @@ for machine in $build $host $target; do
                tm_file=sparc/sp64-elf.h
                extra_parts="crtbegin.o crtend.o"
                ;;
+       sparc64-*-linux*)               # 64-bit Sparc's running GNU/Linux
+               tmake_file=sparc/t-sp64
+               xm_file="sparc/xm-sp64.h sparc/xm-linux.h"
+               tm_file=sparc/linux64.h
+               xmake_file=x-linux
+               fixincludes=Makefile.in # The headers are ok already.
+               gnu_ld=yes
+               ;;
 # This hasn't been upgraded to GCC 2.
 #      tahoe-harris-*)                 # Harris tahoe, using COFF.
 #              tm_file=tahoe/harris.h
 #              ;;
 #      tahoe-*-bsd*)                   # tahoe running BSD
 #              ;;
+       thumb-*-coff* | thumbel-*-coff*)
+               tm_file=arm/tcoff.h
+               out_file=arm/thumb.c
+               xm_file=arm/xm-thumb.h
+               md_file=arm/thumb.md
+               tmake_file=arm/t-thumb
+               ;;
 # This hasn't been upgraded to GCC 2.
 #      tron-*-*)
 #              cpu_type=gmicro
@@ -2440,6 +2644,7 @@ for machine in $build $host $target; do
                cpu_type=v850
                tm_file="v850/v850.h"
                xm_file="v850/xm-v850.h"
+               tmake_file=v850/t-v850
                if [[ x$stabs = xyes ]]
                then
                        tm_file="${tm_file} dbx.h"
@@ -2452,14 +2657,13 @@ for machine in $build $host $target; do
                ;;
        vax-*-sysv*)                    # vaxen running system V
                tm_file="${tm_file} vax/vaxv.h"
-               xm_file="${tm_file} vax/xm-vaxv.h"
+               xm_defines=USG
                float_format=vax
                ;;
        vax-*-netbsd*)
                tm_file="${tm_file} netbsd.h vax/netbsd.h"
-               xm_file="${xm_file} xm-netbsd.h"
                # On NetBSD, the headers are already okay, except for math.h.
-               fixincludes=fixinc.math
+               fixincludes=fixinc.wrap
                tmake_file=t-netbsd
                float_format=vax
                ;;
@@ -2488,12 +2692,12 @@ for machine in $build $host $target; do
 
        case $machine in
        *-*-linux-gnu*)
-               ;; # Existing Linux/GNU systems do not use the GNU setup.
+               ;; # Existing GNU/Linux systems do not use the GNU setup.
        *-*-gnu*)
                # On the GNU system, the setup is just about the same on
                # each different CPU.  The specific machines that GNU
                # supports are matched above and just set $cpu_type.
-               xm_file=${cpu_type}/xm-gnu.h
+               xm_file="xm-gnu.h ${xm_file}"
                tm_file=${cpu_type}/gnu.h
                extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
                # GNU always uses ELF.
@@ -2516,7 +2720,7 @@ for machine in $build $host $target; do
                ;;
        esac
 
-       # Distinguish i[3456]86
+       # Distinguish i[34567]86
        # Also, do not run mips-tfile on MIPS if using gas.
        # Process --with-cpu= for PowerPC/rs6000
        target_cpu_default2=
@@ -2527,13 +2731,19 @@ for machine in $build $host $target; do
        i586-*-*)
                target_cpu_default2=2
                ;;
-       i686-*-*)
+       i686-*-* | i786-*-*)
                target_cpu_default2=3
                ;;
        alpha*-*-*)
                case $machine in
+                       alphaev6*)
+                               target_cpu_default2="MASK_CPU_EV6|MASK_BXW|MASK_CIX|MASK_MAX"
+                               ;;
+                       alphapca56*)
+                               target_cpu_default2="MASK_CPU_EV5|MASK_BWX|MASK_MAX"
+                               ;;
                        alphaev56*)
-                               target_cpu_default2="MASK_CPU_EV5|MASK_BYTE_OPS"
+                               target_cpu_default2="MASK_CPU_EV5|MASK_BWX"
                                ;;
                        alphaev5*)
                                target_cpu_default2="MASK_CPU_EV5"
@@ -2542,7 +2752,7 @@ for machine in $build $host $target; do
                                
                if [[ x$gas = xyes ]]
                then
-                       if [[ x$target_cpu_default2 = x ]]
+                       if [[ "$target_cpu_default2" = "" ]]
                        then
                                target_cpu_default2="MASK_GAS"
                        else
@@ -2550,6 +2760,37 @@ for machine in $build $host $target; do
                        fi
                fi
                ;;
+       arm*-*-*)
+               case "x$with_cpu" in
+                       x)
+                               # The most generic
+                               target_cpu_default2="TARGET_CPU_generic"
+                               ;;
+
+                       # Distinguish cores, and major variants
+                       # arm7m doesn't exist, but D & I don't affect code
+                       xarm[23678] | xarm250 | xarm[67][01]0 \
+                       | xarm7m | xarm7dm | xarm7dmi | xarm7tdmi \
+                       | xarm7100 | xarm7500 | xarm7500fe | xarm810 \
+                       | xstrongarm | xstrongarm110)
+                               target_cpu_default2="TARGET_CPU_$with_cpu"
+                               ;;
+
+                       xyes | xno)
+                               echo "--with-cpu must be passed a value" 1>&2
+                               exit 1
+                               ;;
+
+                       *)
+                               if [[ x$pass2done = xyes ]]
+                               then
+                                       echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
+                                       exit 1
+                               fi
+                               ;;
+               esac
+               ;;
+
        mips*-*-ecoff* | mips*-*-elf*)
                if [[ x$gas = xyes ]]
                then
@@ -2585,8 +2826,11 @@ for machine in $build $host $target; do
                                ;;
 
                        *)
-                               echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
-                               exit 1
+                               if [[ x$pass2done = xyes ]]
+                               then
+                                       echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
+                                       exit 1
+                               fi
                                ;;
                esac
                ;;
@@ -2595,20 +2839,23 @@ for machine in $build $host $target; do
                        .)
                                target_cpu_default2=TARGET_CPU_"`echo $machine | sed 's/-.*$//'`"
                                ;;
-                       .supersparc | .ultrasparc | .v7 | .v8)
+                       .supersparc | .ultrasparc | .v7 | .v8 | .v9)
                                target_cpu_default2="TARGET_CPU_$with_cpu"
                                ;;
                        *)
-                               echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
-                               exit 1
+                               if [[ x$pass2done = xyes ]]
+                               then
+                                       echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
+                                       exit 1
+                               fi
                                ;;
                esac
                ;;
        esac
 
-       if [[ x$target_cpu_default2 != x ]]
+       if [[ "$target_cpu_default2" != "" ]]
        then
-               if [[ x$target_cpu_default != x ]]
+               if [[ "$target_cpu_default" != "" ]]
                then
                        target_cpu_default="(${target_cpu_default}|${target_cpu_default2})"
                else
@@ -2631,6 +2878,7 @@ for machine in $build $host $target; do
                then build_xm_file=$cpu_type/xm-$cpu_type.h
                else build_xm_file=$xm_file
                fi
+               build_xm_defines=$xm_defines
                build_install_headers_dir=$install_headers_dir
                build_exeext=$exeext
                pass1done=yes
@@ -2641,6 +2889,7 @@ for machine in $build $host $target; do
                        then host_xm_file=$cpu_type/xm-$cpu_type.h
                        else host_xm_file=$xm_file
                        fi
+                       host_xm_defines=$xm_defines
                        if [[ x"$xmake_file" = x ]]
                        then xmake_file=$cpu_type/x-$cpu_type
                        fi
@@ -2648,6 +2897,7 @@ for machine in $build $host $target; do
                        host_truncate_target=$truncate_target
                        host_extra_gcc_objs=$extra_gcc_objs
                        host_extra_objs=$extra_host_objs
+                       host_exeext=$exeext
                        pass2done=yes
                fi
        fi
@@ -2665,7 +2915,8 @@ then extra_headers=; fi
 if [[ x"$xm_file" = x ]]
 then xm_file=$cpu_type/xm-$cpu_type.h; fi
 
-md_file=$cpu_type/$cpu_type.md
+if [[ x$md_file = x ]]
+then md_file=$cpu_type/$cpu_type.md; fi
 
 if [[ x$out_file = x ]]
 then out_file=$cpu_type/$cpu_type.c; fi
@@ -2678,6 +2929,14 @@ if [[ x$float_format = x ]]
 then float_format=i64
 fi
 
+if [[ x$enable_haifa = x ]]
+then
+  case $target in
+    alpha*-* | hppa1.?-* | powerpc*-* | rs6000-* | *sparc-* | m32r*-*)
+      enable_haifa=yes;;
+  esac
+fi
+
 # Say what files are being used for the output code and MD file.
 echo "Using \`$srcdir/config/$out_file' to output insns."
 echo "Using \`$srcdir/config/$md_file' as machine description file."
@@ -2723,17 +2982,55 @@ if [[ "$host_xm_file" != "$build_xm_file" ]]; then
        fi
 fi
 
-if [[ x$thread_file = x ]]
-then thread_file='single'
+if [[ x$thread_file = x ]]; then
+       if [[ x$target_thread_file != x ]]; then
+               thread_file=$target_thread_file
+       else
+               thread_file='single'
+       fi
 fi
 
 # Set up the header files.
 # $links is the list of header files to create.
 # $vars is the list of shell variables with file names to include.
-# config2.h is the old config.h.  It is included by the new config.h which
-# created from config.in.  The goal is to simplify the transition to autoconf.
+# auto-host.h is the file containing items generated by autoconf and is
+# the first file included by config.h.
+null_defines=
+host_xm_file="auto-host.h ${host_xm_file}"
+
+# If host=build, it is correct to have hconfig include auto-host.h
+# as well.  If host!=build, we are in error and need to do more 
+# work to find out the build config parameters.
+if [[ x$host = x$build ]]
+then
+       build_xm_file="auto-host.h ${build_xm_file}"
+else
+       # We create a subdir, then run autoconf in the subdir.
+       # To prevent recursion we set host and build for the new
+       # invocation of configure to the build for this invocation
+       # of configure. 
+       tempdir=build.$$
+       rm -rf $tempdir
+       mkdir $tempdir
+       cd $tempdir
+       case ${srcdir} in
+       /*) realsrcdir=${srcdir};;
+       *) realsrcdir=../${srcdir};;
+       esac
+       CC=${CC_FOR_BUILD} ${realsrcdir}/configure \
+               --target=$target --host=$build --build=$build
+
+       # We just finished tests for the build machine, so rename
+       # the file auto-build.h in the gcc directory.
+       mv auto-host.h ../auto-build.h
+       cd ..
+       rm -rf $tempdir
+       build_xm_file="auto-build.h ${build_xm_file}"
+fi
+
 vars="host_xm_file tm_file xm_file build_xm_file"
-links="config2.h tm.h tconfig.h hconfig.h"
+links="config.h tm.h tconfig.h hconfig.h"
+defines="host_xm_defines null_defines xm_defines build_xm_defines"
 
 rm -f config.bak
 if [[ -f config.status ]]; then mv -f config.status config.bak; fi
@@ -2741,22 +3038,28 @@ if [[ -f config.status ]]; then mv -f config.status config.bak; fi
 # Make the links.
 while [[ -n "$vars" ]]
 do
-       # set file to car of files, files to cdr of files
        set $vars; var=$1; shift; vars=$*
        set $links; link=$1; shift; links=$*
+       set $defines; define=$1; shift; defines=$*
 
        rm -f $link
 
        # Define TARGET_CPU_DEFAULT if the system wants one.
        # This substitutes for lots of *.h files.
-       if [[ x$target_cpu_default != x -a $link = tm.h ]]
+       if [[ "$target_cpu_default" != "" -a $link = tm.h ]]
        then
-               echo "#define TARGET_CPU_DEFAULT $target_cpu_default" >>$link
+               echo "#define TARGET_CPU_DEFAULT ($target_cpu_default)" >>$link
        fi
 
        for file in `eval echo '$'$var`; do
                echo "#include \"$file\"" >>$link
        done
+
+       for def in `eval echo '$'$define`; do
+               echo "#ifndef $def" >>$link
+               echo "#define $def" >>$link
+               echo "#endif" >>$link
+       done
 done
 
 # Truncate the target if necessary
@@ -2803,11 +3106,18 @@ done
 # FLAGS_TO_PASS so CC="stage1/xgcc -Bstage1/" works.
 # Otherwise, we can use "CC=$(CC)".
 rm -f symtest.tem
-if $symbolic_link symtest1.tem symtest.tem 2>/dev/null
+if $symbolic_link $srcdir/gcc.c symtest.tem 2>/dev/null
 then
        cc_set_by_configure="\$(CC)"
        stage_prefix_set_by_configure="\$(STAGE_PREFIX)"
 else
+       rm -f symtest.tem
+       if cp -p $srcdir/gcc.c symtest.tem 2>/dev/null
+       then
+               symbolic_link="cp -p"
+       else
+               symbolic_link="cp"
+       fi
        cc_set_by_configure="\`case '\$(CC)' in stage*) echo '\$(CC)' | sed -e 's|stage|../stage|g';; *) echo '\$(CC)';; esac\`"
        stage_prefix_set_by_configure="\`case '\$(STAGE_PREFIX)' in stage*) echo '\$(STAGE_PREFIX)' | sed -e 's|stage|../stage|g';; *) echo '\$(STAGE_PREFIX)';; esac\`"
 fi
@@ -2822,12 +3132,24 @@ done
 
 host_xm_file_list=
 for f in $host_xm_file; do
-       host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f"
+       if test $f != "auto-host.h"; then
+               host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f"
+       else
+               host_xm_file_list="${host_xm_file_list} auto-host.h"
+       fi
 done
 
 build_xm_file_list=
 for f in $build_xm_file; do
-       build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f"
+       if test $f != "auto-build.h"; then
+               if test $f != "auto-host.h"; then
+                       build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f"
+               else
+                       build_xm_file_list="${build_xm_file_list} auto-host.h"
+               fi
+       else
+               build_xm_file_list="${build_xm_file_list} auto-build.h"
+       fi
 done
 
 # Define macro CROSS_COMPILE in compilation
@@ -2871,7 +3193,7 @@ then
        will_use_collect2=
        maybe_use_collect2=
 else
-       will_use_collect2="ld"
+       will_use_collect2="collect2"
        maybe_use_collect2="-DUSE_COLLECT2"
 fi
 
@@ -2891,15 +3213,15 @@ fi
 
 # If we have gas in the build tree, make a link to it.
 if [[ -f ../gas/Makefile ]]; then
-       rm -f as; $symbolic_link ../gas/as-new as 2>/dev/null
+       rm -f as; $symbolic_link ../gas/as-new$host_exeext as$host_exeext 2>/dev/null
 fi
 
 # If we have ld in the build tree, make a link to it.
 if [[ -f ../ld/Makefile ]]; then
 #      if [[ x$use_collect2 = x ]]; then
-#              rm -f ld; $symbolic_link ../ld/ld-new ld 2>/dev/null
+#              rm -f ld; $symbolic_link ../ld/ld-new$host_exeext ld$host_exeext 2>/dev/null
 #      else
-               rm -f collect-ld; $symbolic_link ../ld/ld-new collect-ld 2>/dev/null
+               rm -f collect-ld; $symbolic_link ../ld/ld-new$host_exeext collect-ld$host_exeext 2>/dev/null
 #      fi
 fi
 
@@ -2916,6 +3238,15 @@ do
        esac
 done
 
+# Make gthr-default.h if we have a thread file.
+gthread_flags=
+if [[ $thread_file != single ]]; then
+    rm -f gthr-default.h
+    echo "#include \"gthr-${thread_file}.h\"" > gthr-default.h
+    gthread_flags=-DHAVE_GTHR_DEFAULT
+fi
+AC_SUBST(gthread_flags)
+
 # Make empty files to contain the specs and options for each language.
 # Then add #include lines to for a compiler that has specs and/or options.
 
@@ -3037,6 +3368,28 @@ if [[ ! -f Makefile.in ]]; then
        echo "source ${srcdir}/.gdbinit" >> .gdbinit
 fi
 
+# Define variables host_canonical and build_canonical
+# because some Cygnus local changes in the Makefile depend on them.
+build_canonical=${build}
+host_canonical=${host}
+target_subdir=
+if [[ "${host}" != "${target}" ]] ; then
+    target_subdir=${target}/
+fi
+AC_SUBST(build_canonical)
+AC_SUBST(host_canonical)
+AC_SUBST(target_subdir)
+       
+# If this is using newlib, then define inhibit_libc in
+# LIBGCC2_CFLAGS.  This will cause __eprintf to be left out of
+# libgcc.a, but that's OK because newib should have its own version of
+# assert.h.
+inhibit_libc=
+if [[ x$with_newlib = xyes ]]; then
+       inhibit_libc=-Dinhibit_libc
+fi
+AC_SUBST(inhibit_libc)
+
 # Override SCHED_OBJ and SCHED_CFLAGS to enable the Haifa scheduler.
 sched_prefix=
 sched_cflags=
@@ -3057,6 +3410,10 @@ if [[ x$enable_haifa != x ]]; then
     done
 fi
 
+# Nothing to do for FLOAT_H, float_format already handled.
+objdir=`pwd`
+AC_SUBST(objdir)
+
 # Process the language and host/target makefile fragments.
 ${CONFIG_SHELL-/bin/sh} $srcdir/configure.frag $srcdir "$subdirs" "$dep_host_xmake_file" "$dep_tmake_file"
 
@@ -3095,11 +3452,14 @@ AC_SUBST(gxx_include_dir)
 AC_SUBST(fixincludes)
 AC_SUBST(build_install_headers_dir)
 AC_SUBST(build_exeext)
+AC_SUBST(host_exeext)
 AC_SUBST(float_format)
 AC_SUBST(will_use_collect2)
 AC_SUBST(maybe_use_collect2)
 AC_SUBST(cc_set_by_configure)
 AC_SUBST(stage_prefix_set_by_configure)
+AC_SUBST(install)
+AC_SUBST(symbolic_link)
 
 AC_SUBST_FILE(target_overrides)
 AC_SUBST_FILE(host_overrides)
@@ -3135,6 +3495,11 @@ then
        echo " ${str2}${str3}." 1>&2
 fi
 
+# Truncate the target if necessary
+if [[ x$host_truncate_target != x ]]; then
+       target=`echo $target | sed -e 's/\(..............\).*/\1/'`
+fi
+
 # Configure the subdirectories
 # AC_CONFIG_SUBDIRS($subdirs)
 
@@ -3144,12 +3509,18 @@ AC_OUTPUT($all_outputs,
 [
 . $srcdir/configure.lang
 case x$CONFIG_HEADERS in
-xconfig.h:config.in)
+xauto-host.h:config.in)
 echo > cstamp-h ;;
 esac
-# Make sure we create things so -Bstage1/ will work.
-for d in .. ${subdirs} ; do
-  if [ $d != .. ]; then
+# If the host supports symlinks, point stage[1234] at ../stage[1234] so
+# bootstrapping and the installation procedure can still use
+# CC="stage1/xgcc -Bstage1/".  If the host doesn't support symlinks,
+# FLAGS_TO_PASS has been modified to solve the problem there.
+# This is virtually a duplicate of what happens in configure.lang; we do
+# an extra check to make sure this only happens if ln -s can be used.
+if [[ "$symbolic_link" = "ln -s" ]]; then
+ for d in .. ${subdirs} ; do
+   if [[ $d != .. ]]; then
        STARTDIR=`pwd`
        cd $d
        for t in stage1 stage2 stage3 stage4 include
@@ -3158,8 +3529,9 @@ for d in .. ${subdirs} ; do
                $symbolic_link ../$t $t 2>/dev/null
        done
        cd $STARTDIR
-  fi
-done
+   fi
+ done
+else true ; fi
 ],
 [
 host='${host}'
@@ -3181,6 +3553,7 @@ version='${version}'
 local_prefix='${local_prefix}'
 build_install_headers_dir='${build_install_headers_dir}'
 build_exeext='${build_exeext}'
+host_exeext='${host_exeext}'
 out_file='${out_file}'
 gdb_needs_out_file_path='${gdb_needs_out_file_path}'
 SET_MAKE='${SET_MAKE}'