OSDN Git Service

Another newlib fix
[pf3gnuchains/gcc-fork.git] / libjava / configure.in
1 dnl Process this with autoconf to create configure
2 AC_INIT(java/lang/System.java)
3
4 # This works around the fact that libtool configuration may change LD
5 # for this particular configuration, but some shells, instead of
6 # keeping the changes in LD private, export them just because LD is
7 # exported.
8 ORIGINAL_LD_FOR_MULTILIBS=$LD
9
10 AC_PROG_LN_S
11
12 dnl We use these options to decide which functions to include.
13 AC_ARG_WITH(target-subdir,
14 [  --with-target-subdir=SUBDIR
15                            configuring in a subdirectory])
16 AC_ARG_WITH(cross-host,
17 [  --with-cross-host=HOST  configuring with a cross compiler])
18
19 AC_ARG_WITH(newlib,
20 [  --with-newlib           Configuring with newlib])
21
22 LIBGCJ_CONFIGURE(.)
23
24 AM_CONFIG_HEADER(include/config.h gcj/libgcj-config.h)
25
26 # Only use libltdl for non-newlib builds.
27 if test "x${with_newlib}" = "x" || test "x${with_newlib}" = "xno"; then
28    AC_LIBLTDL_CONVENIENCE
29    AC_LIBTOOL_DLOPEN
30    DIRLTDL=libltdl
31    AC_DEFINE(USE_LTDL, 1, [Define if libltdl is in use.])
32    # Sigh.  Libtool's macro doesn't do the right thing.
33    INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL"
34    # FIXME: this is a hack.
35    sub_auxdir="`cd $ac_aux_dir && ${PWDCMD-pwd}`"
36    ac_configure_args="$ac_configure_args --with-auxdir=$sub_auxdir"
37 fi
38 AC_SUBST(INCLTDL)
39 AC_SUBST(LIBLTDL)
40 AC_SUBST(DIRLTDL)
41 AM_PROG_LIBTOOL
42 AC_CONFIG_SUBDIRS($DIRLTDL)
43
44 if test -z "$with_target_subdir" || test "$with_target_subdir" = "."; then
45    COMPPATH=.
46 else
47    COMPPATH=..
48 fi
49 AC_SUBST(COMPPATH)
50
51 dnl The -no-testsuite modules omit the test subdir.
52 AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)
53
54 dnl Should the runtime set system properties by examining the 
55 dnl environment variable GCJ_PROPERTIES?
56 AC_ARG_ENABLE(getenv-properties,
57 [  --disable-getenv-properties
58                           don't set system properties from GCJ_PROPERTIES])
59
60 dnl Whether GCJ_PROPERTIES is used depends on the target.
61 if test -z "$enable_getenv_properties"; then
62    enable_getenv_properties=${enable_getenv_properties_default-yes}
63 fi
64 if test "$enable_getenv_properties" = no; then
65    AC_DEFINE(DISABLE_GETENV_PROPERTIES, 1,
66      [Define if system properties shouldn't be read from getenv("GCJ_PROPERTIES").])
67 fi
68
69 dnl Whether we should use arguments to main()
70 if test -z "$enable_main_args"; then
71    enable_main_args=${enable_main_args_default-yes}
72 fi
73 if test "$enable_main_args" = no; then
74    AC_DEFINE(DISABLE_MAIN_ARGS, 1, [Define if we should ignore arguments to main().])
75 fi
76
77
78 dnl Should we use hashtable-based synchronization?
79 dnl Currently works only for Linux X86/ia64
80 dnl Typically faster and more space-efficient
81 AC_ARG_ENABLE(hash-synchronization,
82 [  --enable-hash-synchronization
83                           use global hash table for monitor locks])
84
85 if test -z "$enable_hash_synchronization"; then
86    enable_hash_synchronization=$enable_hash_synchronization_default
87 fi
88
89 # Do we allow intermodule optimizations (i.e. compiling many files at once)?
90 AC_ARG_ENABLE(libgcj-multifile,
91 [  --enable-libgcj-multifile
92                           allow compilation of several files at once],
93 [case "${enableval}" in
94   yes) enable_libgcj_multifile=yes ;;
95   no)  enable_libgcj_multifile=no ;;
96   *) AC_MSG_ERROR(bad value ${enableval} for --enable-libgcj-multifile) ;;
97 esac],[enable_libgcj_multifile=no])
98 AM_CONDITIONAL(ONESTEP, test "$enable_libgcj_multifile" = yes)
99
100 dnl configure.host sets slow_pthread_self if the synchronization code should 
101 dnl try to avoid pthread_self calls by caching thread IDs in a hashtable.
102 if test "${slow_pthread_self}" = "yes"; then
103   AC_DEFINE(SLOW_PTHREAD_SELF, 1,
104     [Define if if the synchronization code should try to avoid pthread_self calls by caching thread IDs in a hashtable.])
105 fi
106
107
108 dnl See if the user has requested runtime debugging.
109 LIBGCJDEBUG="false"
110 AC_SUBST(LIBGCJDEBUG)
111 AC_ARG_ENABLE(libgcj-debug,
112 [  --enable-libgcj-debug   enable runtime debugging code],
113   if test "$enable_libgcj_debug" = yes; then
114     AC_DEFINE(DEBUG, 1, [Define this if you want runtime debugging enabled.])
115     LIBGCJDEBUG="true"
116   fi)
117
118 dnl See if the user has the interpreter included.
119 AC_ARG_ENABLE(interpreter,
120 [  --enable-interpreter    enable interpreter],
121   if test "$enable_interpreter" = yes; then
122     # This can also be set in configure.host.
123     libgcj_interpreter=yes
124   elif test "$enable_interpreter" = no; then
125     libgcj_interpreter=no
126   fi)
127
128 if test "$libgcj_interpreter" = yes; then
129    AC_DEFINE(INTERPRETER, 1, [Define if you want a bytecode interpreter.])
130 fi
131 INTERPRETER="$libgcj_interpreter"
132 AC_SUBST(INTERPRETER)
133
134 AC_MSG_CHECKING([for exception model to use])
135 AC_LANG_SAVE
136 AC_LANG_CPLUSPLUS
137 AC_ARG_ENABLE(sjlj-exceptions,
138 [  --enable-sjlj-exceptions  force use of builtin_setjmp for exceptions],
139 [:],
140 [dnl Botheration.  Now we've got to detect the exception model.
141 dnl Link tests against libgcc.a are problematic since -- at least
142 dnl as of this writing -- we've not been given proper -L bits for
143 dnl single-tree newlib and libgloss.
144 dnl
145 dnl This is what AC_TRY_COMPILE would do if it didn't delete the
146 dnl conftest files before we got a change to grep them first.
147 cat > conftest.$ac_ext << EOF
148 [#]line __oline__ "configure"
149 struct S { ~S(); };
150 void bar();
151 void foo()
152 {
153   S s;
154   bar();
155 }
156 EOF
157 old_CXXFLAGS="$CXXFLAGS"  
158 CXXFLAGS=-S
159 if AC_TRY_EVAL(ac_compile); then
160   if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
161     enable_sjlj_exceptions=yes
162   elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
163     enable_sjlj_exceptions=no
164   fi
165 fi
166 CXXFLAGS="$old_CXXFLAGS"
167 rm -f conftest*])
168 if test x$enable_sjlj_exceptions = xyes; then
169   AC_DEFINE(SJLJ_EXCEPTIONS, 1,
170         [Define if the compiler is configured for setjmp/longjmp exceptions.])
171   ac_exception_model_name=sjlj
172 elif test x$enable_sjlj_exceptions = xno; then
173   ac_exception_model_name="call frame"
174 else
175   AC_MSG_ERROR([unable to detect exception model])
176 fi
177 AC_LANG_RESTORE
178 AC_MSG_RESULT($ac_exception_model_name)
179
180 # If we are non using SJLJ exceptions, and this host does not have support 
181 # for unwinding from a signal handler, enable checked dereferences and divides.
182 if test $can_unwind_signal = no && test $enable_sjlj_exceptions = no; then
183   CHECKREFSPEC=-fcheck-references
184   DIVIDESPEC=-fuse-divide-subroutine
185   EXCEPTIONSPEC=
186 fi
187
188 dnl See if the user wants to disable java.net.  This is the mildly
189 dnl ugly way that we admit that target-side configuration sucks.
190 AC_ARG_ENABLE(java-net,
191 [  --disable-java-net      disable java.net])
192
193 dnl Whether java.net is built by default can depend on the target.
194 if test -z "$enable_java_net"; then
195    enable_java_net=${enable_java_net_default-yes}
196 fi
197 if test "$enable_java_net" = no; then
198    AC_DEFINE(DISABLE_JAVA_NET, 1, [Define if java.net native functions should be stubbed out.])
199 fi
200
201 dnl See if the user wants to configure without libffi.  Some
202 dnl architectures don't support it, and default values are set in 
203 dnl configure.host.
204 AC_ARG_WITH(libffi,
205 [  --without-libffi        don't use libffi],,with_libffi=${with_libffi_default-yes})
206
207 LIBFFI=
208 LIBFFIINCS=
209 if test "$with_libffi" != no; then
210    AC_DEFINE(USE_LIBFFI, 1, [Define if we're to use libffi.])
211    LIBFFI=../libffi/libffi_convenience.la
212    LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include'
213 fi
214 AC_SUBST(LIBFFI)
215 AC_SUBST(LIBFFIINCS)
216
217 dnl See if the user wants to disable JVMPI support.
218 AC_ARG_ENABLE(jvmpi,
219 [  --disable-jvmpi         disable JVMPI support])
220
221 if test "$enable_jvmpi" != no; then
222     AC_DEFINE(ENABLE_JVMPI, 1, [Define if you are using JVMPI.])
223 fi
224
225 dnl If the target is an eCos system, use the appropriate eCos
226 dnl I/O routines.
227 dnl FIXME: this should not be a local option but a global target
228 dnl system; at present there is no eCos target.
229 TARGET_ECOS=${PROCESS-"no"}
230 AC_ARG_WITH(ecos,
231 [  --with-ecos             enable runtime eCos target support],
232 TARGET_ECOS="$with_ecos"
233 )
234
235 PLATFORMOBJS=
236 case "$TARGET_ECOS" in
237    no) case "$host" in
238       *mingw*)
239             PLATFORM=Win32
240             PLATFORMNET=Win32
241             PLATFORMOBJS=win32.lo
242             PLATFORMH=win32.h
243         CHECK_FOR_BROKEN_MINGW_LD
244       ;;
245       *)
246             PLATFORM=Posix
247             PLATFORMNET=Posix
248             PLATFORMOBJS=posix.lo
249             PLATFORMH=posix.h
250       ;;
251       esac
252       ;;
253    *)
254       PLATFORM=Ecos
255       PLATFORMNET=NoNet
256       AC_DEFINE(ECOS, 1, [Define if you're running eCos.])
257       PLATFORMOBJS=posix.lo
258       PLATFORMH=posix.h
259       ;;
260 esac
261 AC_SUBST(PLATFORMOBJS)
262 AC_LINK_FILES(include/$PLATFORMH, include/platform.h)
263
264 AC_EGREP_HEADER(uint32_t, stdint.h, AC_DEFINE(HAVE_INT32_DEFINED, 1,
265                                       [Define if you have int32_t and uint32_t.]))
266 AC_EGREP_HEADER(uint32_t, inttypes.h, AC_DEFINE(HAVE_INT32_DEFINED, 1,
267                                         [Define if you have int32_t and uint32_t.]))
268 AC_EGREP_HEADER(u_int32_t, sys/types.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1,
269                                           [Define if you have u_int32_t]))
270 AC_EGREP_HEADER(u_int32_t, sys/config.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1,
271                                            [Define if you have u_int32_t]))
272
273
274 dnl These may not be defined in a non-ANS conformant embedded system.
275 dnl FIXME: Should these case a runtime exception in that case?
276 AC_EGREP_HEADER(mktime, time.h, AC_DEFINE(HAVE_MKTIME, 1,
277                                   [Define is you have 'mktime' in <time.h>]))
278 AC_EGREP_HEADER(localtime, time.h, AC_DEFINE(HAVE_LOCALTIME, 1,
279                                   [Define is you have 'localtime' in <time.h>]))
280
281 dnl Create the subdirectory for natFileDescriptor.cc, or the attempt
282 dnl to create the link will fail.
283 test -d java || mkdir java
284 test -d java/io || mkdir java/io
285 test -d gnu || mkdir gnu
286 AC_LINK_FILES(java/io/natFile${FILE-${PLATFORM}}.cc, java/io/natFile.cc)
287 AC_LINK_FILES(java/io/natFileDescriptor${FILE-${PLATFORM}}.cc, java/io/natFileDescriptor.cc)
288
289 dnl Likewise for ConcreteProcess.java and natConcreteProcess.cc.
290 test -d java/lang || mkdir java/lang
291 AC_LINK_FILES(java/lang/${PLATFORM}Process.java, java/lang/ConcreteProcess.java)
292 AC_LINK_FILES(java/lang/nat${PLATFORM}Process.cc, java/lang/natConcreteProcess.cc)
293
294 dnl Likewise for natInetAddress.cc and natNetworkInterface.cc.
295 test -d java/net || mkdir java/net
296 AC_LINK_FILES(java/net/natInetAddress${PLATFORMNET}.cc, java/net/natInetAddress.cc)
297 AC_LINK_FILES(java/net/natNetworkInterface${PLATFORMNET}.cc, java/net/natNetworkInterface.cc)
298
299 dnl Likewise for natPlainSocketImpl.cc and natPlainDatagramSocketImpl.ca.c
300 test -d gnu/java || mkdir gnu/java
301 test -d gnu/java/net || mkdir gnu/java/net
302 AC_LINK_FILES(gnu/java/net/natPlainSocketImpl${PLATFORMNET}.cc, gnu/java/net/natPlainSocketImpl.cc)
303 AC_LINK_FILES(gnu/java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc, gnu/java/net/natPlainDatagramSocketImpl.cc)
304
305 case "${host}" in
306     *mingw*)
307       SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32"
308     ;;
309     *)
310       SYSTEMSPEC=
311     ;;
312 esac
313 AC_SUBST(SYSTEMSPEC)
314
315 LIBGCJTESTSPEC="-L`${PWDCMD-pwd}`/.libs -rpath `${PWDCMD-pwd}`/.libs"
316 AC_SUBST(LIBGCJTESTSPEC)
317
318 AC_ARG_WITH(system-zlib,
319 [  --with-system-zlib      use installed libz])
320 ZLIBSPEC=
321 AC_SUBST(ZLIBSPEC)
322 ZLIBTESTSPEC=
323 AC_SUBST(ZLIBTESTSPEC)
324
325 AC_PATH_XTRA
326
327 dnl Determine which AWT peer libraries to build
328 AC_ARG_ENABLE(java-awt,
329 [  --enable-java-awt       list of AWT peer implementations to be built])
330
331 peerlibs="`echo ${enable_java_awt} | tr ',' ' '`"
332 use_xlib_awt=""
333 use_gtk_awt=""
334 # The default toolkit to use is the first one specified.
335 TOOLKIT=
336 AC_SUBST(TOOLKIT)
337
338 for peer in $peerlibs ; do
339   case $peer in
340     xlib)
341       if test "$no_x" = yes; then
342         echo "*** xlib peers requested but no X library available" 1>&2
343         exit 1
344       else
345         use_xlib_awt="yes"
346         if test -z "$TOOLKIT"; then
347            TOOLKIT=gnu.awt.xlib.XToolkit
348         fi
349       fi
350       ;;
351     gtk)
352       if test "$no_x" = yes; then
353          echo "*** xlib peers requested but no X library available" 1>&2
354          exit 1
355       else
356          use_gtk_awt=yes
357          if test -z "$TOOLKIT"; then
358             TOOLKIT=gnu.java.awt.peer.gtk.GtkToolkit
359          fi
360          test -d jniinclude || mkdir jniinclude
361       fi
362       ;;
363     no)
364       use_xlib_awt=
365       use_gtk_awt=
366       break
367       ;;
368     *)
369       echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2
370       exit 1
371   esac
372 done
373
374 AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes)
375 AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes)
376
377
378 dnl FIXME: this should be _libs on some hosts.
379 libsubdir=.libs
380
381 dnl Allow the GC to be disabled.  Can be useful when debugging.
382 AC_MSG_CHECKING([for garbage collector to use])
383 AC_ARG_ENABLE(java-gc,
384 changequote(<<,>>)dnl
385 <<  --enable-java-gc=TYPE   choose garbage collector [boehm]>>,
386 changequote([,])
387   GC=$enableval,
388   GC=boehm)
389 GCLIBS=
390 GCINCS=
391 GCDEPS=
392 GCOBJS=
393 GCSPEC=
394 JC1GCSPEC=
395 GCTESTSPEC=
396 case "$GC" in
397  boehm)
398     AC_MSG_RESULT(boehm)
399     GCLIBS=../boehm-gc/libgcjgc_convenience.la
400     JC1GCSPEC='-fuse-boehm-gc'
401     GCTESTSPEC="-L`${PWDCMD-pwd}`/../boehm-gc/.libs -rpath `${PWDCMD-pwd}`/../boehm-gc/.libs"
402
403     dnl We also want to pick up some cpp flags required when including
404     dnl boehm-config.h.  Yuck.
405     GCINCS="`cat ../boehm-gc/boehm-cflags`"
406     GCOBJS=boehm.lo
407     GCHDR=boehm-gc.h
408     dnl The POSIX thread support needs to know this.
409     AC_DEFINE(HAVE_BOEHM_GC, 1, [Define if Boehm GC in use.])
410     ;;
411  no)
412     AC_MSG_RESULT(none)
413     GCOBJS=nogc.lo
414     GCHDR=no-gc.h
415     ;;
416  *)
417     AC_MSG_ERROR(unrecognized collector \"$GC\")
418     ;;
419 esac
420 AC_SUBST(GCLIBS)
421 AC_SUBST(GCINCS)
422 AC_SUBST(GCDEPS)
423 AC_SUBST(GCOBJS)
424 AC_SUBST(GCSPEC)
425 AC_SUBST(JC1GCSPEC)
426 AC_SUBST(GCTESTSPEC)
427 AC_LINK_FILES(include/$GCHDR, include/java-gc.h)
428
429
430 AC_MSG_CHECKING([for thread model used by GCC])
431 THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
432 AC_MSG_RESULT([$THREADS])
433
434 case "$THREADS" in
435  no | none | single)
436     THREADS=none
437     ;;
438  posix | pthreads)
439     THREADS=posix
440     case "$host" in
441      *-*-linux*)
442         AC_DEFINE(LINUX_THREADS, 1, [Define if using POSIX threads on Linux.])
443         ;;
444     esac
445     ;;
446  win32)
447     ;;
448  decosf1 | irix | mach | os2 | solaris | dce | vxworks)
449     AC_MSG_ERROR(thread package $THREADS not yet supported)
450     ;;
451  *)
452     AC_MSG_ERROR($THREADS is an unknown thread package)
453     ;;
454 esac
455
456 THREADCXXFLAGS=
457 THREADLDFLAGS=
458 THREADLIBS=
459 THREADINCS=
460 THREADDEPS=
461 THREADOBJS=
462 THREADH=
463 THREADSPEC=
464 case "$THREADS" in
465  posix)
466     case "$host" in
467      *-*-cygwin*)
468         # Don't set THREADLIBS here.  Cygwin doesn't have -lpthread.
469         ;;
470 changequote(<<,>>)   
471      *-*-freebsd[1234]*)
472 changequote([,])   
473         # Before FreeBSD 5, it didn't have -lpthread (or any library which
474         # merely adds pthread_* functions) but it does have a -pthread switch
475         # which is required at link-time to select -lc_r *instead* of -lc.
476         THREADLDFLAGS=-pthread
477         # Don't set THREADSPEC here as might be expected since -pthread is
478         # not processed when found within a spec file, it must come from
479         # the command line.  For now, the user must provide the -pthread
480         # switch to link code compiled with gcj.  In future, consider adding
481         # support for weak references to pthread_* functions ala gthr.h API.
482         THREADSPEC='%{!pthread: %eUnder this configuration, the user must provide -pthread when linking.}'
483         ;;
484      *-*-freebsd*)
485         # FreeBSD 5 implements a model much closer to other modern UNIX
486         # which support threads.  However, it still does not support
487         # -lpthread.
488         THREADLDFLAGS=-pthread
489         THREADSPEC=-lc_r
490         ;;
491      alpha*-dec-osf*)
492         THREADCXXFLAGS=-pthread
493         # boehm-gc needs some functions from librt, so link that too.
494         THREADLIBS='-lpthread -lrt'
495         THREADSPEC='-lpthread -lrt'
496         ;;
497      *)
498         THREADLIBS=-lpthread
499         THREADSPEC=-lpthread
500         ;;
501     esac
502     THREADOBJS=posix-threads.lo
503     THREADH=posix-threads.h
504     # MIT pthreads doesn't seem to have the mutexattr functions.
505     # But for now we don't check for it.  We just assume you aren't
506     # using MIT pthreads.
507     AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT, 1, [Define if using POSIX threads that have the mutexattr functions.])
508
509     # If we're using the Boehm GC, then we happen to know that it
510     # defines _REENTRANT, so we don't bother.  Eww.
511     if test "$GC" != boehm; then
512        AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
513     fi
514     AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Required define if using POSIX threads])
515     ;;
516
517  win32)
518     THREADOBJS=win32-threads.lo
519     THREADH=win32-threads.h
520     ;;
521
522  none)
523     THREADOBJS=no-threads.lo
524     THREADH=no-threads.h
525     ;;
526 esac
527 AC_LINK_FILES(include/$THREADH, include/java-threads.h)
528 AC_SUBST(THREADLIBS)
529 AC_SUBST(THREADINCS)
530 AC_SUBST(THREADDEPS)
531 AC_SUBST(THREADOBJS)
532 AC_SUBST(THREADSPEC)
533 AC_SUBST(THREADLDFLAGS)
534 AC_SUBST(THREADCXXFLAGS)
535
536 if test -d sysdep; then true; else mkdir sysdep; fi
537 AC_LINK_FILES(sysdep/$sysdeps_dir/locks.h, sysdep/locks.h)
538
539 HASH_SYNC_SPEC=
540 # Hash synchronization is only useful with posix threads right now.
541 if test "$enable_hash_synchronization" = yes && test "$THREADS" != "none"; then
542    HASH_SYNC_SPEC=-fhash-synchronization
543    AC_DEFINE(JV_HASH_SYNCHRONIZATION, 1, [Define if hash synchronization is in use])
544 fi
545 AC_SUBST(HASH_SYNC_SPEC)
546
547
548 AM_CONDITIONAL(USING_GCC, test "$GCC" = yes)
549
550 CANADIAN=no
551 NULL_TARGET=no
552 NATIVE=yes
553
554 # We're in the tree with gcc, and need to include some of its headers.
555 GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
556
557 # Figure out where generated headers like libgcj-config.h get installed.
558 changequote(,)dnl
559 gcc_version_trigger=${libgcj_basedir}/../gcc/version.c
560 gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
561 gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
562 tool_include_dir='$(libdir)/gcc/$(target_alias)/'${gcc_version}/include
563 changequote([,])dnl
564 AC_SUBST(tool_include_dir)
565 AC_SUBST(gcc_version)
566
567 if test "x${with_newlib}" = "xyes"; then
568    # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
569    # may not work correctly, because the compiler may not be able to
570    # link executables.
571
572    # We assume newlib.  This lets us hard-code the functions we know
573    # we'll have.
574    AC_DEFINE(HAVE_MEMMOVE, 1, [Define if you have memmove.])
575    AC_DEFINE(HAVE_MEMCPY, 1, [Define if you have memcpy.])
576    AC_DEFINE(HAVE_STRERROR, 1, [Define if you have strerror.])
577    AC_DEFINE(HAVE_TIME, 1, [Define if you have time.])
578    AC_DEFINE(HAVE_GMTIME_R, 1, [Define if you have the 'gmtime_r' function])
579    AC_DEFINE(HAVE_LOCALTIME_R, 1, [Define if you have the 'localtime_r' function.])
580    dnl This is only for POSIX threads.
581    AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT, 1, [Define if using POSIX threads that have the mutexattr functions.])
582    dnl We also assume we are using gcc, which provides alloca.
583    AC_DEFINE(HAVE_ALLOCA)
584
585    dnl Assume we do not have getuid and friends.
586    AC_DEFINE(NO_GETUID, 1, [Define if getuid() and friends are missing.])
587    PLATFORMNET=NoNet
588 else
589    AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir)
590    AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd)
591    AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod)
592    AC_CHECK_FUNCS(nl_langinfo setlocale)
593    AC_CHECK_FUNCS(inet_aton inet_addr, break)
594    AC_CHECK_FUNCS(inet_pton uname inet_ntoa)
595    AC_CHECK_FUNCS(fork execvp pipe sigaction ftruncate)
596    AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h) 
597    AC_CHECK_FUNC(backtrace, [
598      case "$host" in
599        ia64-*-linux*)
600          # Has broken backtrace()
601          ;;
602        *)
603          AC_DEFINE(HAVE_BACKTRACE, 1,
604            [Define if your platform has a working backtrace() function.])
605          ;;
606      esac
607    ], [
608      case "$host" in
609        *mingw*)
610          # Has backtrace() defined in libgcj itself
611          AC_DEFINE(HAVE_BACKTRACE, 1,
612            [Define if your platform has a working backtrace() function.])
613          ;;
614      esac
615    ])
616
617    AC_CHECK_LIB(dl, dladdr, [
618      AC_DEFINE(HAVE_DLADDR, 1, [Define if you have dladdr()])])
619    if test x"$build" = x"$host"; then
620      AC_CHECK_FILES(/proc/self/exe, [
621        AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe])])
622    else
623      case $host in
624      *-linux*)
625        AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe])
626        ;;
627      esac
628    fi
629
630    AM_ICONV
631    AM_LC_MESSAGES
632    AC_STRUCT_TIMEZONE
633
634    AC_CHECK_FUNCS(gethostbyname_r, [
635      AC_DEFINE(HAVE_GETHOSTBYNAME_R, 1,
636        [Define if you have the 'gethostbyname_r' function.])
637      # There are two different kinds of gethostbyname_r.
638      # We look for the one that returns `int'.
639      # Hopefully this check is robust enough.
640      AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [
641        AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT, 1, [Define if gethostbyname_r returns 'int'.])])
642
643      case " $GCINCS " in
644      *" -D_REENTRANT "*) ;;
645      *)
646         dnl On DU4.0, gethostbyname_r is only declared with -D_REENTRANT
647         AC_CACHE_CHECK([whether gethostbyname_r declaration requires -D_REENTRANT],
648         [libjava_cv_gethostbyname_r_needs_reentrant],
649         [ AC_LANG_SAVE
650           AC_LANG_CPLUSPLUS
651           AC_TRY_COMPILE([#include <netdb.h>],
652             [gethostbyname_r("", 0, 0);],
653             [libjava_cv_gethostbyname_r_needs_reentrant=no], [dnl
654                 CPPFLAGS_SAVE="$CPPFLAGS"
655                 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
656                 AC_TRY_COMPILE([#include <netdb.h>], [gethostbyname_r("", 0, 0);],
657                     [libjava_cv_gethostbyname_r_needs_reentrant=yes],
658                     [libjava_cv_gethostbyname_r_needs_reentrant=fail])
659                 CPPFLAGS="$CPPFLAGS_SAVE"
660           ])
661           AC_LANG_RESTORE
662         ])
663         if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
664           AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
665         fi
666      ;;
667      esac
668
669      AC_CACHE_CHECK([for struct hostent_data],
670         [libjava_cv_struct_hostent_data], [dnl
671         AC_TRY_COMPILE([
672 #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
673 # define _REENTRANT 1
674 #endif
675 #include <netdb.h>], [struct hostent_data data;],
676           [libjava_cv_struct_hostent_data=yes],
677           [libjava_cv_struct_hostent_data=no])])
678      if test "x$libjava_cv_struct_hostent_data" = xyes; then
679        AC_DEFINE(HAVE_STRUCT_HOSTENT_DATA, 1,
680          [Define if struct hostent_data is defined in netdb.h])
681      fi
682    ])
683
684    # FIXME: libjava source code expects to find a prototype for
685    # gethostbyaddr_r in netdb.h.  The outer check ensures that
686    # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
687    # to exist where expected.  (The root issue: AC_CHECK_FUNCS assumes C
688    # linkage check is enough, yet C++ code requires proper prototypes.)
689    AC_EGREP_HEADER(gethostbyaddr_r, netdb.h, [
690    AC_CHECK_FUNCS(gethostbyaddr_r, [
691      AC_DEFINE(HAVE_GETHOSTBYADDR_R, 1,
692        [Define if you have the 'gethostbyaddr_r' function.])
693      # There are two different kinds of gethostbyaddr_r.
694      # We look for the one that returns `int'.
695      # Hopefully this check is robust enough.
696      AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
697        AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT, 1,
698          [Define if gethostbyaddr_r returns 'int'.])])])])
699
700    AC_CHECK_FUNCS(gethostname, [
701      AC_DEFINE(HAVE_GETHOSTNAME, 1,
702        [Define if you have the 'gethostname' function.])
703      AC_EGREP_HEADER(gethostname, unistd.h, [
704        AC_DEFINE(HAVE_GETHOSTNAME_DECL, 1,
705          [Define if gethostname is declared in <unistd.h>.])])])
706
707    AC_CHECK_FUNCS(usleep, [
708      AC_EGREP_HEADER(usleep, unistd.h, [
709        AC_DEFINE(HAVE_USLEEP_DECL, 1,
710           [Define if usleep is declared in <unistd.h>.])])])
711
712    # Look for these functions in the thread library, but only bother
713    # if using POSIX threads.
714    if test "$THREADS" = posix; then
715       save_LIBS="$LIBS"
716       LIBS="$LIBS $THREADLIBS"
717       # Some POSIX thread systems don't have pthread_mutexattr_settype.
718       # E.g., Solaris.
719       AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np)
720
721       # Look for sched_yield.  Up to Solaris 2.6, it is in libposix4, since
722       # Solaris 7 the name librt is preferred.
723       AC_CHECK_FUNCS(sched_yield, , [
724         AC_CHECK_LIB(rt, sched_yield, [
725           AC_DEFINE(HAVE_SCHED_YIELD)
726           THREADLIBS="$THREADLIBS -lrt"
727           THREADSPEC="$THREADSPEC -lrt"], [
728           AC_CHECK_LIB(posix4, sched_yield, [
729             AC_DEFINE(HAVE_SCHED_YIELD)
730             THREADLIBS="$THREADLIBS -lposix4"
731             THREADSPEC="$THREADSPEC -lposix4"])])])
732       LIBS="$save_LIBS"
733
734       # We can save a little space at runtime if the mutex has m_count
735       # or __m_count.  This is a nice hack for Linux.
736       AC_TRY_COMPILE([#include <pthread.h>], [
737           extern pthread_mutex_t *mutex; int q = mutex->m_count;
738         ], AC_DEFINE(PTHREAD_MUTEX_HAVE_M_COUNT, 1,
739              [Define if pthread_mutex_t has m_count member.]), [
740         AC_TRY_COMPILE([#include <pthread.h>], [
741             extern pthread_mutex_t *mutex; int q = mutex->__m_count;
742           ], AC_DEFINE(PTHREAD_MUTEX_HAVE___M_COUNT, 1,
743             [Define if pthread_mutex_t has __m_count member.]))])
744    fi
745
746    # We require a way to get the time.
747    time_found=no
748    AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes)
749    if test "$time_found" = no; then
750       AC_MSG_ERROR([no function found to get the time])
751    fi
752
753    AC_CHECK_FUNCS(memmove)
754
755    # We require memcpy.
756    memcpy_found=no
757    AC_CHECK_FUNCS(memcpy, memcpy_found=yes)
758    if test "$memcpy_found" = no; then
759       AC_MSG_ERROR([memcpy is required])
760    fi
761
762    AC_CHECK_LIB(dl, dlopen, [
763        AC_DEFINE(HAVE_DLOPEN, 1, [Define if dlopen is available])])
764
765    # Some library-finding code we stole from Tcl.
766    #--------------------------------------------------------------------
767    #    Check for the existence of the -lsocket and -lnsl libraries.
768    #    The order here is important, so that they end up in the right
769    #    order in the command line generated by make.  Here are some
770    #    special considerations:
771    #    1. Use "connect" and "accept" to check for -lsocket, and
772    #       "gethostbyname" to check for -lnsl.
773    #    2. Use each function name only once:  can't redo a check because
774    #       autoconf caches the results of the last check and won't redo it.
775    #    3. Use -lnsl and -lsocket only if they supply procedures that
776    #       aren't already present in the normal libraries.  This is because
777    #       IRIX 5.2 has libraries, but they aren't needed and they're
778    #       bogus:  they goof up name resolution if used.
779    #    4. On some SVR4 systems, can't use -lsocket without -lnsl too.
780    #       To get around this problem, check for both libraries together
781    #       if -lsocket doesn't work by itself.
782    #--------------------------------------------------------------------
783
784    AC_CACHE_CHECK([for socket libraries], gcj_cv_lib_sockets,
785     [gcj_cv_lib_sockets=
786      gcj_checkBoth=0
787      unset ac_cv_func_connect
788      AC_CHECK_FUNC(connect, gcj_checkSocket=0, gcj_checkSocket=1)
789      if test "$gcj_checkSocket" = 1; then
790          unset ac_cv_func_connect
791          AC_CHECK_LIB(socket, main, gcj_cv_lib_sockets="-lsocket",
792                       gcj_checkBoth=1)
793      fi
794      if test "$gcj_checkBoth" = 1; then
795          gcj_oldLibs=$LIBS
796          LIBS="$LIBS -lsocket -lnsl"
797          unset ac_cv_func_accept
798          AC_CHECK_FUNC(accept,
799                        [gcj_checkNsl=0
800                         gcj_cv_lib_sockets="-lsocket -lnsl"])
801          unset ac_cv_func_accept
802          LIBS=$gcj_oldLibs
803      fi
804      unset ac_cv_func_gethostbyname
805      gcj_oldLibs=$LIBS
806      LIBS="$LIBS $gcj_cv_lib_sockets"
807      AC_CHECK_FUNC(gethostbyname, ,
808                    [AC_CHECK_LIB(nsl, main,
809                                  [gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"])])
810      unset ac_cv_func_gethostbyname
811      LIBS=$gcj_oldLIBS
812    ])
813    SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
814
815    if test "$with_system_zlib" = yes; then
816       AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=)
817    fi
818
819    # Test for Gtk stuff, if asked for.
820    if test "$use_gtk_awt" = yes; then
821       AM_PATH_GTK_2_0(2.0.0,,exit 1)
822       AM_PATH_GLIB_2_0(2.0.0,,exit 1,gthread)
823       dnl XXX Fix me when libart.m4 has the compile test fixed!
824       enable_libarttest=no
825       AM_PATH_LIBART(2.1.0,,exit 1)
826    fi
827
828    # On Solaris, and maybe other architectures, the Boehm collector
829    # requires -ldl.
830    if test "$GC" = boehm; then
831       AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl")
832    fi
833 fi
834
835 if test -z "${with_multisubdir}"; then
836    builddotdot=.
837 else
838 changequote(<<,>>)
839    builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
840 changequote([,])
841 fi
842
843 # Which gcj do we use?
844 which_gcj=default
845 built_gcc_dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`"
846 if test -n "${with_cross_host}"; then
847   # We are being configured with a cross compiler. We can't
848   # use ac_exeext, because that is for the target platform.
849   NATIVE=no
850   cross_host_exeext=
851   case "${with_cross_host}" in
852      *mingw* | *cygwin*)
853          cross_host_exeext=.exe
854      ;;
855   esac
856   if test -x "${built_gcc_dir}/gcj${cross_host_exeext}"; then
857      if test x"$build_alias" = x"$with_cross_host"; then
858         # Ordinary cross (host!=target and host=build)
859         which_gcj=built
860      else
861         # Canadian cross (host!=target and host!=build)
862         which_gcj=cross
863      fi
864   else
865      which_gcj=cross
866   fi
867 else
868   # We are being configured with a native or crossed-native compiler
869   if test -x "${built_gcc_dir}/gcj${ac_exeext}"; then
870      if test x"$build" = x"$host"; then
871         # True native build (host=target and host=build)
872         which_gcj=built
873      else
874         # Crossed-native build (host=target and host!=build)
875         which_gcj=cross
876      fi
877   else
878      which_gcj=path
879   fi
880 fi
881 case "${which_gcj}" in
882    built)
883       GCJ="$built_gcc_dir/gcj -B`${PWDCMD-pwd}`/ -B$built_gcc_dir/"
884    ;;
885    cross)
886       # See the comment in Makefile.am about CANADIAN being a misnomer
887       CANADIAN=yes
888       NULL_TARGET=no
889       if test "x${with_newlib}" = "xyes"; then
890          # FIXME (comment): Why is this needed?
891          GCC_UNWIND_INCLUDE=
892          GCJ="${target_alias}-gcj"
893       else
894          GCJ="${target_alias}-gcj -B`${PWDCMD-pwd}`/"
895       fi
896    ;;
897    path)
898       # See the comment in Makefile.am about CANADIAN being a misnomer
899       CANADIAN=yes
900       NULL_TARGET=yes
901       GCJ="gcj -B`${PWDCMD-pwd}`/"
902    ;;
903 esac
904
905 # Create it, so that compile/link tests don't fail
906 test -f libgcj.spec || touch libgcj.spec
907
908 # We must search the source tree for java.lang, since we still don't
909 # have libgcj.jar nor java/lang/*.class
910 GCJ_SAVE_CPPFLAGS=$CPPFLAGS
911 CPPFLAGS="$CPPFLAGS -I`${PWDCMD-pwd}` -I`cd $srcdir && ${PWDCMD-pwd}`"
912
913 # Since some classes depend on this one, we need its source available
914 # before we can do any GCJ compilation test :-(
915 if test ! -f gnu/classpath/Configuration.java; then
916   test -d gnu || mkdir gnu
917   test -d gnu/classpath || mkdir gnu/classpath
918   sed -e 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \
919       -e 's,@TOOLKIT@,$TOOLKIT,' \
920         < $srcdir/gnu/classpath/Configuration.java.in \
921         > gnu/classpath/Configuration.java
922   # We do not want to redirect the output of the grep below to /dev/null,
923   # but we add /dev/null to the input list so that grep will print the
924   # filename of Configuration.java in case it finds any matches.
925   if grep @ gnu/classpath/Configuration.java /dev/null; then
926     AC_MSG_ERROR([configure.in is missing the substitutions above])
927   fi
928 fi
929
930 LT_AC_PROG_GCJ
931
932 CPPFLAGS=$GCJ_SAVE_CPPFLAGS
933
934 AC_COMPILE_CHECK_SIZEOF(void *)
935
936 ZLIBS=
937 SYS_ZLIBS=
938 ZINCS=
939
940 if test -z "$ZLIBSPEC"; then
941    # Use zlib from the GCC tree.
942    ZINCS='-I$(top_srcdir)/../zlib'
943    ZLIBS=../zlib/libzgcj_convenience.la
944 else
945    # System's zlib.
946    SYS_ZLIBS="$ZLIBSPEC"
947 fi
948 AC_SUBST(ZLIBS)
949 AC_SUBST(SYS_ZLIBS)
950 AC_SUBST(ZINCS)
951 AC_SUBST(DIVIDESPEC)
952 AC_SUBST(CHECKREFSPEC)
953 AC_SUBST(EXCEPTIONSPEC)
954 AC_SUBST(IEEESPEC)
955
956 AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes)
957 AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes)
958 AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes)
959 AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
960 AC_SUBST(GCC_UNWIND_INCLUDE)
961
962 if test -n "$with_cross_host" &&
963    test x"$with_cross_host" != x"no"; then
964   toolexecdir='$(exec_prefix)/$(target_alias)'
965   toolexecmainlibdir='$(toolexecdir)/lib'
966 else
967   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
968   toolexecmainlibdir='$(libdir)'
969 fi
970 multi_os_directory=`$CC -print-multi-os-directory`
971 case $multi_os_directory in
972   .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
973   *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
974 esac
975 AC_SUBST(toolexecdir)
976 AC_SUBST(toolexecmainlibdir)
977 AC_SUBST(toolexeclibdir)
978
979 # Determine gcj version number.
980 changequote(<<,>>)
981 gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`
982 changequote([,])
983 GCJVERSION=$gcjversion
984 AC_SUBST(GCJVERSION)
985 AC_DEFINE_UNQUOTED(GCJVERSION, "$GCJVERSION", [Short GCJ version ID])
986
987 dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
988 dnl On that system, sys/ioctl.h will not include sys/filio.h unless
989 dnl BSD_COMP is defined; just including sys/filio.h is simpler.
990 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 net/if.h pwd.h sys/config.h stdint.h langinfo.h locale.h)
991 dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
992 dnl for now.  If you change this, you also must update natFile.cc.
993 AC_CHECK_HEADERS(dirent.h)
994 AC_CHECK_HEADERS(inttypes.h, [
995     AC_DEFINE(HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
996     AC_DEFINE(JV_HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
997 ])
998 AC_HEADER_SYS_WAIT
999
1000 AC_CHECK_TYPE([ssize_t], [int])
1001
1002 AC_MSG_CHECKING([for in_addr_t])
1003 AC_TRY_COMPILE([#include <sys/types.h>
1004 #if STDC_HEADERS
1005 #include <stdlib.h>
1006 #include <stddef.h>
1007 #endif
1008 #if HAVE_NETINET_IN_H
1009 #include <netinet/in.h>
1010 #endif], [in_addr_t foo;],
1011   [AC_DEFINE(HAVE_IN_ADDR_T, 1,
1012      [Define to 1 if 'in_addr_t' is defined in sys/types.h or netinet/in.h.])
1013    AC_MSG_RESULT(yes)],
1014   [AC_MSG_RESULT(no)])
1015
1016 AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h])
1017 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;],
1018   [AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1,
1019      [Define if struct ip_mreq is defined in netinet/in.h.])
1020    AC_MSG_RESULT(yes)],
1021   [AC_MSG_RESULT(no)])
1022
1023 AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
1024 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
1025   [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ, 1,
1026      [Define if struct ipv6_mreq is defined in netinet/in.h.])
1027    AC_MSG_RESULT(yes)],
1028   [AC_MSG_RESULT(no)])
1029
1030 AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
1031 AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
1032   [AC_DEFINE(HAVE_INET6, 1,
1033      [Define if inet6 structures are defined in netinet/in.h.])
1034    AC_MSG_RESULT(yes)],
1035   [AC_MSG_RESULT(no)])
1036
1037 AC_MSG_CHECKING([for socklen_t in sys/socket.h])
1038 AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
1039 #include <sys/types.h>
1040 #include <sys/socket.h>], [socklen_t x = 5;],
1041   [AC_DEFINE(HAVE_SOCKLEN_T, 1, [Define it socklen_t typedef is in sys/socket.h.])
1042    AC_MSG_RESULT(yes)],
1043   [AC_MSG_RESULT(no)])
1044
1045 AC_MSG_CHECKING([for tm_gmtoff in struct tm])
1046 AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
1047   [AC_DEFINE(STRUCT_TM_HAS_GMTOFF, 1, [Define if struct tm has tm_gmtoff field.])
1048    AC_MSG_RESULT(yes)],
1049   [AC_MSG_RESULT(no)
1050    AC_MSG_CHECKING([for global timezone variable])
1051    dnl FIXME: we don't want a link check here because that won't work
1052    dnl when cross-compiling.  So instead we make an assumption that
1053    dnl the header file will mention timezone if it exists.
1054    dnl Don't find the win32 function timezone
1055    AC_TRY_COMPILE([#include <time.h>], [void i(){long z2 = 2*timezone;}],
1056      [AC_DEFINE(HAVE_TIMEZONE, 1, [Define if global 'timezone' exists.])
1057       AC_MSG_RESULT(yes)],
1058      [AC_MSG_RESULT(no)
1059        AC_MSG_CHECKING([for global _timezone variable])
1060        dnl FIXME: As above, don't want link check
1061        AC_TRY_COMPILE([#include <time.h>], [long z2 = _timezone;],
1062          [AC_DEFINE(HAVE_UNDERSCORE_TIMEZONE, 1,
1063             [Define if your platform has the global _timezone variable.])
1064           AC_MSG_RESULT(yes)],
1065           [AC_MSG_RESULT(no)])])])
1066
1067 AC_FUNC_ALLOCA
1068 AC_FUNC_MMAP
1069
1070 AC_CHECK_PROGS(PERL, perl, false)
1071
1072 SYSDEP_SOURCES=
1073
1074 case "${host}" in
1075  i?86-*-linux*)
1076     SIGNAL_HANDLER=include/i386-signal.h
1077     ;;
1078  sparc*-sun-solaris*)
1079     SIGNAL_HANDLER=include/sparc-signal.h
1080     ;;
1081 # ia64-*)
1082 #    SYSDEP_SOURCES=sysdep/ia64.c
1083 #    test -d sysdep || mkdir sysdep
1084 #    ;;
1085  ia64-*-linux*)
1086     SIGNAL_HANDLER=include/dwarf2-signal.h
1087     ;;
1088  powerpc-*-linux*)
1089     SIGNAL_HANDLER=include/powerpc-signal.h
1090     ;;
1091  alpha*-*-linux*)
1092     SIGNAL_HANDLER=include/dwarf2-signal.h
1093     ;;
1094  s390*-*-linux*)
1095     SIGNAL_HANDLER=include/s390-signal.h
1096     ;;
1097  x86_64*-*-linux*)
1098     SIGNAL_HANDLER=include/x86_64-signal.h
1099     ;;
1100  sparc*-*-linux*)
1101     SIGNAL_HANDLER=include/dwarf2-signal.h
1102     ;;
1103  sh-*-linux* | sh[[34]]*-*-linux*)
1104     SIGNAL_HANDLER=include/dwarf2-signal.h
1105     ;;
1106  *mingw*)
1107     SIGNAL_HANDLER=include/win32-signal.h
1108     ;;
1109  *)
1110     SIGNAL_HANDLER=include/default-signal.h
1111     ;;
1112 esac
1113
1114 # If we're using sjlj exceptions, forget what we just learned.
1115 if test "$enable_sjlj_exceptions" = yes; then
1116    SIGNAL_HANDLER=include/default-signal.h
1117 fi
1118
1119 # Define here any compiler flags that you need in order to make backtrace() work.
1120 BACKTRACESPEC=
1121 case "${host}" in
1122  x86_64*-*-linux*)
1123     BACKTRACESPEC=-fno-omit-frame-pointer
1124     ;;
1125 esac
1126 AC_SUBST(BACKTRACESPEC)
1127
1128 AC_SUBST(SYSDEP_SOURCES)
1129
1130 AC_LINK_FILES($SIGNAL_HANDLER, include/java-signal.h)
1131
1132 if test "${multilib}" = "yes"; then
1133   multilib_arg="--enable-multilib"
1134 else
1135   multilib_arg=
1136 fi
1137
1138
1139
1140 here=`${PWDCMD-pwd}`
1141 AC_SUBST(here)
1142
1143 # We get this from the environment.
1144 AC_SUBST(GCJFLAGS)
1145
1146 AC_OUTPUT(Makefile libgcj.pc libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile,
1147 [# Only add multilib support code if we just rebuilt top-level Makefile.
1148 case " $CONFIG_FILES " in
1149  *" Makefile "*)
1150    LD="${ORIGINAL_LD_FOR_MULTILIBS}"
1151    ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
1152    ;;
1153 esac
1154
1155 # Make subdirectories and `.d' files.  Look in both srcdir and
1156 # builddir for the .java files.
1157 h=`${PWDCMD-pwd}`
1158 : > deps.mk
1159 ( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) ;
1160   find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) | \
1161    fgrep -v testsuite | \
1162    sed -e 's/\.java/.d/'\;'s/\.cc/.d/'\;'s/\.c/.d/' | \
1163    while read f; do
1164       echo "include $f" >> deps.mk
1165       test -f $f || {
1166 changequote(<<,>>)
1167          d=`echo $f | sed -e 's,/[^/]*$,,'`
1168 changequote([,])
1169          if test ! -d $d; then
1170            $libgcj_basedir/../mkinstalldirs $d
1171          fi;
1172          echo > $f
1173       }
1174    done
1175 ],
1176 srcdir=${srcdir}
1177 host=${host}
1178 target=${target}
1179 with_multisubdir=${with_multisubdir}
1180 ac_configure_args="${multilib_arg} ${ac_configure_args}"
1181 CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
1182 libgcj_basedir=${libgcj_basedir}
1183 CC="${CC}"
1184 CXX="${CXX}"
1185 ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
1186 )