OSDN Git Service

boehm-gc/
[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       AM_PATH_GTK_2_0(2.2.0,,exit 1)
880       AM_PATH_GLIB_2_0(2.2.0,,exit 1,gthread)
881       dnl XXX Fix me when libart.m4 has the compile test fixed!
882       enable_libarttest=no
883       AM_PATH_LIBART(2.1.0,,exit 1)
884    fi
885
886    # On Solaris, and maybe other architectures, the Boehm collector
887    # requires -ldl.
888    if test "$GC" = boehm; then
889       AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl")
890    fi
891 fi
892
893 if test -z "${with_multisubdir}"; then
894    builddotdot=.
895 else
896 changequote(<<,>>)
897    builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
898 changequote([,])
899 fi
900
901 # Which gcj do we use?
902 which_gcj=default
903 built_gcc_dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`"
904 if test -n "${with_cross_host}"; then
905   # We are being configured with a cross compiler. We can't
906   # use ac_exeext, because that is for the target platform.
907   NATIVE=no
908   cross_host_exeext=
909   case "${with_cross_host}" in
910      *mingw* | *cygwin*)
911          cross_host_exeext=.exe
912      ;;
913   esac
914   if test -x "${built_gcc_dir}/gcj${cross_host_exeext}"; then
915      if test x"$build_alias" = x"$with_cross_host"; then
916         # Ordinary cross (host!=target and host=build)
917         which_gcj=built
918      else
919         # Canadian cross (host!=target and host!=build)
920         which_gcj=cross
921      fi
922   else
923      which_gcj=cross
924   fi
925 else
926   # We are being configured with a native or crossed-native compiler
927   if test -x "${built_gcc_dir}/gcj${ac_exeext}"; then
928      if test x"$build" = x"$host"; then
929         # True native build (host=target and host=build)
930         which_gcj=built
931      else
932         # Crossed-native build (host=target and host!=build)
933         which_gcj=cross
934      fi
935   else
936      which_gcj=path
937   fi
938 fi
939 case "${which_gcj}" in
940    built)
941       GCJ="$built_gcc_dir/gcj -B`${PWDCMD-pwd}`/ -B$built_gcc_dir/"
942    ;;
943    cross)
944       # See the comment in Makefile.am about CANADIAN being a misnomer
945       CANADIAN=yes
946       NULL_TARGET=no
947       if test "x${with_newlib}" = "xyes"; then
948          # FIXME (comment): Why is this needed?
949          GCC_UNWIND_INCLUDE=
950          GCJ="${target_alias}-gcj"
951       else
952          GCJ="${target_alias}-gcj -B`${PWDCMD-pwd}`/"
953       fi
954    ;;
955    path)
956       # See the comment in Makefile.am about CANADIAN being a misnomer
957       CANADIAN=yes
958       NULL_TARGET=yes
959       GCJ="gcj -B`${PWDCMD-pwd}`/"
960    ;;
961 esac
962
963 # Create it, so that compile/link tests don't fail
964 test -f libgcj.spec || touch libgcj.spec
965
966 # We must search the source tree for java.lang, since we still don't
967 # have libgcj.jar nor java/lang/*.class
968 GCJ_SAVE_CPPFLAGS=$CPPFLAGS
969 CPPFLAGS="$CPPFLAGS -I`${PWDCMD-pwd}` -I`cd $srcdir && ${PWDCMD-pwd}`"
970
971 # Since some classes depend on this one, we need its source available
972 # before we can do any GCJ compilation test :-(
973 if test ! -f gnu/classpath/Configuration.java; then
974   test -d gnu || mkdir gnu
975   test -d gnu/classpath || mkdir gnu/classpath
976   sed -e 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \
977       -e 's,@TOOLKIT@,$TOOLKIT,' \
978         < $srcdir/gnu/classpath/Configuration.java.in \
979         > gnu/classpath/Configuration.java
980   # We do not want to redirect the output of the grep below to /dev/null,
981   # but we add /dev/null to the input list so that grep will print the
982   # filename of Configuration.java in case it finds any matches.
983   if grep @ gnu/classpath/Configuration.java /dev/null; then
984     AC_MSG_ERROR([configure.in is missing the substitutions above])
985   fi
986 fi
987
988 LT_AC_PROG_GCJ
989
990 CPPFLAGS=$GCJ_SAVE_CPPFLAGS
991
992 AC_COMPILE_CHECK_SIZEOF(void *)
993
994 ZLIBS=
995 SYS_ZLIBS=
996 ZINCS=
997
998 if test -z "$ZLIBSPEC"; then
999    # Use zlib from the GCC tree.
1000    ZINCS='-I$(top_srcdir)/../zlib'
1001    ZLIBS=../zlib/libzgcj_convenience.la
1002 else
1003    # System's zlib.
1004    SYS_ZLIBS="$ZLIBSPEC"
1005 fi
1006 AC_SUBST(ZLIBS)
1007 AC_SUBST(SYS_ZLIBS)
1008 AC_SUBST(ZINCS)
1009 AC_SUBST(DIVIDESPEC)
1010 AC_SUBST(CHECKREFSPEC)
1011 AC_SUBST(EXCEPTIONSPEC)
1012 AC_SUBST(IEEESPEC)
1013
1014 AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes)
1015 AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes)
1016 AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes)
1017 AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
1018 AC_SUBST(GCC_UNWIND_INCLUDE)
1019
1020 if test -n "$with_cross_host" &&
1021    test x"$with_cross_host" != x"no"; then
1022   toolexecdir='$(exec_prefix)/$(target_alias)'
1023   toolexecmainlibdir='$(toolexecdir)/lib'
1024 else
1025   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
1026   toolexecmainlibdir='$(libdir)'
1027 fi
1028 multi_os_directory=`$CC -print-multi-os-directory`
1029 case $multi_os_directory in
1030   .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
1031   *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
1032 esac
1033 AC_SUBST(toolexecdir)
1034 AC_SUBST(toolexecmainlibdir)
1035 AC_SUBST(toolexeclibdir)
1036
1037 # Determine gcj version number.
1038 changequote(<<,>>)
1039 gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`
1040 changequote([,])
1041 GCJVERSION=$gcjversion
1042 AC_SUBST(GCJVERSION)
1043 AC_DEFINE_UNQUOTED(GCJVERSION, "$GCJVERSION", [Short GCJ version ID])
1044
1045 dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
1046 dnl On that system, sys/ioctl.h will not include sys/filio.h unless
1047 dnl BSD_COMP is defined; just including sys/filio.h is simpler.
1048 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)
1049 dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
1050 dnl for now.  If you change this, you also must update natFile.cc.
1051 AC_CHECK_HEADERS(dirent.h)
1052 AC_CHECK_HEADERS(inttypes.h, [
1053     AC_DEFINE(HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
1054     AC_DEFINE(JV_HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
1055 ])
1056 AC_HEADER_SYS_WAIT
1057
1058 AC_CHECK_TYPE([ssize_t], [int])
1059
1060 AC_MSG_CHECKING([for in_addr_t])
1061 AC_TRY_COMPILE([#include <sys/types.h>
1062 #if STDC_HEADERS
1063 #include <stdlib.h>
1064 #include <stddef.h>
1065 #endif
1066 #if HAVE_NETINET_IN_H
1067 #include <netinet/in.h>
1068 #endif], [in_addr_t foo;],
1069   [AC_DEFINE(HAVE_IN_ADDR_T, 1,
1070      [Define to 1 if 'in_addr_t' is defined in sys/types.h or netinet/in.h.])
1071    AC_MSG_RESULT(yes)],
1072   [AC_MSG_RESULT(no)])
1073
1074 AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h])
1075 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;],
1076   [AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1,
1077      [Define if struct ip_mreq is defined in netinet/in.h.])
1078    AC_MSG_RESULT(yes)],
1079   [AC_MSG_RESULT(no)])
1080
1081 AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
1082 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
1083   [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ, 1,
1084      [Define if struct ipv6_mreq is defined in netinet/in.h.])
1085    AC_MSG_RESULT(yes)],
1086   [AC_MSG_RESULT(no)])
1087
1088 AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
1089 AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
1090   [AC_DEFINE(HAVE_INET6, 1,
1091      [Define if inet6 structures are defined in netinet/in.h.])
1092    AC_MSG_RESULT(yes)],
1093   [AC_MSG_RESULT(no)])
1094
1095 AC_MSG_CHECKING([for socklen_t in sys/socket.h])
1096 AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
1097 #include <sys/types.h>
1098 #include <sys/socket.h>], [socklen_t x = 5;],
1099   [AC_DEFINE(HAVE_SOCKLEN_T, 1, [Define it socklen_t typedef is in sys/socket.h.])
1100    AC_MSG_RESULT(yes)],
1101   [AC_MSG_RESULT(no)])
1102
1103 AC_MSG_CHECKING([for tm_gmtoff in struct tm])
1104 AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
1105   [AC_DEFINE(STRUCT_TM_HAS_GMTOFF, 1, [Define if struct tm has tm_gmtoff field.])
1106    AC_MSG_RESULT(yes)],
1107   [AC_MSG_RESULT(no)
1108    AC_MSG_CHECKING([for global timezone variable])
1109    dnl FIXME: we don't want a link check here because that won't work
1110    dnl when cross-compiling.  So instead we make an assumption that
1111    dnl the header file will mention timezone if it exists.
1112    dnl Don't find the win32 function timezone
1113    AC_TRY_COMPILE([#include <time.h>], [void i(){long z2 = 2*timezone;}],
1114      [AC_DEFINE(HAVE_TIMEZONE, 1, [Define if global 'timezone' exists.])
1115       AC_MSG_RESULT(yes)],
1116      [AC_MSG_RESULT(no)
1117        AC_MSG_CHECKING([for global _timezone variable])
1118        dnl FIXME: As above, don't want link check
1119        AC_TRY_COMPILE([#include <time.h>], [long z2 = _timezone;],
1120          [AC_DEFINE(HAVE_UNDERSCORE_TIMEZONE, 1,
1121             [Define if your platform has the global _timezone variable.])
1122           AC_MSG_RESULT(yes)],
1123           [AC_MSG_RESULT(no)])])])
1124
1125 AC_FUNC_ALLOCA
1126 AC_FUNC_MMAP
1127
1128 AC_CHECK_PROGS(PERL, perl, false)
1129
1130 SYSDEP_SOURCES=
1131
1132 case "${host}" in
1133  i?86-*-linux*)
1134     SIGNAL_HANDLER=include/i386-signal.h
1135     ;;
1136  sparc*-sun-solaris*)
1137     SIGNAL_HANDLER=include/sparc-signal.h
1138     ;;
1139 # ia64-*)
1140 #    SYSDEP_SOURCES=sysdep/ia64.c
1141 #    test -d sysdep || mkdir sysdep
1142 #    ;;
1143  ia64-*-linux*)
1144     SIGNAL_HANDLER=include/dwarf2-signal.h
1145     ;;
1146  powerpc-*-linux*)
1147     SIGNAL_HANDLER=include/powerpc-signal.h
1148     ;;
1149  alpha*-*-linux*)
1150     SIGNAL_HANDLER=include/dwarf2-signal.h
1151     ;;
1152  s390*-*-linux*)
1153     SIGNAL_HANDLER=include/s390-signal.h
1154     ;;
1155  x86_64*-*-linux*)
1156     SIGNAL_HANDLER=include/x86_64-signal.h
1157     ;;
1158  sparc*-*-linux*)
1159     SIGNAL_HANDLER=include/dwarf2-signal.h
1160     ;;
1161  sh-*-linux* | sh[[34]]*-*-linux*)
1162     SIGNAL_HANDLER=include/dwarf2-signal.h
1163     ;;
1164  *mingw*)
1165     SIGNAL_HANDLER=include/win32-signal.h
1166     ;;
1167  mips*-*-linux*)
1168     SIGNAL_HANDLER=include/mips-signal.h
1169     ;;
1170  *)
1171     SIGNAL_HANDLER=include/default-signal.h
1172     ;;
1173 esac
1174
1175 # If we're using sjlj exceptions, forget what we just learned.
1176 if test "$enable_sjlj_exceptions" = yes; then
1177    SIGNAL_HANDLER=include/default-signal.h
1178 fi
1179
1180 # Define here any compiler flags that you need in order to make backtrace() work.
1181 BACKTRACESPEC=
1182 case "${host}" in
1183  x86_64*-*-linux*)
1184     BACKTRACESPEC=-fno-omit-frame-pointer
1185     ;;
1186 esac
1187 AC_SUBST(BACKTRACESPEC)
1188
1189 AC_SUBST(SYSDEP_SOURCES)
1190
1191 AC_LINK_FILES($SIGNAL_HANDLER, include/java-signal.h)
1192
1193 if test "${multilib}" = "yes"; then
1194   multilib_arg="--enable-multilib"
1195 else
1196   multilib_arg=
1197 fi
1198
1199
1200
1201 here=`${PWDCMD-pwd}`
1202 AC_SUBST(here)
1203
1204 # We get this from the environment.
1205 AC_SUBST(GCJFLAGS)
1206
1207 AC_OUTPUT(Makefile libgcj.pc libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile,
1208 [# Only add multilib support code if we just rebuilt top-level Makefile.
1209 case " $CONFIG_FILES " in
1210  *" Makefile "*)
1211    LD="${ORIGINAL_LD_FOR_MULTILIBS}"
1212    ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
1213    ;;
1214 esac
1215
1216 # Make subdirectories and `.d' files.  Look in both srcdir and
1217 # builddir for the .java files.
1218 h=`${PWDCMD-pwd}`
1219 : > deps.mk
1220 ( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) ;
1221   find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) | \
1222    fgrep -v testsuite | \
1223    sed -e 's/\.java/.d/'\;'s/\.cc/.d/'\;'s/\.c/.d/' | \
1224    while read f; do
1225       echo "include $f" >> deps.mk
1226       test -f $f || {
1227 changequote(<<,>>)
1228          d=`echo $f | sed -e 's,/[^/]*$,,'`
1229 changequote([,])
1230          if test ! -d $d; then
1231            $libgcj_basedir/../mkinstalldirs $d
1232          fi;
1233          echo > $f
1234       }
1235    done
1236 ],
1237 srcdir=${srcdir}
1238 host=${host}
1239 target=${target}
1240 with_multisubdir=${with_multisubdir}
1241 ac_configure_args="${multilib_arg} ${ac_configure_args}"
1242 CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
1243 libgcj_basedir=${libgcj_basedir}
1244 CC="${CC}"
1245 CXX="${CXX}"
1246 ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
1247 )