OSDN Git Service

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