configure.in: Avoid trailing /.
[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 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 )