OSDN Git Service

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