Hashtable synchronization for PowerPC.
[gcc.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 dnl See if the user wants to disable java.net. This is the mildly
157 dnl ugly way that we admit that target-side configuration sucks.
158 AC_ARG_ENABLE(java-net,
159 [ --disable-java-net disable java.net])
160
161 dnl Whether java.net is built by default can depend on the target.
162 if test -z "$enable_java_net"; then
163 enable_java_net=${enable_java_net_default-yes}
164 fi
165 if test "$enable_java_net" = no; then
166 AC_DEFINE(DISABLE_JAVA_NET)
167 fi
168
169 dnl See if the user wants to configure without libffi. Some
170 dnl architectures don't support it, and default values are set in
171 dnl configure.host.
172 AC_ARG_WITH(libffi,
173 [ --without-libffi don't use libffi],,with_libffi=${with_libffi_default-yes})
174
175 LIBFFI=
176 LIBFFIINCS=
177 if test "$with_libffi" != no; then
178 AC_DEFINE(USE_LIBFFI)
179 LIBFFI=../libffi/libfficonvenience.la
180 LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I$(MULTIBUILDTOP)../libffi/include'
181 fi
182 AC_SUBST(LIBFFI)
183 AC_SUBST(LIBFFIINCS)
184
185 dnl See if the user wants to disable JVMPI support.
186 AC_ARG_ENABLE(jvmpi,
187 [ --disable-jvmpi disable JVMPI support])
188
189 if test "$enable_jvmpi" != no; then
190 AC_DEFINE(ENABLE_JVMPI)
191 fi
192
193 dnl If the target is an eCos system, use the appropriate eCos
194 dnl I/O routines.
195 dnl FIXME: this should not be a local option but a global target
196 dnl system; at present there is no eCos target.
197 TARGET_ECOS=${PROCESS-"no"}
198 AC_ARG_WITH(ecos,
199 [ --with-ecos enable runtime eCos target support],
200 TARGET_ECOS="$with_ecos"
201 )
202
203 PLATFORMOBJS=
204 case "$TARGET_ECOS" in
205 no) case "$host" in
206 *mingw*)
207 PLATFORM=Win32
208 PLATFORMOBJS=win32.lo
209 PLATFORMH=win32.h
210 ;;
211 *)
212 PLATFORM=Posix
213 PLATFORMOBJS=posix.lo
214 PLATFORMH=posix.h
215 ;;
216 esac
217 ;;
218 *)
219 PLATFORM=Ecos
220 AC_DEFINE(ECOS)
221 PLATFORMOBJS=posix.lo
222 PLATFORMH=posix.h
223 ;;
224 esac
225 AC_SUBST(PLATFORMOBJS)
226 AC_LINK_FILES(include/$PLATFORMH, include/platform.h)
227
228 AC_EGREP_HEADER(uint32_t, stdint.h, AC_DEFINE(HAVE_INT32_DEFINED))
229 AC_EGREP_HEADER(uint32_t, inttypes.h, AC_DEFINE(HAVE_INT32_DEFINED))
230 AC_EGREP_HEADER(u_int32_t, sys/types.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED))
231 AC_EGREP_HEADER(u_int32_t, sys/config.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED))
232
233
234 dnl These may not be defined in a non-ANS conformant embedded system.
235 dnl FIXME: Should these case a runtime exception in that case?
236 AC_EGREP_HEADER(mktime, time.h, AC_DEFINE(HAVE_MKTIME))
237 AC_EGREP_HEADER(localtime, time.h, AC_DEFINE(HAVE_LOCALTIME))
238
239 dnl Create the subdirectory for natFileDescriptor.cc, or the attempt
240 dnl to create the link will fail.
241 test -d java || mkdir java
242 test -d java/io || mkdir java/io
243 test -d gnu || mkdir gnu
244 AC_LINK_FILES(java/io/natFile${PLATFORM}.cc, java/io/natFile.cc)
245 AC_LINK_FILES(java/io/natFileDescriptor${PLATFORM}.cc, java/io/natFileDescriptor.cc)
246
247 dnl Likewise for ConcreteProcess.java and natConcreteProcess.cc.
248 test -d java/lang || mkdir java/lang
249 AC_LINK_FILES(java/lang/${PLATFORM}Process.java, java/lang/ConcreteProcess.java)
250 AC_LINK_FILES(java/lang/nat${PLATFORM}Process.cc, java/lang/natConcreteProcess.cc)
251
252 case "${host}" in
253 *mingw*)
254 SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32"
255 ;;
256 *)
257 SYSTEMSPEC=
258 ;;
259 esac
260 AC_SUBST(SYSTEMSPEC)
261
262 LIBGCJTESTSPEC="-L`pwd`/.libs -rpath `pwd`/.libs"
263 AC_SUBST(LIBGCJTESTSPEC)
264
265 AC_ARG_WITH(system-zlib,
266 [ --with-system-zlib use installed libz])
267 ZLIBSPEC=
268 AC_SUBST(ZLIBSPEC)
269 ZLIBTESTSPEC=
270 AC_SUBST(ZLIBTESTSPEC)
271
272 dnl FIXME: this should be _libs on some hosts.
273 libsubdir=.libs
274
275 dnl Allow the GC to be disabled. Can be useful when debugging.
276 AC_MSG_CHECKING([for garbage collector to use])
277 AC_ARG_ENABLE(java-gc,
278 changequote(<<,>>)dnl
279 << --enable-java-gc=TYPE choose garbage collector [boehm]>>,
280 changequote([,])
281 GC=$enableval,
282 GC=boehm)
283 GCLIBS=
284 GCINCS=
285 GCDEPS=
286 GCOBJS=
287 GCSPEC=
288 JC1GCSPEC=
289 GCTESTSPEC=
290 case "$GC" in
291 boehm)
292 AC_MSG_RESULT(boehm)
293 GCDEPS='$(top_builddir)/../boehm-gc/libgcjgc.la'
294 # We include the path to the boehm-gc build directory.
295 # See Makefile.am to understand why.
296 GCLIBS="$GCDEPS -L\$(here)/../boehm-gc/$libsubdir"
297 GCINCS='-I$(top_srcdir)/../boehm-gc/include'
298 GCSPEC='-lgcjgc'
299 JC1GCSPEC='-fuse-boehm-gc'
300 GCTESTSPEC="-L`pwd`/../boehm-gc/.libs -rpath `pwd`/../boehm-gc/.libs"
301 dnl We also want to pick up some cpp flags required when including
302 dnl boehm-config.h. Yuck.
303 GCINCS="$GCINCS `cat ../boehm-gc/boehm-cflags`"
304 GCOBJS=boehm.lo
305 GCHDR=boehm-gc.h
306 dnl The POSIX thread support needs to know this.
307 AC_DEFINE(HAVE_BOEHM_GC)
308 ;;
309 no)
310 AC_MSG_RESULT(none)
311 GCOBJS=nogc.lo
312 GCHDR=no-gc.h
313 ;;
314 *)
315 AC_MSG_ERROR(unrecognized collector \"$GC\")
316 ;;
317 esac
318 AC_SUBST(GCLIBS)
319 AC_SUBST(GCINCS)
320 AC_SUBST(GCDEPS)
321 AC_SUBST(GCOBJS)
322 AC_SUBST(GCSPEC)
323 AC_SUBST(JC1GCSPEC)
324 AC_SUBST(GCTESTSPEC)
325 AC_LINK_FILES(include/$GCHDR, include/java-gc.h)
326
327
328 AC_MSG_CHECKING([for thread model used by GCC])
329 THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
330 AC_MSG_RESULT([$THREADS])
331
332 case "$THREADS" in
333 no | none | single)
334 THREADS=none
335 ;;
336 posix | pthreads)
337 THREADS=posix
338 case "$host" in
339 *-*-linux*)
340 AC_DEFINE(LINUX_THREADS)
341 ;;
342 esac
343 ;;
344 win32)
345 ;;
346 decosf1 | irix | mach | os2 | solaris | dce | vxworks)
347 AC_MSG_ERROR(thread package $THREADS not yet supported)
348 ;;
349 *)
350 AC_MSG_ERROR($THREADS is an unknown thread package)
351 ;;
352 esac
353
354 THREADLIBS=
355 THREADINCS=
356 THREADDEPS=
357 THREADOBJS=
358 THREADH=
359 THREADSPEC=
360 case "$THREADS" in
361 posix)
362 case "$host" in
363 *-*-cygwin*)
364 # Don't set THREADLIBS here. Cygwin doesn't have -lpthread.
365 ;;
366 changequote(<<,>>)
367 *-*-freebsd[1234]*)
368 changequote([,])
369 # Before FreeBSD 5, it didn't have -lpthread (or any library which
370 # merely adds pthread_* functions) but it does have a -pthread switch
371 # which is required at link-time to select -lc_r *instead* of -lc.
372 THREADLIBS=-pthread
373 # Don't set THREADSPEC here as might be expected since -pthread is
374 # not processed when found within a spec file, it must come from
375 # the command line. For now, the user must provide the -pthread
376 # switch to link code compiled with gcj. In future, consider adding
377 # support for weak references to pthread_* functions ala gthr.h API.
378 THREADSPEC='%{!pthread: %eUnder this configuration, the user must provide -pthread when linking.}'
379 ;;
380 *-*-freebsd*)
381 # FreeBSD 5 implements a model much closer to other modern UNIX
382 # which support threads. However, it still does not support
383 # -lpthread.
384 THREADLIBS=-pthread
385 THREADSPEC=-lc_r
386 ;;
387 *)
388 THREADLIBS=-lpthread
389 THREADSPEC=-lpthread
390 ;;
391 esac
392 THREADOBJS=posix-threads.lo
393 THREADH=posix-threads.h
394 # MIT pthreads doesn't seem to have the mutexattr functions.
395 # But for now we don't check for it. We just assume you aren't
396 # using MIT pthreads.
397 AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT)
398
399 # If we're using the Boehm GC, then we happen to know that it
400 # defines _REENTRANT, so we don't bother. Eww.
401 if test "$GC" != boehm; then
402 AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
403 fi
404 AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Required define if using POSIX threads])
405 ;;
406
407 win32)
408 THREADOBJS=win32-threads.lo
409 THREADH=win32-threads.h
410 ;;
411
412 none)
413 THREADOBJS=no-threads.lo
414 THREADH=no-threads.h
415 ;;
416 esac
417 AC_LINK_FILES(include/$THREADH, include/java-threads.h)
418 AC_SUBST(THREADLIBS)
419 AC_SUBST(THREADINCS)
420 AC_SUBST(THREADDEPS)
421 AC_SUBST(THREADOBJS)
422 AC_SUBST(THREADSPEC)
423
424 AC_LINK_FILES(sysdep/$sysdeps_dir, sysdep)
425
426 HASH_SYNC_SPEC=
427 # Hash synchronization is only useful with posix threads right now.
428 if test "$enable_hash_synchronization" = yes && test "$THREADS" = "posix"; then
429 HASH_SYNC_SPEC=-fhash-synchronization
430 AC_DEFINE(JV_HASH_SYNCHRONIZATION, 1, [Define if hash synchronization is in use])
431 fi
432 AC_SUBST(HASH_SYNC_SPEC)
433
434
435 AM_CONDITIONAL(USING_GCC, test "$GCC" = yes)
436
437 CANADIAN=no
438 NULL_TARGET=no
439 NATIVE=yes
440
441 # We're in the tree with gcc, and need to include some of its headers.
442 GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
443
444 if test -n "${with_cross_host}"; then
445 # We are being configured with a cross compiler. AC_REPLACE_FUNCS
446 # may not work correctly, because the compiler may not be able to
447 # link executables.
448
449 # We assume newlib. This lets us hard-code the functions we know
450 # we'll have.
451 AC_DEFINE(HAVE_MEMMOVE)
452 AC_DEFINE(HAVE_MEMCPY)
453 AC_DEFINE(HAVE_STRERROR)
454 AC_DEFINE(HAVE_GMTIME_R)
455 AC_DEFINE(HAVE_LOCALTIME_R)
456 dnl This is only for POSIX threads.
457 AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT)
458 dnl We also assume we are using gcc, which provides alloca.
459 AC_DEFINE(HAVE_ALLOCA)
460
461 dnl Assume we do not have getuid and friends.
462 AC_DEFINE(NO_GETUID)
463
464 ZLIBSPEC=-lzgcj
465 ZLIBTESTSPEC="-L`pwd`/../zlib/.libs -rpath `pwd`/../zlib/.libs"
466
467 # If Canadian cross, then don't pick up tools from the build
468 # directory.
469 if test x"$build" != x"$with_cross_host" && x"$build" != x"$target"; then
470 CANADIAN=yes
471 GCC_UNWIND_INCLUDE=
472 GCJ="${target_alias}-gcj"
473 fi
474 NATIVE=no
475 else
476 AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir)
477 AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd)
478 AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod)
479 AC_CHECK_FUNCS(nl_langinfo setlocale)
480 AC_CHECK_FUNCS(inet_aton inet_addr, break)
481 AC_CHECK_FUNCS(inet_pton uname inet_ntoa)
482 AC_CHECK_FUNCS(backtrace fork execvp pipe sigaction)
483 AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h)
484 AC_CHECK_LIB(dl, dladdr, [
485 AC_DEFINE(HAVE_DLADDR)])
486 AC_CHECK_FILES(/proc/self/exe, [
487 AC_DEFINE(HAVE_PROC_SELF_EXE)])
488
489 AM_ICONV
490 AM_LC_MESSAGES
491 AC_STRUCT_TIMEZONE
492
493 AC_CHECK_FUNCS(gethostbyname_r, [
494 AC_DEFINE(HAVE_GETHOSTBYNAME_R)
495 # There are two different kinds of gethostbyname_r.
496 # We look for the one that returns `int'.
497 # Hopefully this check is robust enough.
498 AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [
499 AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT)])
500
501 case " $GCINCS " in
502 *" -D_REENTRANT "*) ;;
503 *)
504 dnl On DU4.0, gethostbyname_r is only declared with -D_REENTRANT
505 AC_CACHE_CHECK([whether gethostbyname_r declaration requires -D_REENTRANT],
506 [libjava_cv_gethostbyname_r_needs_reentrant],
507 [ AC_LANG_SAVE
508 AC_LANG_CPLUSPLUS
509 AC_TRY_COMPILE([#include <netdb.h>],
510 [gethostbyname_r("", 0, 0);],
511 [libjava_cv_gethostbyname_r_needs_reentrant=no], [dnl
512 CPPFLAGS_SAVE="$CPPFLAGS"
513 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
514 AC_TRY_COMPILE([#include <netdb.h>], [gethostbyname_r("", 0, 0);],
515 [libjava_cv_gethostbyname_r_needs_reentrant=yes],
516 [libjava_cv_gethostbyname_r_needs_reentrant=fail])
517 CPPFLAGS="$CPPFLAGS_SAVE"
518 ])
519 AC_LANG_RESTORE
520 ])
521 if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
522 AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
523 fi
524 ;;
525 esac
526
527 AC_CACHE_CHECK([for struct hostent_data],
528 [libjava_cv_struct_hostent_data], [dnl
529 AC_TRY_COMPILE([
530 #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
531 # define _REENTRANT 1
532 #endif
533 #include <netdb.h>], [struct hostent_data data;],
534 [libjava_cv_struct_hostent_data=yes],
535 [libjava_cv_struct_hostent_data=no])])
536 if test "x$libjava_cv_struct_hostent_data" = xyes; then
537 AC_DEFINE(HAVE_STRUCT_HOSTENT_DATA, 1,
538 [Define if struct hostent_data is defined in netdb.h])
539 fi
540 ])
541
542 # FIXME: libjava source code expects to find a prototype for
543 # gethostbyaddr_r in netdb.h. The outer check ensures that
544 # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
545 # to exist where expected. (The root issue: AC_CHECK_FUNCS assumes C
546 # linkage check is enough, yet C++ code requires proper prototypes.)
547 AC_EGREP_HEADER(gethostbyaddr_r, netdb.h, [
548 AC_CHECK_FUNCS(gethostbyaddr_r, [
549 AC_DEFINE(HAVE_GETHOSTBYADDR_R)
550 # There are two different kinds of gethostbyaddr_r.
551 # We look for the one that returns `int'.
552 # Hopefully this check is robust enough.
553 AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
554 AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT)])])])
555
556 AC_CHECK_FUNCS(gethostname, [
557 AC_DEFINE(HAVE_GETHOSTNAME)
558 AC_EGREP_HEADER(gethostname, unistd.h, [
559 AC_DEFINE(HAVE_GETHOSTNAME_DECL)])])
560
561 # Look for these functions in the thread library, but only bother
562 # if using POSIX threads.
563 if test "$THREADS" = posix; then
564 save_LIBS="$LIBS"
565 LIBS="$LIBS $THREADLIBS"
566 # Some POSIX thread systems don't have pthread_mutexattr_settype.
567 # E.g., Solaris.
568 AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np)
569
570 # Look for sched_yield. Up to Solaris 2.6, it is in libposix4, since
571 # Solaris 7 the name librt is preferred.
572 AC_CHECK_FUNCS(sched_yield, , [
573 AC_CHECK_LIB(rt, sched_yield, [
574 AC_DEFINE(HAVE_SCHED_YIELD)
575 THREADLIBS="$THREADLIBS -lrt"
576 THREADSPEC="$THREADSPEC -lrt"], [
577 AC_CHECK_LIB(posix4, sched_yield, [
578 AC_DEFINE(HAVE_SCHED_YIELD)
579 THREADLIBS="$THREADLIBS -lposix4"
580 THREADSPEC="$THREADSPEC -lposix4"])])])
581 LIBS="$save_LIBS"
582
583 # We can save a little space at runtime if the mutex has m_count
584 # or __m_count. This is a nice hack for Linux.
585 AC_TRY_COMPILE([#include <pthread.h>], [
586 extern pthread_mutex_t *mutex; int q = mutex->m_count;
587 ], AC_DEFINE(PTHREAD_MUTEX_HAVE_M_COUNT), [
588 AC_TRY_COMPILE([#include <pthread.h>], [
589 extern pthread_mutex_t *mutex; int q = mutex->__m_count;
590 ], AC_DEFINE(PTHREAD_MUTEX_HAVE___M_COUNT))])
591 fi
592
593 # We require a way to get the time.
594 time_found=no
595 AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes)
596 if test "$time_found" = no; then
597 AC_MSG_ERROR([no function found to get the time])
598 fi
599
600 AC_CHECK_FUNCS(memmove)
601
602 # We require memcpy.
603 memcpy_found=no
604 AC_CHECK_FUNCS(memcpy, memcpy_found=yes)
605 if test "$memcpy_found" = no; then
606 AC_MSG_ERROR([memcpy is required])
607 fi
608
609 AC_CHECK_LIB(dl, dlopen, [
610 AC_DEFINE(HAVE_DLOPEN, 1, [Define if dlopen is available])])
611
612 # Some library-finding code we stole from Tcl.
613 #--------------------------------------------------------------------
614 # Check for the existence of the -lsocket and -lnsl libraries.
615 # The order here is important, so that they end up in the right
616 # order in the command line generated by make. Here are some
617 # special considerations:
618 # 1. Use "connect" and "accept" to check for -lsocket, and
619 # "gethostbyname" to check for -lnsl.
620 # 2. Use each function name only once: can't redo a check because
621 # autoconf caches the results of the last check and won't redo it.
622 # 3. Use -lnsl and -lsocket only if they supply procedures that
623 # aren't already present in the normal libraries. This is because
624 # IRIX 5.2 has libraries, but they aren't needed and they're
625 # bogus: they goof up name resolution if used.
626 # 4. On some SVR4 systems, can't use -lsocket without -lnsl too.
627 # To get around this problem, check for both libraries together
628 # if -lsocket doesn't work by itself.
629 #--------------------------------------------------------------------
630
631 AC_CACHE_CHECK([for socket libraries], gcj_cv_lib_sockets,
632 [gcj_cv_lib_sockets=
633 gcj_checkBoth=0
634 unset ac_cv_func_connect
635 AC_CHECK_FUNC(connect, gcj_checkSocket=0, gcj_checkSocket=1)
636 if test "$gcj_checkSocket" = 1; then
637 unset ac_cv_func_connect
638 AC_CHECK_LIB(socket, main, gcj_cv_lib_sockets="-lsocket",
639 gcj_checkBoth=1)
640 fi
641 if test "$gcj_checkBoth" = 1; then
642 gcj_oldLibs=$LIBS
643 LIBS="$LIBS -lsocket -lnsl"
644 unset ac_cv_func_accept
645 AC_CHECK_FUNC(accept,
646 [gcj_checkNsl=0
647 gcj_cv_lib_sockets="-lsocket -lnsl"])
648 unset ac_cv_func_accept
649 LIBS=$gcj_oldLibs
650 fi
651 unset ac_cv_func_gethostbyname
652 gcj_oldLibs=$LIBS
653 LIBS="$LIBS $gcj_cv_lib_sockets"
654 AC_CHECK_FUNC(gethostbyname, ,
655 [AC_CHECK_LIB(nsl, main,
656 [gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"])])
657 unset ac_cv_func_gethostbyname
658 LIBS=$gcj_oldLIBS
659 ])
660 SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
661
662 if test "$with_system_zlib" = yes; then
663 AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=-lzgcj)
664 else
665 ZLIBSPEC=-lzgcj
666 ZLIBTESTSPEC="-L`pwd`/../zlib/.libs -rpath `pwd`/../zlib/.libs"
667 fi
668
669 # On Solaris, and maybe other architectures, the Boehm collector
670 # requires -ldl.
671 if test "$GC" = boehm; then
672 AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl")
673 fi
674
675 if test -z "${with_multisubdir}"; then
676 builddotdot=.
677 else
678 changequote(<<,>>)
679 builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
680 changequote([,])
681 fi
682 if test -x "${builddotdot}/../../gcc/gcj"; then
683 dir="`cd ${builddotdot}/../../gcc && pwd`"
684 GCJ="$dir/gcj -B`pwd`/ -B$dir/"
685 else
686 CANADIAN=yes
687 NULL_TARGET=yes
688 GCJ="gcj -B`pwd`/"
689 fi
690 fi
691
692 # Create it, so that compile/link tests don't fail
693 test -f libgcj.spec || touch libgcj.spec
694
695 # We must search the source tree for java.lang, since we still don't
696 # have libgcj.jar nor java/lang/*.class
697 GCJ_SAVE_CPPFLAGS=$CPPFLAGS
698 CPPFLAGS="$CPPFLAGS -I`pwd` -I`cd $srcdir && pwd`"
699
700 # Since some classes depend on this one, we need its source available
701 # before we can do any GCJ compilation test :-(
702 if test ! -f gnu/classpath/Configuration.java; then
703 test -d gnu || mkdir gnu
704 test -d gnu/classpath || mkdir gnu/classpath
705 sed 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \
706 < $srcdir/gnu/classpath/Configuration.java.in \
707 > gnu/classpath/Configuration.java
708 # We do not want to redirect the output of the grep below to /dev/null,
709 # but we add /dev/null to the input list so that grep will print the
710 # filename of Configuration.java in case it finds any matches.
711 if grep @ gnu/classpath/Configuration.java /dev/null; then
712 AC_MSG_ERROR([configure.in is missing the substitutions above])
713 fi
714 fi
715
716 LT_AC_PROG_GCJ
717
718 CPPFLAGS=$GCJ_SAVE_CPPFLAGS
719
720 AC_COMPILE_CHECK_SIZEOF(void *)
721
722 ZLIBS=
723 ZDEPS=
724 ZINCS=
725 if test "x$ZLIBSPEC" = "x-lzgcj"; then
726 # We include the path to the zlib build directory.
727 # See Makefile.am to understand why.
728 ZDEPS='$(top_builddir)/../zlib/libzgcj.la'
729 ZLIBS="$ZDEPS -L\$(here)/../zlib/$libsubdir"
730 ZINCS='-I$(top_srcdir)/../zlib'
731 else
732 ZLIBS="$ZLIBSPEC"
733 fi
734 AC_SUBST(ZLIBS)
735 AC_SUBST(ZDEPS)
736 AC_SUBST(ZINCS)
737 AC_SUBST(DIVIDESPEC)
738 AC_SUBST(EXCEPTIONSPEC)
739
740 AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes)
741 AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes)
742 AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes)
743 AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host")
744 AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
745 AC_SUBST(GCC_UNWIND_INCLUDE)
746
747 AC_SUBST(AM_RUNTESTFLAGS)
748
749 dnl Work around a g++ bug. Reported to gcc-bugs@gcc.gnu.org on Jan 22, 2000.
750 AC_MSG_CHECKING([for g++ -ffloat-store bug])
751 save_CFLAGS="$CFLAGS"
752 CFLAGS="-x c++ -O2 -ffloat-store"
753 AC_TRY_COMPILE([#include <math.h>], ,
754 [AC_MSG_RESULT(no)],
755 [AC_DEFINE(__NO_MATH_INLINES)
756 AC_MSG_RESULT(yes)])
757 CFLAGS="$save_CFLAGS"
758
759 dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
760 dnl On that system, sys/ioctl.h will not include sys/filio.h unless
761 dnl BSD_COMP is defined; just including sys/filio.h is simpler.
762 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)
763 dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
764 dnl for now. If you change this, you also must update natFile.cc.
765 AC_CHECK_HEADERS(dirent.h)
766 AC_CHECK_HEADERS(inttypes.h, [
767 AC_DEFINE(HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
768 AC_DEFINE(JV_HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
769 ])
770 AC_HEADER_SYS_WAIT
771
772 AC_CHECK_TYPE([ssize_t], [int])
773
774 AC_MSG_CHECKING([for in_addr_t])
775 AC_TRY_COMPILE([#include <sys/types.h>
776 #if STDC_HEADERS
777 #include <stdlib.h>
778 #include <stddef.h>
779 #endif
780 #if HAVE_NETINET_IN_H
781 #include <netinet/in.h>
782 #endif], [in_addr_t foo;],
783 [AC_DEFINE([HAVE_IN_ADDR_T])
784 AC_MSG_RESULT(yes)],
785 [AC_MSG_RESULT(no)])
786
787 AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h])
788 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;],
789 [AC_DEFINE(HAVE_STRUCT_IP_MREQ)
790 AC_MSG_RESULT(yes)],
791 [AC_MSG_RESULT(no)])
792
793 AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
794 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
795 [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ)
796 AC_MSG_RESULT(yes)],
797 [AC_MSG_RESULT(no)])
798
799 AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
800 AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
801 [AC_DEFINE(HAVE_INET6)
802 AC_MSG_RESULT(yes)],
803 [AC_MSG_RESULT(no)])
804
805 AC_MSG_CHECKING([for socklen_t in sys/socket.h])
806 AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
807 #include <sys/types.h>
808 #include <sys/socket.h>], [socklen_t x = 5;],
809 [AC_DEFINE(HAVE_SOCKLEN_T)
810 AC_MSG_RESULT(yes)],
811 [AC_MSG_RESULT(no)])
812
813 AC_MSG_CHECKING([for tm_gmtoff in struct tm])
814 AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
815 [AC_DEFINE(STRUCT_TM_HAS_GMTOFF)
816 AC_MSG_RESULT(yes)],
817 [AC_MSG_RESULT(no)
818 AC_MSG_CHECKING([for global timezone variable])
819 dnl FIXME: we don't want a link check here because that won't work
820 dnl when cross-compiling. So instead we make an assumption that
821 dnl the header file will mention timezone if it exists.
822 AC_TRY_COMPILE([#include <time.h>], [long z2 = timezone;],
823 [AC_DEFINE(HAVE_TIMEZONE)
824 AC_MSG_RESULT(yes)],
825 [AC_MSG_RESULT(no)])])
826
827 AC_FUNC_ALLOCA
828
829 AC_CHECK_PROGS(PERL, perl, false)
830
831 SYSDEP_SOURCES=
832
833 case "${host}" in
834 i?86-*-linux*)
835 SIGNAL_HANDLER=include/i386-signal.h
836 ;;
837 sparc-sun-solaris*)
838 SIGNAL_HANDLER=include/sparc-signal.h
839 ;;
840 # ia64-*)
841 # SYSDEP_SOURCES=sysdep/ia64.c
842 # test -d sysdep || mkdir sysdep
843 # ;;
844 powerpc-*-linux*)
845 SIGNAL_HANDLER=include/dwarf2-signal.h
846 ;;
847 alpha*-*-linux*)
848 SIGNAL_HANDLER=include/dwarf2-signal.h
849 ;;
850 *mingw*)
851 SIGNAL_HANDLER=include/win32-signal.h
852 ;;
853 *)
854 SIGNAL_HANDLER=include/default-signal.h
855 ;;
856 esac
857
858 # If we're using sjlj exceptions, forget what we just learned.
859 if test "$enable_sjlj_exceptions" = yes; then
860 SIGNAL_HANDLER=include/default-signal.h
861 fi
862
863 AC_SUBST(SYSDEP_SOURCES)
864
865 AC_LINK_FILES($SIGNAL_HANDLER, include/java-signal.h)
866
867 if test "${multilib}" = "yes"; then
868 multilib_arg="--enable-multilib"
869 else
870 multilib_arg=
871 fi
872
873 AC_PATH_XTRA
874
875 dnl Determine which AWT peer libraries to build
876 AC_ARG_ENABLE(java-awt,
877 [ --enable-java-awt list of AWT peer implementations to be built])
878
879 peerlibs="`echo ${enable_java_awt} | tr ',' ' '`"
880 use_xlib_awt=""
881 use_gtk_awt=""
882
883 for peer in $peerlibs ; do
884 case $peer in
885 xlib)
886 if [test "$no_x" = yes]; then
887 echo "*** xlib peers requested but no X library available" 1>&2
888 exit 1
889 else
890 use_xlib_awt="yes"
891 fi
892 ;;
893 gtk)
894 # Nothing, yet...
895 ;;
896 no)
897 use_xlib_awt=
898 use_gtk_awt=
899 break
900 ;;
901 *)
902 echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2
903 exit 1
904 esac
905 done
906
907 AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes)
908 AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes)
909
910
911 here=`pwd`
912 AC_SUBST(here)
913
914 # We get this from the environment.
915 AC_SUBST(GCJFLAGS)
916
917 AC_OUTPUT(Makefile libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile,
918 [# Only add multilib support code if we just rebuilt top-level Makefile.
919 case " $CONFIG_FILES " in
920 *" Makefile "*)
921 ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
922 ;;
923 esac
924
925 # Make subdirectories and `.d' files. Look in both srcdir and
926 # builddir for the .java files.
927 h=`pwd`
928 : > deps.mk
929 ( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' \) -print) ;
930 find . \( -name '*.java' -o -name '*.cc' \) -print) | \
931 fgrep -v testsuite | \
932 sed -e 's/\.java/.d/'\;'s/\.cc/.d/' | \
933 while read f; do
934 echo "include $f" >> deps.mk
935 test -f $f || {
936 changequote(<<,>>)
937 d=`echo $f | sed -e 's,/[^/]*$,,'`
938 changequote([,])
939 if test ! -d $d; then
940 $libgcj_basedir/../mkinstalldirs $d
941 fi;
942 echo > $f
943 }
944 done
945 ],
946 srcdir=${srcdir}
947 host=${host}
948 target=${target}
949 with_multisubdir=${with_multisubdir}
950 ac_configure_args="${multilib_arg} ${ac_configure_args}"
951 CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
952 libgcj_basedir=${libgcj_basedir}
953 CC="${CC}"
954 CXX="${CXX}"
955 )