OSDN Git Service

e9093e87864635fec854428550926a7a432b09f5
[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     THREADLIBS=-lpthread
333     THREADSPEC=-lpthread
334     THREADOBJS=posix-threads.lo
335     THREADH=posix-threads.h
336     # MIT pthreads doesn't seem to have the mutexattr functions.
337     # But for now we don't check for it.  We just assume you aren't
338     # using MIT pthreads.
339     AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT)
340
341     # If we're using the Boehm GC, then we happen to know that it
342     # defines _REENTRANT, so we don't bother.  Eww.
343     if test "$GC" != boehm; then
344        AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
345     fi
346     AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Required define if using POSIX threads])
347     ;;
348
349  none)
350     THREADOBJS=no-threads.lo
351     THREADH=no-threads.h
352     ;;
353 esac
354 AC_LINK_FILES(include/$THREADH, include/java-threads.h)
355 AC_SUBST(THREADLIBS)
356 AC_SUBST(THREADINCS)
357 AC_SUBST(THREADDEPS)
358 AC_SUBST(THREADOBJS)
359 AC_SUBST(THREADSPEC)
360
361 HASH_SYNC_SPEC=
362 # Hash synchronization is only useful with posix threads right now.
363 if test "$enable_hash_synchronization" = yes && test "$THREADS" = "posix"; then
364    HASH_SYNC_SPEC=-fhash-synchronization
365    AC_DEFINE(JV_HASH_SYNCHRONIZATION, 1, [Define if hash synchronization is in use])
366 fi
367 AC_SUBST(HASH_SYNC_SPEC)
368
369
370 AM_CONDITIONAL(USING_GCC, test "$GCC" = yes)
371
372 CANADIAN=no
373 NULL_TARGET=no
374 NATIVE=yes
375
376 # We're in the tree with gcc, and need to include some of its headers.
377 GCC_UNWIND_INCLUDE='-I$(libgcj_basedir)/../gcc'
378
379 if test -n "${with_cross_host}"; then
380    # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
381    # may not work correctly, because the compiler may not be able to
382    # link executables.
383
384    # We assume newlib.  This lets us hard-code the functions we know
385    # we'll have.
386    AC_DEFINE(HAVE_MEMMOVE)
387    AC_DEFINE(HAVE_MEMCPY)
388    AC_DEFINE(HAVE_STRERROR)
389    AC_DEFINE(HAVE_GMTIME_R)
390    AC_DEFINE(HAVE_LOCALTIME_R)
391    dnl This is only for POSIX threads.
392    AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT)
393    dnl We also assume we are using gcc, which provides alloca.
394    AC_DEFINE(HAVE_ALLOCA)
395
396    dnl Assume we do not have getuid and friends.
397    AC_DEFINE(NO_GETUID)
398
399    ZLIBSPEC=-lzgcj
400    ZLIBTESTSPEC="-L`pwd`/../zlib/.libs -rpath `pwd`/../zlib/.libs"
401
402    # If Canadian cross, then don't pick up tools from the build
403    # directory.
404    if test x"$build" != x"$with_cross_host" && x"$build" != x"$target"; then
405       CANADIAN=yes
406       GCC_UNWIND_INCLUDE=
407       GCJ="${target_alias}-gcj"
408    fi
409    NATIVE=no
410 else
411    AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep)
412    AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd)
413    AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath utime chmod)
414    AC_CHECK_FUNCS(nl_langinfo setlocale)
415    AC_CHECK_FUNCS(inet_aton inet_addr, break)
416    AC_CHECK_FUNCS(inet_pton uname inet_ntoa)
417    AC_CHECK_FUNCS(backtrace fork execvp pipe sigaction)
418    AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h) 
419    AC_CHECK_LIB(dl, dladdr, [
420      AC_DEFINE(HAVE_DLADDR)])
421    AC_CHECK_FILES(/proc/self/exe, [
422      AC_DEFINE(HAVE_PROC_SELF_EXE)])
423
424    AM_ICONV
425
426    AC_CHECK_FUNCS(gethostbyname_r, [
427      AC_DEFINE(HAVE_GETHOSTBYNAME_R)
428      # There are two different kinds of gethostbyname_r.
429      # We look for the one that returns `int'.
430      # Hopefully this check is robust enough.
431      AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [
432        AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT)])
433
434      case " $GCINCS " in
435      *" -D_REENTRANT "*) ;;
436      *)
437         dnl On DU4.0, gethostbyname_r is only declared with -D_REENTRANT
438         AC_CACHE_CHECK([whether gethostbyname_r declaration requires -D_REENTRANT],
439         [libjava_cv_gethostbyname_r_needs_reentrant],
440         [ AC_LANG_SAVE
441           AC_LANG_CPLUSPLUS
442           AC_TRY_COMPILE([#include <netdb.h>],
443             [gethostbyname_r("", 0, 0);],
444             [libjava_cv_gethostbyname_r_needs_reentrant=no], [dnl
445                 CPPFLAGS_SAVE="$CPPFLAGS"
446                 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
447                 AC_TRY_COMPILE([#include <netdb.h>], [gethostbyname_r("", 0, 0);],
448                     [libjava_cv_gethostbyname_r_needs_reentrant=yes],
449                     [libjava_cv_gethostbyname_r_needs_reentrant=fail])
450                 CPPFLAGS="$CPPFLAGS_SAVE"
451           ])
452           AC_LANG_RESTORE
453         ])
454         if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then
455           AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
456         fi
457      ;;
458      esac
459
460      AC_CACHE_CHECK([for struct hostent_data],
461         [libjava_cv_struct_hostent_data], [dnl
462         AC_TRY_COMPILE([
463 #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
464 # define _REENTRANT 1
465 #endif
466 #include <netdb.h>], [struct hostent_data data;],
467           [libjava_cv_struct_hostent_data=yes],
468           [libjava_cv_struct_hostent_data=no])])
469      if test "x$libjava_cv_struct_hostent_data" = xyes; then
470        AC_DEFINE(HAVE_STRUCT_HOSTENT_DATA, 1,
471          [Define if struct hostent_data is defined in netdb.h])
472      fi
473    ])
474
475    AC_CHECK_FUNCS(gethostbyaddr_r, [
476      AC_DEFINE(HAVE_GETHOSTBYADDR_R)
477      # There are two different kinds of gethostbyaddr_r.
478      # We look for the one that returns `int'.
479      # Hopefully this check is robust enough.
480      AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
481        AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT)])])
482
483    AC_CHECK_FUNCS(gethostname, [
484      AC_DEFINE(HAVE_GETHOSTNAME)
485      AC_EGREP_HEADER(gethostname, unistd.h, [
486        AC_DEFINE(HAVE_GETHOSTNAME_DECL)])])
487
488    # Look for these functions in the thread library, but only bother
489    # if using POSIX threads.
490    if test "$THREADS" = posix; then
491       save_LIBS="$LIBS"
492       LIBS="$LIBS $THREADLIBS"
493       # Some POSIX thread systems don't have pthread_mutexattr_settype.
494       # E.g., Solaris.
495       AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np)
496
497       # Look for sched_yield.  Up to Solaris 2.6, it is in libposix4, since
498       # Solaris 7 the name librt is preferred.
499       AC_CHECK_FUNCS(sched_yield, , [
500         AC_CHECK_LIB(rt, sched_yield, [
501           AC_DEFINE(HAVE_SCHED_YIELD)
502           THREADLIBS="$THREADLIBS -lrt"
503           THREADSPEC="$THREADSPEC -lrt"], [
504           AC_CHECK_LIB(posix4, sched_yield, [
505             AC_DEFINE(HAVE_SCHED_YIELD)
506             THREADLIBS="$THREADLIBS -lposix4"
507             THREADSPEC="$THREADSPEC -lposix4"])])])
508       LIBS="$save_LIBS"
509
510       # We can save a little space at runtime if the mutex has m_count
511       # or __m_count.  This is a nice hack for Linux.
512       AC_TRY_COMPILE([#include <pthread.h>], [
513           extern pthread_mutex_t *mutex; int q = mutex->m_count;
514         ], AC_DEFINE(PTHREAD_MUTEX_HAVE_M_COUNT), [
515         AC_TRY_COMPILE([#include <pthread.h>], [
516             extern pthread_mutex_t *mutex; int q = mutex->__m_count;
517           ], AC_DEFINE(PTHREAD_MUTEX_HAVE___M_COUNT))])
518    fi
519
520    # We require a way to get the time.
521    time_found=no
522    AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes)
523    if test "$time_found" = no; then
524       AC_MSG_ERROR([no function found to get the time])
525    fi
526
527    AC_CHECK_FUNCS(memmove)
528
529    # We require memcpy.
530    memcpy_found=no
531    AC_CHECK_FUNCS(memcpy, memcpy_found=yes)
532    if test "$memcpy_found" = no; then
533       AC_MSG_ERROR([memcpy is required])
534    fi
535
536    # Some library-finding code we stole from Tcl.
537    #--------------------------------------------------------------------
538    #    Check for the existence of the -lsocket and -lnsl libraries.
539    #    The order here is important, so that they end up in the right
540    #    order in the command line generated by make.  Here are some
541    #    special considerations:
542    #    1. Use "connect" and "accept" to check for -lsocket, and
543    #       "gethostbyname" to check for -lnsl.
544    #    2. Use each function name only once:  can't redo a check because
545    #       autoconf caches the results of the last check and won't redo it.
546    #    3. Use -lnsl and -lsocket only if they supply procedures that
547    #       aren't already present in the normal libraries.  This is because
548    #       IRIX 5.2 has libraries, but they aren't needed and they're
549    #       bogus:  they goof up name resolution if used.
550    #    4. On some SVR4 systems, can't use -lsocket without -lnsl too.
551    #       To get around this problem, check for both libraries together
552    #       if -lsocket doesn't work by itself.
553    #--------------------------------------------------------------------
554
555    AC_CACHE_CHECK([for socket libraries], gcj_cv_lib_sockets,
556     [gcj_cv_lib_sockets=
557      gcj_checkBoth=0
558      unset ac_cv_func_connect
559      AC_CHECK_FUNC(connect, gcj_checkSocket=0, gcj_checkSocket=1)
560      if test "$gcj_checkSocket" = 1; then
561          unset ac_cv_func_connect
562          AC_CHECK_LIB(socket, main, gcj_cv_lib_sockets="-lsocket",
563                       gcj_checkBoth=1)
564      fi
565      if test "$gcj_checkBoth" = 1; then
566          gcj_oldLibs=$LIBS
567          LIBS="$LIBS -lsocket -lnsl"
568          unset ac_cv_func_accept
569          AC_CHECK_FUNC(accept,
570                        [gcj_checkNsl=0
571                         gcj_cv_lib_sockets="-lsocket -lnsl"])
572          unset ac_cv_func_accept
573          LIBS=$gcj_oldLibs
574      fi
575      unset ac_cv_func_gethostbyname
576      gcj_oldLibs=$LIBS
577      LIBS="$LIBS $gcj_cv_lib_sockets"
578      AC_CHECK_FUNC(gethostbyname, ,
579                    [AC_CHECK_LIB(nsl, main,
580                                  [gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"])])
581      unset ac_cv_func_gethostbyname
582      LIBS=$gcj_oldLIBS
583    ])
584    SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets"
585
586    if test "$with_system_zlib" = yes; then
587       AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=-lzgcj)
588    else
589       ZLIBSPEC=-lzgcj
590       ZLIBTESTSPEC="-L`pwd`/../zlib/.libs -rpath `pwd`/../zlib/.libs"
591    fi
592
593    # On Solaris, and maybe other architectures, the Boehm collector
594    # requires -ldl.
595    if test "$GC" = boehm; then
596       AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl")
597    fi
598
599    if test -z "${with_multisubdir}"; then
600       builddotdot=.
601    else
602 changequote(<<,>>)
603       builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
604 changequote([,])
605    fi
606    if test -x "${builddotdot}/../../gcc/gcj"; then
607       dir="`cd ${builddotdot}/../../gcc && pwd`"
608       GCJ="$dir/gcj -B`pwd`/ -B$dir/"
609    else
610       CANADIAN=yes
611       NULL_TARGET=yes
612       GCJ="gcj -B`pwd`/"
613    fi
614 fi
615
616 # Create it, so that compile/link tests don't fail
617 test -f libgcj.spec || touch libgcj.spec
618
619 # We must search the source tree for java.lang, since we still don't
620 # have libgcj.jar nor java/lang/*.class
621 GCJ_SAVE_CPPFLAGS=$CPPFLAGS
622 CPPFLAGS="$CPPFLAGS -I`pwd` -I`cd $srcdir && pwd`"
623
624 # Since some classes depend on this one, we need its source available
625 # before we can do any GCJ compilation test :-(
626 if test ! -f gnu/classpath/Configuration.java; then
627   test -d gnu || mkdir gnu
628   test -d gnu/classpath || mkdir gnu/classpath
629   sed 's,@LIBGCJDEBUG@,$LIBGCJDEBUG,' \
630         < $srcdir/gnu/classpath/Configuration.java.in \
631         > gnu/classpath/Configuration.java
632   # We do not want to redirect the output of the grep below to /dev/null,
633   # but we add /dev/null to the input list so that grep will print the
634   # filename of Configuration.java in case it finds any matches.
635   if grep @ gnu/classpath/Configuration.java /dev/null; then
636     AC_MSG_ERROR([configure.in is missing the substitutions above])
637   fi
638 fi
639
640 LT_AC_PROG_GCJ
641
642 CPPFLAGS=$GCJ_SAVE_CPPFLAGS
643
644 dnl FIXME: cross compilation
645 AC_CHECK_SIZEOF(void *)
646
647 ZLIBS=
648 ZDEPS=
649 ZINCS=
650 if test "x$ZLIBSPEC" = "x-lzgcj"; then
651    # We include the path to the zlib build directory.
652    # See Makefile.am to understand why.
653    ZDEPS='$(top_builddir)/../zlib/libzgcj.la'
654    ZLIBS="$ZDEPS -L\$(here)/../zlib/$libsubdir"
655    ZINCS='-I$(top_srcdir)/../zlib'
656 else
657    ZLIBS="$ZLIBSPEC"
658 fi
659 AC_SUBST(ZLIBS)
660 AC_SUBST(ZDEPS)
661 AC_SUBST(ZINCS)
662 AC_SUBST(DIVIDESPEC)
663 AC_SUBST(EXCEPTIONSPEC)
664
665 AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes)
666 AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes)
667 AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes)
668 AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host")
669 AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes)
670 AC_SUBST(GCC_UNWIND_INCLUDE)
671
672 # Determine gcj version number.
673 changequote(<<,>>)
674 gcjvers="`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`"
675 changequote([,])
676 AC_DEFINE_UNQUOTED(GCJVERSION, "$gcjvers")
677 AC_SUBST(GCJVERSION)
678
679 AC_SUBST(AM_RUNTESTFLAGS)
680
681 dnl Work around a g++ bug.  Reported to gcc-bugs@gcc.gnu.org on Jan 22, 2000.
682 AC_MSG_CHECKING([for g++ -ffloat-store bug])
683 save_CFLAGS="$CFLAGS"
684 CFLAGS="-x c++ -O2 -ffloat-store"
685 AC_TRY_COMPILE([#include <math.h>], , 
686   [AC_MSG_RESULT(no)],
687   [AC_DEFINE(__NO_MATH_INLINES)
688    AC_MSG_RESULT(yes)])
689 CFLAGS="$save_CFLAGS"
690
691 dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
692 dnl On that system, sys/ioctl.h will not include sys/filio.h unless
693 dnl BSD_COMP is defined; just including sys/filio.h is simpler.
694 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)
695 dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
696 dnl for now.  If you change this, you also must update natFile.cc.
697 AC_CHECK_HEADERS(dirent.h)
698
699 AC_CHECK_TYPE([ssize_t], [int])
700
701 AC_MSG_CHECKING([for in_addr_t])
702 AC_TRY_COMPILE([#include <sys/types.h>
703 #if STDC_HEADERS
704 #include <stdlib.h>
705 #include <stddef.h>
706 #endif
707 #if HAVE_NETINET_IN_H
708 #include <netinet/in.h>
709 #endif], [in_addr_t foo;],
710   [AC_DEFINE([HAVE_IN_ADDR_T])
711    AC_MSG_RESULT(yes)],
712   [AC_MSG_RESULT(no)])
713
714 AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h])
715 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;],
716   [AC_DEFINE(HAVE_STRUCT_IP_MREQ)
717    AC_MSG_RESULT(yes)],
718   [AC_MSG_RESULT(no)])
719
720 AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
721 AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
722   [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ)
723    AC_MSG_RESULT(yes)],
724   [AC_MSG_RESULT(no)])
725
726 AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
727 AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
728   [AC_DEFINE(HAVE_INET6)
729    AC_MSG_RESULT(yes)],
730   [AC_MSG_RESULT(no)])
731
732 AC_MSG_CHECKING([for socklen_t in sys/socket.h])
733 AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
734 #include <sys/types.h>
735 #include <sys/socket.h>], [socklen_t x = 5;],
736   [AC_DEFINE(HAVE_SOCKLEN_T)
737    AC_MSG_RESULT(yes)],
738   [AC_MSG_RESULT(no)])
739
740 AC_MSG_CHECKING([for tm_gmtoff in struct tm])
741 AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
742   [AC_DEFINE(STRUCT_TM_HAS_GMTOFF)
743    AC_MSG_RESULT(yes)],
744   [AC_MSG_RESULT(no)
745    AC_MSG_CHECKING([for global timezone variable])
746    dnl FIXME: we don't want a link check here because that won't work
747    dnl when cross-compiling.  So instead we make an assumption that
748    dnl the header file will mention timezone if it exists.
749    AC_TRY_COMPILE([#include <time.h>], [long z2 = timezone;],
750      [AC_DEFINE(HAVE_TIMEZONE)
751       AC_MSG_RESULT(yes)],
752      [AC_MSG_RESULT(no)])])
753
754 AC_FUNC_ALLOCA
755
756 AC_CHECK_PROGS(PERL, perl, false)
757
758 SYSDEP_SOURCES=
759
760 case "${host}" in
761  i?86-*-linux*)
762     SIGNAL_HANDLER=include/i386-signal.h
763     ;;
764  sparc-sun-solaris*)
765     SIGNAL_HANDLER=include/sparc-signal.h
766     ;;
767 # ia64-*)
768 #    SYSDEP_SOURCES=sysdep/ia64.c
769 #    test -d sysdep || mkdir sysdep
770 #    ;;
771  powerpc-*-linux*)
772     SIGNAL_HANDLER=include/dwarf2-signal.h
773     ;;
774  alpha*-*-linux*)
775     SIGNAL_HANDLER=include/dwarf2-signal.h
776     ;;
777  *)
778     SIGNAL_HANDLER=include/default-signal.h
779     ;;
780 esac
781
782 # If we're using sjlj exceptions, forget what we just learned.
783 if test "$enable_sjlj_exceptions" = yes; then
784    SIGNAL_HANDLER=include/default-signal.h
785 fi
786
787 AC_SUBST(SYSDEP_SOURCES)
788
789 AC_LINK_FILES($SIGNAL_HANDLER, include/java-signal.h)
790
791 if test "${multilib}" = "yes"; then
792   multilib_arg="--enable-multilib"
793 else
794   multilib_arg=
795 fi
796
797 AC_PATH_XTRA
798
799 dnl Determine which AWT peer libraries to build
800 AC_ARG_ENABLE(java-awt,
801 [  --enable-java-awt       list of AWT peer implementations to be built])
802
803 peerlibs="`echo ${enable_java_awt} | tr ',' ' '`"
804 use_xlib_awt=""
805 use_gtk_awt=""
806
807 for peer in $peerlibs ; do
808   case $peer in
809     xlib)
810       if [test "$no_x" = yes]; then
811         echo "*** xlib peers requested but no X library available" 1>&2
812         exit 1
813       else
814         use_xlib_awt="yes"
815       fi
816       ;;
817     gtk)
818       # Nothing, yet...
819       ;;
820     *)
821       echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2
822       exit 1
823   esac
824 done
825
826 AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes)
827 AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes)
828
829
830 here=`pwd`
831 AC_SUBST(here)
832
833 # We get this from the environment.
834 AC_SUBST(GCJFLAGS)
835
836 AC_OUTPUT(Makefile libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile,
837 [# Only add multilib support code if we just rebuilt top-level Makefile.
838 case " $CONFIG_FILES " in
839  *" Makefile "*)
840    ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
841    ;;
842 esac
843
844 # Make subdirectories and `.d' files.  Look in both srcdir and
845 # builddir for the .java files.
846 h=`pwd`
847 : > deps.mk
848 ( (cd $srcdir && find . -name '*.java' -print) ;
849   find . -name '*.java' -print) | \
850    fgrep -v testsuite | \
851    sed -e 's/\.java/.d/' | \
852    while read f; do
853       echo "include $f" >> deps.mk
854       test -f $f || {
855 changequote(<<,>>)
856          d=`echo $f | sed -e 's,/[^/]*$,,'`
857 changequote([,])
858          $libgcj_basedir/../mkinstalldirs $d
859          echo > $f
860       }
861    done
862 ],
863 srcdir=${srcdir}
864 host=${host}
865 target=${target}
866 with_multisubdir=${with_multisubdir}
867 ac_configure_args="${multilib_arg} ${ac_configure_args}"
868 CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
869 libgcj_basedir=${libgcj_basedir}
870 CC="${CC}"
871 CXX="${CXX}"
872 )