OSDN Git Service

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