OSDN Git Service

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