OSDN Git Service

2003-03-10 Andreas Schwab <schwab@suse.de>
[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 AC_PATH_XTRA
293
294 dnl Determine which AWT peer libraries to build
295 AC_ARG_ENABLE(java-awt,
296 [  --enable-java-awt       list of AWT peer implementations to be built])
297
298 peerlibs="`echo ${enable_java_awt} | tr ',' ' '`"
299 use_xlib_awt=""
300 use_gtk_awt=""
301 # The default toolkit to use is the first one specified.
302 TOOLKIT=
303 AC_SUBST(TOOLKIT)
304
305 for peer in $peerlibs ; do
306   case $peer in
307     xlib)
308       if test "$no_x" = yes; then
309         echo "*** xlib peers requested but no X library available" 1>&2
310         exit 1
311       else
312         use_xlib_awt="yes"
313         if test -z "$TOOLKIT"; then
314            TOOLKIT=gnu.awt.xlib.XToolkit
315         fi
316       fi
317       ;;
318     gtk)
319       if test "$no_x" = yes; then
320          echo "*** xlib peers requested but no X library available" 1>&2
321          exit 1
322       else
323          use_gtk_awt=yes
324          if test -z "$TOOLKIT"; then
325             TOOLKIT=gnu.java.awt.peer.gtk.GtkToolkit
326          fi
327          test -d jniinclude || mkdir jniinclude
328       fi
329       ;;
330     no)
331       use_xlib_awt=
332       use_gtk_awt=
333       break
334       ;;
335     *)
336       echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2
337       exit 1
338   esac
339 done
340
341 AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes)
342 AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes)
343
344
345 dnl FIXME: this should be _libs on some hosts.
346 libsubdir=.libs
347
348 dnl Allow the GC to be disabled.  Can be useful when debugging.
349 AC_MSG_CHECKING([for garbage collector to use])
350 AC_ARG_ENABLE(java-gc,
351 changequote(<<,>>)dnl
352 <<  --enable-java-gc=TYPE   choose garbage collector [boehm]>>,
353 changequote([,])
354   GC=$enableval,
355   GC=boehm)
356 GCLIBS=
357 GCINCS=
358 GCDEPS=
359 GCOBJS=
360 GCSPEC=
361 JC1GCSPEC=
362 GCTESTSPEC=
363 case "$GC" in
364  boehm)
365     AC_MSG_RESULT(boehm)
366     GCLIBS=../boehm-gc/libgcjgc_convenience.la
367     GCINCS='-I$(top_srcdir)/../boehm-gc/include'
368     JC1GCSPEC='-fuse-boehm-gc'
369     GCTESTSPEC="-L`${PWDCMD-pwd}`/../boehm-gc/.libs -rpath `${PWDCMD-pwd}`/../boehm-gc/.libs"
370
371     dnl We also want to pick up some cpp flags required when including
372     dnl boehm-config.h.  Yuck.
373     GCINCS="$GCINCS `cat ../boehm-gc/boehm-cflags`"
374     GCOBJS=boehm.lo
375     GCHDR=boehm-gc.h
376     dnl The POSIX thread support needs to know this.
377     AC_DEFINE(HAVE_BOEHM_GC)
378     ;;
379  no)
380     AC_MSG_RESULT(none)
381     GCOBJS=nogc.lo
382     GCHDR=no-gc.h
383     ;;
384  *)
385     AC_MSG_ERROR(unrecognized collector \"$GC\")
386     ;;
387 esac
388 AC_SUBST(GCLIBS)
389 AC_SUBST(GCINCS)
390 AC_SUBST(GCDEPS)
391 AC_SUBST(GCOBJS)
392 AC_SUBST(GCSPEC)
393 AC_SUBST(JC1GCSPEC)
394 AC_SUBST(GCTESTSPEC)
395 AC_LINK_FILES(include/$GCHDR, include/java-gc.h)
396
397
398 AC_MSG_CHECKING([for thread model used by GCC])
399 THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
400 AC_MSG_RESULT([$THREADS])
401
402 case "$THREADS" in
403  no | none | single)
404     THREADS=none
405     ;;
406  posix | pthreads)
407     THREADS=posix
408     case "$host" in
409      *-*-linux*)
410         AC_DEFINE(LINUX_THREADS)
411         ;;
412     esac
413     ;;
414  win32)
415     ;;
416  decosf1 | irix | mach | os2 | solaris | dce | vxworks)
417     AC_MSG_ERROR(thread package $THREADS not yet supported)
418     ;;
419  *)
420     AC_MSG_ERROR($THREADS is an unknown thread package)
421     ;;
422 esac
423
424 THREADLDFLAGS=
425 THREADLIBS=
426 THREADINCS=
427 THREADDEPS=
428 THREADOBJS=
429 THREADH=
430 THREADSPEC=
431 case "$THREADS" in
432  posix)
433     case "$host" in
434      *-*-cygwin*)
435         # Don't set THREADLIBS here.  Cygwin doesn't have -lpthread.
436         ;;
437 changequote(<<,>>)   
438      *-*-freebsd[1234]*)
439 changequote([,])   
440         # Before FreeBSD 5, it didn't have -lpthread (or any library which
441         # merely adds pthread_* functions) but it does have a -pthread switch
442         # which is required at link-time to select -lc_r *instead* of -lc.
443         THREADLDFLAGS=-pthread
444         # Don't set THREADSPEC here as might be expected since -pthread is
445         # not processed when found within a spec file, it must come from
446         # the command line.  For now, the user must provide the -pthread
447         # switch to link code compiled with gcj.  In future, consider adding
448         # support for weak references to pthread_* functions ala gthr.h API.
449         THREADSPEC='%{!pthread: %eUnder this configuration, the user must provide -pthread when linking.}'
450         ;;
451      *-*-freebsd*)
452         # FreeBSD 5 implements a model much closer to other modern UNIX
453         # which support threads.  However, it still does not support
454         # -lpthread.
455         THREADLDFLAGS=-pthread
456         THREADSPEC=-lc_r
457         ;;
458      *)
459         THREADLIBS=-lpthread
460         THREADSPEC=-lpthread
461         ;;
462     esac
463     THREADOBJS=posix-threads.lo
464     THREADH=posix-threads.h
465     # MIT pthreads doesn't seem to have the mutexattr functions.
466     # But for now we don't check for it.  We just assume you aren't
467     # using MIT pthreads.
468     AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT)
469
470     # If we're using the Boehm GC, then we happen to know that it
471     # defines _REENTRANT, so we don't bother.  Eww.
472     if test "$GC" != boehm; then
473        AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
474     fi
475     AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Required define if using POSIX threads])
476     ;;
477
478  win32)
479     THREADOBJS=win32-threads.lo
480     THREADH=win32-threads.h
481     ;;
482
483  none)
484     THREADOBJS=no-threads.lo
485     THREADH=no-threads.h
486     ;;
487 esac
488 AC_LINK_FILES(include/$THREADH, include/java-threads.h)
489 AC_SUBST(THREADLIBS)
490 AC_SUBST(THREADINCS)
491 AC_SUBST(THREADDEPS)
492 AC_SUBST(THREADOBJS)
493 AC_SUBST(THREADSPEC)
494 AC_SUBST(THREADLDFLAGS)
495
496 if test -d sysdep; then true; else mkdir sysdep; fi
497 AC_LINK_FILES(sysdep/$sysdeps_dir/locks.h, sysdep/locks.h)
498
499 HASH_SYNC_SPEC=
500 # Hash synchronization is only useful with posix threads right now.
501 if test "$enable_hash_synchronization" = yes && test "$THREADS" != "none"; then
502    HASH_SYNC_SPEC=-fhash-synchronization
503    AC_DEFINE(JV_HASH_SYNCHRONIZATION, 1, [Define if hash synchronization is in use])
504 fi
505 AC_SUBST(HASH_SYNC_SPEC)
506
507
508 AM_CONDITIONAL(USING_GCC, test "$GCC" = yes)
509
510 CANADIAN=no
511 NULL_TARGET=no
512 NATIVE=yes
513
514 # We're in the tree with gcc, and need to include some of its headers.
515 GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
516
517 # Figure out where generated headers like libgcj-config.h get installed.
518 changequote(,)dnl
519 gcc_version_trigger=${libgcj_basedir}/../gcc/version.c
520 gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
521 gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
522 tool_include_dir='$(libdir)/gcc-lib/$(target_alias)/'${gcc_version}/include
523 changequote([,])dnl
524 AC_SUBST(tool_include_dir)
525 AC_SUBST(gcc_version)
526
527 if test "x${with_newlib}" = "xyes"; then
528    # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
529    # may not work correctly, because the compiler may not be able to
530    # link executables.
531
532    # We assume newlib.  This lets us hard-code the functions we know
533    # we'll have.
534    AC_DEFINE(HAVE_MEMMOVE)
535    AC_DEFINE(HAVE_MEMCPY)
536    AC_DEFINE(HAVE_STRERROR)
537    AC_DEFINE(HAVE_TIME)
538    AC_DEFINE(HAVE_GMTIME_R)
539    AC_DEFINE(HAVE_LOCALTIME_R)
540    dnl This is only for POSIX threads.
541    AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT)
542    dnl We also assume we are using gcc, which provides alloca.
543    AC_DEFINE(HAVE_ALLOCA)
544
545    dnl Assume we do not have getuid and friends.
546    AC_DEFINE(NO_GETUID)
547
548    # If Canadian cross, then don't pick up tools from the build
549    # directory.
550    if test x"$build" != x"$with_cross_host" \
551         && test x"$build" != x"$target"; then
552       CANADIAN=yes
553       GCC_UNWIND_INCLUDE=
554       GCJ="${target_alias}-gcj"
555    fi
556    NATIVE=no
557 else
558    AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir)
559    AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd)
560    AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod)
561    AC_CHECK_FUNCS(nl_langinfo setlocale)
562    AC_CHECK_FUNCS(inet_aton inet_addr, break)
563    AC_CHECK_FUNCS(inet_pton uname inet_ntoa)
564    AC_CHECK_FUNCS(fork execvp pipe sigaction ftruncate)
565    AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h) 
566    AC_CHECK_FUNC(backtrace, [
567      case "$host" in
568        ia64-*-linux*)
569          # Has broken backtrace()
570          ;;
571        s390*-*-linux*)
572          # Has broken backtrace()
573          ;;
574        *)
575          AC_DEFINE(HAVE_BACKTRACE)
576          ;;
577      esac
578    ], [
579      case "$host" in
580        *mingw*)
581          # Has backtrace() defined in libgcj itself
582          AC_DEFINE(HAVE_BACKTRACE)
583          ;;
584      esac
585    ])
586
587    AC_CHECK_LIB(dl, dladdr, [
588      AC_DEFINE(HAVE_DLADDR)])
589    if test x"$build" = x"$host"; then
590      AC_CHECK_FILES(/proc/self/exe, [
591        AC_DEFINE(HAVE_PROC_SELF_EXE)])
592    else
593      case $host in
594      *-linux*)
595        AC_DEFINE(HAVE_PROC_SELF_EXE)
596        ;;
597      esac
598    fi
599
600    AM_ICONV
601    AM_LC_MESSAGES
602    AC_STRUCT_TIMEZONE
603
604    AC_CHECK_FUNCS(gethostbyname_r, [
605      AC_DEFINE(HAVE_GETHOSTBYNAME_R)
606      # There are two different kinds of gethostbyname_r.
607      # We look for the one that returns `int'.
608      # Hopefully this check is robust enough.
609      AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [
610        AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT)])
611
612      case " $GCINCS " in
613      *" -D_REENTRANT "*) ;;
614      *)
615         dnl On DU4.0, gethostbyname_r is only declared with -D_REENTRANT
616         AC_CACHE_CHECK([whether gethostbyname_r declaration requires -D_REENTRANT],
617         [libjava_cv_gethostbyname_r_needs_reentrant],
618         [ AC_LANG_SAVE
619           AC_LANG_CPLUSPLUS
620           AC_TRY_COMPILE([#include <netdb.h>],
621             [gethostbyname_r("", 0, 0);],
622             [libjava_cv_gethostbyname_r_needs_reentrant=no], [dnl
623                 CPPFLAGS_SAVE="$CPPFLAGS"
624                 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
625                 AC_TRY_COMPILE([#include <netdb.h>], [gethostbyname_r("", 0, 0);],
626                     [libjava_cv_gethostbyname_r_needs_reentrant=yes],
627                     [libjava_cv_gethostbyname_r_needs_reentrant=fail])
628                 CPPFLAGS="$CPPFLAGS_SAVE"
629           ])
630           AC_LANG_RESTORE
631         ])
632         if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
633           AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
634         fi
635      ;;
636      esac
637
638      AC_CACHE_CHECK([for struct hostent_data],
639         [libjava_cv_struct_hostent_data], [dnl
640         AC_TRY_COMPILE([
641 #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
642 # define _REENTRANT 1
643 #endif
644 #include <netdb.h>], [struct hostent_data data;],
645           [libjava_cv_struct_hostent_data=yes],
646           [libjava_cv_struct_hostent_data=no])])
647      if test "x$libjava_cv_struct_hostent_data" = xyes; then
648        AC_DEFINE(HAVE_STRUCT_HOSTENT_DATA, 1,
649          [Define if struct hostent_data is defined in netdb.h])
650      fi
651    ])
652
653    # FIXME: libjava source code expects to find a prototype for
654    # gethostbyaddr_r in netdb.h.  The outer check ensures that
655    # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
656    # to exist where expected.  (The root issue: AC_CHECK_FUNCS assumes C
657    # linkage check is enough, yet C++ code requires proper prototypes.)
658    AC_EGREP_HEADER(gethostbyaddr_r, netdb.h, [
659    AC_CHECK_FUNCS(gethostbyaddr_r, [
660      AC_DEFINE(HAVE_GETHOSTBYADDR_R)
661      # There are two different kinds of gethostbyaddr_r.
662      # We look for the one that returns `int'.
663      # Hopefully this check is robust enough.
664      AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
665        AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT)])])])
666
667    AC_CHECK_FUNCS(gethostname, [
668      AC_DEFINE(HAVE_GETHOSTNAME)
669      AC_EGREP_HEADER(gethostname, unistd.h, [
670        AC_DEFINE(HAVE_GETHOSTNAME_DECL)])])
671
672    # Look for these functions in the thread library, but only bother
673    # if using POSIX threads.
674    if test "$THREADS" = posix; then
675       save_LIBS="$LIBS"
676       LIBS="$LIBS $THREADLIBS"
677       # Some POSIX thread systems don't have pthread_mutexattr_settype.
678       # E.g., Solaris.
679       AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np)
680
681       # Look for sched_yield.  Up to Solaris 2.6, it is in libposix4, since
682       # Solaris 7 the name librt is preferred.
683       AC_CHECK_FUNCS(sched_yield, , [
684         AC_CHECK_LIB(rt, sched_yield, [
685           AC_DEFINE(HAVE_SCHED_YIELD)
686           THREADLIBS="$THREADLIBS -lrt"
687           THREADSPEC="$THREADSPEC -lrt"], [
688           AC_CHECK_LIB(posix4, sched_yield, [
689             AC_DEFINE(HAVE_SCHED_YIELD)
690             THREADLIBS="$THREADLIBS -lposix4"
691             THREADSPEC="$THREADSPEC -lposix4"])])])
692       LIBS="$save_LIBS"
693
694       # We can save a little space at runtime if the mutex has m_count
695       # or __m_count.  This is a nice hack for Linux.
696       AC_TRY_COMPILE([#include <pthread.h>], [
697           extern pthread_mutex_t *mutex; int q = mutex->m_count;
698         ], AC_DEFINE(PTHREAD_MUTEX_HAVE_M_COUNT), [
699         AC_TRY_COMPILE([#include <pthread.h>], [
700             extern pthread_mutex_t *mutex; int q = mutex->__m_count;
701           ], AC_DEFINE(PTHREAD_MUTEX_HAVE___M_COUNT))])
702    fi
703
704    # We require a way to get the time.
705    time_found=no
706    AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes)
707    if test "$time_found" = no; then
708       AC_MSG_ERROR([no function found to get the time])
709    fi
710
711    AC_CHECK_FUNCS(memmove)
712
713    # We require memcpy.
714    memcpy_found=no
715    AC_CHECK_FUNCS(memcpy, memcpy_found=yes)
716    if test "$memcpy_found" = no; then
717       AC_MSG_ERROR([memcpy is required])
718    fi
719
720    AC_CHECK_LIB(dl, dlopen, [
721        AC_DEFINE(HAVE_DLOPEN, 1, [Define if dlopen is available])])
722
723    # Some library-finding code we stole from Tcl.
724    #--------------------------------------------------------------------
725    #    Check for the existence of the -lsocket and -lnsl libraries.
726    #    The order here is important, so that they end up in the right
727    #    order in the command line generated by make.  Here are some
728    #    special considerations:
729    #    1. Use "connect" and "accept" to check for -lsocket, and
730    #       "gethostbyname" to check for -lnsl.
731    #    2. Use each function name only once:  can't redo a check because
732    #       autoconf caches the results of the last check and won't redo it.
733    #    3. Use -lnsl and -lsocket only if they supply procedures that
734    #       aren't already present in the normal libraries.  This is because
735    #       IRIX 5.2 has libraries, but they aren't needed and they're
736    #       bogus:  they goof up name resolution if used.
737    #    4. On some SVR4 systems, can't use -lsocket without -lnsl too.
738    #       To get around this problem, check for both libraries together
739    #       if -lsocket doesn't work by itself.
740    #--------------------------------------------------------------------
741
742    AC_CACHE_CHECK([for socket libraries], gcj_cv_lib_sockets,
743     [gcj_cv_lib_sockets=
744      gcj_checkBoth=0
745      unset ac_cv_func_connect
746      AC_CHECK_FUNC(connect, gcj_checkSocket=0, gcj_checkSocket=1)
747      if test "$gcj_checkSocket" = 1; then
748          unset ac_cv_func_connect
749          AC_CHECK_LIB(socket, main, gcj_cv_lib_sockets="-lsocket",
750                       gcj_checkBoth=1)
751      fi
752      if test "$gcj_checkBoth" = 1; then
753          gcj_oldLibs=$LIBS
754          LIBS="$LIBS -lsocket -lnsl"
755          unset ac_cv_func_accept
756          AC_CHECK_FUNC(accept,
757                        [gcj_checkNsl=0
758                         gcj_cv_lib_sockets="-lsocket -lnsl"])
759          unset ac_cv_func_accept
760          LIBS=$gcj_oldLibs
761      fi
762      unset ac_cv_func_gethostbyname
763      gcj_oldLibs=$LIBS
764      LIBS="$LIBS $gcj_cv_lib_sockets"
765      AC_CHECK_FUNC(gethostbyname, ,
766                    [AC_CHECK_LIB(nsl, main,
767                                  [gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"])])
768      unset ac_cv_func_gethostbyname
769      LIBS=$gcj_oldLIBS
770    ])
771    SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
772
773    if test "$with_system_zlib" = yes; then
774       AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=)
775    fi
776
777    # Test for Gtk stuff, if asked for.
778    if test "$use_gtk_awt" = yes; then
779       AM_PATH_GTK(1.2.4,,exit 1)
780       AM_PATH_GLIB(1.2.4,,exit 1,gthread)
781       dnl XXX Fix me when libart.m4 has the compile test fixed!
782       enable_libarttest=no
783       AM_PATH_LIBART(2.1.0,,exit 1)
784    fi
785
786    # On Solaris, and maybe other architectures, the Boehm collector
787    # requires -ldl.
788    if test "$GC" = boehm; then
789       AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl")
790    fi
791
792    if test -z "${with_multisubdir}"; then
793       builddotdot=.
794    else
795 changequote(<<,>>)
796       builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
797 changequote([,])
798    fi
799    if test -x "${builddotdot}/../../gcc/gcj"; then
800       dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`"
801       GCJ="$dir/gcj -B`${PWDCMD-pwd}`/ -B$dir/"
802    else
803       CANADIAN=yes
804       NULL_TARGET=yes
805       GCJ="gcj -B`${PWDCMD-pwd}`/"
806    fi
807 fi
808
809 # Create it, so that compile/link tests don't fail
810 test -f libgcj.spec || touch libgcj.spec
811
812 # We must search the source tree for java.lang, since we still don't
813 # have libgcj.jar nor java/lang/*.class
814 GCJ_SAVE_CPPFLAGS=$CPPFLAGS
815 CPPFLAGS="$CPPFLAGS -I`${PWDCMD-pwd}` -I`cd $srcdir && ${PWDCMD-pwd}`"
816
817 # Since some classes depend on this one, we need its source available
818 # before we can do any GCJ compilation test :-(
819 if test ! -f gnu/classpath/Configuration.java; then
820   test -d gnu || mkdir gnu
821   test -d gnu/classpath || mkdir gnu/classpath
822   sed -e 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \
823       -e 's,@TOOLKIT@,$TOOLKIT,' \
824         < $srcdir/gnu/classpath/Configuration.java.in \
825         > gnu/classpath/Configuration.java
826   # We do not want to redirect the output of the grep below to /dev/null,
827   # but we add /dev/null to the input list so that grep will print the
828   # filename of Configuration.java in case it finds any matches.
829   if grep @ gnu/classpath/Configuration.java /dev/null; then
830     AC_MSG_ERROR([configure.in is missing the substitutions above])
831   fi
832 fi
833
834 LT_AC_PROG_GCJ
835
836 CPPFLAGS=$GCJ_SAVE_CPPFLAGS
837
838 AC_COMPILE_CHECK_SIZEOF(void *)
839
840 ZLIBS=
841 SYS_ZLIBS=
842 ZINCS=
843
844 if test -z "$ZLIBSPEC"; then
845    # Use zlib from the GCC tree.
846    ZINCS='-I$(top_srcdir)/../zlib'
847    ZLIBS=../zlib/libzgcj_convenience.la
848 else
849    # System's zlib.
850    SYS_ZLIBS="$ZLIBSPEC"
851 fi
852 AC_SUBST(ZLIBS)
853 AC_SUBST(SYS_ZLIBS)
854 AC_SUBST(ZINCS)
855 AC_SUBST(DIVIDESPEC)
856 AC_SUBST(CHECKREFSPEC)
857 AC_SUBST(EXCEPTIONSPEC)
858 AC_SUBST(IEEESPEC)
859
860 AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes)
861 AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes)
862 AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes)
863 AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
864 AC_SUBST(GCC_UNWIND_INCLUDE)
865
866 if test -n "$with_cross_host" &&
867    test x"$with_cross_host" != x"no"; then
868   toolexecdir='$(exec_prefix)/$(target_alias)'
869   toolexecmainlibdir='$(toolexecdir)/lib'
870 else
871   toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
872   toolexecmainlibdir='$(libdir)'
873 fi
874 multi_os_directory=`$CC -print-multi-os-directory`
875 case $multi_os_directory in
876   .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
877   *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
878 esac
879 AC_SUBST(toolexecdir)
880 AC_SUBST(toolexecmainlibdir)
881 AC_SUBST(toolexeclibdir)
882
883 # Determine gcj version number.
884 changequote(<<,>>)
885 gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`
886 changequote([,])
887 GCJVERSION=$gcjversion
888 AC_SUBST(GCJVERSION)
889 AC_DEFINE_UNQUOTED(GCJVERSION, "$GCJVERSION", [Short GCJ version ID])
890
891 dnl Work around a g++ bug.  Reported to gcc-bugs@gcc.gnu.org on Jan 22, 2000.
892 AC_MSG_CHECKING([for g++ -ffloat-store bug])
893 save_CFLAGS="$CFLAGS"
894 CFLAGS="-x c++ -O2 -ffloat-store"
895 AC_TRY_COMPILE([#include <math.h>], , 
896   [AC_MSG_RESULT(no)],
897   [AC_DEFINE(__NO_MATH_INLINES)
898    AC_MSG_RESULT(yes)])
899 CFLAGS="$save_CFLAGS"
900
901 dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
902 dnl On that system, sys/ioctl.h will not include sys/filio.h unless
903 dnl BSD_COMP is defined; just including sys/filio.h is simpler.
904 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)
905 dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
906 dnl for now.  If you change this, you also must update natFile.cc.
907 AC_CHECK_HEADERS(dirent.h)
908 AC_CHECK_HEADERS(inttypes.h, [
909     AC_DEFINE(HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
910     AC_DEFINE(JV_HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
911 ])
912 AC_HEADER_SYS_WAIT
913
914 AC_CHECK_TYPE([ssize_t], [int])
915
916 AC_MSG_CHECKING([for in_addr_t])
917 AC_TRY_COMPILE([#include <sys/types.h>
918 #if STDC_HEADERS
919 #include <stdlib.h>
920 #include <stddef.h>
921 #endif
922 #if HAVE_NETINET_IN_H
923 #include <netinet/in.h>
924 #endif], [in_addr_t foo;],
925   [AC_DEFINE([HAVE_IN_ADDR_T])
926    AC_MSG_RESULT(yes)],
927   [AC_MSG_RESULT(no)])
928
929 AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h])
930 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;],
931   [AC_DEFINE(HAVE_STRUCT_IP_MREQ)
932    AC_MSG_RESULT(yes)],
933   [AC_MSG_RESULT(no)])
934
935 AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
936 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
937   [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ)
938    AC_MSG_RESULT(yes)],
939   [AC_MSG_RESULT(no)])
940
941 AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
942 AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
943   [AC_DEFINE(HAVE_INET6)
944    AC_MSG_RESULT(yes)],
945   [AC_MSG_RESULT(no)])
946
947 AC_MSG_CHECKING([for socklen_t in sys/socket.h])
948 AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
949 #include <sys/types.h>
950 #include <sys/socket.h>], [socklen_t x = 5;],
951   [AC_DEFINE(HAVE_SOCKLEN_T)
952    AC_MSG_RESULT(yes)],
953   [AC_MSG_RESULT(no)])
954
955 AC_MSG_CHECKING([for tm_gmtoff in struct tm])
956 AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
957   [AC_DEFINE(STRUCT_TM_HAS_GMTOFF)
958    AC_MSG_RESULT(yes)],
959   [AC_MSG_RESULT(no)
960    AC_MSG_CHECKING([for global timezone variable])
961    dnl FIXME: we don't want a link check here because that won't work
962    dnl when cross-compiling.  So instead we make an assumption that
963    dnl the header file will mention timezone if it exists.
964    dnl Don't find the win32 function timezone
965    AC_TRY_COMPILE([#include <time.h>], [void i(){long z2 = 2*timezone;}],
966      [AC_DEFINE(HAVE_TIMEZONE)
967       AC_MSG_RESULT(yes)],
968      [AC_MSG_RESULT(no)
969        AC_MSG_CHECKING([for global _timezone variable])
970        dnl FIXME: As above, don't want link check
971        AC_TRY_COMPILE([#include <time.h>], [long z2 = _timezone;],
972          [AC_DEFINE(HAVE_UNDERSCORE_TIMEZONE)
973           AC_MSG_RESULT(yes)],
974           [AC_MSG_RESULT(no)])])])
975
976 AC_FUNC_ALLOCA
977 AC_FUNC_MMAP
978
979 AC_CHECK_PROGS(PERL, perl, false)
980
981 SYSDEP_SOURCES=
982
983 case "${host}" in
984  i?86-*-linux*)
985     SIGNAL_HANDLER=include/i386-signal.h
986     ;;
987  sparc*-sun-solaris*)
988     SIGNAL_HANDLER=include/sparc-signal.h
989     ;;
990 # ia64-*)
991 #    SYSDEP_SOURCES=sysdep/ia64.c
992 #    test -d sysdep || mkdir sysdep
993 #    ;;
994  ia64-*-linux*)
995     SIGNAL_HANDLER=include/dwarf2-signal.h
996     ;;
997  powerpc-*-linux*)
998     SIGNAL_HANDLER=include/dwarf2-signal.h
999     ;;
1000  alpha*-*-linux*)
1001     SIGNAL_HANDLER=include/dwarf2-signal.h
1002     ;;
1003  s390*-*-linux*)
1004     SIGNAL_HANDLER=include/s390-signal.h
1005     ;;
1006  x86_64*-*-linux*)
1007     SIGNAL_HANDLER=include/x86_64-signal.h
1008     ;;
1009  sparc*-*-linux*)
1010     SIGNAL_HANDLER=include/dwarf2-signal.h
1011     ;;
1012  sh-*-linux* | sh[[34]]*-*-linux*)
1013     SIGNAL_HANDLER=include/dwarf2-signal.h
1014     ;;
1015  *mingw*)
1016     SIGNAL_HANDLER=include/win32-signal.h
1017     ;;
1018  *)
1019     SIGNAL_HANDLER=include/default-signal.h
1020     ;;
1021 esac
1022
1023 # If we're using sjlj exceptions, forget what we just learned.
1024 if test "$enable_sjlj_exceptions" = yes; then
1025    SIGNAL_HANDLER=include/default-signal.h
1026 fi
1027
1028 # Define here any compiler flags that you need in order to make backtrace() work.
1029 BACKTRACESPEC=
1030 case "${host}" in
1031  x86_64*-*-linux*)
1032     BACKTRACESPEC=-fno-omit-frame-pointer
1033     ;;
1034 esac
1035 AC_SUBST(BACKTRACESPEC)
1036
1037 AC_SUBST(SYSDEP_SOURCES)
1038
1039 AC_LINK_FILES($SIGNAL_HANDLER, include/java-signal.h)
1040
1041 if test "${multilib}" = "yes"; then
1042   multilib_arg="--enable-multilib"
1043 else
1044   multilib_arg=
1045 fi
1046
1047
1048
1049 here=`${PWDCMD-pwd}`
1050 AC_SUBST(here)
1051
1052 # We get this from the environment.
1053 AC_SUBST(GCJFLAGS)
1054
1055 AC_OUTPUT(Makefile libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile,
1056 [# Only add multilib support code if we just rebuilt top-level Makefile.
1057 case " $CONFIG_FILES " in
1058  *" Makefile "*)
1059    LD="${ORIGINAL_LD_FOR_MULTILIBS}"
1060    ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
1061    ;;
1062 esac
1063
1064 # Make subdirectories and `.d' files.  Look in both srcdir and
1065 # builddir for the .java files.
1066 h=`${PWDCMD-pwd}`
1067 : > deps.mk
1068 ( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) ;
1069   find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) | \
1070    fgrep -v testsuite | \
1071    sed -e 's/\.java/.d/'\;'s/\.cc/.d/'\;'s/\.c/.d/' | \
1072    while read f; do
1073       echo "include $f" >> deps.mk
1074       test -f $f || {
1075 changequote(<<,>>)
1076          d=`echo $f | sed -e 's,/[^/]*$,,'`
1077 changequote([,])
1078          if test ! -d $d; then
1079            $libgcj_basedir/../mkinstalldirs $d
1080          fi;
1081          echo > $f
1082       }
1083    done
1084 ],
1085 srcdir=${srcdir}
1086 host=${host}
1087 target=${target}
1088 with_multisubdir=${with_multisubdir}
1089 ac_configure_args="${multilib_arg} ${ac_configure_args}"
1090 CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
1091 libgcj_basedir=${libgcj_basedir}
1092 CC="${CC}"
1093 CXX="${CXX}"
1094 ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
1095 )