aclocal.m4 (CHECK_FOR_BROKEN_MINGW_LD): added
[gcc.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; 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(USE_LIBDIR, test -z "$with_cross_host")
793 AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
794 AC_SUBST(GCC_UNWIND_INCLUDE)
795
796 # Determine gcj version number.
797 changequote(<<,>>)
798 gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`
799 changequote([,])
800 GCJVERSION=$gcjversion
801 AC_SUBST(GCJVERSION)
802 AC_DEFINE_UNQUOTED(GCJVERSION, "$GCJVERSION", [Short GCJ version ID])
803
804 dnl Work around a g++ bug. Reported to gcc-bugs@gcc.gnu.org on Jan 22, 2000.
805 AC_MSG_CHECKING([for g++ -ffloat-store bug])
806 save_CFLAGS="$CFLAGS"
807 CFLAGS="-x c++ -O2 -ffloat-store"
808 AC_TRY_COMPILE([#include <math.h>], ,
809 [AC_MSG_RESULT(no)],
810 [AC_DEFINE(__NO_MATH_INLINES)
811 AC_MSG_RESULT(yes)])
812 CFLAGS="$save_CFLAGS"
813
814 dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
815 dnl On that system, sys/ioctl.h will not include sys/filio.h unless
816 dnl BSD_COMP is defined; just including sys/filio.h is simpler.
817 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)
818 dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
819 dnl for now. If you change this, you also must update natFile.cc.
820 AC_CHECK_HEADERS(dirent.h)
821 AC_CHECK_HEADERS(inttypes.h, [
822 AC_DEFINE(HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
823 AC_DEFINE(JV_HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
824 ])
825 AC_HEADER_SYS_WAIT
826
827 AC_CHECK_TYPE([ssize_t], [int])
828
829 AC_MSG_CHECKING([for in_addr_t])
830 AC_TRY_COMPILE([#include <sys/types.h>
831 #if STDC_HEADERS
832 #include <stdlib.h>
833 #include <stddef.h>
834 #endif
835 #if HAVE_NETINET_IN_H
836 #include <netinet/in.h>
837 #endif], [in_addr_t foo;],
838 [AC_DEFINE([HAVE_IN_ADDR_T])
839 AC_MSG_RESULT(yes)],
840 [AC_MSG_RESULT(no)])
841
842 AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h])
843 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;],
844 [AC_DEFINE(HAVE_STRUCT_IP_MREQ)
845 AC_MSG_RESULT(yes)],
846 [AC_MSG_RESULT(no)])
847
848 AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
849 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
850 [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ)
851 AC_MSG_RESULT(yes)],
852 [AC_MSG_RESULT(no)])
853
854 AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
855 AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
856 [AC_DEFINE(HAVE_INET6)
857 AC_MSG_RESULT(yes)],
858 [AC_MSG_RESULT(no)])
859
860 AC_MSG_CHECKING([for socklen_t in sys/socket.h])
861 AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
862 #include <sys/types.h>
863 #include <sys/socket.h>], [socklen_t x = 5;],
864 [AC_DEFINE(HAVE_SOCKLEN_T)
865 AC_MSG_RESULT(yes)],
866 [AC_MSG_RESULT(no)])
867
868 AC_MSG_CHECKING([for tm_gmtoff in struct tm])
869 AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
870 [AC_DEFINE(STRUCT_TM_HAS_GMTOFF)
871 AC_MSG_RESULT(yes)],
872 [AC_MSG_RESULT(no)
873 AC_MSG_CHECKING([for global timezone variable])
874 dnl FIXME: we don't want a link check here because that won't work
875 dnl when cross-compiling. So instead we make an assumption that
876 dnl the header file will mention timezone if it exists.
877 dnl Don't find the win32 function timezone
878 AC_TRY_COMPILE([#include <time.h>], [void i(){long z2 = 2*timezone;}],
879 [AC_DEFINE(HAVE_TIMEZONE)
880 AC_MSG_RESULT(yes)],
881 [AC_MSG_RESULT(no)
882 AC_MSG_CHECKING([for global _timezone variable])
883 dnl FIXME: As above, don't want link check
884 AC_TRY_COMPILE([#include <time.h>], [long z2 = _timezone;],
885 [AC_DEFINE(HAVE_UNDERSCORE_TIMEZONE)
886 AC_MSG_RESULT(yes)],
887 [AC_MSG_RESULT(no)])])])
888
889 AC_FUNC_ALLOCA
890
891 AC_CHECK_PROGS(PERL, perl, false)
892
893 SYSDEP_SOURCES=
894
895 case "${host}" in
896 i?86-*-linux*)
897 SIGNAL_HANDLER=include/i386-signal.h
898 ;;
899 sparc*-sun-solaris*)
900 SIGNAL_HANDLER=include/sparc-signal.h
901 ;;
902 # ia64-*)
903 # SYSDEP_SOURCES=sysdep/ia64.c
904 # test -d sysdep || mkdir sysdep
905 # ;;
906 ia64-*-linux*)
907 SIGNAL_HANDLER=include/dwarf2-signal.h
908 ;;
909 powerpc-*-linux*)
910 SIGNAL_HANDLER=include/dwarf2-signal.h
911 ;;
912 alpha*-*-linux*)
913 SIGNAL_HANDLER=include/dwarf2-signal.h
914 ;;
915 s390*-*-linux*)
916 SIGNAL_HANDLER=include/s390-signal.h
917 ;;
918 x86_64*-*-linux*)
919 SIGNAL_HANDLER=include/dwarf2-signal.h
920 ;;
921 sparc*-*-linux*)
922 SIGNAL_HANDLER=include/dwarf2-signal.h
923 ;;
924 *mingw*)
925 SIGNAL_HANDLER=include/win32-signal.h
926 ;;
927 *)
928 SIGNAL_HANDLER=include/default-signal.h
929 ;;
930 esac
931
932 # If we're using sjlj exceptions, forget what we just learned.
933 if test "$enable_sjlj_exceptions" = yes; then
934 SIGNAL_HANDLER=include/default-signal.h
935 fi
936
937 AC_SUBST(SYSDEP_SOURCES)
938
939 AC_LINK_FILES($SIGNAL_HANDLER, include/java-signal.h)
940
941 if test "${multilib}" = "yes"; then
942 multilib_arg="--enable-multilib"
943 else
944 multilib_arg=
945 fi
946
947 AC_PATH_XTRA
948
949 dnl Determine which AWT peer libraries to build
950 AC_ARG_ENABLE(java-awt,
951 [ --enable-java-awt list of AWT peer implementations to be built])
952
953 peerlibs="`echo ${enable_java_awt} | tr ',' ' '`"
954 use_xlib_awt=""
955 use_gtk_awt=""
956
957 for peer in $peerlibs ; do
958 case $peer in
959 xlib)
960 if [test "$no_x" = yes]; then
961 echo "*** xlib peers requested but no X library available" 1>&2
962 exit 1
963 else
964 use_xlib_awt="yes"
965 fi
966 ;;
967 gtk)
968 # Nothing, yet...
969 ;;
970 no)
971 use_xlib_awt=
972 use_gtk_awt=
973 break
974 ;;
975 *)
976 echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2
977 exit 1
978 esac
979 done
980
981 AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes)
982 AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes)
983
984
985 here=`${PWDCMD-pwd}`
986 AC_SUBST(here)
987
988 # We get this from the environment.
989 AC_SUBST(GCJFLAGS)
990
991 AC_OUTPUT(Makefile libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile,
992 [# Only add multilib support code if we just rebuilt top-level Makefile.
993 case " $CONFIG_FILES " in
994 *" Makefile "*)
995 LD="${ORIGINAL_LD_FOR_MULTILIBS}"
996 ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
997 ;;
998 esac
999
1000 # Make subdirectories and `.d' files. Look in both srcdir and
1001 # builddir for the .java files.
1002 h=`${PWDCMD-pwd}`
1003 : > deps.mk
1004 ( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' \) -print) ;
1005 find . \( -name '*.java' -o -name '*.cc' \) -print) | \
1006 fgrep -v testsuite | \
1007 sed -e 's/\.java/.d/'\;'s/\.cc/.d/' | \
1008 while read f; do
1009 echo "include $f" >> deps.mk
1010 test -f $f || {
1011 changequote(<<,>>)
1012 d=`echo $f | sed -e 's,/[^/]*$,,'`
1013 changequote([,])
1014 if test ! -d $d; then
1015 $libgcj_basedir/../mkinstalldirs $d
1016 fi;
1017 echo > $f
1018 }
1019 done
1020 ],
1021 srcdir=${srcdir}
1022 host=${host}
1023 target=${target}
1024 with_multisubdir=${with_multisubdir}
1025 ac_configure_args="${multilib_arg} ${ac_configure_args}"
1026 CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
1027 libgcj_basedir=${libgcj_basedir}
1028 CC="${CC}"
1029 CXX="${CXX}"
1030 )