OSDN Git Service

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