OSDN Git Service

* Makefile.am (nat_headers, x_nat_headers): Depend on .class files, not
[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
454    AC_CHECK_FUNCS(gethostbyname_r, [
455      AC_DEFINE(HAVE_GETHOSTBYNAME_R)
456      # There are two different kinds of gethostbyname_r.
457      # We look for the one that returns `int'.
458      # Hopefully this check is robust enough.
459      AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [
460        AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT)])
461
462      case " $GCINCS " in
463      *" -D_REENTRANT "*) ;;
464      *)
465         dnl On DU4.0, gethostbyname_r is only declared with -D_REENTRANT
466         AC_CACHE_CHECK([whether gethostbyname_r declaration requires -D_REENTRANT],
467         [libjava_cv_gethostbyname_r_needs_reentrant],
468         [ AC_LANG_SAVE
469           AC_LANG_CPLUSPLUS
470           AC_TRY_COMPILE([#include <netdb.h>],
471             [gethostbyname_r("", 0, 0);],
472             [libjava_cv_gethostbyname_r_needs_reentrant=no], [dnl
473                 CPPFLAGS_SAVE="$CPPFLAGS"
474                 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
475                 AC_TRY_COMPILE([#include <netdb.h>], [gethostbyname_r("", 0, 0);],
476                     [libjava_cv_gethostbyname_r_needs_reentrant=yes],
477                     [libjava_cv_gethostbyname_r_needs_reentrant=fail])
478                 CPPFLAGS="$CPPFLAGS_SAVE"
479           ])
480           AC_LANG_RESTORE
481         ])
482         if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
483           AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
484         fi
485      ;;
486      esac
487
488      AC_CACHE_CHECK([for struct hostent_data],
489         [libjava_cv_struct_hostent_data], [dnl
490         AC_TRY_COMPILE([
491 #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
492 # define _REENTRANT 1
493 #endif
494 #include <netdb.h>], [struct hostent_data data;],
495           [libjava_cv_struct_hostent_data=yes],
496           [libjava_cv_struct_hostent_data=no])])
497      if test "x$libjava_cv_struct_hostent_data" = xyes; then
498        AC_DEFINE(HAVE_STRUCT_HOSTENT_DATA, 1,
499          [Define if struct hostent_data is defined in netdb.h])
500      fi
501    ])
502
503    # FIXME: libjava source code expects to find a prototype for
504    # gethostbyaddr_r in netdb.h.  The outer check ensures that
505    # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
506    # to exist where expected.  (The root issue: AC_CHECK_FUNCS assumes C
507    # linkage check is enough, yet C++ code requires proper prototypes.)
508    AC_EGREP_HEADER(gethostbyaddr_r, netdb.h, [
509    AC_CHECK_FUNCS(gethostbyaddr_r, [
510      AC_DEFINE(HAVE_GETHOSTBYADDR_R)
511      # There are two different kinds of gethostbyaddr_r.
512      # We look for the one that returns `int'.
513      # Hopefully this check is robust enough.
514      AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
515        AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT)])])])
516
517    AC_CHECK_FUNCS(gethostname, [
518      AC_DEFINE(HAVE_GETHOSTNAME)
519      AC_EGREP_HEADER(gethostname, unistd.h, [
520        AC_DEFINE(HAVE_GETHOSTNAME_DECL)])])
521
522    # Look for these functions in the thread library, but only bother
523    # if using POSIX threads.
524    if test "$THREADS" = posix; then
525       save_LIBS="$LIBS"
526       LIBS="$LIBS $THREADLIBS"
527       # Some POSIX thread systems don't have pthread_mutexattr_settype.
528       # E.g., Solaris.
529       AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np)
530
531       # Look for sched_yield.  Up to Solaris 2.6, it is in libposix4, since
532       # Solaris 7 the name librt is preferred.
533       AC_CHECK_FUNCS(sched_yield, , [
534         AC_CHECK_LIB(rt, sched_yield, [
535           AC_DEFINE(HAVE_SCHED_YIELD)
536           THREADLIBS="$THREADLIBS -lrt"
537           THREADSPEC="$THREADSPEC -lrt"], [
538           AC_CHECK_LIB(posix4, sched_yield, [
539             AC_DEFINE(HAVE_SCHED_YIELD)
540             THREADLIBS="$THREADLIBS -lposix4"
541             THREADSPEC="$THREADSPEC -lposix4"])])])
542       LIBS="$save_LIBS"
543
544       # We can save a little space at runtime if the mutex has m_count
545       # or __m_count.  This is a nice hack for Linux.
546       AC_TRY_COMPILE([#include <pthread.h>], [
547           extern pthread_mutex_t *mutex; int q = mutex->m_count;
548         ], AC_DEFINE(PTHREAD_MUTEX_HAVE_M_COUNT), [
549         AC_TRY_COMPILE([#include <pthread.h>], [
550             extern pthread_mutex_t *mutex; int q = mutex->__m_count;
551           ], AC_DEFINE(PTHREAD_MUTEX_HAVE___M_COUNT))])
552    fi
553
554    # We require a way to get the time.
555    time_found=no
556    AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes)
557    if test "$time_found" = no; then
558       AC_MSG_ERROR([no function found to get the time])
559    fi
560
561    AC_CHECK_FUNCS(memmove)
562
563    # We require memcpy.
564    memcpy_found=no
565    AC_CHECK_FUNCS(memcpy, memcpy_found=yes)
566    if test "$memcpy_found" = no; then
567       AC_MSG_ERROR([memcpy is required])
568    fi
569
570    AC_CHECK_LIB(dl, dlopen, [AC_DEFINE(HAVE_DLOPEN)])
571
572    # Some library-finding code we stole from Tcl.
573    #--------------------------------------------------------------------
574    #    Check for the existence of the -lsocket and -lnsl libraries.
575    #    The order here is important, so that they end up in the right
576    #    order in the command line generated by make.  Here are some
577    #    special considerations:
578    #    1. Use "connect" and "accept" to check for -lsocket, and
579    #       "gethostbyname" to check for -lnsl.
580    #    2. Use each function name only once:  can't redo a check because
581    #       autoconf caches the results of the last check and won't redo it.
582    #    3. Use -lnsl and -lsocket only if they supply procedures that
583    #       aren't already present in the normal libraries.  This is because
584    #       IRIX 5.2 has libraries, but they aren't needed and they're
585    #       bogus:  they goof up name resolution if used.
586    #    4. On some SVR4 systems, can't use -lsocket without -lnsl too.
587    #       To get around this problem, check for both libraries together
588    #       if -lsocket doesn't work by itself.
589    #--------------------------------------------------------------------
590
591    AC_CACHE_CHECK([for socket libraries], gcj_cv_lib_sockets,
592     [gcj_cv_lib_sockets=
593      gcj_checkBoth=0
594      unset ac_cv_func_connect
595      AC_CHECK_FUNC(connect, gcj_checkSocket=0, gcj_checkSocket=1)
596      if test "$gcj_checkSocket" = 1; then
597          unset ac_cv_func_connect
598          AC_CHECK_LIB(socket, main, gcj_cv_lib_sockets="-lsocket",
599                       gcj_checkBoth=1)
600      fi
601      if test "$gcj_checkBoth" = 1; then
602          gcj_oldLibs=$LIBS
603          LIBS="$LIBS -lsocket -lnsl"
604          unset ac_cv_func_accept
605          AC_CHECK_FUNC(accept,
606                        [gcj_checkNsl=0
607                         gcj_cv_lib_sockets="-lsocket -lnsl"])
608          unset ac_cv_func_accept
609          LIBS=$gcj_oldLibs
610      fi
611      unset ac_cv_func_gethostbyname
612      gcj_oldLibs=$LIBS
613      LIBS="$LIBS $gcj_cv_lib_sockets"
614      AC_CHECK_FUNC(gethostbyname, ,
615                    [AC_CHECK_LIB(nsl, main,
616                                  [gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"])])
617      unset ac_cv_func_gethostbyname
618      LIBS=$gcj_oldLIBS
619    ])
620    SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
621
622    if test "$with_system_zlib" = yes; then
623       AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=-lzgcj)
624    else
625       ZLIBSPEC=-lzgcj
626       ZLIBTESTSPEC="-L`pwd`/../zlib/.libs -rpath `pwd`/../zlib/.libs"
627    fi
628
629    # On Solaris, and maybe other architectures, the Boehm collector
630    # requires -ldl.
631    if test "$GC" = boehm; then
632       AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl")
633    fi
634
635    if test -z "${with_multisubdir}"; then
636       builddotdot=.
637    else
638 changequote(<<,>>)
639       builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
640 changequote([,])
641    fi
642    if test -x "${builddotdot}/../../gcc/gcj"; then
643       dir="`cd ${builddotdot}/../../gcc && pwd`"
644       GCJ="$dir/gcj -B`pwd`/ -B$dir/"
645    else
646       CANADIAN=yes
647       NULL_TARGET=yes
648       GCJ="gcj -B`pwd`/"
649    fi
650 fi
651
652 # Create it, so that compile/link tests don't fail
653 test -f libgcj.spec || touch libgcj.spec
654
655 # We must search the source tree for java.lang, since we still don't
656 # have libgcj.jar nor java/lang/*.class
657 GCJ_SAVE_CPPFLAGS=$CPPFLAGS
658 CPPFLAGS="$CPPFLAGS -I`pwd` -I`cd $srcdir && pwd`"
659
660 # Since some classes depend on this one, we need its source available
661 # before we can do any GCJ compilation test :-(
662 if test ! -f gnu/classpath/Configuration.java; then
663   test -d gnu || mkdir gnu
664   test -d gnu/classpath || mkdir gnu/classpath
665   sed 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \
666         < $srcdir/gnu/classpath/Configuration.java.in \
667         > gnu/classpath/Configuration.java
668   # We do not want to redirect the output of the grep below to /dev/null,
669   # but we add /dev/null to the input list so that grep will print the
670   # filename of Configuration.java in case it finds any matches.
671   if grep @ gnu/classpath/Configuration.java /dev/null; then
672     AC_MSG_ERROR([configure.in is missing the substitutions above])
673   fi
674 fi
675
676 LT_AC_PROG_GCJ
677
678 CPPFLAGS=$GCJ_SAVE_CPPFLAGS
679
680 dnl FIXME: cross compilation
681 AC_CHECK_SIZEOF(void *)
682
683 ZLIBS=
684 ZDEPS=
685 ZINCS=
686 if test "x$ZLIBSPEC" = "x-lzgcj"; then
687    # We include the path to the zlib build directory.
688    # See Makefile.am to understand why.
689    ZDEPS='$(top_builddir)/../zlib/libzgcj.la'
690    ZLIBS="$ZDEPS -L\$(here)/../zlib/$libsubdir"
691    ZINCS='-I$(top_srcdir)/../zlib'
692 else
693    ZLIBS="$ZLIBSPEC"
694 fi
695 AC_SUBST(ZLIBS)
696 AC_SUBST(ZDEPS)
697 AC_SUBST(ZINCS)
698 AC_SUBST(DIVIDESPEC)
699 AC_SUBST(EXCEPTIONSPEC)
700
701 AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes)
702 AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes)
703 AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes)
704 AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host")
705 AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
706 AC_SUBST(GCC_UNWIND_INCLUDE)
707
708 # Determine gcj version number.
709 changequote(<<,>>)
710 gcjvers="`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`"
711 changequote([,])
712 AC_DEFINE_UNQUOTED(GCJVERSION, "$gcjvers")
713 AC_SUBST(GCJVERSION)
714
715 AC_SUBST(AM_RUNTESTFLAGS)
716
717 dnl Work around a g++ bug.  Reported to gcc-bugs@gcc.gnu.org on Jan 22, 2000.
718 AC_MSG_CHECKING([for g++ -ffloat-store bug])
719 save_CFLAGS="$CFLAGS"
720 CFLAGS="-x c++ -O2 -ffloat-store"
721 AC_TRY_COMPILE([#include <math.h>], , 
722   [AC_MSG_RESULT(no)],
723   [AC_DEFINE(__NO_MATH_INLINES)
724    AC_MSG_RESULT(yes)])
725 CFLAGS="$save_CFLAGS"
726
727 dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
728 dnl On that system, sys/ioctl.h will not include sys/filio.h unless
729 dnl BSD_COMP is defined; just including sys/filio.h is simpler.
730 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 inttypes.h stdint.h langinfo.h locale.h)
731 dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
732 dnl for now.  If you change this, you also must update natFile.cc.
733 AC_CHECK_HEADERS(dirent.h)
734
735 AC_CHECK_TYPE([ssize_t], [int])
736
737 AC_MSG_CHECKING([for in_addr_t])
738 AC_TRY_COMPILE([#include <sys/types.h>
739 #if STDC_HEADERS
740 #include <stdlib.h>
741 #include <stddef.h>
742 #endif
743 #if HAVE_NETINET_IN_H
744 #include <netinet/in.h>
745 #endif], [in_addr_t foo;],
746   [AC_DEFINE([HAVE_IN_ADDR_T])
747    AC_MSG_RESULT(yes)],
748   [AC_MSG_RESULT(no)])
749
750 AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h])
751 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;],
752   [AC_DEFINE(HAVE_STRUCT_IP_MREQ)
753    AC_MSG_RESULT(yes)],
754   [AC_MSG_RESULT(no)])
755
756 AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
757 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
758   [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ)
759    AC_MSG_RESULT(yes)],
760   [AC_MSG_RESULT(no)])
761
762 AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
763 AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
764   [AC_DEFINE(HAVE_INET6)
765    AC_MSG_RESULT(yes)],
766   [AC_MSG_RESULT(no)])
767
768 AC_MSG_CHECKING([for socklen_t in sys/socket.h])
769 AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
770 #include <sys/types.h>
771 #include <sys/socket.h>], [socklen_t x = 5;],
772   [AC_DEFINE(HAVE_SOCKLEN_T)
773    AC_MSG_RESULT(yes)],
774   [AC_MSG_RESULT(no)])
775
776 AC_MSG_CHECKING([for tm_gmtoff in struct tm])
777 AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
778   [AC_DEFINE(STRUCT_TM_HAS_GMTOFF)
779    AC_MSG_RESULT(yes)],
780   [AC_MSG_RESULT(no)
781    AC_MSG_CHECKING([for global timezone variable])
782    dnl FIXME: we don't want a link check here because that won't work
783    dnl when cross-compiling.  So instead we make an assumption that
784    dnl the header file will mention timezone if it exists.
785    AC_TRY_COMPILE([#include <time.h>], [long z2 = timezone;],
786      [AC_DEFINE(HAVE_TIMEZONE)
787       AC_MSG_RESULT(yes)],
788      [AC_MSG_RESULT(no)])])
789
790 AC_FUNC_ALLOCA
791
792 AC_CHECK_PROGS(PERL, perl, false)
793
794 SYSDEP_SOURCES=
795
796 case "${host}" in
797  i?86-*-linux*)
798     SIGNAL_HANDLER=include/i386-signal.h
799     ;;
800  sparc-sun-solaris*)
801     SIGNAL_HANDLER=include/sparc-signal.h
802     ;;
803 # ia64-*)
804 #    SYSDEP_SOURCES=sysdep/ia64.c
805 #    test -d sysdep || mkdir sysdep
806 #    ;;
807  powerpc-*-linux*)
808     SIGNAL_HANDLER=include/dwarf2-signal.h
809     ;;
810  alpha*-*-linux*)
811     SIGNAL_HANDLER=include/dwarf2-signal.h
812     ;;
813  *)
814     SIGNAL_HANDLER=include/default-signal.h
815     ;;
816 esac
817
818 # If we're using sjlj exceptions, forget what we just learned.
819 if test "$enable_sjlj_exceptions" = yes; then
820    SIGNAL_HANDLER=include/default-signal.h
821 fi
822
823 AC_SUBST(SYSDEP_SOURCES)
824
825 AC_LINK_FILES($SIGNAL_HANDLER, include/java-signal.h)
826
827 if test "${multilib}" = "yes"; then
828   multilib_arg="--enable-multilib"
829 else
830   multilib_arg=
831 fi
832
833 AC_PATH_XTRA
834
835 dnl Determine which AWT peer libraries to build
836 AC_ARG_ENABLE(java-awt,
837 [  --enable-java-awt       list of AWT peer implementations to be built])
838
839 peerlibs="`echo ${enable_java_awt} | tr ',' ' '`"
840 use_xlib_awt=""
841 use_gtk_awt=""
842
843 for peer in $peerlibs ; do
844   case $peer in
845     xlib)
846       if [test "$no_x" = yes]; then
847         echo "*** xlib peers requested but no X library available" 1>&2
848         exit 1
849       else
850         use_xlib_awt="yes"
851       fi
852       ;;
853     gtk)
854       # Nothing, yet...
855       ;;
856     no)
857       use_xlib_awt=
858       use_gtk_awt=
859       break
860       ;;
861     *)
862       echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2
863       exit 1
864   esac
865 done
866
867 AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes)
868 AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes)
869
870
871 here=`pwd`
872 AC_SUBST(here)
873
874 # We get this from the environment.
875 AC_SUBST(GCJFLAGS)
876
877 AC_OUTPUT(Makefile libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile,
878 [# Only add multilib support code if we just rebuilt top-level Makefile.
879 case " $CONFIG_FILES " in
880  *" Makefile "*)
881    ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
882    ;;
883 esac
884
885 # Make subdirectories and `.d' files.  Look in both srcdir and
886 # builddir for the .java files.
887 h=`pwd`
888 : > deps.mk
889 ( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' \) -print) ;
890   find . \( -name '*.java' -o -name '*.cc' \) -print) | \
891    fgrep -v testsuite | \
892    sed -e 's/\.java/.d/'\;'s/\.cc/.d/' | \
893    while read f; do
894       echo "include $f" >> deps.mk
895       test -f $f || {
896 changequote(<<,>>)
897          d=`echo $f | sed -e 's,/[^/]*$,,'`
898 changequote([,])
899          if test ! -d $d; then
900            $libgcj_basedir/../mkinstalldirs $d
901          fi;
902          echo > $f
903       }
904    done
905 ],
906 srcdir=${srcdir}
907 host=${host}
908 target=${target}
909 with_multisubdir=${with_multisubdir}
910 ac_configure_args="${multilib_arg} ${ac_configure_args}"
911 CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
912 libgcj_basedir=${libgcj_basedir}
913 CC="${CC}"
914 CXX="${CXX}"
915 )