OSDN Git Service

* configure.in(ZIP, GCJH): Remove white space around '=' in variable
[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 _GCC_TOPLEV_NONCANONICAL_BUILD
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 # We're in the tree with gcc, and need to include some of its headers.
741 GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
742
743 # Figure out where generated headers like libgcj-config.h get installed.
744 changequote(,)dnl
745 gcc_version_trigger=${libgcj_basedir}/../gcc/version.c
746 gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
747 gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
748 tool_include_dir='$(libdir)/gcc/$(target_noncanonical)/'${gcc_version}/include
749 changequote([,])dnl
750 AC_SUBST(tool_include_dir)
751 AC_SUBST(gcc_version)
752
753 if test "x${with_newlib}" = "xyes"; then
754    # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
755    # may not work correctly, because the compiler may not be able to
756    # link executables.
757
758    # We assume newlib.  This lets us hard-code the functions we know
759    # we'll have.
760    AC_DEFINE(HAVE_MEMMOVE, 1, [Define if you have memmove.])
761    AC_DEFINE(HAVE_MEMCPY, 1, [Define if you have memcpy.])
762    AC_DEFINE(HAVE_STRERROR, 1, [Define if you have strerror.])
763    AC_DEFINE(HAVE_TIME, 1, [Define if you have time.])
764    AC_DEFINE(HAVE_GMTIME_R, 1, [Define if you have the 'gmtime_r' function])
765    AC_DEFINE(HAVE_LOCALTIME_R, 1, [Define if you have the 'localtime_r' function.])
766    AC_DEFINE(HAVE_USLEEP_DECL, 1, [Define if usleep is declared in <unistd.h>.])
767    dnl This is only for POSIX threads.
768    AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT, 1, [Define if using POSIX threads that have the mutexattr functions.])
769    dnl We also assume we are using gcc, which provides alloca.
770    AC_DEFINE(HAVE_ALLOCA)
771
772    dnl Assume we do not have getuid and friends.
773    AC_DEFINE(NO_GETUID, 1, [Define if getuid() and friends are missing.])
774    PLATFORMNET=NoNet
775 else
776    AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir)
777    AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd)
778    AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod)
779    AC_CHECK_FUNCS(nl_langinfo setlocale)
780    AC_CHECK_FUNCS(inet_aton inet_addr, break)
781    AC_CHECK_FUNCS(inet_pton uname inet_ntoa)
782    AC_CHECK_FUNCS(fork execvp pipe sigaction ftruncate)
783    AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h) 
784    AC_CHECK_FUNC(backtrace, [
785      case "$host" in
786        ia64-*-linux*)
787          # Has broken backtrace()
788          ;;
789        mips*-*-linux*)
790          # Has broken backtrace(), but we supply our own.
791          if test -d sysdep; then true; else mkdir -p sysdep; fi
792          EXTRA_CC_FILES="${EXTRA_CC_FILES} sysdep/dwarf2-backtrace.cc"
793          AC_DEFINE(HAVE_BACKTRACE, 1,
794            [Define if your platform has a working backtrace() function.])
795          ;;
796        *)
797          AC_DEFINE(HAVE_BACKTRACE, 1,
798            [Define if your platform has a working backtrace() function.])
799          ;;
800      esac
801    ], [
802      case "$host" in
803        *mingw*)
804          # Has backtrace() defined in libgcj itself
805          AC_DEFINE(HAVE_BACKTRACE, 1,
806            [Define if your platform has a working backtrace() function.])
807          ;;
808      esac
809    ])
810
811    AC_CHECK_LIB(dl, dladdr, [
812      if test "x${disable_dladdr}" = "xyes"; then
813        #Broken dladdr().
814        true
815      else
816        AC_DEFINE(HAVE_DLADDR, 1, [Define if you have dladdr()])
817      fi
818    ])
819    if test x"$build" = x"$host"; then
820      AC_CHECK_FILES(/proc/self/exe, [
821        AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe])])
822    else
823      case $host in
824      *-linux*)
825        AC_DEFINE(HAVE_PROC_SELF_EXE, 1, [Define if you have /proc/self/exe])
826        ;;
827      esac
828    fi
829
830    AM_ICONV
831    AM_LC_MESSAGES
832    AC_STRUCT_TIMEZONE
833
834    AC_CHECK_FUNCS(gethostbyname_r, [
835      AC_DEFINE(HAVE_GETHOSTBYNAME_R, 1,
836        [Define if you have the 'gethostbyname_r' function.])
837      # There are two different kinds of gethostbyname_r.
838      # We look for the one that returns `int'.
839      # Hopefully this check is robust enough.
840      AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [
841        AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT, 1, [Define if gethostbyname_r returns 'int'.])])
842
843      case " $GCINCS " in
844      *" -D_REENTRANT "*) ;;
845      *)
846         dnl On DU4.0, gethostbyname_r is only declared with -D_REENTRANT
847         AC_CACHE_CHECK([whether gethostbyname_r declaration requires -D_REENTRANT],
848         [libjava_cv_gethostbyname_r_needs_reentrant],
849         [ AC_LANG_SAVE
850           AC_LANG_CPLUSPLUS
851           AC_TRY_COMPILE([#include <netdb.h>],
852             [gethostbyname_r("", 0, 0);],
853             [libjava_cv_gethostbyname_r_needs_reentrant=no], [dnl
854                 CPPFLAGS_SAVE="$CPPFLAGS"
855                 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
856                 AC_TRY_COMPILE([#include <netdb.h>], [gethostbyname_r("", 0, 0);],
857                     [libjava_cv_gethostbyname_r_needs_reentrant=yes],
858                     [libjava_cv_gethostbyname_r_needs_reentrant=fail])
859                 CPPFLAGS="$CPPFLAGS_SAVE"
860           ])
861           AC_LANG_RESTORE
862         ])
863         if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
864           AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
865         fi
866      ;;
867      esac
868
869      AC_CACHE_CHECK([for struct hostent_data],
870         [libjava_cv_struct_hostent_data], [dnl
871         AC_TRY_COMPILE([
872 #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
873 # define _REENTRANT 1
874 #endif
875 #include <netdb.h>], [struct hostent_data data;],
876           [libjava_cv_struct_hostent_data=yes],
877           [libjava_cv_struct_hostent_data=no])])
878      if test "x$libjava_cv_struct_hostent_data" = xyes; then
879        AC_DEFINE(HAVE_STRUCT_HOSTENT_DATA, 1,
880          [Define if struct hostent_data is defined in netdb.h])
881      fi
882    ])
883
884    # FIXME: libjava source code expects to find a prototype for
885    # gethostbyaddr_r in netdb.h.  The outer check ensures that
886    # HAVE_GETHOSTBYADDR_R will not be defined if the prototype fails
887    # to exist where expected.  (The root issue: AC_CHECK_FUNCS assumes C
888    # linkage check is enough, yet C++ code requires proper prototypes.)
889    AC_EGREP_HEADER(gethostbyaddr_r, netdb.h, [
890    AC_CHECK_FUNCS(gethostbyaddr_r, [
891      AC_DEFINE(HAVE_GETHOSTBYADDR_R, 1,
892        [Define if you have the 'gethostbyaddr_r' function.])
893      # There are two different kinds of gethostbyaddr_r.
894      # We look for the one that returns `int'.
895      # Hopefully this check is robust enough.
896      AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
897        AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT, 1,
898          [Define if gethostbyaddr_r returns 'int'.])])])])
899
900    AC_CHECK_FUNCS(gethostname, [
901      AC_DEFINE(HAVE_GETHOSTNAME, 1,
902        [Define if you have the 'gethostname' function.])
903      AC_EGREP_HEADER(gethostname, unistd.h, [
904        AC_DEFINE(HAVE_GETHOSTNAME_DECL, 1,
905          [Define if gethostname is declared in <unistd.h>.])])])
906
907    AC_CHECK_FUNCS(usleep, [
908      AC_EGREP_HEADER(usleep, unistd.h, [
909        AC_DEFINE(HAVE_USLEEP_DECL, 1,
910           [Define if usleep is declared in <unistd.h>.])])])
911
912    # Look for these functions in the thread library, but only bother
913    # if using POSIX threads.
914    if test "$THREADS" = posix; then
915       save_LIBS="$LIBS"
916       LIBS="$LIBS $THREADLIBS"
917       # Some POSIX thread systems don't have pthread_mutexattr_settype.
918       # E.g., Solaris.
919       AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np)
920
921       # Look for sched_yield.  Up to Solaris 2.6, it is in libposix4, since
922       # Solaris 7 the name librt is preferred.
923       AC_CHECK_FUNCS(sched_yield, , [
924         AC_CHECK_LIB(rt, sched_yield, [
925           AC_DEFINE(HAVE_SCHED_YIELD)
926           THREADLIBS="$THREADLIBS -lrt"
927           THREADSPEC="$THREADSPEC -lrt"], [
928           AC_CHECK_LIB(posix4, sched_yield, [
929             AC_DEFINE(HAVE_SCHED_YIELD)
930             THREADLIBS="$THREADLIBS -lposix4"
931             THREADSPEC="$THREADSPEC -lposix4"])])])
932       LIBS="$save_LIBS"
933
934       # We can save a little space at runtime if the mutex has m_count
935       # or __m_count.  This is a nice hack for Linux.
936       AC_TRY_COMPILE([#include <pthread.h>], [
937           extern pthread_mutex_t *mutex; int q = mutex->m_count;
938         ], AC_DEFINE(PTHREAD_MUTEX_HAVE_M_COUNT, 1,
939              [Define if pthread_mutex_t has m_count member.]), [
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    fi
945
946    # We require a way to get the time.
947    time_found=no
948    AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes)
949    if test "$time_found" = no; then
950       AC_MSG_ERROR([no function found to get the time])
951    fi
952
953    AC_CHECK_FUNCS(memmove)
954
955    # We require memcpy.
956    memcpy_found=no
957    AC_CHECK_FUNCS(memcpy, memcpy_found=yes)
958    if test "$memcpy_found" = no; then
959       AC_MSG_ERROR([memcpy is required])
960    fi
961
962    AC_CHECK_LIB(dl, dlopen, [
963        AC_DEFINE(HAVE_DLOPEN, 1, [Define if dlopen is available])])
964
965    # Some library-finding code we stole from Tcl.
966    #--------------------------------------------------------------------
967    #    Check for the existence of the -lsocket and -lnsl libraries.
968    #    The order here is important, so that they end up in the right
969    #    order in the command line generated by make.  Here are some
970    #    special considerations:
971    #    1. Use "connect" and "accept" to check for -lsocket, and
972    #       "gethostbyname" to check for -lnsl.
973    #    2. Use each function name only once:  can't redo a check because
974    #       autoconf caches the results of the last check and won't redo it.
975    #    3. Use -lnsl and -lsocket only if they supply procedures that
976    #       aren't already present in the normal libraries.  This is because
977    #       IRIX 5.2 has libraries, but they aren't needed and they're
978    #       bogus:  they goof up name resolution if used.
979    #    4. On some SVR4 systems, can't use -lsocket without -lnsl too.
980    #       To get around this problem, check for both libraries together
981    #       if -lsocket doesn't work by itself.
982    #--------------------------------------------------------------------
983
984    AC_CACHE_CHECK([for socket libraries], gcj_cv_lib_sockets,
985     [gcj_cv_lib_sockets=
986      gcj_checkBoth=0
987      unset ac_cv_func_connect
988      AC_CHECK_FUNC(connect, gcj_checkSocket=0, gcj_checkSocket=1)
989      if test "$gcj_checkSocket" = 1; then
990          unset ac_cv_func_connect
991          AC_CHECK_LIB(socket, main, gcj_cv_lib_sockets="-lsocket",
992                       gcj_checkBoth=1)
993      fi
994      if test "$gcj_checkBoth" = 1; then
995          gcj_oldLibs=$LIBS
996          LIBS="$LIBS -lsocket -lnsl"
997          unset ac_cv_func_accept
998          AC_CHECK_FUNC(accept,
999                        [gcj_checkNsl=0
1000                         gcj_cv_lib_sockets="-lsocket -lnsl"])
1001          unset ac_cv_func_accept
1002          LIBS=$gcj_oldLibs
1003      fi
1004      unset ac_cv_func_gethostbyname
1005      gcj_oldLibs=$LIBS
1006      LIBS="$LIBS $gcj_cv_lib_sockets"
1007      AC_CHECK_FUNC(gethostbyname, ,
1008                    [AC_CHECK_LIB(nsl, main,
1009                                  [gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"])])
1010      unset ac_cv_func_gethostbyname
1011      LIBS=$gcj_oldLIBS
1012    ])
1013    SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
1014
1015    if test "$with_system_zlib" = yes; then
1016       AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=)
1017    fi
1018
1019    # Test for Gtk stuff, if asked for.
1020    if test "$use_gtk_awt" = yes; then
1021       PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.2)
1022       AC_SUBST(GTK_CFLAGS)
1023       AC_SUBST(GTK_LIBS)
1024
1025       PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.2 gthread-2.0 >= 2.2)
1026       AC_SUBST(GLIB_CFLAGS)
1027       AC_SUBST(GLIB_LIBS)
1028
1029       PKG_CHECK_MODULES(LIBART, libart-2.0 >= 2.1)
1030       AC_SUBST(LIBART_CFLAGS)
1031       AC_SUBST(LIBART_LIBS)
1032    fi
1033
1034    # On Solaris, and maybe other architectures, the Boehm collector
1035    # requires -ldl.
1036    if test "$GC" = boehm; then
1037       AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl")
1038    fi
1039 fi
1040
1041 if test -z "${with_multisubdir}"; then
1042    builddotdot=.
1043 else
1044 changequote(<<,>>)
1045    builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
1046 changequote([,])
1047 fi
1048
1049 NATIVE=yes
1050
1051 # Which gcj do we use?
1052 which_gcj=default
1053 built_gcc_dir="`cd ${builddotdot}/../../gcc && ${PWDCMD-pwd}`"
1054 if test -n "${with_cross_host}"; then
1055   # We are being configured with a cross compiler. We can't
1056   # use ac_exeext, because that is for the target platform.
1057   NATIVE=no
1058   cross_host_exeext=
1059   case "${with_cross_host}" in
1060      *mingw* | *cygwin*)
1061          cross_host_exeext=.exe
1062      ;;
1063   esac
1064   if test -x "${built_gcc_dir}/gcj${cross_host_exeext}"; then
1065      if test x"$build_noncanonical" = x"$with_cross_host"; then
1066         # Ordinary cross (host!=target and host=build)
1067         which_gcj=built
1068      else
1069         # Canadian cross (host!=target and host!=build)
1070         which_gcj=cross
1071      fi
1072   else
1073      which_gcj=cross
1074   fi
1075 else
1076   # We are being configured with a native or crossed-native compiler
1077   if test -x "${built_gcc_dir}/gcj${ac_exeext}"; then
1078      if test x"$build" = x"$host"; then
1079         # True native build (host=target and host=build)
1080         which_gcj=built
1081      else
1082         # Crossed-native build (host=target and host!=build)
1083         which_gcj=cross
1084      fi
1085   else
1086      which_gcj=path
1087   fi
1088 fi
1089 case "${which_gcj}" in
1090    built)
1091       GCJ="$built_gcc_dir/gcj -B`${PWDCMD-pwd}`/ -B$built_gcc_dir/"
1092       GCJH='$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh'
1093       ZIP='$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar'
1094    ;;
1095    cross)
1096       if test "x${with_newlib}" = "xyes"; then
1097          # FIXME (comment): Why is this needed?
1098          GCC_UNWIND_INCLUDE=
1099          GCJ="${target_noncanonical}-gcj"
1100       else
1101          GCJ="${target_noncanonical}-gcj -B`${PWDCMD-pwd}`/"
1102       fi
1103       ZIP=jar
1104       GCJH='$(target_noncanonical)-gcjh'
1105    ;;
1106    path)
1107       GCJ="gcj -B`${PWDCMD-pwd}`/"
1108       ## In this case, gcj is found outside the build tree.  However, zip is
1109       ## found in the build tree.
1110       ZIP='$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar'
1111       GCJH=gcjh
1112    ;;
1113 esac
1114
1115 AC_SUBST(GCJH)
1116 AC_SUBST(ZIP)
1117
1118 # Create it, so that compile/link tests don't fail
1119 test -f libgcj.spec || touch libgcj.spec
1120
1121 # We must search the source tree for java.lang, since we still don't
1122 # have libgcj.jar nor java/lang/*.class
1123 GCJ_SAVE_CPPFLAGS=$CPPFLAGS
1124 CPPFLAGS="$CPPFLAGS -I`${PWDCMD-pwd}` -I`cd $srcdir && ${PWDCMD-pwd}`"
1125
1126 # Since some classes depend on this one, we need its source available
1127 # before we can do any GCJ compilation test :-(
1128 if test ! -f gnu/classpath/Configuration.java; then
1129   test -d gnu || mkdir gnu
1130   test -d gnu/classpath || mkdir gnu/classpath
1131   sed -e 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \
1132       -e 's,@TOOLKIT@,$TOOLKIT,' \
1133         < $srcdir/gnu/classpath/Configuration.java.in \
1134         > gnu/classpath/Configuration.java
1135   # We do not want to redirect the output of the grep below to /dev/null,
1136   # but we add /dev/null to the input list so that grep will print the
1137   # filename of Configuration.java in case it finds any matches.
1138   if grep @ gnu/classpath/Configuration.java /dev/null; then
1139     AC_MSG_ERROR([configure.in is missing the substitutions above])
1140   fi
1141 fi
1142
1143 LT_AC_PROG_GCJ
1144
1145 CPPFLAGS=$GCJ_SAVE_CPPFLAGS
1146
1147 AC_COMPILE_CHECK_SIZEOF(void *)
1148
1149 ZLIBS=
1150 SYS_ZLIBS=
1151 ZINCS=
1152
1153 if test -z "$ZLIBSPEC"; then
1154    # Use zlib from the GCC tree.
1155    ZINCS='-I$(top_srcdir)/../zlib'
1156    ZLIBS=../zlib/libzgcj_convenience.la
1157 else
1158    # System's zlib.
1159    SYS_ZLIBS="$ZLIBSPEC"
1160 fi
1161 AC_SUBST(ZLIBS)
1162 AC_SUBST(SYS_ZLIBS)
1163 AC_SUBST(ZINCS)
1164 AC_SUBST(DIVIDESPEC)
1165 AC_SUBST(CHECKREFSPEC)
1166 AC_SUBST(EXCEPTIONSPEC)
1167 AC_SUBST(IEEESPEC)
1168
1169 AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes)
1170 AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
1171 AC_SUBST(GCC_UNWIND_INCLUDE)
1172
1173 # Process the option "--enable-version-specific-runtime-libs"
1174 # Calculate toolexeclibdir
1175 case ${version_specific_libs} in
1176   yes)
1177     # Need the gcc compiler version to know where to install libraries
1178     # and header files if --enable-version-specific-runtime-libs option
1179     # is selected.
1180     includedir='${libdir}/gcc/${target_noncanonical}/'$gcc_version/include/
1181     toolexecdir='$(libdir)/gcc/$(target_noncanonical)'
1182     toolexecmainlibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)'
1183     toolexeclibdir=$toolexecmainlibdir
1184     ;;
1185   no)
1186     if test -n "$with_cross_host" &&
1187        test x"$with_cross_host" != x"no"; then
1188       # Install a library built with a cross compiler in tooldir, not libdir.
1189       toolexecdir='$(exec_prefix)/$(target_noncanonical)'
1190       toolexecmainlibdir='$(toolexecdir)/lib'
1191     else
1192       toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
1193       toolexecmainlibdir='$(libdir)'
1194     fi
1195     multi_os_directory=`$CC -print-multi-os-directory`
1196     case $multi_os_directory in
1197       .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
1198       *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
1199     esac
1200     ;;
1201 esac
1202 AC_SUBST(toolexecdir)
1203 AC_SUBST(toolexecmainlibdir)
1204 AC_SUBST(toolexeclibdir)
1205
1206 # Determine gcj version number.
1207 changequote(<<,>>)
1208 gcjversion=`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`
1209 changequote([,])
1210 GCJVERSION=$gcjversion
1211 AC_SUBST(GCJVERSION)
1212 AC_DEFINE_UNQUOTED(GCJVERSION, "$GCJVERSION", [Short GCJ version ID])
1213
1214 dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
1215 dnl On that system, sys/ioctl.h will not include sys/filio.h unless
1216 dnl BSD_COMP is defined; just including sys/filio.h is simpler.
1217 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)
1218 dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
1219 dnl for now.  If you change this, you also must update natFile.cc.
1220 AC_CHECK_HEADERS(dirent.h)
1221 AC_CHECK_HEADERS(inttypes.h, [
1222     AC_DEFINE(HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
1223     AC_DEFINE(JV_HAVE_INTTYPES_H, 1, [Define if <inttypes.h> is available])
1224 ])
1225 AC_HEADER_SYS_WAIT
1226
1227 AC_CHECK_TYPE([ssize_t], [int])
1228
1229 AC_MSG_CHECKING([for in_addr_t])
1230 AC_TRY_COMPILE([#include <sys/types.h>
1231 #if STDC_HEADERS
1232 #include <stdlib.h>
1233 #include <stddef.h>
1234 #endif
1235 #if HAVE_NETINET_IN_H
1236 #include <netinet/in.h>
1237 #endif], [in_addr_t foo;],
1238   [AC_DEFINE(HAVE_IN_ADDR_T, 1,
1239      [Define to 1 if 'in_addr_t' is defined in sys/types.h or netinet/in.h.])
1240    AC_MSG_RESULT(yes)],
1241   [AC_MSG_RESULT(no)])
1242
1243 AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h])
1244 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;],
1245   [AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1,
1246      [Define if struct ip_mreq is defined in netinet/in.h.])
1247    AC_MSG_RESULT(yes)],
1248   [AC_MSG_RESULT(no)])
1249
1250 AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
1251 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
1252   [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ, 1,
1253      [Define if struct ipv6_mreq is defined in netinet/in.h.])
1254    AC_MSG_RESULT(yes)],
1255   [AC_MSG_RESULT(no)])
1256
1257 AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
1258 AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
1259   [AC_DEFINE(HAVE_INET6, 1,
1260      [Define if inet6 structures are defined in netinet/in.h.])
1261    AC_MSG_RESULT(yes)],
1262   [AC_MSG_RESULT(no)])
1263
1264 AC_MSG_CHECKING([for socklen_t in sys/socket.h])
1265 AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
1266 #include <sys/types.h>
1267 #include <sys/socket.h>], [socklen_t x = 5;],
1268   [AC_DEFINE(HAVE_SOCKLEN_T, 1, [Define it socklen_t typedef is in sys/socket.h.])
1269    AC_MSG_RESULT(yes)],
1270   [AC_MSG_RESULT(no)])
1271
1272 AC_MSG_CHECKING([for tm_gmtoff in struct tm])
1273 AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
1274   [AC_DEFINE(STRUCT_TM_HAS_GMTOFF, 1, [Define if struct tm has tm_gmtoff field.])
1275    AC_MSG_RESULT(yes)],
1276   [AC_MSG_RESULT(no)
1277    AC_MSG_CHECKING([for global timezone variable])
1278    dnl FIXME: we don't want a link check here because that won't work
1279    dnl when cross-compiling.  So instead we make an assumption that
1280    dnl the header file will mention timezone if it exists.
1281    dnl Don't find the win32 function timezone
1282    AC_TRY_COMPILE([#include <time.h>], [void i(){long z2 = 2*timezone;}],
1283      [AC_DEFINE(HAVE_TIMEZONE, 1, [Define if global 'timezone' exists.])
1284       AC_MSG_RESULT(yes)],
1285      [AC_MSG_RESULT(no)
1286        AC_MSG_CHECKING([for global _timezone variable])
1287        dnl FIXME: As above, don't want link check
1288        AC_TRY_COMPILE([#include <time.h>], [long z2 = _timezone;],
1289          [AC_DEFINE(HAVE_UNDERSCORE_TIMEZONE, 1,
1290             [Define if your platform has the global _timezone variable.])
1291           AC_MSG_RESULT(yes)],
1292           [AC_MSG_RESULT(no)])])])
1293
1294 AC_FUNC_ALLOCA
1295 AC_FUNC_MMAP
1296
1297 AC_CHECK_PROGS(PERL, perl, false)
1298
1299 SYSDEP_SOURCES=
1300 SIGNAL_HANDLER_AUX=
1301
1302 case "${host}" in
1303  i?86-*-linux*)
1304     SIGNAL_HANDLER=include/i386-signal.h
1305     ;;
1306  sparc*-sun-solaris*)
1307     SIGNAL_HANDLER=include/sparc-signal.h
1308     ;;
1309 # ia64-*)
1310 #    SYSDEP_SOURCES=sysdep/ia64.c
1311 #    test -d sysdep || mkdir sysdep
1312 #    ;;
1313  hppa*-*-linux*)
1314     SIGNAL_HANDLER=include/pa-signal.h
1315     ;;
1316  ia64-*-linux*)
1317     SIGNAL_HANDLER=include/dwarf2-signal.h
1318     ;;
1319  powerpc*-*-linux*)
1320     SIGNAL_HANDLER=include/powerpc-signal.h
1321     ;;
1322  alpha*-*-linux*)
1323     SIGNAL_HANDLER=include/dwarf2-signal.h
1324     ;;
1325  s390*-*-linux*)
1326     SIGNAL_HANDLER=include/s390-signal.h
1327     ;;
1328  x86_64*-*-linux*)
1329     SIGNAL_HANDLER=include/x86_64-signal.h
1330     SIGNAL_HANDLER_AUX=include/i386-signal.h
1331     ;;
1332  sparc*-*-linux*)
1333     SIGNAL_HANDLER=include/dwarf2-signal.h
1334     ;;
1335  sh-*-linux* | sh[[34]]*-*-linux*)
1336     SIGNAL_HANDLER=include/dwarf2-signal.h
1337     ;;
1338  *mingw*)
1339     SIGNAL_HANDLER=include/win32-signal.h
1340     ;;
1341  mips*-*-linux*)
1342     SIGNAL_HANDLER=include/mips-signal.h
1343     ;;
1344  *-*-darwin*)
1345     SIGNAL_HANDLER=include/darwin-signal.h
1346     ;;
1347  *)
1348     SIGNAL_HANDLER=include/default-signal.h
1349     ;;
1350 esac
1351
1352 # If we're using sjlj exceptions, forget what we just learned.
1353 if test "$enable_sjlj_exceptions" = yes; then
1354    SIGNAL_HANDLER=include/default-signal.h
1355    SIGNAL_HANDLER_AUX=
1356 fi
1357
1358 # Define here any compiler flags that you need in order to make backtrace() work.
1359 BACKTRACESPEC=
1360 case "${host}" in
1361  x86_64*-*-linux*|i?86-*)
1362     BACKTRACESPEC=-fno-omit-frame-pointer
1363     ;;
1364 esac
1365 AC_SUBST(BACKTRACESPEC)
1366
1367 AC_SUBST(SYSDEP_SOURCES)
1368
1369 if test -z "$SIGNAL_HANDLER_AUX"; then
1370   SIGNAL_HANDLER_AUX=$SIGNAL_HANDLER
1371 fi
1372
1373 AC_LINK_FILES($SIGNAL_HANDLER $SIGNAL_HANDLER_AUX,
1374               include/java-signal.h include/java-signal-aux.h)
1375
1376 if test "${multilib}" = "yes"; then
1377   multilib_arg="--enable-multilib"
1378 else
1379   multilib_arg=
1380 fi
1381
1382
1383
1384 here=`${PWDCMD-pwd}`
1385 AC_SUBST(here)
1386
1387 # We get this from the environment.
1388 AC_SUBST(GCJFLAGS)
1389
1390 AC_OUTPUT(Makefile libgcj.pc libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile,
1391 [# Only add multilib support code if we just rebuilt top-level Makefile.
1392 case " $CONFIG_FILES " in
1393  *" Makefile "*)
1394    LD="${ORIGINAL_LD_FOR_MULTILIBS}"
1395    ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
1396    ;;
1397 esac
1398
1399 # Make subdirectories and `.d' files.  Look in both srcdir and
1400 # builddir for the .java files.
1401 h=`${PWDCMD-pwd}`
1402 : > deps.mk
1403 ( (cd $srcdir && find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) ;
1404   find . \( -name '*.java' -o -name '*.cc' -o -name '*.c' \) -print) | \
1405    fgrep -v testsuite | \
1406    sed -e 's/\.java/.d/'\;'s/\.cc/.d/'\;'s/\.c/.d/' | \
1407    while read f; do
1408       echo "include $f" >> deps.mk
1409       test -f $f || {
1410 changequote(<<,>>)
1411          d=`echo $f | sed -e 's,/[^/]*$,,'`
1412 changequote([,])
1413          if test ! -d $d; then
1414            $libgcj_basedir/../mkinstalldirs $d
1415          fi;
1416          echo > $f
1417       }
1418    done
1419 ],
1420 srcdir=${srcdir}
1421 host=${host}
1422 target=${target}
1423 with_multisubdir=${with_multisubdir}
1424 ac_configure_args="${multilib_arg} ${ac_configure_args}"
1425 CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
1426 libgcj_basedir=${libgcj_basedir}
1427 CC="${CC}"
1428 CXX="${CXX}"
1429 ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
1430 )