OSDN Git Service

* toplev.c: Fix formatting.
[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 if test -d sysdep; then true; else mkdir sysdep; fi
432 AC_LINK_FILES(sysdep/$sysdeps_dir/locks.h, sysdep/locks.h)
433
434 HASH_SYNC_SPEC=
435 # Hash synchronization is only useful with posix threads right now.
436 if test "$enable_hash_synchronization" = yes && test "$THREADS" = "posix"; then
437    HASH_SYNC_SPEC=-fhash-synchronization
438    AC_DEFINE(JV_HASH_SYNCHRONIZATION, 1, [Define if hash synchronization is in use])
439 fi
440 AC_SUBST(HASH_SYNC_SPEC)
441
442
443 AM_CONDITIONAL(USING_GCC, test "$GCC" = yes)
444
445 CANADIAN=no
446 NULL_TARGET=no
447 NATIVE=yes
448
449 # We're in the tree with gcc, and need to include some of its headers.
450 GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
451
452 # Figure out where generated headers like libgcj-config.h get installed.
453 changequote(,)dnl
454 gcc_version_trigger=${libgcj_basedir}/../gcc/version.c
455 gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
456 gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
457 tool_include_dir='$(libdir)/gcc-lib/$(target_alias)/'${gcc_version}/include
458 changequote([,])dnl
459 AC_SUBST(tool_include_dir)
460 AC_SUBST(gcc_version)
461
462 if test -n "${with_cross_host}"; then
463    # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
464    # may not work correctly, because the compiler may not be able to
465    # link executables.
466
467    # We assume newlib.  This lets us hard-code the functions we know
468    # we'll have.
469    AC_DEFINE(HAVE_MEMMOVE)
470    AC_DEFINE(HAVE_MEMCPY)
471    AC_DEFINE(HAVE_STRERROR)
472    AC_DEFINE(HAVE_TIME)
473    AC_DEFINE(HAVE_GMTIME_R)
474    AC_DEFINE(HAVE_LOCALTIME_R)
475    dnl This is only for POSIX threads.
476    AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT)
477    dnl We also assume we are using gcc, which provides alloca.
478    AC_DEFINE(HAVE_ALLOCA)
479
480    dnl Assume we do not have getuid and friends.
481    AC_DEFINE(NO_GETUID)
482
483    # If Canadian cross, then don't pick up tools from the build
484    # directory.
485    if test x"$build" != x"$with_cross_host" && x"$build" != x"$target"; then
486       CANADIAN=yes
487       GCC_UNWIND_INCLUDE=
488       GCJ="${target_alias}-gcj"
489    fi
490    NATIVE=no
491 else
492    AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir)
493    AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd)
494    AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod)
495    AC_CHECK_FUNCS(nl_langinfo setlocale)
496    AC_CHECK_FUNCS(inet_aton inet_addr, break)
497    AC_CHECK_FUNCS(inet_pton uname inet_ntoa)
498    AC_CHECK_FUNCS(fork execvp pipe sigaction)
499    AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h) 
500    AC_CHECK_FUNC(backtrace, [
501      case "$host" in
502        ia64-*-linux*)
503          # Has broken backtrace()
504          ;;
505        *)
506          AC_DEFINE(HAVE_BACKTRACE)
507          ;;
508      esac
509    ])
510
511    AC_CHECK_LIB(dl, dladdr, [
512      AC_DEFINE(HAVE_DLADDR)])
513    AC_CHECK_FILES(/proc/self/exe, [
514      AC_DEFINE(HAVE_PROC_SELF_EXE)])
515
516    AM_ICONV
517    AM_LC_MESSAGES
518    AC_STRUCT_TIMEZONE
519
520    AC_CHECK_FUNCS(gethostbyname_r, [
521      AC_DEFINE(HAVE_GETHOSTBYNAME_R)
522      # There are two different kinds of gethostbyname_r.
523      # We look for the one that returns `int'.
524      # Hopefully this check is robust enough.
525      AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [
526        AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT)])
527
528      case " $GCINCS " in
529      *" -D_REENTRANT "*) ;;
530      *)
531         dnl On DU4.0, gethostbyname_r is only declared with -D_REENTRANT
532         AC_CACHE_CHECK([whether gethostbyname_r declaration requires -D_REENTRANT],
533         [libjava_cv_gethostbyname_r_needs_reentrant],
534         [ AC_LANG_SAVE
535           AC_LANG_CPLUSPLUS
536           AC_TRY_COMPILE([#include <netdb.h>],
537             [gethostbyname_r("", 0, 0);],
538             [libjava_cv_gethostbyname_r_needs_reentrant=no], [dnl
539                 CPPFLAGS_SAVE="$CPPFLAGS"
540                 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
541                 AC_TRY_COMPILE([#include <netdb.h>], [gethostbyname_r("", 0, 0);],
542                     [libjava_cv_gethostbyname_r_needs_reentrant=yes],
543                     [libjava_cv_gethostbyname_r_needs_reentrant=fail])
544                 CPPFLAGS="$CPPFLAGS_SAVE"
545           ])
546           AC_LANG_RESTORE
547         ])
548         if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
549           AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
550         fi
551      ;;
552      esac
553
554      AC_CACHE_CHECK([for struct hostent_data],
555         [libjava_cv_struct_hostent_data], [dnl
556         AC_TRY_COMPILE([
557 #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
558 # define _REENTRANT 1
559 #endif
560 #include <netdb.h>], [struct hostent_data data;],
561           [libjava_cv_struct_hostent_data=yes],
562           [libjava_cv_struct_hostent_data=no])])
563      if test "x$libjava_cv_struct_hostent_data" = xyes; then
564        AC_DEFINE(HAVE_STRUCT_HOSTENT_DATA, 1,
565          [Define if struct hostent_data is defined in netdb.h])
566      fi
567    ])
568
569    # FIXME: libjava source code expects to find a prototype for
570    # gethostbyaddr_r in netdb.h.  The outer check ensures that
571    # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
572    # to exist where expected.  (The root issue: AC_CHECK_FUNCS assumes C
573    # linkage check is enough, yet C++ code requires proper prototypes.)
574    AC_EGREP_HEADER(gethostbyaddr_r, netdb.h, [
575    AC_CHECK_FUNCS(gethostbyaddr_r, [
576      AC_DEFINE(HAVE_GETHOSTBYADDR_R)
577      # There are two different kinds of gethostbyaddr_r.
578      # We look for the one that returns `int'.
579      # Hopefully this check is robust enough.
580      AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
581        AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT)])])])
582
583    AC_CHECK_FUNCS(gethostname, [
584      AC_DEFINE(HAVE_GETHOSTNAME)
585      AC_EGREP_HEADER(gethostname, unistd.h, [
586        AC_DEFINE(HAVE_GETHOSTNAME_DECL)])])
587
588    # Look for these functions in the thread library, but only bother
589    # if using POSIX threads.
590    if test "$THREADS" = posix; then
591       save_LIBS="$LIBS"
592       LIBS="$LIBS $THREADLIBS"
593       # Some POSIX thread systems don't have pthread_mutexattr_settype.
594       # E.g., Solaris.
595       AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np)
596
597       # Look for sched_yield.  Up to Solaris 2.6, it is in libposix4, since
598       # Solaris 7 the name librt is preferred.
599       AC_CHECK_FUNCS(sched_yield, , [
600         AC_CHECK_LIB(rt, sched_yield, [
601           AC_DEFINE(HAVE_SCHED_YIELD)
602           THREADLIBS="$THREADLIBS -lrt"
603           THREADSPEC="$THREADSPEC -lrt"], [
604           AC_CHECK_LIB(posix4, sched_yield, [
605             AC_DEFINE(HAVE_SCHED_YIELD)
606             THREADLIBS="$THREADLIBS -lposix4"
607             THREADSPEC="$THREADSPEC -lposix4"])])])
608       LIBS="$save_LIBS"
609
610       # We can save a little space at runtime if the mutex has m_count
611       # or __m_count.  This is a nice hack for Linux.
612       AC_TRY_COMPILE([#include <pthread.h>], [
613           extern pthread_mutex_t *mutex; int q = mutex->m_count;
614         ], AC_DEFINE(PTHREAD_MUTEX_HAVE_M_COUNT), [
615         AC_TRY_COMPILE([#include <pthread.h>], [
616             extern pthread_mutex_t *mutex; int q = mutex->__m_count;
617           ], AC_DEFINE(PTHREAD_MUTEX_HAVE___M_COUNT))])
618    fi
619
620    # We require a way to get the time.
621    time_found=no
622    AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes)
623    if test "$time_found" = no; then
624       AC_MSG_ERROR([no function found to get the time])
625    fi
626
627    AC_CHECK_FUNCS(memmove)
628
629    # We require memcpy.
630    memcpy_found=no
631    AC_CHECK_FUNCS(memcpy, memcpy_found=yes)
632    if test "$memcpy_found" = no; then
633       AC_MSG_ERROR([memcpy is required])
634    fi
635
636    AC_CHECK_LIB(dl, dlopen, [
637        AC_DEFINE(HAVE_DLOPEN, 1, [Define if dlopen is available])])
638
639    # Some library-finding code we stole from Tcl.
640    #--------------------------------------------------------------------
641    #    Check for the existence of the -lsocket and -lnsl libraries.
642    #    The order here is important, so that they end up in the right
643    #    order in the command line generated by make.  Here are some
644    #    special considerations:
645    #    1. Use "connect" and "accept" to check for -lsocket, and
646    #       "gethostbyname" to check for -lnsl.
647    #    2. Use each function name only once:  can't redo a check because
648    #       autoconf caches the results of the last check and won't redo it.
649    #    3. Use -lnsl and -lsocket only if they supply procedures that
650    #       aren't already present in the normal libraries.  This is because
651    #       IRIX 5.2 has libraries, but they aren't needed and they're
652    #       bogus:  they goof up name resolution if used.
653    #    4. On some SVR4 systems, can't use -lsocket without -lnsl too.
654    #       To get around this problem, check for both libraries together
655    #       if -lsocket doesn't work by itself.
656    #--------------------------------------------------------------------
657
658    AC_CACHE_CHECK([for socket libraries], gcj_cv_lib_sockets,
659     [gcj_cv_lib_sockets=
660      gcj_checkBoth=0
661      unset ac_cv_func_connect
662      AC_CHECK_FUNC(connect, gcj_checkSocket=0, gcj_checkSocket=1)
663      if test "$gcj_checkSocket" = 1; then
664          unset ac_cv_func_connect
665          AC_CHECK_LIB(socket, main, gcj_cv_lib_sockets="-lsocket",
666                       gcj_checkBoth=1)
667      fi
668      if test "$gcj_checkBoth" = 1; then
669          gcj_oldLibs=$LIBS
670          LIBS="$LIBS -lsocket -lnsl"
671          unset ac_cv_func_accept
672          AC_CHECK_FUNC(accept,
673                        [gcj_checkNsl=0
674                         gcj_cv_lib_sockets="-lsocket -lnsl"])
675          unset ac_cv_func_accept
676          LIBS=$gcj_oldLibs
677      fi
678      unset ac_cv_func_gethostbyname
679      gcj_oldLibs=$LIBS
680      LIBS="$LIBS $gcj_cv_lib_sockets"
681      AC_CHECK_FUNC(gethostbyname, ,
682                    [AC_CHECK_LIB(nsl, main,
683                                  [gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"])])
684      unset ac_cv_func_gethostbyname
685      LIBS=$gcj_oldLIBS
686    ])
687    SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
688
689    if test "$with_system_zlib" = yes; then
690       AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=)
691    fi
692
693    # On Solaris, and maybe other architectures, the Boehm collector
694    # requires -ldl.
695    if test "$GC" = boehm; then
696       AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl")
697    fi
698
699    if test -z "${with_multisubdir}"; then
700       builddotdot=.
701    else
702 changequote(<<,>>)
703       builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
704 changequote([,])
705    fi
706    if test -x "${builddotdot}/../../gcc/gcj"; then
707       dir="`cd ${builddotdot}/../../gcc && pwd`"
708       GCJ="$dir/gcj -B`pwd`/ -B$dir/"
709    else
710       CANADIAN=yes
711       NULL_TARGET=yes
712       GCJ="gcj -B`pwd`/"
713    fi
714 fi
715
716 # Create it, so that compile/link tests don't fail
717 test -f libgcj.spec || touch libgcj.spec
718
719 # We must search the source tree for java.lang, since we still don't
720 # have libgcj.jar nor java/lang/*.class
721 GCJ_SAVE_CPPFLAGS=$CPPFLAGS
722 CPPFLAGS="$CPPFLAGS -I`pwd` -I`cd $srcdir && pwd`"
723
724 # Since some classes depend on this one, we need its source available
725 # before we can do any GCJ compilation test :-(
726 if test ! -f gnu/classpath/Configuration.java; then
727   test -d gnu || mkdir gnu
728   test -d gnu/classpath || mkdir gnu/classpath
729   sed 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \
730         < $srcdir/gnu/classpath/Configuration.java.in \
731         > gnu/classpath/Configuration.java
732   # We do not want to redirect the output of the grep below to /dev/null,
733   # but we add /dev/null to the input list so that grep will print the
734   # filename of Configuration.java in case it finds any matches.
735   if grep @ gnu/classpath/Configuration.java /dev/null; then
736     AC_MSG_ERROR([configure.in is missing the substitutions above])
737   fi
738 fi
739
740 LT_AC_PROG_GCJ
741
742 CPPFLAGS=$GCJ_SAVE_CPPFLAGS
743
744 AC_COMPILE_CHECK_SIZEOF(void *)
745
746 ZLIBS=
747 SYS_ZLIBS=
748 ZINCS=
749
750 if test -z "$ZLIBSPEC"; then
751    # Use zlib from the GCC tree.
752    ZINCS='-I$(top_srcdir)/../zlib'
753    ZLIBS=../zlib/libzgcj_convenience.la
754 else
755    # System's zlib.
756    SYS_ZLIBS="$ZLIBSPEC"
757 fi
758 AC_SUBST(ZLIBS)
759 AC_SUBST(SYS_ZLIBS)
760 AC_SUBST(ZINCS)
761 AC_SUBST(DIVIDESPEC)
762 AC_SUBST(CHECKREFSPEC)
763 AC_SUBST(EXCEPTIONSPEC)
764
765 AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes)
766 AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes)
767 AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes)
768 AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host")
769 AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
770 AC_SUBST(GCC_UNWIND_INCLUDE)
771
772 AC_SUBST(AM_RUNTESTFLAGS)
773
774 # Determine gcj version number.
775 changequote(<<,>>)
776 gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`
777 changequote([,])
778 GCJVERSION=$gcjversion
779 AC_SUBST(GCJVERSION)
780 AC_DEFINE_UNQUOTED(GCJVERSION, "$GCJVERSION", [Short GCJ version ID])
781
782 dnl Work around a g++ bug.  Reported to gcc-bugs@gcc.gnu.org on Jan 22, 2000.
783 AC_MSG_CHECKING([for g++ -ffloat-store bug])
784 save_CFLAGS="$CFLAGS"
785 CFLAGS="-x c++ -O2 -ffloat-store"
786 AC_TRY_COMPILE([#include <math.h>], , 
787   [AC_MSG_RESULT(no)],
788   [AC_DEFINE(__NO_MATH_INLINES)
789    AC_MSG_RESULT(yes)])
790 CFLAGS="$save_CFLAGS"
791
792 dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
793 dnl On that system, sys/ioctl.h will not include sys/filio.h unless
794 dnl BSD_COMP is defined; just including sys/filio.h is simpler.
795 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)
796 dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
797 dnl for now.  If you change this, you also must update natFile.cc.
798 AC_CHECK_HEADERS(dirent.h)
799 AC_CHECK_HEADERS(inttypes.h, [
800     AC_DEFINE(HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
801     AC_DEFINE(JV_HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
802 ])
803 AC_HEADER_SYS_WAIT
804
805 AC_CHECK_TYPE([ssize_t], [int])
806
807 AC_MSG_CHECKING([for in_addr_t])
808 AC_TRY_COMPILE([#include <sys/types.h>
809 #if STDC_HEADERS
810 #include <stdlib.h>
811 #include <stddef.h>
812 #endif
813 #if HAVE_NETINET_IN_H
814 #include <netinet/in.h>
815 #endif], [in_addr_t foo;],
816   [AC_DEFINE([HAVE_IN_ADDR_T])
817    AC_MSG_RESULT(yes)],
818   [AC_MSG_RESULT(no)])
819
820 AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h])
821 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;],
822   [AC_DEFINE(HAVE_STRUCT_IP_MREQ)
823    AC_MSG_RESULT(yes)],
824   [AC_MSG_RESULT(no)])
825
826 AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
827 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
828   [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ)
829    AC_MSG_RESULT(yes)],
830   [AC_MSG_RESULT(no)])
831
832 AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
833 AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
834   [AC_DEFINE(HAVE_INET6)
835    AC_MSG_RESULT(yes)],
836   [AC_MSG_RESULT(no)])
837
838 AC_MSG_CHECKING([for socklen_t in sys/socket.h])
839 AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
840 #include <sys/types.h>
841 #include <sys/socket.h>], [socklen_t x = 5;],
842   [AC_DEFINE(HAVE_SOCKLEN_T)
843    AC_MSG_RESULT(yes)],
844   [AC_MSG_RESULT(no)])
845
846 AC_MSG_CHECKING([for tm_gmtoff in struct tm])
847 AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
848   [AC_DEFINE(STRUCT_TM_HAS_GMTOFF)
849    AC_MSG_RESULT(yes)],
850   [AC_MSG_RESULT(no)
851    AC_MSG_CHECKING([for global timezone variable])
852    dnl FIXME: we don't want a link check here because that won't work
853    dnl when cross-compiling.  So instead we make an assumption that
854    dnl the header file will mention timezone if it exists.
855    dnl Don't find the win32 function timezone
856    AC_TRY_COMPILE([#include <time.h>], [void i(){long z2 = 2*timezone;}],
857      [AC_DEFINE(HAVE_TIMEZONE)
858       AC_MSG_RESULT(yes)],
859      [AC_MSG_RESULT(no)
860        AC_MSG_CHECKING([for global _timezone variable])
861        dnl FIXME: As above, don't want link check
862        AC_TRY_COMPILE([#include <time.h>], [long z2 = _timezone;],
863          [AC_DEFINE(HAVE_UNDERSCORE_TIMEZONE)
864           AC_MSG_RESULT(yes)],
865           [AC_MSG_RESULT(no)])])])
866
867 AC_FUNC_ALLOCA
868
869 AC_CHECK_PROGS(PERL, perl, false)
870
871 SYSDEP_SOURCES=
872
873 case "${host}" in
874  i?86-*-linux*)
875     SIGNAL_HANDLER=include/i386-signal.h
876     ;;
877  sparc*-sun-solaris*)
878     SIGNAL_HANDLER=include/sparc-signal.h
879     ;;
880 # ia64-*)
881 #    SYSDEP_SOURCES=sysdep/ia64.c
882 #    test -d sysdep || mkdir sysdep
883 #    ;;
884  ia64-*-linux*)
885     SIGNAL_HANDLER=include/dwarf2-signal.h
886     ;;
887  powerpc-*-linux*)
888     SIGNAL_HANDLER=include/dwarf2-signal.h
889     ;;
890  alpha*-*-linux*)
891     SIGNAL_HANDLER=include/dwarf2-signal.h
892     ;;
893  sparc*-*-linux*)
894     SIGNAL_HANDLER=include/dwarf2-signal.h
895     ;;
896  *mingw*)
897     SIGNAL_HANDLER=include/win32-signal.h
898     ;;
899  *)
900     SIGNAL_HANDLER=include/default-signal.h
901     ;;
902 esac
903
904 # If we're using sjlj exceptions, forget what we just learned.
905 if test "$enable_sjlj_exceptions" = yes; then
906    SIGNAL_HANDLER=include/default-signal.h
907 fi
908
909 AC_SUBST(SYSDEP_SOURCES)
910
911 AC_LINK_FILES($SIGNAL_HANDLER, include/java-signal.h)
912
913 if test "${multilib}" = "yes"; then
914   multilib_arg="--enable-multilib"
915 else
916   multilib_arg=
917 fi
918
919 AC_PATH_XTRA
920
921 dnl Determine which AWT peer libraries to build
922 AC_ARG_ENABLE(java-awt,
923 [  --enable-java-awt       list of AWT peer implementations to be built])
924
925 peerlibs="`echo ${enable_java_awt} | tr ',' ' '`"
926 use_xlib_awt=""
927 use_gtk_awt=""
928
929 for peer in $peerlibs ; do
930   case $peer in
931     xlib)
932       if [test "$no_x" = yes]; then
933         echo "*** xlib peers requested but no X library available" 1>&2
934         exit 1
935       else
936         use_xlib_awt="yes"
937       fi
938       ;;
939     gtk)
940       # Nothing, yet...
941       ;;
942     no)
943       use_xlib_awt=
944       use_gtk_awt=
945       break
946       ;;
947     *)
948       echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2
949       exit 1
950   esac
951 done
952
953 AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes)
954 AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes)
955
956
957 here=`pwd`
958 AC_SUBST(here)
959
960 # We get this from the environment.
961 AC_SUBST(GCJFLAGS)
962
963 AC_OUTPUT(Makefile libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile,
964 [# Only add multilib support code if we just rebuilt top-level Makefile.
965 case " $CONFIG_FILES " in
966  *" Makefile "*)
967    ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
968    ;;
969 esac
970
971 # Make subdirectories and `.d' files.  Look in both srcdir and
972 # builddir for the .java files.
973 h=`pwd`
974 : > deps.mk
975 ( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' \) -print) ;
976   find . \( -name '*.java' -o -name '*.cc' \) -print) | \
977    fgrep -v testsuite | \
978    sed -e 's/\.java/.d/'\;'s/\.cc/.d/' | \
979    while read f; do
980       echo "include $f" >> deps.mk
981       test -f $f || {
982 changequote(<<,>>)
983          d=`echo $f | sed -e 's,/[^/]*$,,'`
984 changequote([,])
985          if test ! -d $d; then
986            $libgcj_basedir/../mkinstalldirs $d
987          fi;
988          echo > $f
989       }
990    done
991 ],
992 srcdir=${srcdir}
993 host=${host}
994 target=${target}
995 with_multisubdir=${with_multisubdir}
996 ac_configure_args="${multilib_arg} ${ac_configure_args}"
997 CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
998 libgcj_basedir=${libgcj_basedir}
999 CC="${CC}"
1000 CXX="${CXX}"
1001 )