* link missing classes
[cacao.git] / configure.in
index b33c2bc9d54191eb6c7a1b436c3c4e4e28eb222b..a72f39b5e317a7e15fec98636eaef576b53f8197 100644 (file)
-cdnl autoconf; autoheader; automake
-
 dnl Process this file with autoconf to produce a configure script.
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT([main.c])
-AC_CANONICAL_HOST
 
 
+AC_INIT(cacao, 0.92cvs, cacao@cacaojvm.org)
+AC_CONFIG_SRCDIR(src/cacao/cacao.c)
+AC_CANONICAL_HOST
 AC_PREREQ(2.59)
 AC_PREREQ(2.59)
-AM_INIT_AUTOMAKE(cacao, 0.40)
+AM_INIT_AUTOMAKE([1.9.0])
+AM_MAINTAINER_MODE
+
 AM_CONFIG_HEADER([config.h])
 
 AC_PREFIX_DEFAULT(/usr/local/cacao)
 
 AM_CONFIG_HEADER([config.h])
 
 AC_PREFIX_DEFAULT(/usr/local/cacao)
 
-dnl system type
 
 
+dnl system type
 case "$host_cpu" in
 case "$host_cpu" in
-alpha* )
+alpha | alphaev56 )
        ARCH_DIR="alpha"
         STATIC_CLASSPATH="1"
        ARCH_DIR="alpha"
         STATIC_CLASSPATH="1"
-       CFLAGS="-Wall -O2 -g3 -mieee -D__ALPHA__"
-       AC_DEFINE([TRACE_ARGS_NUM], 6, [Defines integer argument register count])
-       AC_DEFINE([USE_CODEMMAP], 1, [use code mmap])
+       CFLAGS="-mieee -D__ALPHA__"
        ;;
 
        ;;
 
-i386* | i486* | i586* | i686* )
+arm )
+       ARCH_DIR="arm"
+       STATIC_CLASSPATH="1"
+       CFLAGS="-D__ARM__"
+       ;;
+
+i386 | i486 | i586 | i686 )
        ARCH_DIR="i386"
         STATIC_CLASSPATH="0"
        ARCH_DIR="i386"
         STATIC_CLASSPATH="0"
-       CFLAGS="-Wall -O0 -g3 -D__I386__"
-       AC_DEFINE([TRACE_ARGS_NUM], 8, [Defines integer argument register count])
-       AC_DEFINE([USE_CODEMMAP], 1, [use code mmap])
+       CFLAGS="-D__I386__ $CFLAGS"
        ;;
 
        ;;
 
-mips* )
+mips )
        ARCH_DIR="mips"
         STATIC_CLASSPATH="1"
        ARCH_DIR="mips"
         STATIC_CLASSPATH="1"
-       CFLAGS="-64 -O2 -OPT:Olimit=0 -g -DMAP_ANONYMOUS=0 -woff 1110,1164,1515 -D__MIPS__"
-       LIBS="-lelfutil"
-       AC_DEFINE([TRACE_ARGS_NUM], 8, [Defines integer argument register count])
+
+dnl for MIPSPro Compiler
+dnl    CFLAGS="-64 -OPT:Olimit=0 -woff 1110,1164,1515 -D__MIPS__ -D__MIPSEB__"
+       CFLAGS="-64 -OPT:Olimit=0 -D__MIPS__ -D__MIPSEB__"
+
+dnl for GCC
+dnl    CFLAGS="-mabi=64 -D__MIPS__ -D__MIPSEB__"
+dnl    LDFLAGS="-mabi=64"
        ;;
 
        ;;
 
-powerpc* | ppc* )
+powerpc )
        ARCH_DIR="powerpc"
         STATIC_CLASSPATH="1"
        ARCH_DIR="powerpc"
         STATIC_CLASSPATH="1"
-       CFLAGS="-Wall -O2 -g -DMAP_ANONYMOUS=0 -no-cpp-precomp -D__POWERPC__"
-       AC_DEFINE([TRACE_ARGS_NUM], 8, [Defines integer argument register count])
+       CFLAGS="-D__POWERPC__"
        ;;
 
        ;;
 
-x86_64* )
+x86_64 )
        ARCH_DIR="x86_64"
        ARCH_DIR="x86_64"
-        STATIC_CLASSPATH="1"
-       CFLAGS="-Wall -O2 -g3 -D__X86_64__"
-       AC_DEFINE([TRACE_ARGS_NUM], 6, [Defines integer argument register count])
-       AC_DEFINE([USE_CODEMMAP], 1, [use code mmap])
+        STATIC_CLASSPATH="0"
+       CFLAGS="-D__X86_64__"
        ;;
 
        ;;
 
-sparc* | * )
+xdspcore )
+       ARCH_DIR="xdspcore"
+       STATIC_CLASSPATH="1"
+       CFLAGS="-D__XDSPCORE__"
+       USE_SCHEDULER="1"
+       ;;
+* )
        AC_MSG_ERROR($host_cpu systems are not supported at this time)
         ;;
 esac
 
 
        AC_MSG_ERROR($host_cpu systems are not supported at this time)
         ;;
 esac
 
 
+dnl set optimization and debugging for all architectures and systems
+CFLAGS="-O0 -g3 $CFLAGS"
+
+
 case "$host_os" in
 *linux* | *Linux* )
 case "$host_os" in
 *linux* | *Linux* )
-        CFLAGS="$CFLAGS -D__LINUX__ -D_POSIX_C_SOURCE=199506L -D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED -D_BSD_SOURCE"
+       OS_DIR="linux"
+        CFLAGS="-ansi -pedantic -Wall -Wno-long-long $CFLAGS -D__LINUX__ -D_POSIX_C_SOURCE=199506L -D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED -D_BSD_SOURCE"
        ;;
 *darwin* )
        ;;
 *darwin* )
-        CFLAGS="$CFLAGS -D__DARWIN__"
+       OS_DIR="darwin"
+        CFLAGS="-ansi -pedantic -Wall -Wno-long-long $CFLAGS -D__DARWIN__"
         ;;
 *irix* )
         ;;
 *irix* )
+       OS_DIR="irix"
         CFLAGS="$CFLAGS -D__IRIX__"
         ;;
 * )
        ;;
 esac
 
         CFLAGS="$CFLAGS -D__IRIX__"
         ;;
 * )
        ;;
 esac
 
-AC_SUBST(COMPILER_OBJECTS)
 
 
-AC_DEFINE_UNQUOTED([ARCH_DIR], "$ARCH_DIR", [Architecture directory])
+dnl define and substitute some architecture specific variables
+AC_DEFINE_UNQUOTED([ARCH_DIR], "${ARCH_DIR}", [Architecture directory])
 AC_SUBST(ARCH_DIR)
 AC_SUBST(ARCH_DIR)
+AC_SUBST(OS_DIR)
+AC_SUBST(USE_SCHEDULER)
 
 
-AC_ARG_ENABLE([dynamicclasspath], [AS_HELP_STRING(--disable-dynamicclasspath, link classpath native code static even on platforms supporting dynamic loading)], [use_dynamicclasspath=$enableval], [use_dynamicclasspath=yes])
-dnl force static classpath linking ??
-AC_MSG_CHECKING(Link classpath static)
-if test "xno" == "x$use_dynamicclasspath"; then
-  STATIC_CLASSPATH="1"
-fi
 
 
-if test "$STATIC_CLASSPATH" == "1"; then
-       AC_MSG_RESULT(yes)
+dnl define install prefix
+if test "x$prefix" = xNONE; then
+       CACAO_INSTALL_PREFIX=$ac_default_prefix
 else
 else
-       AC_MSG_RESULT(no)
+       CACAO_INSTALL_PREFIX=$prefix
 fi
 fi
-AC_SUBST(STATIC_CLASSPATH)
+AC_DEFINE_UNQUOTED([CACAO_INSTALL_PREFIX], "${CACAO_INSTALL_PREFIX}", [Installation prefix])
+AC_SUBST(CACAO_INSTALL_PREFIX)
+
 
 dnl Checks for programs.
 AC_PROG_CC
 AM_PROG_AS
 AC_PROG_RANLIB
 
 dnl Checks for programs.
 AC_PROG_CC
 AM_PROG_AS
 AC_PROG_RANLIB
+AC_DISABLE_SHARED
+AC_PROG_LN_S
 AC_PROG_MAKE_SET
 
 AC_PROG_MAKE_SET
 
-dnl Checks for libraries.
-dnl AC_CHECK_LIB(m, sin)
+dnl libtool stuff
+AC_LIBTOOL_DLOPEN
+AC_LIBLTDL_CONVENIENCE
+AC_PROG_LIBTOOL
+AC_SUBST(LIBLTDL)
 
 dnl Checks for header files.
 AC_HEADER_DIRENT
 
 dnl Checks for header files.
 AC_HEADER_DIRENT
@@ -123,6 +145,13 @@ AC_FUNC_MMAP
 AC_TYPE_SIGNAL
 AC_CHECK_FUNCS(getcwd gettimeofday mkdir mktime select socket)
 
 AC_TYPE_SIGNAL
 AC_CHECK_FUNCS(getcwd gettimeofday mkdir mktime select socket)
 
+dnl Checks for libraries.
+AC_CHECK_LIB(m, fmod)
+
+dnl Checking sizeof void *
+AC_COMPILE_CHECK_SIZEOF(void *)
+AC_C_BIGENDIAN
+
 dnl Check for mmap header anomalies (missing MAP_FAILED, etc.)
 if test $ac_cv_func_mmap_fixed_mapped = yes; then
        AC_CACHE_CHECK(whether MAP_FAILED is defined,
 dnl Check for mmap header anomalies (missing MAP_FAILED, etc.)
 if test $ac_cv_func_mmap_fixed_mapped = yes; then
        AC_CACHE_CHECK(whether MAP_FAILED is defined,
@@ -145,12 +174,26 @@ if test $ac_cv_func_mmap_fixed_mapped = yes; then
                                    ac_cv_map_anonymous=yes,
                                    ac_cv_map_anonymous=no))
 
                                    ac_cv_map_anonymous=yes,
                                    ac_cv_map_anonymous=no))
 
+       AC_CACHE_CHECK(whether MAP_ANON is defined,
+                      ac_cv_map_anon,
+                      AC_EGREP_CPP(yes, 
+                                   [#include <sys/mman.h>
+                                    #ifdef MAP_ANON
+                                       yes
+                                    #endif],
+                                   ac_cv_map_anon=yes,
+                                   ac_cv_map_anon=no))
+
        if test $ac_cv_map_failed = yes; then
        if test $ac_cv_map_failed = yes; then
-               AC_DEFINE([HAVE_MAP_FAILED], 1, [Define if mman.h defines MAP_FAILED])
+               AC_DEFINE([HAVE_MAP_FAILED], 1, [Define if <sys/mman.h> defines MAP_FAILED])
        fi
 
        if test $ac_cv_map_anonymous = yes; then
        fi
 
        if test $ac_cv_map_anonymous = yes; then
-               AC_DEFINE([HAVE_MAP_ANONYMOUS], 1, [Define if mman.h defines MAP_ANONYMOUS])
+               AC_DEFINE([HAVE_MAP_ANONYMOUS], 1, [Define if <sys/mman.h> defines MAP_ANONYMOUS])
+       fi
+
+       if test $ac_cv_map_anon = yes; then
+               AC_DEFINE([HAVE_MAP_ANON], 1, [Define if <sys/mman.h> defines MAP_ANON])
        fi
 fi
 
        fi
 fi
 
@@ -158,11 +201,38 @@ fi
 dnl Features
 
 dnl check arguments
 dnl Features
 
 dnl check arguments
-AC_ARG_ENABLE([threads], [AS_HELP_STRING(--enable-threads,enable threads support (none,green,native) [[default=native]])])
-AC_ARG_ENABLE([__thread], [AS_HELP_STRING(--disable-__thread,do not use TLS features even when supporting them)], [use__thread=$enableval], [use__thread=yes])
+
+dnl check for garbage collector
+AC_ARG_ENABLE([gc], [AS_HELP_STRING(--disable-gc,disable garbage collector [[default=yes]])])
+
+AC_MSG_CHECKING(whether GC should be disabled)
+if test x"$disable_gc" = "xyes"; then
+       AC_MSG_RESULT(yes)
+       AM_CONDITIONAL([DISABLE_GC], [true])
+else
+       AC_MSG_RESULT(no)
+       AM_CONDITIONAL([DISABLE_GC], [false])
+fi
+
+
+dnl check for statistics
+AC_ARG_ENABLE([statistics], [AS_HELP_STRING(--disable-statistics,disable statistics generation [[default=yes]])])
+
+AC_MSG_CHECKING(whether statistics generation should be enabled)
+if test x"$enable_statistics" = "xno"; then
+       AC_MSG_RESULT(no)
+       AM_CONDITIONAL([STATISTICS], [false])
+else
+       AC_MSG_RESULT(yes)
+       AC_DEFINE([STATISTICS], 1, [use statistics])
+       AM_CONDITIONAL([STATISTICS], [true])
+fi
 
 
 dnl threads
 
 
 dnl threads
+AC_ARG_ENABLE([threads], [AS_HELP_STRING(--enable-threads,enable threads support (none,green,native) [[default=native]])])
+AC_ARG_ENABLE([__thread], [AS_HELP_STRING(--enable-__thread,use TLS features)], [use__thread=$enableval], [use__thread=no])
+
 AC_MSG_CHECKING(whether to include threads support)
 enable_threads=${enable_threads:-native}
 case "$enable_threads" in
 AC_MSG_CHECKING(whether to include threads support)
 enable_threads=${enable_threads:-native}
 case "$enable_threads" in
@@ -170,34 +240,34 @@ no | none | single)
        AC_MSG_RESULT(no)
        dnl no threads for boehm
        ac_configure_args="$ac_configure_args --disable-boehm-threads"
        AC_MSG_RESULT(no)
        dnl no threads for boehm
        ac_configure_args="$ac_configure_args --disable-boehm-threads"
+       AM_CONDITIONAL([USE_THREADS], [false])
+       AM_CONDITIONAL([NATIVE_THREADS], [false])
        ;;
        ;;
+
 green | native | posix | pthreads)
        AC_DEFINE([USE_THREADS], 1, [use threads])
        AC_DEFINE([EXTERNAL_OVERFLOW], 1, [external overflow])
        AC_DEFINE([DONT_FREE_FIRST], 1, [don't free first])
 
 green | native | posix | pthreads)
        AC_DEFINE([USE_THREADS], 1, [use threads])
        AC_DEFINE([EXTERNAL_OVERFLOW], 1, [external overflow])
        AC_DEFINE([DONT_FREE_FIRST], 1, [don't free first])
 
-       LIBTHREAD="libthreads.a"
-       THREAD_OBJ="threads/libthreads.a"
-       AC_SUBST(LIBTHREAD)
-       AC_SUBST(THREAD_OBJ)
+       AM_CONDITIONAL([USE_THREADS], [true])
 
        if test x"$enable_threads" != "xgreen"; then
 
        if test x"$enable_threads" != "xgreen"; then
-               AC_DEFINE([NATIVE_THREADS], 1, [use pthreads])
-               THREAD_LIB="-lpthread"
-               AC_SUBST(THREAD_LIB)
                AC_MSG_RESULT(yes, native)
                 AC_CHECK_LIB(pthread, main)
                AC_MSG_RESULT(yes, native)
                 AC_CHECK_LIB(pthread, main)
+               AC_DEFINE([NATIVE_THREADS], 1, [use pthreads])
 
                CFLAGS="$CFLAGS -D_REENTRANT"
 
 
                CFLAGS="$CFLAGS -D_REENTRANT"
 
-               dnl tell boehm to support threads as well and classpath to
-                dnl synchronize VM threads portably
-               ac_configure_args="$ac_configure_args --enable-boehm-threads=posix --enable-portable-native-sync"
+               dnl tell boehm to support threads as well
+               CONFIGURE_ARGS="${CONFIGURE_ARGS} --enable-boehm-threads=posix"
+               AM_CONDITIONAL([NATIVE_THREADS], [true])
+
        else
                AC_MSG_RESULT(yes, green)
 
                dnl no threads for boehm
        else
                AC_MSG_RESULT(yes, green)
 
                dnl no threads for boehm
-               ac_configure_args="$ac_configure_args --disable-boehm-threads"
+               CONFIGURE_ARGS="${CONFIGURE_ARGS} --disable-boehm-threads"
+               AM_CONDITIONAL([NATIVE_THREADS], [false])
        fi
     ;;
 *)
        fi
     ;;
 *)
@@ -226,141 +296,223 @@ else
 fi
 
 
 fi
 
 
+dnl check if linear scan register allocator(lsra) should be used
+AC_ARG_ENABLE([lsra], [AS_HELP_STRING(--enable-lsra,enable linear scan register allocator [[default=yes]])])
+
+AC_MSG_CHECKING(whether lsra should be supported)
+if test x"$enable_lsra" = "xno"; then
+       AC_MSG_RESULT(no)
+else
+       AC_MSG_RESULT(yes)
+       AC_DEFINE([LSRA], 1, [use lsra])
+fi
+
+
+dnl check for inlining
+dnl AC_ARG_ENABLE([inlining], [AS_HELP_STRING(--disable-inlining,disable method inlining [[default=yes]])])
+
+dnl AC_MSG_CHECKING(whether method inlining should be disabled)
+dnl if test x"$enable_inlining" = "xno"; then
+dnl    AC_MSG_RESULT(yes)
+dnl    AM_CONDITIONAL([USE_INLINING], [false])
+dnl else
+dnl    AC_MSG_RESULT(no)
+       AC_DEFINE([USE_INLINING], 1, [use method inlining])
+       AM_CONDITIONAL([USE_INLINING], [true])
+dnl fi
+
+
+dnl check for instruction scheduler
+AC_ARG_ENABLE([scheduler], [AS_HELP_STRING(--enable-scheduler,enable instruction scheduler [[default=no]])])
+
+AC_MSG_CHECKING(whether instruction scheduler should be supported)
+if test x"${USE_SCHEDULER}" = "x1" -o x"$enable_scheduler" = "xyes"; then
+       case "${ARCH_DIR}" in
+               xdspcore )
+                       ;;
+               * )
+                       AC_MSG_ERROR(instruction scheduler is not available for ${ARCH_DIR} code generator)
+                       ;;
+       esac
+
+       AC_MSG_RESULT(yes)
+       AC_DEFINE([USE_SCHEDULER], 1, [use scheduler])
+       AM_CONDITIONAL([USE_SCHEDULER], [true])
+else
+       AC_MSG_RESULT(no)
+       AM_CONDITIONAL([USE_SCHEDULER], [false])
+fi
+
+
 dnl check if zlib should be used
 AC_ARG_ENABLE([zlib], [AS_HELP_STRING(--enable-zlib,enable zip archive class storage (needs zlib) [[default=yes]])])
 
 AC_MSG_CHECKING(whether zip archives should be supported)
 if test x"$enable_zlib" = "xno"; then
 dnl check if zlib should be used
 AC_ARG_ENABLE([zlib], [AS_HELP_STRING(--enable-zlib,enable zip archive class storage (needs zlib) [[default=yes]])])
 
 AC_MSG_CHECKING(whether zip archives should be supported)
 if test x"$enable_zlib" = "xno"; then
-       ZIP_LIBS=""
-       ZIP_C=""
        AC_MSG_RESULT(no)
        AC_MSG_RESULT(no)
+       AM_CONDITIONAL([USE_ZLIB], [false])
 else
 else
-       ZIP_LIBS="-lz"
-       ZIP_C="unzip.c"
-       AC_DEFINE([USE_ZLIB], 1, [use zlib])
        AC_MSG_RESULT(yes)
        AC_MSG_RESULT(yes)
+       AC_DEFINE([USE_ZLIB], 1, [use zlib])
+        AC_CHECK_HEADERS([zlib.h])
         AC_CHECK_LIB(z, main)
         AC_CHECK_LIB(z, main)
+       AM_CONDITIONAL([USE_ZLIB], [true])
 fi
 fi
-AC_SUBST(ZIP_LIBS)
-AC_SUBST(ZIP_C)
 
 
 
 
-dnl set some essential classpath options, even if their classpath default is
-dnl suitable for us
-ac_configure_args="$ac_configure_args --enable-jni --disable-cni --disable-regen-headers --enable-static --enable-shared --enable-load-library"
+dnl check if classpath should be linked statically with CACAO
+AC_ARG_ENABLE([dynamicclasspath], [AS_HELP_STRING(--disable-dynamicclasspath, link classpath native code static even on platforms supporting dynamic loading)], [use_dynamicclasspath=$enableval], [use_dynamicclasspath=yes])
 
 
+AC_MSG_CHECKING(whether to link GNU classpath statically)
+if test x"$use_dynamicclasspath" = "xno"; then
+       STATIC_CLASSPATH="1"
+fi
 
 
-dnl check arguments
-AC_ARG_ENABLE([gtk-peer], [AS_HELP_STRING(--enable-gtk-peer,compile GTK native peers [[default=no]])])
+if test x"${STATIC_CLASSPATH}" = "x1"; then
+       AC_MSG_RESULT(yes)
+       AM_CONDITIONAL([STATIC_CLASSPATH], [true])
+else
+       AC_MSG_RESULT(no)
+       AM_CONDITIONAL([STATIC_CLASSPATH], [false])
+fi
+AC_SUBST(STATIC_CLASSPATH)
 
 
 dnl enable gtk peer
 
 
 dnl enable gtk peer
-AC_MSG_CHECKING(whether to use gtk awt peers)
+AC_ARG_ENABLE([gtk-peer], [AS_HELP_STRING(--enable-gtk-peer,compile GTK native peers [[default=no]])])
+
+AC_MSG_CHECKING(whether to use GTK awt peers)
 if test x"$enable_gtk_peer" = "xyes"; then
        AC_MSG_RESULT(yes)
 if test x"$enable_gtk_peer" = "xyes"; then
        AC_MSG_RESULT(yes)
-       CACAO_GTK=yes
-       AWTPEERS="java.awt.peer.ComponentPeer \
-               java.awt.Graphics\
-               java.awt.Window\
-               java.awt.peer.MenuPeer \
-               java.awt.peer.MenuItemPeer \
-               gnu.java.awt.peer.gtk.GdkPixbufDecoder \
-               gnu.java.awt.peer.gtk.GtkGenericPeer \
-               gnu.java.awt.peer.gtk.GtkMenuBarPeer \
-               gnu.java.awt.peer.gtk.GtkScrollPanePeer \
-               gnu.java.awt.peer.gtk.GtkMenuPeer \
-               gnu.java.awt.peer.gtk.GtkTextComponentPeer \
-               gnu.java.awt.peer.gtk.GtkComponentPeer \
-               gnu.java.awt.peer.gtk.GtkPopupMenuPeer \
-               gnu.java.awt.peer.gtk.GtkCheckboxPeer \
-               gnu.java.awt.peer.gtk.GtkCheckboxGroupPeer \
-               gnu.java.awt.peer.gtk.GtkMenuItemPeer \
-               gnu.java.awt.peer.gtk.GdkGraphics \
-               gnu.java.awt.peer.gtk.GtkToolkit \
-               gnu.java.awt.peer.gtk.GtkCanvasPeer \
-               gnu.java.awt.peer.gtk.GtkFramePeer \
-               gnu.java.awt.peer.gtk.GdkFontMetrics \
-               gnu.java.awt.peer.gtk.GtkScrollbarPeer \
-               gnu.java.awt.peer.gtk.GtkListPeer \
-               gnu.java.awt.peer.gtk.GtkLabelPeer \
-               gnu.java.awt.peer.gtk.GtkTextAreaPeer \
-               gnu.java.awt.peer.gtk.GtkFileDialogPeer \
-               gnu.java.awt.peer.gtk.GtkImagePainter \
-               gnu.java.awt.peer.gtk.GtkChoicePeer \
-               gnu.java.awt.peer.gtk.GtkPanelPeer \
-               gnu.java.awt.peer.gtk.GtkMainThread \
-               gnu.java.awt.peer.gtk.GtkButtonPeer \
-               gnu.java.awt.peer.gtk.GtkTextFieldPeer \
-               gnu.java.awt.peer.gtk.GtkCheckboxMenuItemPeer \
-               gnu.java.awt.peer.gtk.GtkClipboard \
-               gnu.java.awt.peer.gtk.GtkWindowPeer"
-               AWT_OBJS="classpath/native/jni/gtk-peer/.libs/libgtkpeer.a \
-                       -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 \
-                       -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 \
-                       -lgthread-2.0 -lart_lgpl_2"
-               USEGTK="yes"
-               AC_SUBST(USEGTK)
-               AC_SUBST(AWTPEERS)
-               AC_SUBST(AWT_OBJS)
-               AC_DEFINE([USE_GTK], 1, [use gtk])
-
+       AC_DEFINE([USE_GTK], 1, [use gtk])
+       AM_CONDITIONAL([USE_GTK_PEER], [true])
+       USE_GTK_PEER=yes
 else
 else
-       CACAO_GTK=no
-       AWT_OBJS=""
-       AWTPEERS=""
-       USEGTK="no"
-       AC_SUBST(USEGTK)
-       AC_SUBST(AWTPEERS)
-       AC_SUBST(AWT_OBJS)
        AC_MSG_RESULT(no)
        AC_MSG_RESULT(no)
-
-        ac_configure_args="$ac_configure_args --disable-gtk-peer"
+       AM_CONDITIONAL([USE_GTK_PEER], [false])
+       CONFIGURE_ARGS="${CONFIGURE_ARGS} --disable-gtk-peer"
+       USE_GTK_PEER=no
 fi
 fi
+AC_SUBST(USE_GTK_PEER)
 
 
 
 
-if test "x1" == "x$STATIC_CLASSPATH"; then
-       STATIC_CLASSPATH_LIBS=" \
-        classpath/native/jni/java-io/.libs/libjavaio.a \
-        classpath/native/jni/java-nio/.libs/libjavanio.a \
-        classpath/native/jni/java-net/.libs/libjavanet.a \
-        classpath/native/jni/java-util/.libs/libjavautil.a \
-        classpath/native/jni/java-lang/.libs/libjavalang.a \
-        classpath/native/jni/java-lang/.libs/libjavalangreflect.a"
-        DYNAMIC_CLASSPATH_LIBS=""
-       AC_SUBST(STATIC_CLASSPATH_LIBS)
-       AC_SUBST(DYNAMIC_CLASSPATH_LIBS)
+dnl pass configure options to classpath
+if test x"${STATIC_CLASSPATH}" = "x1"; then
         AC_DEFINE([STATIC_CLASSPATH], 1, [use classpath statically linked])
         AC_DEFINE([STATIC_CLASSPATH], 1, [use classpath statically linked])
+       AM_CONDITIONAL([STATIC_CLASSPATH], [true])
+       CONFIGURE_ARGS="${CONFIGURE_ARGS} --enable-static --disable-shared"
+
+       dnl check for some classpath related stuff when we link statically
+       AM_ICONV_LINK
+
+       dnl taken from GNU classpath configure.ac
+       if test x"${USE_GTK_PEER}" = "xyes"; then
+               AC_ERROR(XXX this is not supported yet)
+               AC_PATH_XTRA
+               if test "$no_x" = yes; then
+                       AC_MSG_ERROR([GTK+ peers requested but no X library available])
+               fi
+               dnl We explicitly want the XTest Extension for Robot support.
+               AC_CHECK_LIB([Xtst], [XTestQueryExtension], [true],
+                            [AC_MSG_ERROR([libXtst NOT found, required for GdkRobot])],
+                            [${X_LIBS}])
+               PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 libart-2.0 gdk-pixbuf-2.0)
+               AC_SUBST(GTK_CFLAGS)
+               AC_SUBST(GTK_LIBS)
+
+               AC_SUBST(CAIRO_LIBS)
+               AC_SUBST(CAIRO_CFLAGS)
+               PKG_CHECK_MODULES(PANGOFT2, pangoft2)
+               AC_SUBST(PANGOFT2_LIBS)
+               AC_SUBST(PANGOFT2_CFLAGS)
+       fi
+else
+       AM_CONDITIONAL([STATIC_CLASSPATH], [false])
+       CONFIGURE_ARGS="${CONFIGURE_ARGS} --disable-static --enable-shared"
+fi
 
 
+
+dnl should we use an external classpath installation
+AC_ARG_WITH([external-classpath], [AS_HELP_STRING(--with-external-classpath=<dir>,installation directory of external GNU classpath [[default=no]])])
+
+AC_MSG_CHECKING(whether to use an external GNU classpath)
+if test x"$with_external_classpath" != "x"; then
+       if test x"$with_external_classpath" = "xyes"; then
+               AC_MSG_ERROR(please specify the installation prefix)
+       fi
+       AC_MSG_RESULT($with_external_classpath)
+       AC_DEFINE([WITH_EXTERNAL_CLASSPATH], 1, [external classpath])
+       AM_CONDITIONAL([WITH_EXTERNAL_CLASSPATH], [true])
+       EXTERNAL_CLASSPATH_PREFIX="$with_external_classpath"
+       AC_DEFINE_UNQUOTED([EXTERNAL_CLASSPATH_PREFIX], "${EXTERNAL_CLASSPATH_PREFIX}", [external classpath directory])
+       AC_SUBST(EXTERNAL_CLASSPATH_PREFIX)
 else
 else
-       DYNAMIC_CLASSPATH_LIBS="-ldl -Wl,--export-dynamic"
-       STATIC_CLASSPATH_LIBS=""
-       AC_SUBST(STATIC_CLASSPATH_LIBS)
-       AC_SUBST(DYNAMIC_CLASSPATH_LIBS)
+       AC_MSG_RESULT(no)
+       AM_CONDITIONAL([WITH_EXTERNAL_CLASSPATH], [false])
 fi
 
 
 fi
 
 
+dnl set some essential classpath options, even if their classpath default is
+dnl suitable for us
+ac_configure_args="$ac_configure_args --libdir=${CACAO_INSTALL_PREFIX}/jre/lib/${ARCH_DIR} --enable-jni --disable-cni --disable-regen-headers ${CONFIGURE_ARGS}"
 
 
 dnl now configure boehm gc and gnu classpath
 dnl the export is not my favorite (is there another way?)
 export CFLAGS
 
 
 dnl now configure boehm gc and gnu classpath
 dnl the export is not my favorite (is there another way?)
 export CFLAGS
-export CACAO_GTK
-AC_CONFIG_SUBDIRS(mm/boehm-gc classpath)
-
-
-AC_OUTPUT(Makefile \
-          mm/Makefile \
-         toolbox/Makefile \
-         threads/Makefile \
-         jit/Makefile \
-          jit/loop/Makefile \
-          jit/alpha/Makefile \
-          jit/i386/Makefile \
-          jit/mips/Makefile \
-          jit/powerpc/Makefile \
-          jit/x86_64/Makefile \
-          nat/Makefile \
-          doc/Makefile \
-         tst/Makefile \
-         tst/kaffe/Makefile \
-         jvmtst/Makefile )
+AC_CONFIG_SUBDIRS(src/boehm-gc src/classpath src/libltdl)
+
+
+AC_CONFIG_FILES([Makefile]
+               [doc/Makefile]
+               [doc/handbook/Makefile]
+               [man/Makefile]
+               [src/Makefile]
+               [src/cacao/Makefile]
+               [src/cacaoh/Makefile]
+               [src/lib/Makefile]
+               [src/mm/Makefile]
+               [src/native/Makefile]
+               [src/native/include/Makefile]
+               [src/native/tools/Makefile]
+               [src/native/vm/Makefile]
+               [src/scripts/Makefile]
+               [src/scripts/cacao]
+               [src/scripts/java]
+               [src/scripts/kjc]
+               [src/scripts/rmic]
+               [src/scripts/rmiregistry]
+               [src/threads/Makefile]
+               [src/threads/green/Makefile]
+               [src/threads/native/Makefile]
+               [src/toolbox/Makefile]
+               [src/vm/Makefile]
+               [src/vm/jit/Makefile]
+               [src/vm/jit/alpha/Makefile]
+               [src/vm/jit/arm/Makefile]
+               [src/vm/jit/i386/Makefile]
+               [src/vm/jit/inline/Makefile]
+               [src/vm/jit/loop/Makefile]
+               [src/vm/jit/mips/Makefile]
+               [src/vm/jit/powerpc/Makefile]
+               [src/vm/jit/powerpc/darwin/Makefile]
+               [src/vm/jit/powerpc/linux/Makefile]
+               [src/vm/jit/schedule/Makefile]
+               [src/vm/jit/tools/Makefile]
+               [src/vm/jit/verify/Makefile]
+               [src/vm/jit/x86_64/Makefile]
+               [tests/Makefile]
+               [tests/codepatching/Makefile]
+               [tests/kaffe/Makefile]
+               [tests/native/Makefile])
+
+AC_OUTPUT
+
+
+## Local variables:
+## mode: m4
+## indent-tabs-mode: t
+## c-basic-offset: 4
+## tab-width: 8
+## compile-command: "automake --add-missing"
+## End: