OSDN Git Service

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