OSDN Git Service

* Make-lang.in (treelang/tree1.o, treelang/treetree.o,
[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
119 AC_MSG_CHECKING([for exception model to use])
120 AC_LANG_SAVE
121 AC_LANG_CPLUSPLUS
122 AC_ARG_ENABLE(sjlj-exceptions,
123 [  --enable-sjlj-exceptions  force use of builtin_setjmp for exceptions],
124 [:],
125 [dnl Botheration.  Now we've got to detect the exception model.
126 dnl Link tests against libgcc.a are problematic since -- at least
127 dnl as of this writing -- we've not been given proper -L bits for
128 dnl single-tree newlib and libgloss.
129 dnl
130 dnl This is what AC_TRY_COMPILE would do if it didn't delete the
131 dnl conftest files before we got a change to grep them first.
132 cat > conftest.$ac_ext << EOF
133 [#]line __oline__ "configure"
134 struct S { ~S(); };
135 void bar();
136 void foo()
137 {
138   S s;
139   bar();
140 }
141 EOF
142 old_CXXFLAGS="$CXXFLAGS"  
143 CXXFLAGS=-S
144 if AC_TRY_EVAL(ac_compile); then
145   if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
146     enable_sjlj_exceptions=yes
147   elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
148     enable_sjlj_exceptions=no
149   fi
150 fi
151 CXXFLAGS="$old_CXXFLAGS"
152 rm -f conftest*])
153 if test x$enable_sjlj_exceptions = xyes; then
154   AC_DEFINE(SJLJ_EXCEPTIONS, 1,
155         [Define if the compiler is configured for setjmp/longjmp exceptions.])
156   ac_exception_model_name=sjlj
157 elif test x$enable_sjlj_exceptions = xno; then
158   ac_exception_model_name="call frame"
159 else
160   AC_MSG_ERROR([unable to detect exception model])
161 fi
162 AC_LANG_RESTORE
163 AC_MSG_RESULT($ac_exception_model_name)
164
165 # If we are non using SJLJ exceptions, and this host does not have support 
166 # for unwinding from a signal handler, enable checked dereferences and divides.
167 if test $can_unwind_signal = no && test $enable_sjlj_exceptions = no; then
168   CHECKREFSPEC=-fcheck-references
169   DIVIDESPEC=-fuse-divide-subroutine
170   EXCEPTIONSPEC=
171 fi
172
173 dnl See if the user wants to disable java.net.  This is the mildly
174 dnl ugly way that we admit that target-side configuration sucks.
175 AC_ARG_ENABLE(java-net,
176 [  --disable-java-net      disable java.net])
177
178 dnl Whether java.net is built by default can depend on the target.
179 if test -z "$enable_java_net"; then
180    enable_java_net=${enable_java_net_default-yes}
181 fi
182 if test "$enable_java_net" = no; then
183    AC_DEFINE(DISABLE_JAVA_NET)
184 fi
185
186 dnl See if the user wants to configure without libffi.  Some
187 dnl architectures don't support it, and default values are set in 
188 dnl configure.host.
189 AC_ARG_WITH(libffi,
190 [  --without-libffi        don't use libffi],,with_libffi=${with_libffi_default-yes})
191
192 LIBFFI=
193 LIBFFIINCS=
194 if test "$with_libffi" != no; then
195    AC_DEFINE(USE_LIBFFI)
196    LIBFFI=../libffi/libffi_convenience.la
197    LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I$(MULTIBUILDTOP)../libffi/include'
198 fi
199 AC_SUBST(LIBFFI)
200 AC_SUBST(LIBFFIINCS)
201
202 dnl See if the user wants to disable JVMPI support.
203 AC_ARG_ENABLE(jvmpi,
204 [  --disable-jvmpi         disable JVMPI support])
205
206 if test "$enable_jvmpi" != no; then
207     AC_DEFINE(ENABLE_JVMPI)
208 fi
209
210 dnl If the target is an eCos system, use the appropriate eCos
211 dnl I/O routines.
212 dnl FIXME: this should not be a local option but a global target
213 dnl system; at present there is no eCos target.
214 TARGET_ECOS=${PROCESS-"no"}
215 AC_ARG_WITH(ecos,
216 [  --with-ecos             enable runtime eCos target support],
217 TARGET_ECOS="$with_ecos"
218 )
219
220 PLATFORMOBJS=
221 case "$TARGET_ECOS" in
222    no) case "$host" in
223       *mingw*)
224             PLATFORM=Win32
225             PLATFORMOBJS=win32.lo
226             PLATFORMH=win32.h
227       ;;
228       *)
229             PLATFORM=Posix
230             PLATFORMOBJS=posix.lo
231             PLATFORMH=posix.h
232       ;;
233       esac
234       ;;
235    *)
236       PLATFORM=Ecos
237       AC_DEFINE(ECOS)
238       PLATFORMOBJS=posix.lo
239       PLATFORMH=posix.h
240       ;;
241 esac
242 AC_SUBST(PLATFORMOBJS)
243 AC_LINK_FILES(include/$PLATFORMH, include/platform.h)
244
245 AC_EGREP_HEADER(uint32_t, stdint.h, AC_DEFINE(HAVE_INT32_DEFINED))
246 AC_EGREP_HEADER(uint32_t, inttypes.h, AC_DEFINE(HAVE_INT32_DEFINED))
247 AC_EGREP_HEADER(u_int32_t, sys/types.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED))
248 AC_EGREP_HEADER(u_int32_t, sys/config.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED))
249
250
251 dnl These may not be defined in a non-ANS conformant embedded system.
252 dnl FIXME: Should these case a runtime exception in that case?
253 AC_EGREP_HEADER(mktime, time.h, AC_DEFINE(HAVE_MKTIME))
254 AC_EGREP_HEADER(localtime, time.h, AC_DEFINE(HAVE_LOCALTIME))
255
256 dnl Create the subdirectory for natFileDescriptor.cc, or the attempt
257 dnl to create the link will fail.
258 test -d java || mkdir java
259 test -d java/io || mkdir java/io
260 test -d gnu || mkdir gnu
261 AC_LINK_FILES(java/io/natFile${FILE-${PLATFORM}}.cc, java/io/natFile.cc)
262 AC_LINK_FILES(java/io/natFileDescriptor${FILE-${PLATFORM}}.cc, java/io/natFileDescriptor.cc)
263
264 dnl Likewise for ConcreteProcess.java and natConcreteProcess.cc.
265 test -d java/lang || mkdir java/lang
266 AC_LINK_FILES(java/lang/${PLATFORM}Process.java, java/lang/ConcreteProcess.java)
267 AC_LINK_FILES(java/lang/nat${PLATFORM}Process.cc, java/lang/natConcreteProcess.cc)
268
269 case "${host}" in
270     *mingw*)
271       SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32"
272     ;;
273     *)
274       SYSTEMSPEC=
275     ;;
276 esac
277 AC_SUBST(SYSTEMSPEC)
278
279 LIBGCJTESTSPEC="-L`${PWDCMD-pwd}`/.libs -rpath `${PWDCMD-pwd}`/.libs"
280 AC_SUBST(LIBGCJTESTSPEC)
281
282 AC_ARG_WITH(system-zlib,
283 [  --with-system-zlib      use installed libz])
284 ZLIBSPEC=
285 AC_SUBST(ZLIBSPEC)
286 ZLIBTESTSPEC=
287 AC_SUBST(ZLIBTESTSPEC)
288
289 dnl FIXME: this should be _libs on some hosts.
290 libsubdir=.libs
291
292 dnl Allow the GC to be disabled.  Can be useful when debugging.
293 AC_MSG_CHECKING([for garbage collector to use])
294 AC_ARG_ENABLE(java-gc,
295 changequote(<<,>>)dnl
296 <<  --enable-java-gc=TYPE   choose garbage collector [boehm]>>,
297 changequote([,])
298   GC=$enableval,
299   GC=boehm)
300 GCLIBS=
301 GCINCS=
302 GCDEPS=
303 GCOBJS=
304 GCSPEC=
305 JC1GCSPEC=
306 GCTESTSPEC=
307 case "$GC" in
308  boehm)
309     AC_MSG_RESULT(boehm)
310     GCLIBS=../boehm-gc/libgcjgc_convenience.la
311     GCINCS='-I$(top_srcdir)/../boehm-gc/include'
312     JC1GCSPEC='-fuse-boehm-gc'
313     GCTESTSPEC="-L`${PWDCMD-pwd}`/../boehm-gc/.libs -rpath `${PWDCMD-pwd}`/../boehm-gc/.libs"
314
315     dnl We also want to pick up some cpp flags required when including
316     dnl boehm-config.h.  Yuck.
317     GCINCS="$GCINCS `cat ../boehm-gc/boehm-cflags`"
318     GCOBJS=boehm.lo
319     GCHDR=boehm-gc.h
320     dnl The POSIX thread support needs to know this.
321     AC_DEFINE(HAVE_BOEHM_GC)
322     ;;
323  no)
324     AC_MSG_RESULT(none)
325     GCOBJS=nogc.lo
326     GCHDR=no-gc.h
327     ;;
328  *)
329     AC_MSG_ERROR(unrecognized collector \"$GC\")
330     ;;
331 esac
332 AC_SUBST(GCLIBS)
333 AC_SUBST(GCINCS)
334 AC_SUBST(GCDEPS)
335 AC_SUBST(GCOBJS)
336 AC_SUBST(GCSPEC)
337 AC_SUBST(JC1GCSPEC)
338 AC_SUBST(GCTESTSPEC)
339 AC_LINK_FILES(include/$GCHDR, include/java-gc.h)
340
341
342 AC_MSG_CHECKING([for thread model used by GCC])
343 THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
344 AC_MSG_RESULT([$THREADS])
345
346 case "$THREADS" in
347  no | none | single)
348     THREADS=none
349     ;;
350  posix | pthreads)
351     THREADS=posix
352     case "$host" in
353      *-*-linux*)
354         AC_DEFINE(LINUX_THREADS)
355         ;;
356     esac
357     ;;
358  win32)
359     ;;
360  decosf1 | irix | mach | os2 | solaris | dce | vxworks)
361     AC_MSG_ERROR(thread package $THREADS not yet supported)
362     ;;
363  *)
364     AC_MSG_ERROR($THREADS is an unknown thread package)
365     ;;
366 esac
367
368 THREADLDFLAGS=
369 THREADLIBS=
370 THREADINCS=
371 THREADDEPS=
372 THREADOBJS=
373 THREADH=
374 THREADSPEC=
375 case "$THREADS" in
376  posix)
377     case "$host" in
378      *-*-cygwin*)
379         # Don't set THREADLIBS here.  Cygwin doesn't have -lpthread.
380         ;;
381 changequote(<<,>>)   
382      *-*-freebsd[1234]*)
383 changequote([,])   
384         # Before FreeBSD 5, it didn't have -lpthread (or any library which
385         # merely adds pthread_* functions) but it does have a -pthread switch
386         # which is required at link-time to select -lc_r *instead* of -lc.
387         THREADLDFLAGS=-pthread
388         # Don't set THREADSPEC here as might be expected since -pthread is
389         # not processed when found within a spec file, it must come from
390         # the command line.  For now, the user must provide the -pthread
391         # switch to link code compiled with gcj.  In future, consider adding
392         # support for weak references to pthread_* functions ala gthr.h API.
393         THREADSPEC='%{!pthread: %eUnder this configuration, the user must provide -pthread when linking.}'
394         ;;
395      *-*-freebsd*)
396         # FreeBSD 5 implements a model much closer to other modern UNIX
397         # which support threads.  However, it still does not support
398         # -lpthread.
399         THREADLDFLAGS=-pthread
400         THREADSPEC=-lc_r
401         ;;
402      *)
403         THREADLIBS=-lpthread
404         THREADSPEC=-lpthread
405         ;;
406     esac
407     THREADOBJS=posix-threads.lo
408     THREADH=posix-threads.h
409     # MIT pthreads doesn't seem to have the mutexattr functions.
410     # But for now we don't check for it.  We just assume you aren't
411     # using MIT pthreads.
412     AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT)
413
414     # If we're using the Boehm GC, then we happen to know that it
415     # defines _REENTRANT, so we don't bother.  Eww.
416     if test "$GC" != boehm; then
417        AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
418     fi
419     AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Required define if using POSIX threads])
420     ;;
421
422  win32)
423     THREADOBJS=win32-threads.lo
424     THREADH=win32-threads.h
425     ;;
426
427  none)
428     THREADOBJS=no-threads.lo
429     THREADH=no-threads.h
430     ;;
431 esac
432 AC_LINK_FILES(include/$THREADH, include/java-threads.h)
433 AC_SUBST(THREADLIBS)
434 AC_SUBST(THREADINCS)
435 AC_SUBST(THREADDEPS)
436 AC_SUBST(THREADOBJS)
437 AC_SUBST(THREADSPEC)
438 AC_SUBST(THREADLDFLAGS)
439
440 if test -d sysdep; then true; else mkdir sysdep; fi
441 AC_LINK_FILES(sysdep/$sysdeps_dir/locks.h, sysdep/locks.h)
442
443 HASH_SYNC_SPEC=
444 # Hash synchronization is only useful with posix threads right now.
445 if test "$enable_hash_synchronization" = yes && test "$THREADS" = "posix"; then
446    HASH_SYNC_SPEC=-fhash-synchronization
447    AC_DEFINE(JV_HASH_SYNCHRONIZATION, 1, [Define if hash synchronization is in use])
448 fi
449 AC_SUBST(HASH_SYNC_SPEC)
450
451
452 AM_CONDITIONAL(USING_GCC, test "$GCC" = yes)
453
454 CANADIAN=no
455 NULL_TARGET=no
456 NATIVE=yes
457
458 # We're in the tree with gcc, and need to include some of its headers.
459 GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
460
461 # Figure out where generated headers like libgcj-config.h get installed.
462 changequote(,)dnl
463 gcc_version_trigger=${libgcj_basedir}/../gcc/version.c
464 gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
465 gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
466 tool_include_dir='$(libdir)/gcc-lib/$(target_alias)/'${gcc_version}/include
467 changequote([,])dnl
468 AC_SUBST(tool_include_dir)
469 AC_SUBST(gcc_version)
470
471 if test "x${with_newlib}" = "xyes"; then
472    # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
473    # may not work correctly, because the compiler may not be able to
474    # link executables.
475
476    # We assume newlib.  This lets us hard-code the functions we know
477    # we'll have.
478    AC_DEFINE(HAVE_MEMMOVE)
479    AC_DEFINE(HAVE_MEMCPY)
480    AC_DEFINE(HAVE_STRERROR)
481    AC_DEFINE(HAVE_TIME)
482    AC_DEFINE(HAVE_GMTIME_R)
483    AC_DEFINE(HAVE_LOCALTIME_R)
484    dnl This is only for POSIX threads.
485    AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT)
486    dnl We also assume we are using gcc, which provides alloca.
487    AC_DEFINE(HAVE_ALLOCA)
488
489    dnl Assume we do not have getuid and friends.
490    AC_DEFINE(NO_GETUID)
491
492    # If Canadian cross, then don't pick up tools from the build
493    # directory.
494    if test x"$build" != x"$with_cross_host" && x"$build" != x"$target"; then
495       CANADIAN=yes
496       GCC_UNWIND_INCLUDE=
497       GCJ="${target_alias}-gcj"
498    fi
499    NATIVE=no
500 else
501    AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir)
502    AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd)
503    AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod)
504    AC_CHECK_FUNCS(nl_langinfo setlocale)
505    AC_CHECK_FUNCS(inet_aton inet_addr, break)
506    AC_CHECK_FUNCS(inet_pton uname inet_ntoa)
507    AC_CHECK_FUNCS(fork execvp pipe sigaction)
508    AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h) 
509    AC_CHECK_FUNC(backtrace, [
510      case "$host" in
511        ia64-*-linux*)
512          # Has broken backtrace()
513          ;;
514        s390*-*-linux*)
515          # Has broken backtrace()
516          ;;
517        *)
518          AC_DEFINE(HAVE_BACKTRACE)
519          ;;
520      esac
521    ])
522
523    AC_CHECK_LIB(dl, dladdr, [
524      AC_DEFINE(HAVE_DLADDR)])
525    if test x"$build" = x"$host"; then
526      AC_CHECK_FILES(/proc/self/exe, [
527        AC_DEFINE(HAVE_PROC_SELF_EXE)])
528    else
529      case $host in
530      *-linux*)
531        AC_DEFINE(HAVE_PROC_SELF_EXE)
532        ;;
533      esac
534    fi
535
536    AM_ICONV
537    AM_LC_MESSAGES
538    AC_STRUCT_TIMEZONE
539
540    AC_CHECK_FUNCS(gethostbyname_r, [
541      AC_DEFINE(HAVE_GETHOSTBYNAME_R)
542      # There are two different kinds of gethostbyname_r.
543      # We look for the one that returns `int'.
544      # Hopefully this check is robust enough.
545      AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [
546        AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT)])
547
548      case " $GCINCS " in
549      *" -D_REENTRANT "*) ;;
550      *)
551         dnl On DU4.0, gethostbyname_r is only declared with -D_REENTRANT
552         AC_CACHE_CHECK([whether gethostbyname_r declaration requires -D_REENTRANT],
553         [libjava_cv_gethostbyname_r_needs_reentrant],
554         [ AC_LANG_SAVE
555           AC_LANG_CPLUSPLUS
556           AC_TRY_COMPILE([#include <netdb.h>],
557             [gethostbyname_r("", 0, 0);],
558             [libjava_cv_gethostbyname_r_needs_reentrant=no], [dnl
559                 CPPFLAGS_SAVE="$CPPFLAGS"
560                 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
561                 AC_TRY_COMPILE([#include <netdb.h>], [gethostbyname_r("", 0, 0);],
562                     [libjava_cv_gethostbyname_r_needs_reentrant=yes],
563                     [libjava_cv_gethostbyname_r_needs_reentrant=fail])
564                 CPPFLAGS="$CPPFLAGS_SAVE"
565           ])
566           AC_LANG_RESTORE
567         ])
568         if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
569           AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
570         fi
571      ;;
572      esac
573
574      AC_CACHE_CHECK([for struct hostent_data],
575         [libjava_cv_struct_hostent_data], [dnl
576         AC_TRY_COMPILE([
577 #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
578 # define _REENTRANT 1
579 #endif
580 #include <netdb.h>], [struct hostent_data data;],
581           [libjava_cv_struct_hostent_data=yes],
582           [libjava_cv_struct_hostent_data=no])])
583      if test "x$libjava_cv_struct_hostent_data" = xyes; then
584        AC_DEFINE(HAVE_STRUCT_HOSTENT_DATA, 1,
585          [Define if struct hostent_data is defined in netdb.h])
586      fi
587    ])
588
589    # FIXME: libjava source code expects to find a prototype for
590    # gethostbyaddr_r in netdb.h.  The outer check ensures that
591    # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
592    # to exist where expected.  (The root issue: AC_CHECK_FUNCS assumes C
593    # linkage check is enough, yet C++ code requires proper prototypes.)
594    AC_EGREP_HEADER(gethostbyaddr_r, netdb.h, [
595    AC_CHECK_FUNCS(gethostbyaddr_r, [
596      AC_DEFINE(HAVE_GETHOSTBYADDR_R)
597      # There are two different kinds of gethostbyaddr_r.
598      # We look for the one that returns `int'.
599      # Hopefully this check is robust enough.
600      AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
601        AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT)])])])
602
603    AC_CHECK_FUNCS(gethostname, [
604      AC_DEFINE(HAVE_GETHOSTNAME)
605      AC_EGREP_HEADER(gethostname, unistd.h, [
606        AC_DEFINE(HAVE_GETHOSTNAME_DECL)])])
607
608    # Look for these functions in the thread library, but only bother
609    # if using POSIX threads.
610    if test "$THREADS" = posix; then
611       save_LIBS="$LIBS"
612       LIBS="$LIBS $THREADLIBS"
613       # Some POSIX thread systems don't have pthread_mutexattr_settype.
614       # E.g., Solaris.
615       AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np)
616
617       # Look for sched_yield.  Up to Solaris 2.6, it is in libposix4, since
618       # Solaris 7 the name librt is preferred.
619       AC_CHECK_FUNCS(sched_yield, , [
620         AC_CHECK_LIB(rt, sched_yield, [
621           AC_DEFINE(HAVE_SCHED_YIELD)
622           THREADLIBS="$THREADLIBS -lrt"
623           THREADSPEC="$THREADSPEC -lrt"], [
624           AC_CHECK_LIB(posix4, sched_yield, [
625             AC_DEFINE(HAVE_SCHED_YIELD)
626             THREADLIBS="$THREADLIBS -lposix4"
627             THREADSPEC="$THREADSPEC -lposix4"])])])
628       LIBS="$save_LIBS"
629
630       # We can save a little space at runtime if the mutex has m_count
631       # or __m_count.  This is a nice hack for Linux.
632       AC_TRY_COMPILE([#include <pthread.h>], [
633           extern pthread_mutex_t *mutex; int q = mutex->m_count;
634         ], AC_DEFINE(PTHREAD_MUTEX_HAVE_M_COUNT), [
635         AC_TRY_COMPILE([#include <pthread.h>], [
636             extern pthread_mutex_t *mutex; int q = mutex->__m_count;
637           ], AC_DEFINE(PTHREAD_MUTEX_HAVE___M_COUNT))])
638    fi
639
640    # We require a way to get the time.
641    time_found=no
642    AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes)
643    if test "$time_found" = no; then
644       AC_MSG_ERROR([no function found to get the time])
645    fi
646
647    AC_CHECK_FUNCS(memmove)
648
649    # We require memcpy.
650    memcpy_found=no
651    AC_CHECK_FUNCS(memcpy, memcpy_found=yes)
652    if test "$memcpy_found" = no; then
653       AC_MSG_ERROR([memcpy is required])
654    fi
655
656    AC_CHECK_LIB(dl, dlopen, [
657        AC_DEFINE(HAVE_DLOPEN, 1, [Define if dlopen is available])])
658
659    # Some library-finding code we stole from Tcl.
660    #--------------------------------------------------------------------
661    #    Check for the existence of the -lsocket and -lnsl libraries.
662    #    The order here is important, so that they end up in the right
663    #    order in the command line generated by make.  Here are some
664    #    special considerations:
665    #    1. Use "connect" and "accept" to check for -lsocket, and
666    #       "gethostbyname" to check for -lnsl.
667    #    2. Use each function name only once:  can't redo a check because
668    #       autoconf caches the results of the last check and won't redo it.
669    #    3. Use -lnsl and -lsocket only if they supply procedures that
670    #       aren't already present in the normal libraries.  This is because
671    #       IRIX 5.2 has libraries, but they aren't needed and they're
672    #       bogus:  they goof up name resolution if used.
673    #    4. On some SVR4 systems, can't use -lsocket without -lnsl too.
674    #       To get around this problem, check for both libraries together
675    #       if -lsocket doesn't work by itself.
676    #--------------------------------------------------------------------
677
678    AC_CACHE_CHECK([for socket libraries], gcj_cv_lib_sockets,
679     [gcj_cv_lib_sockets=
680      gcj_checkBoth=0
681      unset ac_cv_func_connect
682      AC_CHECK_FUNC(connect, gcj_checkSocket=0, gcj_checkSocket=1)
683      if test "$gcj_checkSocket" = 1; then
684          unset ac_cv_func_connect
685          AC_CHECK_LIB(socket, main, gcj_cv_lib_sockets="-lsocket",
686                       gcj_checkBoth=1)
687      fi
688      if test "$gcj_checkBoth" = 1; then
689          gcj_oldLibs=$LIBS
690          LIBS="$LIBS -lsocket -lnsl"
691          unset ac_cv_func_accept
692          AC_CHECK_FUNC(accept,
693                        [gcj_checkNsl=0
694                         gcj_cv_lib_sockets="-lsocket -lnsl"])
695          unset ac_cv_func_accept
696          LIBS=$gcj_oldLibs
697      fi
698      unset ac_cv_func_gethostbyname
699      gcj_oldLibs=$LIBS
700      LIBS="$LIBS $gcj_cv_lib_sockets"
701      AC_CHECK_FUNC(gethostbyname, ,
702                    [AC_CHECK_LIB(nsl, main,
703                                  [gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"])])
704      unset ac_cv_func_gethostbyname
705      LIBS=$gcj_oldLIBS
706    ])
707    SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
708
709    if test "$with_system_zlib" = yes; then
710       AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=)
711    fi
712
713    # On Solaris, and maybe other architectures, the Boehm collector
714    # requires -ldl.
715    if test "$GC" = boehm; then
716       AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl")
717    fi
718
719    if test -z "${with_multisubdir}"; then
720       builddotdot=.
721    else
722 changequote(<<,>>)
723       builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
724 changequote([,])
725    fi
726    if test -x "${builddotdot}/../../gcc/gcj"; then
727       dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`"
728       GCJ="$dir/gcj -B`${PWDCMD-pwd}`/ -B$dir/"
729    else
730       CANADIAN=yes
731       NULL_TARGET=yes
732       GCJ="gcj -B`${PWDCMD-pwd}`/"
733    fi
734 fi
735
736 # Create it, so that compile/link tests don't fail
737 test -f libgcj.spec || touch libgcj.spec
738
739 # We must search the source tree for java.lang, since we still don't
740 # have libgcj.jar nor java/lang/*.class
741 GCJ_SAVE_CPPFLAGS=$CPPFLAGS
742 CPPFLAGS="$CPPFLAGS -I`${PWDCMD-pwd}` -I`cd $srcdir && ${PWDCMD-pwd}`"
743
744 # Since some classes depend on this one, we need its source available
745 # before we can do any GCJ compilation test :-(
746 if test ! -f gnu/classpath/Configuration.java; then
747   test -d gnu || mkdir gnu
748   test -d gnu/classpath || mkdir gnu/classpath
749   sed 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \
750         < $srcdir/gnu/classpath/Configuration.java.in \
751         > gnu/classpath/Configuration.java
752   # We do not want to redirect the output of the grep below to /dev/null,
753   # but we add /dev/null to the input list so that grep will print the
754   # filename of Configuration.java in case it finds any matches.
755   if grep @ gnu/classpath/Configuration.java /dev/null; then
756     AC_MSG_ERROR([configure.in is missing the substitutions above])
757   fi
758 fi
759
760 LT_AC_PROG_GCJ
761
762 CPPFLAGS=$GCJ_SAVE_CPPFLAGS
763
764 AC_COMPILE_CHECK_SIZEOF(void *)
765
766 ZLIBS=
767 SYS_ZLIBS=
768 ZINCS=
769
770 if test -z "$ZLIBSPEC"; then
771    # Use zlib from the GCC tree.
772    ZINCS='-I$(top_srcdir)/../zlib'
773    ZLIBS=../zlib/libzgcj_convenience.la
774 else
775    # System's zlib.
776    SYS_ZLIBS="$ZLIBSPEC"
777 fi
778 AC_SUBST(ZLIBS)
779 AC_SUBST(SYS_ZLIBS)
780 AC_SUBST(ZINCS)
781 AC_SUBST(DIVIDESPEC)
782 AC_SUBST(CHECKREFSPEC)
783 AC_SUBST(EXCEPTIONSPEC)
784
785 AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes)
786 AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes)
787 AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes)
788 AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host")
789 AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
790 AC_SUBST(GCC_UNWIND_INCLUDE)
791
792 AC_SUBST(AM_RUNTESTFLAGS)
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 )