OSDN Git Service

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