OSDN Git Service

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