OSDN Git Service

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