OSDN Git Service

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