OSDN Git Service

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