diff options
Diffstat (limited to 'libjava/configure.in')
-rw-r--r-- | libjava/configure.in | 387 |
1 files changed, 387 insertions, 0 deletions
diff --git a/libjava/configure.in b/libjava/configure.in new file mode 100644 index 0000000..98083c9 --- /dev/null +++ b/libjava/configure.in @@ -0,0 +1,387 @@ +dnl Process this with autoconf to create configure +AC_INIT(java/lang/System.java) + +dnl Can't be done in LIBGCJ_CONFIGURE because that confuses automake. +AC_CONFIG_AUX_DIR(..) + +AC_CANONICAL_SYSTEM + +dnl We use these options to decide which functions to include. +AC_ARG_WITH(target-subdir, +[ --with-target-subdir=SUBDIR Configuring in a subdirectory]) +AC_ARG_WITH(cross-host, +[ --with-cross-host=HOST Configuring with a cross compiler]) + +LIBGCJ_CONFIGURE(.) + +AM_CONFIG_HEADER(include/config.h) + +if test -z "$with_target_subdir" || test "$with_target_subdir" = "."; then + COMPPATH=. +else + COMPPATH=.. +fi +AC_SUBST(COMPPATH) + +dnl The -no-testsuite modules omit the test subdir. +AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite) + +dnl See whether the user prefers size or speed for Character. +dnl The default is size. +AC_ARG_ENABLE(fast-character, +[ --enable-fast-character Prefer speed over size for Character], +# Nothing +, AC_DEFINE(COMPACT_CHARACTER)) + +dnl See if the user has requested runtime debugging. +AC_ARG_ENABLE(libgcj-debug, +[ --enable-libgcj-debug Enable runtime debugging code], + if test "$enable_libgcj_debug" = yes; then + AC_DEFINE(DEBUG) + fi) + +dnl If the target is an eCos system, use the appropriate eCos +dnl I/O routines. +dnl FIXME: this should not be a local option but a global target +dnl system; at present there is no eCos target. +TARGET_ECOS="no" +AC_ARG_WITH(ecos, +[ --with-ecos Enable runtime eCos target support.], +TARGET_ECOS="$with_ecos" +) + +case "$TARGET_ECOS" in + no) + FILE_DESCRIPTOR=natFileDescriptorPosix.cc + ;; + *) + FILE_DESCRIPTOR=natFileDescriptorEcos.cc + AC_DEFINE(ECOS) + ;; +esac + +AC_EGREP_HEADER(__uint32_t, sys/types.h, AC_DEFINE(HAVE_INT32_DEFINED)) +AC_EGREP_HEADER(__uint32_t, sys/config.h, AC_DEFINE(HAVE_INT32_DEFINED)) + +dnl These may not be defined in a non-ANS conformant embedded system. +dnl FIXME: Should these case a runtime exception in that case? +AC_EGREP_HEADER(mktime, time.h, AC_DEFINE(HAVE_MKTIME)) +AC_EGREP_HEADER(localtime, time.h, AC_DEFINE(HAVE_LOCALTIME)) + +dnl Create the subdirectory for natFileDescriptor.cc, or the attempt +dnl to create the link will fail. +test -d java || mkdir java +test -d java/io || mkdir java/io +AC_LINK_FILES(java/io/$FILE_DESCRIPTOR, java/io/natFileDescriptor.cc) + +dnl Allow the GC to be disabled. Can be useful when debugging. +AC_MSG_CHECKING([for garbage collector to use]) +AC_ARG_ENABLE(java-gc, +changequote(<<,>>)dnl +<< --enable-java-gc=TYPE choose garbage collector [boehm]>>, +changequote([,]) + GC=$enableval, + GC=boehm) +GCLIBS= +GCINCS= +GCDEPS= +GCOBJS= +case "$GC" in + boehm) + AC_MSG_RESULT(boehm) + GCLIBS='-L$(top_builddir)/../boehm-gc -lgcjgc' + GCDEPS='$(top_builddir)/../boehm-gc/libgcjgc.a' + GCINCS='-I$(top_srcdir)/../boehm-gc -I$(top_builddir)/../boehm-gc' + dnl We also want to pick up some cpp flags required when including + dnl boehm-config.h. Yuck. + GCINCS="$GCINCS `cat ../boehm-gc/boehm-cflags`" + GCOBJS=boehm.o + GCHDR=boehm-gc.h + dnl The POSIX thread support needs to know this. + AC_DEFINE(HAVE_BOEHM_GC) + ;; + no) + AC_MSG_RESULT(none) + GCOBJS=nogc.o + GCHDR=no-gc.h + ;; + *) + AC_MSG_ERROR(unrecognized collector \"$GC\") + ;; +esac +AC_SUBST(GCLIBS) +AC_SUBST(GCINCS) +AC_SUBST(GCDEPS) +AC_SUBST(GCOBJS) +AC_LINK_FILES(include/$GCHDR, include/java-gc.h) + + +dnl Note that this code is kept in sync with similar code in gcc/configure.in. +dnl In particular both packages must make the same decision about which +dnl thread package to use. +AC_MSG_CHECKING([for threads package to use]) +AC_ARG_ENABLE(threads, [ --enable-threads=TYPE choose threading package], + THREADS=$enableval, + dnl FIXME: figure out native threads to use here. + THREADS=no) + +if test "$THREADS" = yes; then + case "$host" in + *-*-vxworks*) + THREADS=vxworks + ;; + *-*-linux*) + # FIXME: this isn't correct in all cases. + THREADS=posix + ;; + *-*-win*) + THREADS=win32 + ;; + *-*-irix*) + THREADS=irix + ;; + *-*-solaris*) + # FIXME: for now, choose POSIX, because we implement that. + # Later, choose solaris threads. + THREADS=posix + ;; + *) + # For now. + THREADS=none + ;; + esac +fi + +case "$THREADS" in + no | none | single) + THREADS=none + ;; + posix | pthreads) + THREADS=posix + case "$host" in + *-*-linux*) + AC_DEFINE(LINUX_THREADS) + ;; + esac + ;; + qt) + ;; + decosf1 | irix | mach | os2 | solaris | win32 | dce | vxworks) + AC_MSG_ERROR(thread package $THREADS not yet supported) + ;; + *) + AC_MSG_ERROR($THREADS is an unknown thread package) + ;; +esac +AC_MSG_RESULT($THREADS) + +THREADLIBS= +THREADINCS= +THREADDEPS= +THREADOBJS= +THREADH= +case "$THREADS" in + posix) + THREADLIBS=-lpthread + THREADOBJS=posix-threads.o + THREADH=posix-threads.h + # MIT pthreads doesn't seem to have the mutexattr functions. + # But for now we don't check for it. We just assume you aren't + # using MIT pthreads. + AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT) + ;; + + qt) + THREADLIBS='-L$(top_builddir)/../qthreads -lgcjcoop' + THREADOBJS=quick-threads.o + THREADINCS='-I$(top_srcdir)/../qthreads' + THREADH=quick-threads.h + THREADDEPS='$(top_builddir)/../qthreads/libgcjcoop.a' + ;; + + none) + THREADOBJS=no-threads.o + THREADH=no-threads.h + ;; +esac +AC_LINK_FILES(include/$THREADH, include/java-threads.h) +AC_SUBST(THREADLIBS) +AC_SUBST(THREADINCS) +AC_SUBST(THREADDEPS) +AC_SUBST(THREADOBJS) + +AM_CONDITIONAL(USING_GCC, test "$GCC" = yes) + +CANADIAN=no +NULL_TARGET=no + +# Find eh-common.h and support headers. If we're in the tree with +# gcc, then look there. Otherwise look in compat-include. If all else +# fails, just hope the user has set things up somehow. +if test -r $srcdir/../gcc/eh-common.h; then + EH_COMMON_INCLUDE='-I$(top_srcdir)/../gcc -I$(top_srcdir)/../include' +else + if test -d $srcdir/../compat-include; then + EH_COMMON_INCLUDE='-I$(top_srcdir)/../compat-include' + else + EH_COMMON_INCLUDE= + fi +fi + +if test -n "${with_cross_host}"; then + # We are being configured with a cross compiler. AC_REPLACE_FUNCS + # may not work correctly, because the compiler may not be able to + # link executables. + + # We assume newlib. This lets us hard-code the functions we know + # we'll have. + AC_DEFINE(HAVE_MEMMOVE) + AC_DEFINE(HAVE_MEMCPY) + AC_DEFINE(HAVE_STRERROR) + AC_DEFINE(HAVE_CTIME_R) + AC_DEFINE(HAVE_GMTIME_R) + AC_DEFINE(HAVE_LOCALTIME_R) + dnl This is only for POSIX threads. + AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT) + dnl We also assume we are using gcc, which provides alloca. + AC_DEFINE(HAVE_ALLOCA) + + # If Canadian cross, then don't pick up tools from the build + # directory. + if test "$build" != "$with_cross_host"; then + CANADIAN=yes + EH_COMMON_INCLUDE= + fi +else + # Some POSIX thread systems don't have pthread_mutexattr_settype. + # E.g., Solaris. + AC_CHECK_FUNCS(strerror ioctl select open fsync sleep) + AC_CHECK_FUNCS(ctime_r ctime, break) + AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r) + AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath) + AC_CHECK_FUNCS(inet_aton inet_addr, break) + AC_CHECK_FUNCS(inet_pton uname) + + AC_CHECK_FUNCS(gethostbyname_r, [ + AC_DEFINE(HAVE_GETHOSTBYNAME_R) + # There are two different kinds of gethostbyname_r. + # We look for the one that returns `int'. + # Hopefully this check is robust enough. + AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [ + AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT)])]) + + AC_CHECK_FUNCS(gethostbyaddr_r, [ + AC_DEFINE(HAVE_GETHOSTBYADDR_R) + # There are two different kinds of gethostbyaddr_r. + # We look for the one that returns `int'. + # Hopefully this check is robust enough. + AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [ + AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT)])]) + + AC_CHECK_FUNCS(gethostname, [ + AC_DEFINE(HAVE_GETHOSTNAME) + AC_EGREP_HEADER(gethostname, unistd.h, [ + AC_DEFINE(HAVE_GETHOSTNAME_DECL)])]) + + # Look for these functions in the thread library. + save_LIBS="$LIBS" + LIBS="$LIBS $THREADLIBS" + AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np sched_yield) + LIBS="$save_LIBS" + + # We require a way to get the time. + time_found=no + AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes) + if test "$time_found" = no; then + AC_MSG_ERROR([no function found to get the time]) + fi + + # We require memmove. + memmove_found=no + AC_CHECK_FUNCS(memmove, memmove_found=yes) + if test "$memmove_found" = no; then + AC_MSG_ERROR([memmove is required]) + fi + + # We require memcpy. + memcpy_found=no + AC_CHECK_FUNCS(memcpy, memcpy_found=yes) + if test "$memcpy_found" = no; then + AC_MSG_ERROR([memcpy is required]) + fi + + test -d "$libgcj_basedir/../gcc/java" || { + CANADIAN=yes + NULL_TARGET=yes + } +fi + +AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes) +AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes) +AM_CONDITIONAL(NATIVE, test "$CANADIAN" = no || test "$NULL_TARGET" = yes) + +AC_SUBST(EH_COMMON_INCLUDE) + +AC_SUBST(AM_RUNTESTFLAGS) + +dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there. +dnl On that system, sys/ioctl.h will not include sys/filio.h unless +dnl BSD_COMP is defined; just including sys/filio.h is simpler. +AC_CHECK_HEADERS(unistd.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) +dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h +dnl for now. If you change this, you also must update natFile.cc. +AC_CHECK_HEADERS(dirent.h) + +AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h]) +AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;], + [AC_DEFINE(HAVE_INET6) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) + +AC_MSG_CHECKING([for socklen_t in sys/socket.h]) +AC_TRY_COMPILE([#include <sys/socket.h>], [socklen_t x = 5;], + [AC_DEFINE(HAVE_SOCKLEN_T) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) + +AC_MSG_CHECKING([for tm_gmtoff in struct tm]) +AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;], + [AC_DEFINE(STRUCT_TM_HAS_GMTOFF) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_MSG_CHECKING([for global timezone variable]) + dnl FIXME: we don't want a link check here because that won't work + dnl when cross-compiling. So instead we make an assumption that + dnl the header file will mention timezone if it exists. + AC_TRY_COMPILE([#include <time.h>], [long z2 = timezone;], + [AC_DEFINE(HAVE_TIMEZONE) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)])]) + +AC_FUNC_ALLOCA + +AC_CHECK_PROGS(PERL, perl, false) + +if test "${multilib}" = "yes"; then + multilib_arg="--enable-multilib" +else + multilib_arg= +fi + +here=`pwd` +AC_SUBST(here) + +AC_OUTPUT(Makefile testsuite/Makefile, +[if test -n "$CONFIG_FILES"; then + ac_file=Makefile . ${libgcj_basedir}/../config-ml.in +fi], +srcdir=${srcdir} +host=${host} +target=${target} +with_multisubdir=${with_multisubdir} +ac_configure_args="${multilib_arg} ${ac_configure_args}" +CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} +libgcj_basedir=${libgcj_basedir} +CC="${CC}" +CXX="${CXX}" +) |