OSDN Git Service

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