############################################################################### ## Copyright © 2005-2009 by Gabriele Svelto ## ## gabriele.svelto@gmail.com ## ## ## ## This file is part of Jelatine. ## ## ## ## Jelatine is free software: you can redistribute it and/or modify ## ## it under the terms of the GNU General Public License as published by ## ## the Free Software Foundation, either version 3 of the License, or ## ## (at your option) any later version. ## ## ## ## Jelatine is distributed in the hope that it will be useful, ## ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## ## GNU General Public License for more details. ## ## ## ## You should have received a copy of the GNU General Public License ## ## along with Jelatine. If not, see . ## ############################################################################### AC_INIT([Jelatine], [0.9.4], [gabriele.svelto@gmail.com], [jelatine]) AM_INIT_AUTOMAKE # Prerequisite autoconf version AC_PREREQ([2.60]) # Inform autoconf to output a config.h file AC_CONFIG_HEADERS([config.h]) # Check if main.c is present in the 'src' directory AC_CONFIG_SRCDIR([src/jelatine/main.c]) # Set to 'lib' the directory where AC_LIBOBJ replacements are present AC_CONFIG_LIBOBJ_DIR([lib]) # Set to 'm4' the directory where aclocal should look for extra macros AC_CONFIG_MACRO_DIR([m4]) # Jelatine definitions templates AH_TEMPLATE([JEL_JARFILE_SUPPORT], [Enabled if JAR file support is needed]) AH_TEMPLATE([JEL_SOCKET_SUPPORT], [Enabled if socket support is used]) AH_TEMPLATE([JEL_THREAD_POSIX], [Enabled when POSIX thread support is used]) AH_TEMPLATE([JEL_THREAD_PTH], [Enabled when GNU Pth thread support is used]) AH_TEMPLATE([JEL_THREAD_NONE], [Enabled when thread support is disabled]) AH_TEMPLATE([JEL_THREADED_INTERPRETER], [Enabled if the threaded, optimized interpreter is needed]) AH_TEMPLATE([JEL_FINALIZER], [Enabled if object finalization is needed]) AH_TEMPLATE([JEL_FP_SUPPORT], [Enabled if floating-point support is needed]) AH_TEMPLATE([JEL_POINTER_REVERSAL], [Enabled if the pointer reversal based garbage collector is needed]) AH_TEMPLATE([JEL_TRACE], [Enabled if bytecode/method tracing is needed]) AH_TEMPLATE([JEL_PRINT], [Enabled if bytecode/method printing is needed]) AH_TEMPLATE([JEL_CLASSPATH_DIR], [Holds the default classpath directory]) AH_TEMPLATE([NDEBUG], [Enabled if debugging code must be removed]) # Define shell variables AS_VAR_SET(want_preverifier, yes) AS_VAR_SET(jar_support, yes) AS_VAR_SET(socket_support, yes) AS_VAR_SET(threaded, auto) AS_VAR_SET(thread_model, auto) AS_VAR_SET(finalizer, yes) AS_VAR_SET(fp_support, yes) ################################################################################ # Define the extra arguments the user can pass to the configure script # ################################################################################ AC_ARG_ENABLE( [preverifier], [AC_HELP_STRING( [--disable-preverifier], [Do not build the preverifier] )], [AS_VAR_SET(want_preverifier, no)] ) AC_ARG_ENABLE( [jar], [AC_HELP_STRING( [--disable-jar], [Disables JAR file support in the VM] )], [AS_VAR_SET(jar_support, no)] ) AC_ARG_ENABLE( [socket], [AC_HELP_STRING( [--disable-socket], [Disables socket support in the VM] )], [AS_VAR_SET(socket_support, no)] ) AC_ARG_ENABLE( [threaded], [AC_HELP_STRING( [--disable-threaded], [Disables optimized threaded interpreter] )], [AS_VAR_SET(threaded, no)], ) AC_ARG_WITH( [thread-model], [AC_HELP_STRING( [--with-thread-model=], [Selects the thread model used by the VM (pthread, pth, none) [default=auto]])], [AS_VAR_SET(thread_model, $withval)], ) AC_ARG_ENABLE( [finalizer], [AC_HELP_STRING( [--disable-finalizer], [Disables object finalization support] )], [AS_VAR_SET(finalizer, no)], ) AC_ARG_ENABLE( [fp-support], [AC_HELP_STRING( [--disable-fp-support], [Disables fp support in the VM] )], [AS_VAR_SET(fp_support, no)], ) AC_ARG_ENABLE( [prgc], [AC_HELP_STRING( [--disable-prgc], [Disables the pointer reversal algorythm in the garbage collector] )], , [AC_DEFINE([JEL_POINTER_REVERSAL], [1])] ) AC_ARG_ENABLE( [debug], [AC_HELP_STRING( [--enable-debug], [Enables debugging code] )], [AS_VAR_SET(debug, yes)], [AS_VAR_SET(debug, no) AC_DEFINE([NDEBUG], [1])] ) AC_ARG_ENABLE( [tracing], [AC_HELP_STRING( [--enable-tracing], [Enables bytecode/method tracing facilities] )], [AC_DEFINE([JEL_TRACE], [1])] ) AC_ARG_ENABLE( [printing], [AC_HELP_STRING( [--enable-printing], [Enables bytecode/method printing facilites] )], [AC_DEFINE([JEL_PRINT], [1])] ) ################################################################################ # Check for programs # ################################################################################ # Check for a working C compiler AC_PROG_CC_C99 AS_IF([test "x$ac_cv_prog_cc_c99" = xno], [AC_MSG_WARN([You don't seem to have a C99 compiler, compilation may fail])] ) # Enable POSIX extensions for targets which disables them by default AC_USE_SYSTEM_EXTENSIONS # Check for a usable 'jar' program AC_CHECK_PROGS([JAR], [jar fastjar], [no]) AS_IF([test "x$JAR" = xno], [AS_IF([test "x$jar_support" = xyes], [AC_MSG_WARN(['jar' not found, JAR file support disabled])] ) AS_VAR_SET(jar_support, no)] ) ################################################################################ # Check for libraries # ################################################################################ # JAR support PKG_CHECK_ZZIPLIB([ZZIP], [0.13.00], [AS_VAR_SET(have_zzip, yes)], [AS_VAR_SET(have_zzip, no)] ) AS_IF([test "x$jar_support" = xyes], [AS_IF([test "x$have_zzip" = xyes], [LIBS="$LIBS $ZZIP_LIBS" CFLAGS="$CFLAGS $ZZIP_CFLAGS" AC_SUBST([LIBS]) AC_SUBST([CFLAGS]) AC_DEFINE([JEL_JARFILE_SUPPORT], [1])], [AS_VAR_SET(jar_support, no) AC_MSG_WARN([JAR file support disabled, zziplib may not be installed or you may have an outdated version])] )], ) # POSIX threads ACX_PTHREAD([AS_VAR_SET(have_pthread, yes)]) # libpth AC_CHECK_PTH([2.0.0], [], [], [no], [AS_VAR_SET(have_pth, yes)]) # Select the thread model AS_IF([test "x$thread_model" = xauto], [AS_IF([test "x$have_pthread" = xyes], [AS_VAR_SET(thread_model, pthread)], [AS_IF([test "x$have_pth" = xyes], [AS_VAR_SET(thread_model, pth)], [AS_VAR_SET(thread_model, none)] )] )] ) AS_CASE(AS_VAR_GET(thread_model), [pthread], [AS_IF([test "x$have_pthread" = xyes], [AC_DEFINE([JEL_THREAD_POSIX], [1]) LIBS="$LIBS $PTHREAD_LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CC="$PTHREAD_CC" AC_SUBST([LIBS]) AC_SUBST([CFLAGS]) AC_SUBST([CC])], [AC_MSG_ERROR([POSIX threads headers and libraries were not found])] )], [pth], [AS_IF([test "x$have_pth" = xyes], [AC_DEFINE([JEL_THREAD_PTH], [1]) CPPFLAGS="$CPPFLAGS $PTH_CPPFLAGS" CFLAGS="$CFLAGS $PTH_CFLAGS" LDFLAGS="$LDFLAGS $PTH_LDFLAGS" LIBS="$LIBS $PTH_LIBS" AC_SUBST([CPPFLAGS]) AC_SUBST([CFLAGS]) AC_SUBST([LDFLAGS]) AC_SUBST([LIBS])], [AC_MSG_ERROR([GNU Pth was not found])] )], [none], [AC_DEFINE([JEL_THREAD_NONE], [1])], [AC_MSG_ERROR([Unknown thread model: AS_VAR_GET(thread_model)])] ) # Deal with finalization support AS_IF([test "x$finalizer" = xyes], [AS_IF([test "x$thread_model" = xnone], [AS_VAR_SET(finalizer, no) AC_MSG_WARN([Finalization disabled, thread support is required])] )], [AS_IF([test "x$jar_support" = xyes], [AC_MSG_WARN([JAR support enabled without finalization, this might cause problems when using java.class.GetResourceAsStream()])] )] ) AS_IF([test "x$finalizer" = xyes], [AC_DEFINE([JEL_FINALIZER], [1])] ) # Floating point support AC_CHECK_LIBM AS_IF([test "x$fp_support" = xyes], [LIBS="$LIBS $LIBM" AC_SUBST([LIBM])] ) # Other libraries AC_SEARCH_LIBS([iconv], [iconv]) # Needed on some hosts for the preverifier AC_SEARCH_LIBS([clock_gettime], [rt]) ################################################################################ # Check for header files # ################################################################################ # Check for the standard C includes AC_HEADER_STDC AS_IF([test "x$ac_cv_header_stdc" != xyes], [AC_MSG_WARN([You don't seem to have standard C headers])] ) AC_HEADER_STDBOOL AC_HEADER_TIME AC_CHECK_HEADERS([arpa/inet.h dirent.h fcntl.h iconv.h inttypes.h langinfo.h math.h stdarg.h sys/stat.h sys/types.h unistd.h]) AC_CHECK_HEADERS([sys/socket.h netinet/in.h netdb.h], [], [AS_VAR_SET(socket_support, no)]) ################################################################################ # Check for types # ################################################################################ # Check for the presence of size_t AC_TYPE_SIZE_T # Check the size of pointer and long integer types AC_CHECK_SIZEOF([void *]) AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([long long]) # Check for intX_t types AC_TYPE_INT8_T AC_TYPE_UINT8_T AC_TYPE_INT16_T AC_TYPE_UINT16_T AC_TYPE_INT32_T AC_TYPE_UINT32_T AC_TYPE_INT64_T AC_TYPE_UINT64_T AC_TYPE_INTPTR_T AC_TYPE_UINTPTR_T # Check for the presence of ptrdiff_t AC_CHECK_TYPES([ptrdiff_t]) ################################################################################ # Check for structures # ################################################################################ # Unused ################################################################################ # Check for compiler features # ################################################################################ AC_C_CONST AC_C_INLINE AC_C_BIGENDIAN AX_C_FLOAT_WORDS_BIGENDIAN # Check for built-in functions ACX_CHECK_BUILTIN([__builtin_nan], [double my_nan =], [""]) # Check for function attributes ACX_CHECK_ATTRIBUTE([const], [int], [void]) ACX_CHECK_ATTRIBUTE([malloc], [void *], [void]) ACX_CHECK_ATTRIBUTE([noreturn], [void], [void]) ACX_CHECK_ATTRIBUTE([pure], [int], [void]) # Check for label-as-values gcc extension AC_MSG_CHECKING([for gcc's labels-as-values extension]) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[ int main() { void *happy_label; happy_label = &&happy; goto *happy_label; happy: return 0; } ]] )], [AC_MSG_RESULT([yes]) AS_VAR_SET(have_labels_as_values, yes)], [AC_MSG_RESULT([no])] ) AS_IF([test "x$threaded" = xauto && test "x$have_labels_as_values" = xyes], [AS_VAR_SET(threaded, yes) AC_DEFINE([JEL_THREADED_INTERPRETER], [1])] ) # Check for local storage support AX_TLS ################################################################################ # Check for functions # ################################################################################ AC_FUNC_MALLOC AC_FUNC_MEMCMP AC_FUNC_VPRINTF AC_CHECK_FUNC([vsnprintf], , [AC_MSG_ERROR([snprintf() is required])]) AC_CHECK_FUNC([memcpy], , [AC_LIBOBJ([memcpy])]) AC_CHECK_FUNC([memmove], , [AC_LIBOBJ([memmove])]) AC_CHECK_FUNCS([gettimeofday clock_gettime]) ACX_FUNC_VA_COPY # Tests for fp support AC_CHECK_FUNCS([fmod sin cos tan sqrt ceil floor], , [AS_IF([test "x$fp_support" = xyes], [AC_MSG_ERROR([Standard math.h functions are needed for FP support])] )] ) # Thread related tests AS_IF([test "x$thread_model" = xpthread], [AC_CHECK_FUNCS([pthread_yield pthread_yield_np])] ) ################################################################################ # Check for system services # ################################################################################ # Unused ################################################################################ # Do automatic tests # ################################################################################ # Check for floating point support AS_IF([test "x$fp_support" = xyes], [AC_DEFINE([JEL_FP_SUPPORT], [1])] ) # Check for jar support AS_IF([test "x$jar_support" = xyes], [AS_VAR_SET(classpath, "classpath.jar")], [AS_VAR_SET(classpath, "classpath/")] ) # Check for socket support AS_IF([test "x$socket_support" = xyes], [AC_DEFINE([JEL_SOCKET_SUPPORT], [1])] ) # Set preverifier path AS_IF([test "x$want_preverifier" = xyes], [AS_VAR_SET(preverifier, "../preverifier/preverifier")], [AS_VAR_SET(preverifier, "preverifier")] ) AS_IF([test "x$cross_compiling" = xyes], [AS_VAR_SET(preverifier, "preverifier")] ) # Set output variables AM_CONDITIONAL([COND_PREVERIFIER], [test "x$want_preverifier" = xyes]) AC_SUBST([preverifier]) AC_SUBST([classpath]) AC_SUBST([jar_support]) AC_CONFIG_FILES([ Makefile Doxyfile docs/Makefile m4/Makefile src/Makefile src/classpath/Makefile src/preverifier/Makefile src/jelatine/Makefile ]) AC_OUTPUT ##################### # Print configuration ##################### cat <