OSDN Git Service

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