OSDN Git Service

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