OSDN Git Service

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