OSDN Git Service

* approved by rth
[pf3gnuchains/gcc-fork.git] / libjava / configure.in
index 87f0211..93437c6 100644 (file)
@@ -1,10 +1,12 @@
 dnl Process this with autoconf to create configure
 AC_INIT(java/lang/System.java)
 
-dnl Can't be done in LIBGCJ_CONFIGURE because that confuses automake.
-AC_CONFIG_AUX_DIR(..)
+# This works around the fact that libtool configuration may change LD
+# for this particular configuration, but some shells, instead of
+# keeping the changes in LD private, export them just because LD is
+# exported.
+ORIGINAL_LD_FOR_MULTILIBS=$LD
 
-AC_CANONICAL_SYSTEM
 AC_PROG_LN_S
 
 dnl We use these options to decide which functions to include.
@@ -14,9 +16,12 @@ AC_ARG_WITH(target-subdir,
 AC_ARG_WITH(cross-host,
 [  --with-cross-host=HOST  configuring with a cross compiler])
 
+AC_ARG_WITH(newlib,
+[  --with-newlib           Configuring with newlib])
+
 LIBGCJ_CONFIGURE(.)
 
-AM_CONFIG_HEADER(include/config.h)
+AM_CONFIG_HEADER(include/config.h gcj/libgcj-config.h)
 
 # Only use libltdl for native builds.
 if test -z "${with_cross_host}"; then
@@ -26,6 +31,9 @@ if test -z "${with_cross_host}"; then
    AC_DEFINE(USE_LTDL)
    # Sigh.  Libtool's macro doesn't do the right thing.
    INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL"
+   # FIXME: this is a hack.
+   sub_auxdir="`cd $ac_aux_dir && ${PWDCMD-pwd}`"
+   ac_configure_args="$ac_configure_args --with-auxdir=$sub_auxdir"
 fi
 AC_SUBST(INCLTDL)
 AC_SUBST(LIBLTDL)
@@ -43,13 +51,6 @@ AC_SUBST(COMPPATH)
 dnl The -no-testsuite modules omit the test subdir.
 AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)
 
-dnl See whether the user prefers size or speed for Character.
-dnl The default is size.
-AC_ARG_ENABLE(fast-character,
-[  --enable-fast-character prefer speed over size for Character],
-# Nothing
-, AC_DEFINE(COMPACT_CHARACTER))
-
 dnl Should the runtime set system properties by examining the 
 dnl environment variable GCJ_PROPERTIES?
 AC_ARG_ENABLE(getenv-properties,
@@ -57,13 +58,40 @@ AC_ARG_ENABLE(getenv-properties,
                           don't set system properties from GCJ_PROPERTIES])
 
 dnl Whether GCJ_PROPERTIES is used depends on the target.
-if test -n "$enable_getenv_properties"; then
+if test -z "$enable_getenv_properties"; then
    enable_getenv_properties=${enable_getenv_properties_default-yes}
 fi
 if test "$enable_getenv_properties" = no; then
    AC_DEFINE(DISABLE_GETENV_PROPERTIES)
 fi
 
+dnl Whether we should use arguments to main()
+if test -z "$enable_main_args"; then
+   enable_main_args=${enable_main_args_default-yes}
+fi
+if test "$enable_main_args" = no; then
+   AC_DEFINE(DISABLE_MAIN_ARGS)
+fi
+
+
+dnl Should we use hashtable-based synchronization?
+dnl Currently works only for Linux X86/ia64
+dnl Typically faster and more space-efficient
+AC_ARG_ENABLE(hash-synchronization,
+[  --enable-hash-synchronization
+                          Use global hash table for monitor locks])
+
+if test -z "$enable_hash_synchronization"; then
+   enable_hash_synchronization=$enable_hash_synchronization_default
+fi
+
+dnl configure.host sets slow_pthread_self if the synchronization code should 
+dnl try to avoid pthread_self calls by caching thread IDs in a hashtable.
+if test "${slow_pthread_self}" = "yes"; then
+  AC_DEFINE(SLOW_PTHREAD_SELF)
+fi
+
+
 dnl See if the user has requested runtime debugging.
 LIBGCJDEBUG="false"
 AC_SUBST(LIBGCJDEBUG)
@@ -87,6 +115,8 @@ AC_ARG_ENABLE(interpreter,
 if test "$libgcj_interpreter" = yes; then
    AC_DEFINE(INTERPRETER)
 fi
+INTERPRETER="$libgcj_interpreter"
+AC_SUBST(INTERPRETER)
 
 AC_MSG_CHECKING([for exception model to use])
 AC_LANG_SAVE
@@ -134,15 +164,13 @@ fi
 AC_LANG_RESTORE
 AC_MSG_RESULT($ac_exception_model_name)
 
-AC_MSG_CHECKING([for data_start])
-LIBDATASTARTSPEC=
-NEEDS_DATA_START=
-AC_TRY_LINK([extern int data_start;], [return ((int) &data_start);],
-  [AC_MSG_RESULT(found it)],
-  [LIBDATASTARTSPEC="-u data_start libgcjdata.a%s"
-   NEEDS_DATA_START=yes        
-   AC_MSG_RESULT(missing)])
-AC_SUBST(LIBDATASTARTSPEC)
+# If we are non using SJLJ exceptions, and this host does not have support 
+# for unwinding from a signal handler, enable checked dereferences and divides.
+if test $can_unwind_signal = no && test $enable_sjlj_exceptions = no; then
+  CHECKREFSPEC=-fcheck-references
+  DIVIDESPEC=-fuse-divide-subroutine
+  EXCEPTIONSPEC=
+fi
 
 dnl See if the user wants to disable java.net.  This is the mildly
 dnl ugly way that we admit that target-side configuration sucks.
@@ -150,13 +178,29 @@ AC_ARG_ENABLE(java-net,
 [  --disable-java-net      disable java.net])
 
 dnl Whether java.net is built by default can depend on the target.
-if test -n "$enable_java_net"; then
+if test -z "$enable_java_net"; then
    enable_java_net=${enable_java_net_default-yes}
 fi
 if test "$enable_java_net" = no; then
    AC_DEFINE(DISABLE_JAVA_NET)
 fi
 
+dnl See if the user wants to configure without libffi.  Some
+dnl architectures don't support it, and default values are set in 
+dnl configure.host.
+AC_ARG_WITH(libffi,
+[  --without-libffi        don't use libffi],,with_libffi=${with_libffi_default-yes})
+
+LIBFFI=
+LIBFFIINCS=
+if test "$with_libffi" != no; then
+   AC_DEFINE(USE_LIBFFI)
+   LIBFFI=../libffi/libffi_convenience.la
+   LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include'
+fi
+AC_SUBST(LIBFFI)
+AC_SUBST(LIBFFIINCS)
+
 dnl See if the user wants to disable JVMPI support.
 AC_ARG_ENABLE(jvmpi,
 [  --disable-jvmpi         disable JVMPI support])
@@ -169,23 +213,36 @@ dnl If the target is an eCos system, use the appropriate eCos
 dnl I/O routines.
 dnl FIXME: this should not be a local option but a global target
 dnl system; at present there is no eCos target.
-TARGET_ECOS="no"
+TARGET_ECOS=${PROCESS-"no"}
 AC_ARG_WITH(ecos,
 [  --with-ecos             enable runtime eCos target support],
 TARGET_ECOS="$with_ecos"
 )
 
+PLATFORMOBJS=
 case "$TARGET_ECOS" in
-   no)
-      FILE_DESCRIPTOR=natFileDescriptorPosix.cc
-      PROCESS=${PROCESS-Posix}
+   no) case "$host" in
+      *mingw*)
+            PLATFORM=Win32
+            PLATFORMOBJS=win32.lo
+           PLATFORMH=win32.h
+      ;;
+      *)
+            PLATFORM=Posix
+            PLATFORMOBJS=posix.lo
+           PLATFORMH=posix.h
+      ;;
+      esac
       ;;
    *)
-      FILE_DESCRIPTOR=natFileDescriptorEcos.cc
-      PROCESS=Ecos
+      PLATFORM=Ecos
       AC_DEFINE(ECOS)
+      PLATFORMOBJS=posix.lo
+      PLATFORMH=posix.h
       ;;
 esac
+AC_SUBST(PLATFORMOBJS)
+AC_LINK_FILES(include/$PLATFORMH, include/platform.h)
 
 AC_EGREP_HEADER(uint32_t, stdint.h, AC_DEFINE(HAVE_INT32_DEFINED))
 AC_EGREP_HEADER(uint32_t, inttypes.h, AC_DEFINE(HAVE_INT32_DEFINED))
@@ -203,17 +260,25 @@ dnl to create the link will fail.
 test -d java || mkdir java
 test -d java/io || mkdir java/io
 test -d gnu || mkdir gnu
-AC_LINK_FILES(java/io/$FILE_DESCRIPTOR, java/io/natFileDescriptor.cc)
+AC_LINK_FILES(java/io/natFile${FILE-${PLATFORM}}.cc, java/io/natFile.cc)
+AC_LINK_FILES(java/io/natFileDescriptor${FILE-${PLATFORM}}.cc, java/io/natFileDescriptor.cc)
 
 dnl Likewise for ConcreteProcess.java and natConcreteProcess.cc.
 test -d java/lang || mkdir java/lang
-AC_LINK_FILES(java/lang/${PROCESS}Process.java, java/lang/ConcreteProcess.java)
-AC_LINK_FILES(java/lang/nat${PROCESS}Process.cc, java/lang/natConcreteProcess.cc)
+AC_LINK_FILES(java/lang/${PLATFORM}Process.java, java/lang/ConcreteProcess.java)
+AC_LINK_FILES(java/lang/nat${PLATFORM}Process.cc, java/lang/natConcreteProcess.cc)
 
-SYSTEMSPEC=
+case "${host}" in
+    *mingw*)
+      SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32"
+    ;;
+    *)
+      SYSTEMSPEC=
+    ;;
+esac
 AC_SUBST(SYSTEMSPEC)
 
-LIBGCJTESTSPEC="-L`pwd`/.libs -rpath `pwd`/.libs"
+LIBGCJTESTSPEC="-L`${PWDCMD-pwd}`/.libs -rpath `${PWDCMD-pwd}`/.libs"
 AC_SUBST(LIBGCJTESTSPEC)
 
 AC_ARG_WITH(system-zlib,
@@ -244,14 +309,11 @@ GCTESTSPEC=
 case "$GC" in
  boehm)
     AC_MSG_RESULT(boehm)
-    GCDEPS='$(top_builddir)/../boehm-gc/libgcjgc.la'
-    # We include the path to the boehm-gc build directory.
-    # See Makefile.am to understand why.
-    GCLIBS="$GCDEPS -L\$(here)/../boehm-gc/$libsubdir"
-    GCINCS='-I$(top_srcdir)/../boehm-gc -I$(top_builddir)/../boehm-gc'
-    GCSPEC='-lgcjgc'
+    GCLIBS=../boehm-gc/libgcjgc_convenience.la
+    GCINCS='-I$(top_srcdir)/../boehm-gc/include'
     JC1GCSPEC='-fuse-boehm-gc'
-    GCTESTSPEC="-L`pwd`/../boehm-gc/.libs -rpath `pwd`/../boehm-gc/.libs"
+    GCTESTSPEC="-L`${PWDCMD-pwd}`/../boehm-gc/.libs -rpath `${PWDCMD-pwd}`/../boehm-gc/.libs"
+
     dnl We also want to pick up some cpp flags required when including
     dnl boehm-config.h.  Yuck.
     GCINCS="$GCINCS `cat ../boehm-gc/boehm-cflags`"
@@ -295,7 +357,9 @@ case "$THREADS" in
        ;;
     esac
     ;;
- decosf1 | irix | mach | os2 | solaris | win32 | dce | vxworks)
+ win32)
+    ;;
+ decosf1 | irix | mach | os2 | solaris | dce | vxworks)
     AC_MSG_ERROR(thread package $THREADS not yet supported)
     ;;
  *)
@@ -303,6 +367,7 @@ case "$THREADS" in
     ;;
 esac
 
+THREADLDFLAGS=
 THREADLIBS=
 THREADINCS=
 THREADDEPS=
@@ -311,8 +376,36 @@ THREADH=
 THREADSPEC=
 case "$THREADS" in
  posix)
-    THREADLIBS=-lpthread
-    THREADSPEC=-lpthread
+    case "$host" in
+     *-*-cygwin*)
+       # Don't set THREADLIBS here.  Cygwin doesn't have -lpthread.
+       ;;
+changequote(<<,>>)   
+     *-*-freebsd[1234]*)
+changequote([,])   
+       # Before FreeBSD 5, it didn't have -lpthread (or any library which
+       # merely adds pthread_* functions) but it does have a -pthread switch
+       # which is required at link-time to select -lc_r *instead* of -lc.
+       THREADLDFLAGS=-pthread
+       # Don't set THREADSPEC here as might be expected since -pthread is
+       # not processed when found within a spec file, it must come from
+       # the command line.  For now, the user must provide the -pthread
+       # switch to link code compiled with gcj.  In future, consider adding
+       # support for weak references to pthread_* functions ala gthr.h API.
+       THREADSPEC='%{!pthread: %eUnder this configuration, the user must provide -pthread when linking.}'
+       ;;
+     *-*-freebsd*)
+       # FreeBSD 5 implements a model much closer to other modern UNIX
+       # which support threads.  However, it still does not support
+       # -lpthread.
+       THREADLDFLAGS=-pthread
+       THREADSPEC=-lc_r
+       ;;
+     *)
+       THREADLIBS=-lpthread
+       THREADSPEC=-lpthread
+       ;;
+    esac
     THREADOBJS=posix-threads.lo
     THREADH=posix-threads.h
     # MIT pthreads doesn't seem to have the mutexattr functions.
@@ -328,6 +421,11 @@ case "$THREADS" in
     AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Required define if using POSIX threads])
     ;;
 
+ win32)
+    THREADOBJS=win32-threads.lo
+    THREADH=win32-threads.h
+    ;;
+
  none)
     THREADOBJS=no-threads.lo
     THREADH=no-threads.h
@@ -339,6 +437,19 @@ AC_SUBST(THREADINCS)
 AC_SUBST(THREADDEPS)
 AC_SUBST(THREADOBJS)
 AC_SUBST(THREADSPEC)
+AC_SUBST(THREADLDFLAGS)
+
+if test -d sysdep; then true; else mkdir sysdep; fi
+AC_LINK_FILES(sysdep/$sysdeps_dir/locks.h, sysdep/locks.h)
+
+HASH_SYNC_SPEC=
+# Hash synchronization is only useful with posix threads right now.
+if test "$enable_hash_synchronization" = yes && test "$THREADS" = "posix"; then
+   HASH_SYNC_SPEC=-fhash-synchronization
+   AC_DEFINE(JV_HASH_SYNCHRONIZATION, 1, [Define if hash synchronization is in use])
+fi
+AC_SUBST(HASH_SYNC_SPEC)
+
 
 AM_CONDITIONAL(USING_GCC, test "$GCC" = yes)
 
@@ -347,9 +458,19 @@ NULL_TARGET=no
 NATIVE=yes
 
 # We're in the tree with gcc, and need to include some of its headers.
-GCC_UNWIND_INCLUDE='-I$(top_srcdir)/../gcc'
-
-if test -n "${with_cross_host}"; then
+GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
+
+# Figure out where generated headers like libgcj-config.h get installed.
+changequote(,)dnl
+gcc_version_trigger=${libgcj_basedir}/../gcc/version.c
+gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
+gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
+tool_include_dir='$(libdir)/gcc-lib/$(target_alias)/'${gcc_version}/include
+changequote([,])dnl
+AC_SUBST(tool_include_dir)
+AC_SUBST(gcc_version)
+
+if test "x${with_newlib}" = "xyes"; then
    # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
    # may not work correctly, because the compiler may not be able to
    # link executables.
@@ -359,6 +480,7 @@ if test -n "${with_cross_host}"; then
    AC_DEFINE(HAVE_MEMMOVE)
    AC_DEFINE(HAVE_MEMCPY)
    AC_DEFINE(HAVE_STRERROR)
+   AC_DEFINE(HAVE_TIME)
    AC_DEFINE(HAVE_GMTIME_R)
    AC_DEFINE(HAVE_LOCALTIME_R)
    dnl This is only for POSIX threads.
@@ -369,32 +491,54 @@ if test -n "${with_cross_host}"; then
    dnl Assume we do not have getuid and friends.
    AC_DEFINE(NO_GETUID)
 
-   ZLIBSPEC=-lzgcj
-   ZLIBTESTSPEC="-L`pwd`/../zlib/.libs -rpath `pwd`/../zlib/.libs"
-
    # If Canadian cross, then don't pick up tools from the build
    # directory.
-   if test "$build" != "$with_cross_host"; then
+   if test x"$build" != x"$with_cross_host" \
+        && test x"$build" != x"$target"; then
       CANADIAN=yes
       GCC_UNWIND_INCLUDE=
       GCJ="${target_alias}-gcj"
-   else
-      GCJ=
    fi
    NATIVE=no
 else
-   AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep)
+   AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir)
    AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd)
    AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod)
-   AC_CHECK_FUNCS(iconv nl_langinfo setlocale)
+   AC_CHECK_FUNCS(nl_langinfo setlocale)
    AC_CHECK_FUNCS(inet_aton inet_addr, break)
    AC_CHECK_FUNCS(inet_pton uname inet_ntoa)
-   AC_CHECK_FUNCS(backtrace fork execvp pipe)
+   AC_CHECK_FUNCS(fork execvp pipe sigaction ftruncate)
    AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h) 
+   AC_CHECK_FUNC(backtrace, [
+     case "$host" in
+       ia64-*-linux*)
+        # Has broken backtrace()
+        ;;
+       s390*-*-linux*)
+        # Has broken backtrace()
+        ;;
+       *)
+         AC_DEFINE(HAVE_BACKTRACE)
+        ;;
+     esac
+   ])
+
    AC_CHECK_LIB(dl, dladdr, [
      AC_DEFINE(HAVE_DLADDR)])
-   AC_CHECK_FILES(/proc/self/exe, [
-     AC_DEFINE(HAVE_PROC_SELF_EXE)])
+   if test x"$build" = x"$host"; then
+     AC_CHECK_FILES(/proc/self/exe, [
+       AC_DEFINE(HAVE_PROC_SELF_EXE)])
+   else
+     case $host in
+     *-linux*)
+       AC_DEFINE(HAVE_PROC_SELF_EXE)
+       ;;
+     esac
+   fi
+
+   AM_ICONV
+   AM_LC_MESSAGES
+   AC_STRUCT_TIMEZONE
 
    AC_CHECK_FUNCS(gethostbyname_r, [
      AC_DEFINE(HAVE_GETHOSTBYNAME_R)
@@ -445,13 +589,19 @@ else
      fi
    ])
 
+   # FIXME: libjava source code expects to find a prototype for
+   # gethostbyaddr_r in netdb.h.  The outer check ensures that
+   # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
+   # to exist where expected.  (The root issue: AC_CHECK_FUNCS assumes C
+   # linkage check is enough, yet C++ code requires proper prototypes.)
+   AC_EGREP_HEADER(gethostbyaddr_r, netdb.h, [
    AC_CHECK_FUNCS(gethostbyaddr_r, [
      AC_DEFINE(HAVE_GETHOSTBYADDR_R)
      # There are two different kinds of gethostbyaddr_r.
      # We look for the one that returns `int'.
      # Hopefully this check is robust enough.
      AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
-       AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT)])])
+       AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT)])])])
 
    AC_CHECK_FUNCS(gethostname, [
      AC_DEFINE(HAVE_GETHOSTNAME)
@@ -506,6 +656,9 @@ else
       AC_MSG_ERROR([memcpy is required])
    fi
 
+   AC_CHECK_LIB(dl, dlopen, [
+       AC_DEFINE(HAVE_DLOPEN, 1, [Define if dlopen is available])])
+
    # Some library-finding code we stole from Tcl.
    #--------------------------------------------------------------------
    #   Check for the existence of the -lsocket and -lnsl libraries.
@@ -557,10 +710,7 @@ else
    SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
 
    if test "$with_system_zlib" = yes; then
-      AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=-lzgcj)
-   else
-      ZLIBSPEC=-lzgcj
-      ZLIBTESTSPEC="-L`pwd`/../zlib/.libs -rpath `pwd`/../zlib/.libs"
+      AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=)
    fi
 
    # On Solaris, and maybe other architectures, the Boehm collector
@@ -577,12 +727,12 @@ changequote(<<,>>)
 changequote([,])
    fi
    if test -x "${builddotdot}/../../gcc/gcj"; then
-      dir="`cd ${builddotdot}/../../gcc && pwd`"
-      GCJ="$dir/gcj -B`pwd`/ -B$dir/"
+      dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`"
+      GCJ="$dir/gcj -B`${PWDCMD-pwd}`/ -B$dir/"
    else
       CANADIAN=yes
       NULL_TARGET=yes
-      GCJ="gcj -B`pwd`/"
+      GCJ="gcj -B`${PWDCMD-pwd}`/"
    fi
 fi
 
@@ -592,7 +742,7 @@ test -f libgcj.spec || touch libgcj.spec
 # We must search the source tree for java.lang, since we still don't
 # have libgcj.jar nor java/lang/*.class
 GCJ_SAVE_CPPFLAGS=$CPPFLAGS
-CPPFLAGS="$CPPFLAGS -I`pwd` -I`cd $srcdir && pwd`"
+CPPFLAGS="$CPPFLAGS -I`${PWDCMD-pwd}` -I`cd $srcdir && ${PWDCMD-pwd}`"
 
 # Since some classes depend on this one, we need its source available
 # before we can do any GCJ compilation test :-(
@@ -614,25 +764,25 @@ LT_AC_PROG_GCJ
 
 CPPFLAGS=$GCJ_SAVE_CPPFLAGS
 
-dnl FIXME: cross compilation
-AC_CHECK_SIZEOF(void *)
+AC_COMPILE_CHECK_SIZEOF(void *)
 
 ZLIBS=
-ZDEPS=
+SYS_ZLIBS=
 ZINCS=
-if test "x$ZLIBSPEC" = "x-lzgcj"; then
-   # We include the path to the zlib build directory.
-   # See Makefile.am to understand why.
-   ZDEPS='$(top_builddir)/../zlib/libzgcj.la'
-   ZLIBS="$ZDEPS -L\$(here)/../zlib/$libsubdir"
+
+if test -z "$ZLIBSPEC"; then
+   # Use zlib from the GCC tree.
    ZINCS='-I$(top_srcdir)/../zlib'
+   ZLIBS=../zlib/libzgcj_convenience.la
 else
-   ZLIBS="$ZLIBSPEC"
+   # System's zlib.
+   SYS_ZLIBS="$ZLIBSPEC"
 fi
 AC_SUBST(ZLIBS)
-AC_SUBST(ZDEPS)
+AC_SUBST(SYS_ZLIBS)
 AC_SUBST(ZINCS)
 AC_SUBST(DIVIDESPEC)
+AC_SUBST(CHECKREFSPEC)
 AC_SUBST(EXCEPTIONSPEC)
 
 AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes)
@@ -644,12 +794,11 @@ AC_SUBST(GCC_UNWIND_INCLUDE)
 
 # Determine gcj version number.
 changequote(<<,>>)
-gcjvers="`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`"
+gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`
 changequote([,])
-AC_DEFINE_UNQUOTED(GCJVERSION, "$gcjvers")
+GCJVERSION=$gcjversion
 AC_SUBST(GCJVERSION)
-
-AC_SUBST(AM_RUNTESTFLAGS)
+AC_DEFINE_UNQUOTED(GCJVERSION, "$GCJVERSION", [Short GCJ version ID])
 
 dnl Work around a g++ bug.  Reported to gcc-bugs@gcc.gnu.org on Jan 22, 2000.
 AC_MSG_CHECKING([for g++ -ffloat-store bug])
@@ -664,10 +813,15 @@ CFLAGS="$save_CFLAGS"
 dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
 dnl On that system, sys/ioctl.h will not include sys/filio.h unless
 dnl BSD_COMP is defined; just including sys/filio.h is simpler.
-AC_CHECK_HEADERS(unistd.h bstring.h sys/time.h sys/types.h fcntl.h sys/ioctl.h sys/filio.h sys/stat.h sys/select.h sys/socket.h netinet/in.h arpa/inet.h netdb.h pwd.h sys/config.h inttypes.h stdint.h langinfo.h locale.h)
+AC_CHECK_HEADERS(unistd.h bstring.h sys/time.h sys/types.h fcntl.h sys/ioctl.h sys/filio.h sys/stat.h sys/select.h sys/socket.h netinet/in.h arpa/inet.h netdb.h pwd.h sys/config.h stdint.h langinfo.h locale.h)
 dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
 dnl for now.  If you change this, you also must update natFile.cc.
 AC_CHECK_HEADERS(dirent.h)
+AC_CHECK_HEADERS(inttypes.h, [
+    AC_DEFINE(HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
+    AC_DEFINE(JV_HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
+])
+AC_HEADER_SYS_WAIT
 
 AC_CHECK_TYPE([ssize_t], [int])
 
@@ -690,6 +844,12 @@ AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;],
    AC_MSG_RESULT(yes)],
   [AC_MSG_RESULT(no)])
 
+AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
+AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
+  [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ)
+   AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)])
+
 AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
 AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
   [AC_DEFINE(HAVE_INET6)
@@ -697,7 +857,8 @@ AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
   [AC_MSG_RESULT(no)])
 
 AC_MSG_CHECKING([for socklen_t in sys/socket.h])
-AC_TRY_COMPILE([#include <sys/types.h>
+AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
+#include <sys/types.h>
 #include <sys/socket.h>], [socklen_t x = 5;],
   [AC_DEFINE(HAVE_SOCKLEN_T)
    AC_MSG_RESULT(yes)],
@@ -712,10 +873,17 @@ AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
    dnl FIXME: we don't want a link check here because that won't work
    dnl when cross-compiling.  So instead we make an assumption that
    dnl the header file will mention timezone if it exists.
-   AC_TRY_COMPILE([#include <time.h>], [long z2 = timezone;],
+   dnl Don't find the win32 function timezone
+   AC_TRY_COMPILE([#include <time.h>], [void i(){long z2 = 2*timezone;}],
      [AC_DEFINE(HAVE_TIMEZONE)
       AC_MSG_RESULT(yes)],
-     [AC_MSG_RESULT(no)])])
+     [AC_MSG_RESULT(no)
+       AC_MSG_CHECKING([for global _timezone variable])
+       dnl FIXME: As above, don't want link check
+       AC_TRY_COMPILE([#include <time.h>], [long z2 = _timezone;],
+         [AC_DEFINE(HAVE_UNDERSCORE_TIMEZONE)
+          AC_MSG_RESULT(yes)],
+          [AC_MSG_RESULT(no)])])])
 
 AC_FUNC_ALLOCA
 
@@ -727,20 +895,41 @@ case "${host}" in
  i?86-*-linux*)
     SIGNAL_HANDLER=include/i386-signal.h
     ;;
- sparc-sun-solaris*)
+ sparc*-sun-solaris*)
     SIGNAL_HANDLER=include/sparc-signal.h
     ;;
 # ia64-*)
 #    SYSDEP_SOURCES=sysdep/ia64.c
 #    test -d sysdep || mkdir sysdep
 #    ;;
+ ia64-*-linux*)
+    SIGNAL_HANDLER=include/dwarf2-signal.h
+    ;;
+ powerpc-*-linux*)
+    SIGNAL_HANDLER=include/dwarf2-signal.h
+    ;;
+ alpha*-*-linux*)
+    SIGNAL_HANDLER=include/dwarf2-signal.h
+    ;;
+ s390*-*-linux*)
+    SIGNAL_HANDLER=include/s390-signal.h
+    ;;
+ x86_64*-*-linux*)
+    SIGNAL_HANDLER=include/dwarf2-signal.h
+    ;;
+ sparc*-*-linux*)
+    SIGNAL_HANDLER=include/dwarf2-signal.h
+    ;;
+ *mingw*)
+    SIGNAL_HANDLER=include/win32-signal.h
+    ;;
  *)
     SIGNAL_HANDLER=include/default-signal.h
     ;;
 esac
 
 # If we're using sjlj exceptions, forget what we just learned.
-if test "$libgcj_sjlj" = yes; then
+if test "$enable_sjlj_exceptions" = yes; then
    SIGNAL_HANDLER=include/default-signal.h
 fi
 
@@ -777,6 +966,11 @@ for peer in $peerlibs ; do
     gtk)
       # Nothing, yet...
       ;;
+    no)
+      use_xlib_awt=
+      use_gtk_awt=
+      break
+      ;;
     *)
       echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2
       exit 1
@@ -787,32 +981,38 @@ AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes)
 AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes)
 
 
-here=`pwd`
+here=`${PWDCMD-pwd}`
 AC_SUBST(here)
 
 # We get this from the environment.
 AC_SUBST(GCJFLAGS)
 
 AC_OUTPUT(Makefile libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile,
-[if test -n "$CONFIG_FILES"; then
-  ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
-fi
+[# Only add multilib support code if we just rebuilt top-level Makefile.
+case " $CONFIG_FILES " in
+ *" Makefile "*)
+   LD="${ORIGINAL_LD_FOR_MULTILIBS}"
+   ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
+   ;;
+esac
 
 # Make subdirectories and `.d' files.  Look in both srcdir and
 # builddir for the .java files.
-h=`pwd`
+h=`${PWDCMD-pwd}`
 : > deps.mk
-( (cd $srcdir && find . -name '*.java' -print) ;
-  find . -name '*.java' -print) | \
+( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' \) -print) ;
+  find . \( -name '*.java' -o -name '*.cc' \) -print) | \
    fgrep -v testsuite | \
-   sed -e 's/\.java/.d/' | \
+   sed -e 's/\.java/.d/'\;'s/\.cc/.d/' | \
    while read f; do
       echo "include $f" >> deps.mk
       test -f $f || {
 changequote(<<,>>)
         d=`echo $f | sed -e 's,/[^/]*$,,'`
 changequote([,])
-        $srcdir/../mkinstalldirs $d
+        if test ! -d $d; then
+          $libgcj_basedir/../mkinstalldirs $d
+        fi;
         echo > $f
       }
    done