OSDN Git Service

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