OSDN Git Service

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