OSDN Git Service

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