* opts.sh (var_args): Fix regexp.
[gcc.git] / libjava / configure.in
1 dnl Process this with autoconf to create configure
2 AC_PREREQ(2.13)
3 AC_INIT(java/lang/System.java)
4
5 # This works around the fact that libtool configuration may change LD
6 # for this particular configuration, but some shells, instead of
7 # keeping the changes in LD private, export them just because LD is
8 # exported.
9 ORIGINAL_LD_FOR_MULTILIBS=$LD
10
11 AC_PROG_LN_S
12
13 dnl We use these options to decide which functions to include.
14 AC_ARG_WITH(target-subdir,
15 [ --with-target-subdir=SUBDIR
16 configuring in a subdirectory])
17 AC_ARG_WITH(cross-host,
18 [ --with-cross-host=HOST configuring with a cross compiler])
19
20 AC_ARG_WITH(newlib,
21 [ --with-newlib Configuring with newlib])
22
23 LIBGCJ_CONFIGURE(.)
24
25 AM_CONFIG_HEADER(include/config.h gcj/libgcj-config.h)
26
27 # Only use libltdl for non-newlib builds.
28 if test "x${with_newlib}" = "x" || test "x${with_newlib}" = "xno"; then
29 AC_LIBLTDL_CONVENIENCE
30 AC_LIBTOOL_DLOPEN
31 DIRLTDL=libltdl
32 AC_DEFINE(USE_LTDL, 1, [Define if libltdl is in use.])
33 # Sigh. Libtool's macro doesn't do the right thing.
34 INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL"
35 # FIXME: this is a hack.
36 sub_auxdir="`cd $ac_aux_dir && ${PWDCMD-pwd}`"
37 ac_configure_args="$ac_configure_args --with-auxdir=$sub_auxdir"
38 fi
39 AC_SUBST(INCLTDL)
40 AC_SUBST(LIBLTDL)
41 AC_SUBST(DIRLTDL)
42 AM_PROG_LIBTOOL
43 AC_CONFIG_SUBDIRS($DIRLTDL)
44
45 if test -z "$with_target_subdir" || test "$with_target_subdir" = "."; then
46 COMPPATH=.
47 else
48 COMPPATH=..
49 fi
50 AC_SUBST(COMPPATH)
51
52 dnl The -no-testsuite modules omit the test subdir.
53 AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)
54
55 dnl Should the runtime set system properties by examining the
56 dnl environment variable GCJ_PROPERTIES?
57 AC_ARG_ENABLE(getenv-properties,
58 [ --disable-getenv-properties
59 don't set system properties from GCJ_PROPERTIES])
60
61 dnl Whether GCJ_PROPERTIES is used depends on the target.
62 if test -z "$enable_getenv_properties"; then
63 enable_getenv_properties=${enable_getenv_properties_default-yes}
64 fi
65 if test "$enable_getenv_properties" = no; then
66 AC_DEFINE(DISABLE_GETENV_PROPERTIES, 1,
67 [Define if system properties shouldn't be read from getenv("GCJ_PROPERTIES").])
68 fi
69
70 dnl Whether we should use arguments to main()
71 if test -z "$enable_main_args"; then
72 enable_main_args=${enable_main_args_default-yes}
73 fi
74 if test "$enable_main_args" = no; then
75 AC_DEFINE(DISABLE_MAIN_ARGS, 1, [Define if we should ignore arguments to main().])
76 fi
77
78
79 dnl Should we use hashtable-based synchronization?
80 dnl Currently works only for Linux X86/ia64
81 dnl Typically faster and more space-efficient
82 AC_ARG_ENABLE(hash-synchronization,
83 [ --enable-hash-synchronization
84 use global hash table for monitor locks])
85
86 if test -z "$enable_hash_synchronization"; then
87 enable_hash_synchronization=$enable_hash_synchronization_default
88 fi
89
90 # Do we allow intermodule optimizations (i.e. compiling many files at once)?
91 AC_ARG_ENABLE(libgcj-multifile,
92 [ --enable-libgcj-multifile
93 allow compilation of several files at once],
94 [case "${enableval}" in
95 yes) enable_libgcj_multifile=yes ;;
96 no) enable_libgcj_multifile=no ;;
97 *) AC_MSG_ERROR(bad value ${enableval} for --enable-libgcj-multifile) ;;
98 esac],[enable_libgcj_multifile=no])
99 AM_CONDITIONAL(ONESTEP, test "$enable_libgcj_multifile" = yes)
100
101 # What is the native OS API for MinGW?
102 AC_ARG_WITH(win32-nlsapi,
103 changequote(<<,>>)dnl
104 << --with-win32-nlsapi=ansi, unicows or unicode
105 native MinGW libgcj Win32 OS API [ansi]>>,
106 changequote([,])
107 [case "${withval}" in
108 ansi) with_win32_nlsapi=ansi ;;
109 unicows) with_win32_nlsapi=unicows ;;
110 unicode) with_win32_nlsapi=unicode ;;
111 *) AC_MSG_ERROR(Bad value ${withval} for --with-win32-nlsapi.) ;;
112 esac],[with_win32_nlsapi=ansi])
113
114 case "${with_win32_nlsapi}" in
115 unicows | unicode)
116 AC_DEFINE(MINGW_LIBGCJ_UNICODE, 1,
117 [Define if MinGW libgcj uses the Windows UNICODE OS API.])
118 ;;
119 esac
120
121 dnl configure.host sets slow_pthread_self if the synchronization code should
122 dnl try to avoid pthread_self calls by caching thread IDs in a hashtable.
123 if test "${slow_pthread_self}" = "yes"; then
124 AC_DEFINE(SLOW_PTHREAD_SELF, 1,
125 [Define if if the synchronization code should try to avoid pthread_self calls by caching thread IDs in a hashtable.])
126 fi
127
128
129 dnl See if the user has requested runtime debugging.
130 LIBGCJDEBUG="false"
131 AC_SUBST(LIBGCJDEBUG)
132 AC_ARG_ENABLE(libgcj-debug,
133 [ --enable-libgcj-debug enable runtime debugging code],
134 if test "$enable_libgcj_debug" = yes; then
135 AC_DEFINE(DEBUG, 1, [Define this if you want runtime debugging enabled.])
136 LIBGCJDEBUG="true"
137 fi)
138
139 dnl See if the user has the interpreter included.
140 AC_ARG_ENABLE(interpreter,
141 [ --enable-interpreter enable interpreter],
142 if test "$enable_interpreter" = yes; then
143 # This can also be set in configure.host.
144 libgcj_interpreter=yes
145 elif test "$enable_interpreter" = no; then
146 libgcj_interpreter=no
147 fi)
148
149 if test "$libgcj_interpreter" = yes; then
150 AC_DEFINE(INTERPRETER, 1, [Define if you want a bytecode interpreter.])
151 fi
152 INTERPRETER="$libgcj_interpreter"
153 AC_SUBST(INTERPRETER)
154
155 AC_MSG_CHECKING([for exception model to use])
156 AC_LANG_SAVE
157 AC_LANG_CPLUSPLUS
158 AC_ARG_ENABLE(sjlj-exceptions,
159 [ --enable-sjlj-exceptions force use of builtin_setjmp for exceptions],
160 [:],
161 [dnl Botheration. Now we've got to detect the exception model.
162 dnl Link tests against libgcc.a are problematic since -- at least
163 dnl as of this writing -- we've not been given proper -L bits for
164 dnl single-tree newlib and libgloss.
165 dnl
166 dnl This is what AC_TRY_COMPILE would do if it didn't delete the
167 dnl conftest files before we got a change to grep them first.
168 cat > conftest.$ac_ext << EOF
169 [#]line __oline__ "configure"
170 struct S { ~S(); };
171 void bar();
172 void foo()
173 {
174 S s;
175 bar();
176 }
177 EOF
178 old_CXXFLAGS="$CXXFLAGS"
179 CXXFLAGS=-S
180 if AC_TRY_EVAL(ac_compile); then
181 if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
182 enable_sjlj_exceptions=yes
183 elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
184 enable_sjlj_exceptions=no
185 fi
186 fi
187 CXXFLAGS="$old_CXXFLAGS"
188 rm -f conftest*])
189 if test x$enable_sjlj_exceptions = xyes; then
190 AC_DEFINE(SJLJ_EXCEPTIONS, 1,
191 [Define if the compiler is configured for setjmp/longjmp exceptions.])
192 ac_exception_model_name=sjlj
193 elif test x$enable_sjlj_exceptions = xno; then
194 ac_exception_model_name="call frame"
195 else
196 AC_MSG_ERROR([unable to detect exception model])
197 fi
198 AC_LANG_RESTORE
199 AC_MSG_RESULT($ac_exception_model_name)
200
201 # If we are non using SJLJ exceptions, and this host does not have support
202 # for unwinding from a signal handler, enable checked dereferences and divides.
203 if test $can_unwind_signal = no && test $enable_sjlj_exceptions = no; then
204 CHECKREFSPEC=-fcheck-references
205 DIVIDESPEC=-fuse-divide-subroutine
206 EXCEPTIONSPEC=
207 fi
208
209 dnl See if the user wants to disable java.net. This is the mildly
210 dnl ugly way that we admit that target-side configuration sucks.
211 AC_ARG_ENABLE(java-net,
212 [ --disable-java-net disable java.net])
213
214 dnl Whether java.net is built by default can depend on the target.
215 if test -z "$enable_java_net"; then
216 enable_java_net=${enable_java_net_default-yes}
217 fi
218 if test "$enable_java_net" = no; then
219 AC_DEFINE(DISABLE_JAVA_NET, 1, [Define if java.net native functions should be stubbed out.])
220 fi
221
222 dnl See if the user wants to configure without libffi. Some
223 dnl architectures don't support it, and default values are set in
224 dnl configure.host.
225 AC_ARG_WITH(libffi,
226 [ --without-libffi don't use libffi],,with_libffi=${with_libffi_default-yes})
227
228 LIBFFI=
229 LIBFFIINCS=
230 if test "$with_libffi" != no; then
231 AC_DEFINE(USE_LIBFFI, 1, [Define if we're to use libffi.])
232 LIBFFI=../libffi/libffi_convenience.la
233 LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include'
234 fi
235 AC_SUBST(LIBFFI)
236 AC_SUBST(LIBFFIINCS)
237
238 dnl See if the user wants to disable JVMPI support.
239 AC_ARG_ENABLE(jvmpi,
240 [ --disable-jvmpi disable JVMPI support])
241
242 if test "$enable_jvmpi" != no; then
243 AC_DEFINE(ENABLE_JVMPI, 1, [Define if you are using JVMPI.])
244 fi
245
246 dnl If the target is an eCos system, use the appropriate eCos
247 dnl I/O routines.
248 dnl FIXME: this should not be a local option but a global target
249 dnl system; at present there is no eCos target.
250 TARGET_ECOS=${PROCESS-"no"}
251 AC_ARG_WITH(ecos,
252 [ --with-ecos enable runtime eCos target support],
253 TARGET_ECOS="$with_ecos"
254 )
255
256 EXTRA_CC_FILES=
257 AC_SUBST(EXTRA_CC_FILES)
258
259 PLATFORMOBJS=
260 case "$TARGET_ECOS" in
261 no) case "$host" in
262 *mingw*)
263 PLATFORM=Win32
264 PLATFORMNET=Win32
265 PLATFORMOBJS=win32.lo
266 PLATFORMH=win32.h
267 CHECK_FOR_BROKEN_MINGW_LD
268 ;;
269 *)
270 PLATFORM=Posix
271 PLATFORMNET=Posix
272 PLATFORMOBJS=posix.lo
273 PLATFORMH=posix.h
274 ;;
275 esac
276 ;;
277 *)
278 PLATFORM=Ecos
279 PLATFORMNET=NoNet
280 AC_DEFINE(ECOS, 1, [Define if you're running eCos.])
281 PLATFORMOBJS=posix.lo
282 PLATFORMH=posix.h
283 ;;
284 esac
285 AC_SUBST(PLATFORMOBJS)
286 AC_LINK_FILES(include/$PLATFORMH, include/platform.h)
287
288 AC_EGREP_HEADER(uint32_t, stdint.h, AC_DEFINE(HAVE_INT32_DEFINED, 1,
289 [Define if you have int32_t and uint32_t.]))
290 AC_EGREP_HEADER(uint32_t, inttypes.h, AC_DEFINE(HAVE_INT32_DEFINED, 1,
291 [Define if you have int32_t and uint32_t.]))
292 AC_EGREP_HEADER(u_int32_t, sys/types.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1,
293 [Define if you have u_int32_t]))
294 AC_EGREP_HEADER(u_int32_t, sys/config.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1,
295 [Define if you have u_int32_t]))
296
297
298 dnl These may not be defined in a non-ANS conformant embedded system.
299 dnl FIXME: Should these case a runtime exception in that case?
300 AC_EGREP_HEADER(mktime, time.h, AC_DEFINE(HAVE_MKTIME, 1,
301 [Define is you have 'mktime' in <time.h>]))
302 AC_EGREP_HEADER(localtime, time.h, AC_DEFINE(HAVE_LOCALTIME, 1,
303 [Define is you have 'localtime' in <time.h>]))
304
305 dnl Create the subdirectory for natFile.cc, or the attempt
306 dnl to create the link will fail.
307 test -d java || mkdir java
308 test -d java/io || mkdir java/io
309 test -d gnu || mkdir gnu
310 AC_LINK_FILES(java/io/natFile${FILE-${PLATFORM}}.cc, java/io/natFile.cc)
311
312 dnl Likewise for ConcreteProcess.java and natConcreteProcess.cc.
313 test -d java/lang || mkdir java/lang
314 AC_LINK_FILES(java/lang/${PLATFORM}Process.java, java/lang/ConcreteProcess.java)
315 AC_LINK_FILES(java/lang/nat${PLATFORM}Process.cc, java/lang/natConcreteProcess.cc)
316
317 dnl Likewise for natInetAddress.cc and natNetworkInterface.cc.
318 test -d java/net || mkdir java/net
319 AC_LINK_FILES(java/net/natInetAddress${PLATFORMNET}.cc, java/net/natInetAddress.cc)
320 AC_LINK_FILES(java/net/natNetworkInterface${PLATFORMNET}.cc, java/net/natNetworkInterface.cc)
321
322 dnl Likewise for natPlainSocketImpl.cc and natPlainDatagramSocketImpl.cc.
323 test -d gnu/java || mkdir gnu/java
324 test -d gnu/java/net || mkdir gnu/java/net
325 AC_LINK_FILES(gnu/java/net/natPlainSocketImpl${PLATFORMNET}.cc, gnu/java/net/natPlainSocketImpl.cc)
326 AC_LINK_FILES(gnu/java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc, gnu/java/net/natPlainDatagramSocketImpl.cc)
327
328 dnl Likewise for natPipeImpl.cc and natSelectorImpl.cc.
329 test -d gnu/java/nio || mkdir gnu/java/nio
330 AC_LINK_FILES(gnu/java/nio/natPipeImpl${PLATFORM}.cc, gnu/java/nio/natPipeImpl.cc)
331 AC_LINK_FILES(gnu/java/nio/natSelectorImpl${PLATFORM}.cc, gnu/java/nio/natSelectorImpl.cc)
332 test -d gnu/java/nio/channels || mkdir gnu/java/nio/channels
333 AC_LINK_FILES(gnu/java/nio/channels/natFileChannel${FILE-${PLATFORM}}.cc, gnu/java/nio/channels/natFileChannelImpl.cc)
334
335 case "${host}" in
336 *mingw*)
337 SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32"
338 if test "${with_win32_nlsapi}" = "unicows"; then
339 SYSTEMSPEC="-lunicows $SYSTEMSPEC"
340 fi
341 ;;
342 *)
343 SYSTEMSPEC=
344 ;;
345 esac
346 AC_SUBST(SYSTEMSPEC)
347
348 LIBGCJTESTSPEC="-L`${PWDCMD-pwd}`/.libs -rpath `${PWDCMD-pwd}`/.libs"
349 AC_SUBST(LIBGCJTESTSPEC)
350
351 AC_ARG_WITH(system-zlib,
352 [ --with-system-zlib use installed libz])
353 ZLIBSPEC=
354 AC_SUBST(ZLIBSPEC)
355 ZLIBTESTSPEC=
356 AC_SUBST(ZLIBTESTSPEC)
357
358 AC_PATH_XTRA
359
360 dnl Determine which AWT peer libraries to build
361 AC_ARG_ENABLE(java-awt,
362 [ --enable-java-awt list of AWT peer implementations to be built])
363
364 peerlibs="`echo ${enable_java_awt} | tr ',' ' '`"
365 use_xlib_awt=""
366 use_gtk_awt=""
367 # The default toolkit to use is the first one specified.
368 TOOLKIT=
369 AC_SUBST(TOOLKIT)
370
371 for peer in $peerlibs ; do
372 case $peer in
373 xlib)
374 if test "$no_x" = yes; then
375 echo "*** xlib peers requested but no X library available" 1>&2
376 exit 1
377 else
378 use_xlib_awt="yes"
379 if test -z "$TOOLKIT"; then
380 TOOLKIT=gnu.awt.xlib.XToolkit
381 fi
382 fi
383 ;;
384 gtk)
385 if test "$no_x" = yes; then
386 echo "*** xlib peers requested but no X library available" 1>&2
387 exit 1
388 else
389 use_gtk_awt=yes
390 if test -z "$TOOLKIT"; then
391 TOOLKIT=gnu.java.awt.peer.gtk.GtkToolkit
392 fi
393 test -d jniinclude || mkdir jniinclude
394 fi
395 ;;
396 no)
397 use_xlib_awt=
398 use_gtk_awt=
399 break
400 ;;
401 *)
402 echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2
403 exit 1
404 esac
405 done
406
407 AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes)
408 AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes)
409
410 dnl determine whether to enable the cairo GTK Graphics2D backend
411 AC_ARG_ENABLE(gtk-cairo, [ --enable-gtk-cairo build the cairo Graphics2D implementation on GTK])
412 AM_CONDITIONAL(GTK_CAIRO, test "x${enable_gtk_cairo}" = xyes)
413 if test "x${enable_gtk_cairo}" = xyes
414 then
415 PKG_CHECK_MODULES(CAIRO, cairo)
416 PKG_CHECK_MODULES(PANGOFT2, pangoft2)
417 fi
418 AC_SUBST(CAIRO_LIBS)
419 AC_SUBST(CAIRO_CFLAGS)
420 AC_SUBST(PANGOFT2_LIBS)
421 AC_SUBST(PANGOFT2_CFLAGS)
422
423 dnl FIXME: this should be _libs on some hosts.
424 libsubdir=.libs
425
426 dnl Allow the GC to be disabled. Can be useful when debugging.
427 AC_MSG_CHECKING([for garbage collector to use])
428 AC_ARG_ENABLE(java-gc,
429 changequote(<<,>>)dnl
430 << --enable-java-gc=TYPE choose garbage collector [boehm]>>,
431 changequote([,])
432 GC=$enableval,
433 GC=boehm)
434 GCLIBS=
435 GCINCS=
436 GCDEPS=
437 GCOBJS=
438 GCSPEC=
439 JC1GCSPEC=
440 GCTESTSPEC=
441 case "$GC" in
442 boehm)
443 AC_MSG_RESULT(boehm)
444 GCLIBS=../boehm-gc/libgcjgc_convenience.la
445 JC1GCSPEC='-fuse-boehm-gc'
446 GCTESTSPEC="-L`${PWDCMD-pwd}`/../boehm-gc/.libs -rpath `${PWDCMD-pwd}`/../boehm-gc/.libs"
447
448 dnl We also want to pick up some cpp flags required when including
449 dnl boehm-config.h. Yuck.
450 GCINCS="`cat ../boehm-gc/boehm-cflags`"
451 GCOBJS=boehm.lo
452 GCHDR=boehm-gc.h
453 dnl The POSIX thread support needs to know this.
454 AC_DEFINE(HAVE_BOEHM_GC, 1, [Define if Boehm GC in use.])
455 ;;
456 no)
457 AC_MSG_RESULT(none)
458 GCOBJS=nogc.lo
459 GCHDR=no-gc.h
460 ;;
461 *)
462 AC_MSG_ERROR(unrecognized collector \"$GC\")
463 ;;
464 esac
465 AC_SUBST(GCLIBS)
466 AC_SUBST(GCINCS)
467 AC_SUBST(GCDEPS)
468 AC_SUBST(GCOBJS)
469 AC_SUBST(GCSPEC)
470 AC_SUBST(JC1GCSPEC)
471 AC_SUBST(GCTESTSPEC)
472 AC_LINK_FILES(include/$GCHDR, include/java-gc.h)
473
474
475 AC_MSG_CHECKING([for thread model used by GCC])
476 THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
477 AC_MSG_RESULT([$THREADS])
478
479 case "$THREADS" in
480 no | none | single)
481 THREADS=none
482 ;;
483 posix | pthreads)
484 THREADS=posix
485 case "$host" in
486 *-*-linux*)
487 AC_DEFINE(LINUX_THREADS, 1, [Define if using POSIX threads on Linux.])
488 ;;
489 esac
490 ;;
491 win32)
492 ;;
493 decosf1 | irix | mach | os2 | solaris | dce | vxworks)
494 AC_MSG_ERROR(thread package $THREADS not yet supported)
495 ;;
496 *)
497 AC_MSG_ERROR($THREADS is an unknown thread package)
498 ;;
499 esac
500
501 THREADCXXFLAGS=
502 THREADLDFLAGS=
503 THREADLIBS=
504 THREADINCS=
505 THREADDEPS=
506 THREADOBJS=
507 THREADH=
508 THREADSPEC=
509 case "$THREADS" in
510 posix)
511 case "$host" in
512 *-*-cygwin*)
513 # Don't set THREADLIBS here. Cygwin doesn't have -lpthread.
514 ;;
515 changequote(<<,>>)
516 *-*-freebsd[1234]*)
517 changequote([,])
518 # Before FreeBSD 5, it didn't have -lpthread (or any library which
519 # merely adds pthread_* functions) but it does have a -pthread switch
520 # which is required at link-time to select -lc_r *instead* of -lc.
521 THREADLDFLAGS=-pthread
522 # Don't set THREADSPEC here as might be expected since -pthread is
523 # not processed when found within a spec file, it must come from
524 # the command line. For now, the user must provide the -pthread
525 # switch to link code compiled with gcj. In future, consider adding
526 # support for weak references to pthread_* functions ala gthr.h API.
527 THREADSPEC='%{!pthread: %eUnder this configuration, the user must provide -pthread when linking.}'
528 ;;
529 *-*-freebsd*)
530 # FreeBSD 5 implements a model much closer to other modern UNIX
531 # which support threads. However, it still does not support
532 # -lpthread.
533 THREADLDFLAGS=-pthread
534 THREADSPEC=-lc_r
535 ;;
536 alpha*-dec-osf*)
537 THREADCXXFLAGS=-pthread
538 # boehm-gc needs some functions from librt, so link that too.
539 THREADLIBS='-lpthread -lrt'
540 THREADSPEC='-lpthread -lrt'
541 ;;
542 *)
543 THREADLIBS=-lpthread
544 THREADSPEC=-lpthread
545 ;;
546 esac
547 THREADOBJS=posix-threads.lo
548 THREADH=posix-threads.h
549 # MIT pthreads doesn't seem to have the mutexattr functions.
550 # But for now we don't check for it. We just assume you aren't
551 # using MIT pthreads.
552 AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT, 1, [Define if using POSIX threads that have the mutexattr functions.])
553
554 # If we're using the Boehm GC, then we happen to know that it
555 # defines _REENTRANT, so we don't bother. Eww.
556 if test "$GC" != boehm; then
557 AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
558 fi
559 AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Required define if using POSIX threads])
560 ;;
561
562 win32)
563 THREADOBJS=win32-threads.lo
564 THREADH=win32-threads.h
565 ;;
566
567 none)
568 THREADOBJS=no-threads.lo
569 THREADH=no-threads.h
570 ;;
571 esac
572 AC_LINK_FILES(include/$THREADH, include/java-threads.h)
573 AC_SUBST(THREADLIBS)
574 AC_SUBST(THREADINCS)
575 AC_SUBST(THREADDEPS)
576 AC_SUBST(THREADOBJS)
577 AC_SUBST(THREADSPEC)
578 AC_SUBST(THREADLDFLAGS)
579 AC_SUBST(THREADCXXFLAGS)
580
581 if test -d sysdep; then true; else mkdir sysdep; fi
582 AC_LINK_FILES(sysdep/$sysdeps_dir/locks.h, sysdep/locks.h)
583
584 HASH_SYNC_SPEC=
585 # Hash synchronization is only useful with posix threads right now.
586 if test "$enable_hash_synchronization" = yes && test "$THREADS" != "none"; then
587 HASH_SYNC_SPEC=-fhash-synchronization
588 AC_DEFINE(JV_HASH_SYNCHRONIZATION, 1, [Define if hash synchronization is in use])
589 fi
590 AC_SUBST(HASH_SYNC_SPEC)
591
592
593 AM_CONDITIONAL(USING_GCC, test "$GCC" = yes)
594
595 CANADIAN=no
596 NULL_TARGET=no
597 NATIVE=yes
598
599 # We're in the tree with gcc, and need to include some of its headers.
600 GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
601
602 # Figure out where generated headers like libgcj-config.h get installed.
603 changequote(,)dnl
604 gcc_version_trigger=${libgcj_basedir}/../gcc/version.c
605 gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
606 gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
607 tool_include_dir='$(libdir)/gcc/$(target_alias)/'${gcc_version}/include
608 changequote([,])dnl
609 AC_SUBST(tool_include_dir)
610 AC_SUBST(gcc_version)
611
612 if test "x${with_newlib}" = "xyes"; then
613 # We are being configured with a cross compiler. AC_REPLACE_FUNCS
614 # may not work correctly, because the compiler may not be able to
615 # link executables.
616
617 # We assume newlib. This lets us hard-code the functions we know
618 # we'll have.
619 AC_DEFINE(HAVE_MEMMOVE, 1, [Define if you have memmove.])
620 AC_DEFINE(HAVE_MEMCPY, 1, [Define if you have memcpy.])
621 AC_DEFINE(HAVE_STRERROR, 1, [Define if you have strerror.])
622 AC_DEFINE(HAVE_TIME, 1, [Define if you have time.])
623 AC_DEFINE(HAVE_GMTIME_R, 1, [Define if you have the 'gmtime_r' function])
624 AC_DEFINE(HAVE_LOCALTIME_R, 1, [Define if you have the 'localtime_r' function.])
625 AC_DEFINE(HAVE_USLEEP_DECL, 1, [Define if usleep is declared in <unistd.h>.])
626 dnl This is only for POSIX threads.
627 AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT, 1, [Define if using POSIX threads that have the mutexattr functions.])
628 dnl We also assume we are using gcc, which provides alloca.
629 AC_DEFINE(HAVE_ALLOCA)
630
631 dnl Assume we do not have getuid and friends.
632 AC_DEFINE(NO_GETUID, 1, [Define if getuid() and friends are missing.])
633 PLATFORMNET=NoNet
634 else
635 AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir)
636 AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd)
637 AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod)
638 AC_CHECK_FUNCS(nl_langinfo setlocale)
639 AC_CHECK_FUNCS(inet_aton inet_addr, break)
640 AC_CHECK_FUNCS(inet_pton uname inet_ntoa)
641 AC_CHECK_FUNCS(fork execvp pipe sigaction ftruncate)
642 AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h)
643 AC_CHECK_FUNC(backtrace, [
644 case "$host" in
645 ia64-*-linux*)
646 # Has broken backtrace()
647 ;;
648 mips*-*-linux*)
649 # Has broken backtrace(), but we supply our own.
650 if test -d sysdep; then true; else mkdir -p sysdep; fi
651 EXTRA_CC_FILES="${EXTRA_CC_FILES} sysdep/dwarf2-backtrace.cc"
652 AC_DEFINE(HAVE_BACKTRACE, 1,
653 [Define if your platform has a working backtrace() function.])
654 ;;
655 *)
656 AC_DEFINE(HAVE_BACKTRACE, 1,
657 [Define if your platform has a working backtrace() function.])
658 ;;
659 esac
660 ], [
661 case "$host" in
662 *mingw*)
663 # Has backtrace() defined in libgcj itself
664 AC_DEFINE(HAVE_BACKTRACE, 1,
665 [Define if your platform has a working backtrace() function.])
666 ;;
667 esac
668 ])
669
670 AC_CHECK_LIB(dl, dladdr, [
671 if test "x${disable_dladdr}" = "xyes"; then
672 #Broken dladdr().
673 true
674 else
675 AC_DEFINE(HAVE_DLADDR, 1, [Define if you have dladdr()])
676 fi
677 ])
678 if test x"$build" = x"$host"; then
679 AC_CHECK_FILES(/proc/self/exe, [
680 AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe])])
681 else
682 case $host in
683 *-linux*)
684 AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe])
685 ;;
686 esac
687 fi
688
689 AM_ICONV
690 AM_LC_MESSAGES
691 AC_STRUCT_TIMEZONE
692
693 AC_CHECK_FUNCS(gethostbyname_r, [
694 AC_DEFINE(HAVE_GETHOSTBYNAME_R, 1,
695 [Define if you have the 'gethostbyname_r' function.])
696 # There are two different kinds of gethostbyname_r.
697 # We look for the one that returns `int'.
698 # Hopefully this check is robust enough.
699 AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [
700 AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT, 1, [Define if gethostbyname_r returns 'int'.])])
701
702 case " $GCINCS " in
703 *" -D_REENTRANT "*) ;;
704 *)
705 dnl On DU4.0, gethostbyname_r is only declared with -D_REENTRANT
706 AC_CACHE_CHECK([whether gethostbyname_r declaration requires -D_REENTRANT],
707 [libjava_cv_gethostbyname_r_needs_reentrant],
708 [ AC_LANG_SAVE
709 AC_LANG_CPLUSPLUS
710 AC_TRY_COMPILE([#include <netdb.h>],
711 [gethostbyname_r("", 0, 0);],
712 [libjava_cv_gethostbyname_r_needs_reentrant=no], [dnl
713 CPPFLAGS_SAVE="$CPPFLAGS"
714 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
715 AC_TRY_COMPILE([#include <netdb.h>], [gethostbyname_r("", 0, 0);],
716 [libjava_cv_gethostbyname_r_needs_reentrant=yes],
717 [libjava_cv_gethostbyname_r_needs_reentrant=fail])
718 CPPFLAGS="$CPPFLAGS_SAVE"
719 ])
720 AC_LANG_RESTORE
721 ])
722 if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
723 AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
724 fi
725 ;;
726 esac
727
728 AC_CACHE_CHECK([for struct hostent_data],
729 [libjava_cv_struct_hostent_data], [dnl
730 AC_TRY_COMPILE([
731 #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
732 # define _REENTRANT 1
733 #endif
734 #include <netdb.h>], [struct hostent_data data;],
735 [libjava_cv_struct_hostent_data=yes],
736 [libjava_cv_struct_hostent_data=no])])
737 if test "x$libjava_cv_struct_hostent_data" = xyes; then
738 AC_DEFINE(HAVE_STRUCT_HOSTENT_DATA, 1,
739 [Define if struct hostent_data is defined in netdb.h])
740 fi
741 ])
742
743 # FIXME: libjava source code expects to find a prototype for
744 # gethostbyaddr_r in netdb.h. The outer check ensures that
745 # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
746 # to exist where expected. (The root issue: AC_CHECK_FUNCS assumes C
747 # linkage check is enough, yet C++ code requires proper prototypes.)
748 AC_EGREP_HEADER(gethostbyaddr_r, netdb.h, [
749 AC_CHECK_FUNCS(gethostbyaddr_r, [
750 AC_DEFINE(HAVE_GETHOSTBYADDR_R, 1,
751 [Define if you have the 'gethostbyaddr_r' function.])
752 # There are two different kinds of gethostbyaddr_r.
753 # We look for the one that returns `int'.
754 # Hopefully this check is robust enough.
755 AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
756 AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT, 1,
757 [Define if gethostbyaddr_r returns 'int'.])])])])
758
759 AC_CHECK_FUNCS(gethostname, [
760 AC_DEFINE(HAVE_GETHOSTNAME, 1,
761 [Define if you have the 'gethostname' function.])
762 AC_EGREP_HEADER(gethostname, unistd.h, [
763 AC_DEFINE(HAVE_GETHOSTNAME_DECL, 1,
764 [Define if gethostname is declared in <unistd.h>.])])])
765
766 AC_CHECK_FUNCS(usleep, [
767 AC_EGREP_HEADER(usleep, unistd.h, [
768 AC_DEFINE(HAVE_USLEEP_DECL, 1,
769 [Define if usleep is declared in <unistd.h>.])])])
770
771 # Look for these functions in the thread library, but only bother
772 # if using POSIX threads.
773 if test "$THREADS" = posix; then
774 save_LIBS="$LIBS"
775 LIBS="$LIBS $THREADLIBS"
776 # Some POSIX thread systems don't have pthread_mutexattr_settype.
777 # E.g., Solaris.
778 AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np)
779
780 # Look for sched_yield. Up to Solaris 2.6, it is in libposix4, since
781 # Solaris 7 the name librt is preferred.
782 AC_CHECK_FUNCS(sched_yield, , [
783 AC_CHECK_LIB(rt, sched_yield, [
784 AC_DEFINE(HAVE_SCHED_YIELD)
785 THREADLIBS="$THREADLIBS -lrt"
786 THREADSPEC="$THREADSPEC -lrt"], [
787 AC_CHECK_LIB(posix4, sched_yield, [
788 AC_DEFINE(HAVE_SCHED_YIELD)
789 THREADLIBS="$THREADLIBS -lposix4"
790 THREADSPEC="$THREADSPEC -lposix4"])])])
791 LIBS="$save_LIBS"
792
793 # We can save a little space at runtime if the mutex has m_count
794 # or __m_count. This is a nice hack for Linux.
795 AC_TRY_COMPILE([#include <pthread.h>], [
796 extern pthread_mutex_t *mutex; int q = mutex->m_count;
797 ], AC_DEFINE(PTHREAD_MUTEX_HAVE_M_COUNT, 1,
798 [Define if pthread_mutex_t has m_count member.]), [
799 AC_TRY_COMPILE([#include <pthread.h>], [
800 extern pthread_mutex_t *mutex; int q = mutex->__m_count;
801 ], AC_DEFINE(PTHREAD_MUTEX_HAVE___M_COUNT, 1,
802 [Define if pthread_mutex_t has __m_count member.]))])
803 fi
804
805 # We require a way to get the time.
806 time_found=no
807 AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes)
808 if test "$time_found" = no; then
809 AC_MSG_ERROR([no function found to get the time])
810 fi
811
812 AC_CHECK_FUNCS(memmove)
813
814 # We require memcpy.
815 memcpy_found=no
816 AC_CHECK_FUNCS(memcpy, memcpy_found=yes)
817 if test "$memcpy_found" = no; then
818 AC_MSG_ERROR([memcpy is required])
819 fi
820
821 AC_CHECK_LIB(dl, dlopen, [
822 AC_DEFINE(HAVE_DLOPEN, 1, [Define if dlopen is available])])
823
824 # Some library-finding code we stole from Tcl.
825 #--------------------------------------------------------------------
826 # Check for the existence of the -lsocket and -lnsl libraries.
827 # The order here is important, so that they end up in the right
828 # order in the command line generated by make. Here are some
829 # special considerations:
830 # 1. Use "connect" and "accept" to check for -lsocket, and
831 # "gethostbyname" to check for -lnsl.
832 # 2. Use each function name only once: can't redo a check because
833 # autoconf caches the results of the last check and won't redo it.
834 # 3. Use -lnsl and -lsocket only if they supply procedures that
835 # aren't already present in the normal libraries. This is because
836 # IRIX 5.2 has libraries, but they aren't needed and they're
837 # bogus: they goof up name resolution if used.
838 # 4. On some SVR4 systems, can't use -lsocket without -lnsl too.
839 # To get around this problem, check for both libraries together
840 # if -lsocket doesn't work by itself.
841 #--------------------------------------------------------------------
842
843 AC_CACHE_CHECK([for socket libraries], gcj_cv_lib_sockets,
844 [gcj_cv_lib_sockets=
845 gcj_checkBoth=0
846 unset ac_cv_func_connect
847 AC_CHECK_FUNC(connect, gcj_checkSocket=0, gcj_checkSocket=1)
848 if test "$gcj_checkSocket" = 1; then
849 unset ac_cv_func_connect
850 AC_CHECK_LIB(socket, main, gcj_cv_lib_sockets="-lsocket",
851 gcj_checkBoth=1)
852 fi
853 if test "$gcj_checkBoth" = 1; then
854 gcj_oldLibs=$LIBS
855 LIBS="$LIBS -lsocket -lnsl"
856 unset ac_cv_func_accept
857 AC_CHECK_FUNC(accept,
858 [gcj_checkNsl=0
859 gcj_cv_lib_sockets="-lsocket -lnsl"])
860 unset ac_cv_func_accept
861 LIBS=$gcj_oldLibs
862 fi
863 unset ac_cv_func_gethostbyname
864 gcj_oldLibs=$LIBS
865 LIBS="$LIBS $gcj_cv_lib_sockets"
866 AC_CHECK_FUNC(gethostbyname, ,
867 [AC_CHECK_LIB(nsl, main,
868 [gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"])])
869 unset ac_cv_func_gethostbyname
870 LIBS=$gcj_oldLIBS
871 ])
872 SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
873
874 if test "$with_system_zlib" = yes; then
875 AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=)
876 fi
877
878 # Test for Gtk stuff, if asked for.
879 if test "$use_gtk_awt" = yes; then
880 PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.2)
881 AC_SUBST(GTK_CFLAGS)
882 AC_SUBST(GTK_LIBS)
883
884 PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.2 gthread-2.0 >= 2.2)
885 AC_SUBST(GLIB_CFLAGS)
886 AC_SUBST(GLIB_LIBS)
887
888 PKG_CHECK_MODULES(LIBART, libart-2.0 >= 2.1)
889 AC_SUBST(LIBART_CFLAGS)
890 AC_SUBST(LIBART_LIBS)
891 fi
892
893 # On Solaris, and maybe other architectures, the Boehm collector
894 # requires -ldl.
895 if test "$GC" = boehm; then
896 AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl")
897 fi
898 fi
899
900 if test -z "${with_multisubdir}"; then
901 builddotdot=.
902 else
903 changequote(<<,>>)
904 builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
905 changequote([,])
906 fi
907
908 # Which gcj do we use?
909 which_gcj=default
910 built_gcc_dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`"
911 if test -n "${with_cross_host}"; then
912 # We are being configured with a cross compiler. We can't
913 # use ac_exeext, because that is for the target platform.
914 NATIVE=no
915 cross_host_exeext=
916 case "${with_cross_host}" in
917 *mingw* | *cygwin*)
918 cross_host_exeext=.exe
919 ;;
920 esac
921 if test -x "${built_gcc_dir}/gcj${cross_host_exeext}"; then
922 if test x"$build_alias" = x"$with_cross_host"; then
923 # Ordinary cross (host!=target and host=build)
924 which_gcj=built
925 else
926 # Canadian cross (host!=target and host!=build)
927 which_gcj=cross
928 fi
929 else
930 which_gcj=cross
931 fi
932 else
933 # We are being configured with a native or crossed-native compiler
934 if test -x "${built_gcc_dir}/gcj${ac_exeext}"; then
935 if test x"$build" = x"$host"; then
936 # True native build (host=target and host=build)
937 which_gcj=built
938 else
939 # Crossed-native build (host=target and host!=build)
940 which_gcj=cross
941 fi
942 else
943 which_gcj=path
944 fi
945 fi
946 case "${which_gcj}" in
947 built)
948 GCJ="$built_gcc_dir/gcj -B`${PWDCMD-pwd}`/ -B$built_gcc_dir/"
949 ;;
950 cross)
951 # See the comment in Makefile.am about CANADIAN being a misnomer
952 CANADIAN=yes
953 NULL_TARGET=no
954 if test "x${with_newlib}" = "xyes"; then
955 # FIXME (comment): Why is this needed?
956 GCC_UNWIND_INCLUDE=
957 GCJ="${target_alias}-gcj"
958 else
959 GCJ="${target_alias}-gcj -B`${PWDCMD-pwd}`/"
960 fi
961 ;;
962 path)
963 # See the comment in Makefile.am about CANADIAN being a misnomer
964 CANADIAN=yes
965 NULL_TARGET=yes
966 GCJ="gcj -B`${PWDCMD-pwd}`/"
967 ;;
968 esac
969
970 # Create it, so that compile/link tests don't fail
971 test -f libgcj.spec || touch libgcj.spec
972
973 # We must search the source tree for java.lang, since we still don't
974 # have libgcj.jar nor java/lang/*.class
975 GCJ_SAVE_CPPFLAGS=$CPPFLAGS
976 CPPFLAGS="$CPPFLAGS -I`${PWDCMD-pwd}` -I`cd $srcdir && ${PWDCMD-pwd}`"
977
978 # Since some classes depend on this one, we need its source available
979 # before we can do any GCJ compilation test :-(
980 if test ! -f gnu/classpath/Configuration.java; then
981 test -d gnu || mkdir gnu
982 test -d gnu/classpath || mkdir gnu/classpath
983 sed -e 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \
984 -e 's,@TOOLKIT@,$TOOLKIT,' \
985 < $srcdir/gnu/classpath/Configuration.java.in \
986 > gnu/classpath/Configuration.java
987 # We do not want to redirect the output of the grep below to /dev/null,
988 # but we add /dev/null to the input list so that grep will print the
989 # filename of Configuration.java in case it finds any matches.
990 if grep @ gnu/classpath/Configuration.java /dev/null; then
991 AC_MSG_ERROR([configure.in is missing the substitutions above])
992 fi
993 fi
994
995 LT_AC_PROG_GCJ
996
997 CPPFLAGS=$GCJ_SAVE_CPPFLAGS
998
999 AC_COMPILE_CHECK_SIZEOF(void *)
1000
1001 ZLIBS=
1002 SYS_ZLIBS=
1003 ZINCS=
1004
1005 if test -z "$ZLIBSPEC"; then
1006 # Use zlib from the GCC tree.
1007 ZINCS='-I$(top_srcdir)/../zlib'
1008 ZLIBS=../zlib/libzgcj_convenience.la
1009 else
1010 # System's zlib.
1011 SYS_ZLIBS="$ZLIBSPEC"
1012 fi
1013 AC_SUBST(ZLIBS)
1014 AC_SUBST(SYS_ZLIBS)
1015 AC_SUBST(ZINCS)
1016 AC_SUBST(DIVIDESPEC)
1017 AC_SUBST(CHECKREFSPEC)
1018 AC_SUBST(EXCEPTIONSPEC)
1019 AC_SUBST(IEEESPEC)
1020
1021 AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes)
1022 AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes)
1023 AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes)
1024 AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
1025 AC_SUBST(GCC_UNWIND_INCLUDE)
1026
1027 if test -n "$with_cross_host" &&
1028 test x"$with_cross_host" != x"no"; then
1029 toolexecdir='$(exec_prefix)/$(target_alias)'
1030 toolexecmainlibdir='$(toolexecdir)/lib'
1031 else
1032 toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
1033 toolexecmainlibdir='$(libdir)'
1034 fi
1035 multi_os_directory=`$CC -print-multi-os-directory`
1036 case $multi_os_directory in
1037 .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
1038 *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
1039 esac
1040 AC_SUBST(toolexecdir)
1041 AC_SUBST(toolexecmainlibdir)
1042 AC_SUBST(toolexeclibdir)
1043
1044 # Determine gcj version number.
1045 changequote(<<,>>)
1046 gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`
1047 changequote([,])
1048 GCJVERSION=$gcjversion
1049 AC_SUBST(GCJVERSION)
1050 AC_DEFINE_UNQUOTED(GCJVERSION, "$GCJVERSION", [Short GCJ version ID])
1051
1052 dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
1053 dnl On that system, sys/ioctl.h will not include sys/filio.h unless
1054 dnl BSD_COMP is defined; just including sys/filio.h is simpler.
1055 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)
1056 dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
1057 dnl for now. If you change this, you also must update natFile.cc.
1058 AC_CHECK_HEADERS(dirent.h)
1059 AC_CHECK_HEADERS(inttypes.h, [
1060 AC_DEFINE(HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
1061 AC_DEFINE(JV_HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
1062 ])
1063 AC_HEADER_SYS_WAIT
1064
1065 AC_CHECK_TYPE([ssize_t], [int])
1066
1067 AC_MSG_CHECKING([for in_addr_t])
1068 AC_TRY_COMPILE([#include <sys/types.h>
1069 #if STDC_HEADERS
1070 #include <stdlib.h>
1071 #include <stddef.h>
1072 #endif
1073 #if HAVE_NETINET_IN_H
1074 #include <netinet/in.h>
1075 #endif], [in_addr_t foo;],
1076 [AC_DEFINE(HAVE_IN_ADDR_T, 1,
1077 [Define to 1 if 'in_addr_t' is defined in sys/types.h or netinet/in.h.])
1078 AC_MSG_RESULT(yes)],
1079 [AC_MSG_RESULT(no)])
1080
1081 AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h])
1082 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;],
1083 [AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1,
1084 [Define if struct ip_mreq is defined in netinet/in.h.])
1085 AC_MSG_RESULT(yes)],
1086 [AC_MSG_RESULT(no)])
1087
1088 AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
1089 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
1090 [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ, 1,
1091 [Define if struct ipv6_mreq is defined in netinet/in.h.])
1092 AC_MSG_RESULT(yes)],
1093 [AC_MSG_RESULT(no)])
1094
1095 AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
1096 AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
1097 [AC_DEFINE(HAVE_INET6, 1,
1098 [Define if inet6 structures are defined in netinet/in.h.])
1099 AC_MSG_RESULT(yes)],
1100 [AC_MSG_RESULT(no)])
1101
1102 AC_MSG_CHECKING([for socklen_t in sys/socket.h])
1103 AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
1104 #include <sys/types.h>
1105 #include <sys/socket.h>], [socklen_t x = 5;],
1106 [AC_DEFINE(HAVE_SOCKLEN_T, 1, [Define it socklen_t typedef is in sys/socket.h.])
1107 AC_MSG_RESULT(yes)],
1108 [AC_MSG_RESULT(no)])
1109
1110 AC_MSG_CHECKING([for tm_gmtoff in struct tm])
1111 AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
1112 [AC_DEFINE(STRUCT_TM_HAS_GMTOFF, 1, [Define if struct tm has tm_gmtoff field.])
1113 AC_MSG_RESULT(yes)],
1114 [AC_MSG_RESULT(no)
1115 AC_MSG_CHECKING([for global timezone variable])
1116 dnl FIXME: we don't want a link check here because that won't work
1117 dnl when cross-compiling. So instead we make an assumption that
1118 dnl the header file will mention timezone if it exists.
1119 dnl Don't find the win32 function timezone
1120 AC_TRY_COMPILE([#include <time.h>], [void i(){long z2 = 2*timezone;}],
1121 [AC_DEFINE(HAVE_TIMEZONE, 1, [Define if global 'timezone' exists.])
1122 AC_MSG_RESULT(yes)],
1123 [AC_MSG_RESULT(no)
1124 AC_MSG_CHECKING([for global _timezone variable])
1125 dnl FIXME: As above, don't want link check
1126 AC_TRY_COMPILE([#include <time.h>], [long z2 = _timezone;],
1127 [AC_DEFINE(HAVE_UNDERSCORE_TIMEZONE, 1,
1128 [Define if your platform has the global _timezone variable.])
1129 AC_MSG_RESULT(yes)],
1130 [AC_MSG_RESULT(no)])])])
1131
1132 AC_FUNC_ALLOCA
1133 AC_FUNC_MMAP
1134
1135 AC_CHECK_PROGS(PERL, perl, false)
1136
1137 SYSDEP_SOURCES=
1138 SIGNAL_HANDLER_AUX=
1139
1140 case "${host}" in
1141 i?86-*-linux*)
1142 SIGNAL_HANDLER=include/i386-signal.h
1143 ;;
1144 sparc*-sun-solaris*)
1145 SIGNAL_HANDLER=include/sparc-signal.h
1146 ;;
1147 # ia64-*)
1148 # SYSDEP_SOURCES=sysdep/ia64.c
1149 # test -d sysdep || mkdir sysdep
1150 # ;;
1151 ia64-*-linux*)
1152 SIGNAL_HANDLER=include/dwarf2-signal.h
1153 ;;
1154 powerpc*-*-linux*)
1155 SIGNAL_HANDLER=include/powerpc-signal.h
1156 ;;
1157 alpha*-*-linux*)
1158 SIGNAL_HANDLER=include/dwarf2-signal.h
1159 ;;
1160 s390*-*-linux*)
1161 SIGNAL_HANDLER=include/s390-signal.h
1162 ;;
1163 x86_64*-*-linux*)
1164 SIGNAL_HANDLER=include/x86_64-signal.h
1165 SIGNAL_HANDLER_AUX=include/i386-signal.h
1166 ;;
1167 sparc*-*-linux*)
1168 SIGNAL_HANDLER=include/dwarf2-signal.h
1169 ;;
1170 sh-*-linux* | sh[[34]]*-*-linux*)
1171 SIGNAL_HANDLER=include/dwarf2-signal.h
1172 ;;
1173 *mingw*)
1174 SIGNAL_HANDLER=include/win32-signal.h
1175 ;;
1176 mips*-*-linux*)
1177 SIGNAL_HANDLER=include/mips-signal.h
1178 ;;
1179 *)
1180 SIGNAL_HANDLER=include/default-signal.h
1181 ;;
1182 esac
1183
1184 # If we're using sjlj exceptions, forget what we just learned.
1185 if test "$enable_sjlj_exceptions" = yes; then
1186 SIGNAL_HANDLER=include/default-signal.h
1187 SIGNAL_HANDLER_AUX=
1188 fi
1189
1190 # Define here any compiler flags that you need in order to make backtrace() work.
1191 BACKTRACESPEC=
1192 case "${host}" in
1193 x86_64*-*-linux*|i?86-*)
1194 BACKTRACESPEC=-fno-omit-frame-pointer
1195 ;;
1196 esac
1197 AC_SUBST(BACKTRACESPEC)
1198
1199 AC_SUBST(SYSDEP_SOURCES)
1200
1201 if test -z "$SIGNAL_HANDLER_AUX"; then
1202 SIGNAL_HANDLER_AUX=$SIGNAL_HANDLER
1203 fi
1204
1205 AC_LINK_FILES($SIGNAL_HANDLER $SIGNAL_HANDLER_AUX,
1206 include/java-signal.h include/java-signal-aux.h)
1207
1208 if test "${multilib}" = "yes"; then
1209 multilib_arg="--enable-multilib"
1210 else
1211 multilib_arg=
1212 fi
1213
1214
1215
1216 here=`${PWDCMD-pwd}`
1217 AC_SUBST(here)
1218
1219 # We get this from the environment.
1220 AC_SUBST(GCJFLAGS)
1221
1222 AC_OUTPUT(Makefile libgcj.pc libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile,
1223 [# Only add multilib support code if we just rebuilt top-level Makefile.
1224 case " $CONFIG_FILES " in
1225 *" Makefile "*)
1226 LD="${ORIGINAL_LD_FOR_MULTILIBS}"
1227 ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
1228 ;;
1229 esac
1230
1231 # Make subdirectories and `.d' files. Look in both srcdir and
1232 # builddir for the .java files.
1233 h=`${PWDCMD-pwd}`
1234 : > deps.mk
1235 ( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) ;
1236 find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) | \
1237 fgrep -v testsuite | \
1238 sed -e 's/\.java/.d/'\;'s/\.cc/.d/'\;'s/\.c/.d/' | \
1239 while read f; do
1240 echo "include $f" >> deps.mk
1241 test -f $f || {
1242 changequote(<<,>>)
1243 d=`echo $f | sed -e 's,/[^/]*$,,'`
1244 changequote([,])
1245 if test ! -d $d; then
1246 $libgcj_basedir/../mkinstalldirs $d
1247 fi;
1248 echo > $f
1249 }
1250 done
1251 ],
1252 srcdir=${srcdir}
1253 host=${host}
1254 target=${target}
1255 with_multisubdir=${with_multisubdir}
1256 ac_configure_args="${multilib_arg} ${ac_configure_args}"
1257 CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
1258 libgcj_basedir=${libgcj_basedir}
1259 CC="${CC}"
1260 CXX="${CXX}"
1261 ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
1262 )