OSDN Git Service

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