X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fmm%2Fboehm-gc%2Fconfigure.ac;h=78ce0c4449632b4a8bc2be65869821dedd12f0b1;hb=aa29c1d6ba46a2f6cdaa744c30c78e91c665ed76;hp=7e5d530f71bfd9416d540a960037342d94694dd6;hpb=8275714acb4ee70328526bd43e7cb54869119f51;p=cacao.git diff --git a/src/mm/boehm-gc/configure.ac b/src/mm/boehm-gc/configure.ac index 7e5d530f7..78ce0c444 100644 --- a/src/mm/boehm-gc/configure.ac +++ b/src/mm/boehm-gc/configure.ac @@ -1,8 +1,8 @@ # Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved. -# +# # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED # OR IMPLIED. ANY USE IS AT YOUR OWN RISK. -# +# # Permission is hereby granted to use or copy this program # for any purpose, provided the above notices are retained on all copies. # Permission to modify the code and to distribute modified code is granted, @@ -17,35 +17,29 @@ dnl Process this file with autoconf to produce configure. # Initialization # ============== -AC_INIT(gc,7.1,Hans.Boehm@hp.com) +AC_INIT(gc,7.2alpha4,Hans.Boehm@hp.com) ## version must conform to [0-9]+[.][0-9]+(alpha[0-9]+)? AC_CONFIG_SRCDIR(gcj_mlc.c) -AC_CANONICAL_TARGET +AC_CONFIG_MACRO_DIR([m4]) +AC_CANONICAL_TARGET AC_PREREQ(2.53) -AC_REVISION($Revision: 1.35 $) +AC_REVISION($Revision: 1.58 $) GC_SET_VERSION -AM_INIT_AUTOMAKE([foreign dist-bzip2 subdir-objects nostdinc]) +AM_INIT_AUTOMAKE([foreign dist-bzip2 nostdinc]) +AM_CONFIG_HEADER([include/private/config.h]) AM_MAINTAINER_MODE -AM_CONFIG_HEADER([include/config.h]) - AC_SUBST(PACKAGE) AC_SUBST(GC_VERSION) AM_PROG_CC_C_O AC_PROG_CXX -dnl temporary set the CFLAGS for configure tests (e.g. inline keyword) -dnl we set it properly later in this file -CFLAGS="$ARCH_CFLAGS $OPT_CFLAGS" -AC_C_INLINE - AM_PROG_AS ## FIXME: really needed? (AC_LIBTOOL already provides this) AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(RANLIB, ranlib, :) # :) -AC_PROG_LIBTOOL AC_PROG_INSTALL . ${srcdir}/configure.host @@ -68,7 +62,7 @@ AC_ARG_ENABLE(parallel-mark, [parallelize marking and free list construction])], [case "$THREADS" in no | none | single) - AC_MSG_ERROR([Parallel mark requires --enable-threads=x spec]) + AC_MSG_ERROR([Parallel mark requires --enable-boehm-threads=x spec]) ;; esac ] ) @@ -76,7 +70,32 @@ AC_ARG_ENABLE(parallel-mark, AC_ARG_ENABLE(cplusplus, [AC_HELP_STRING([--enable-cplusplus], [install C++ support])]) -INCLUDES=-I${srcdir}/include +dnl Features which may be selected in the following thread-detection switch. +AH_TEMPLATE([PARALLEL_MARK], [Define to enable parallel marking.]) +AH_TEMPLATE([THREAD_LOCAL_ALLOC], + [Define to enable thread-local allocation optimisation.]) +AH_TEMPLATE([USE_COMPILER_TLS], + [Define to use of compiler-support for thread-local variables.]) + +dnl Thread selection macros. +AH_TEMPLATE([GC_THREADS], [Define to support threads.]) +AH_TEMPLATE([GC_AIX_THREADS], [Define to support IBM AIX threads.]) +AH_TEMPLATE([GC_DARWIN_THREADS], [Define to support Darwin pthreads.]) +AH_TEMPLATE([GC_FREEBSD_THREADS], [Define to support FreeBSD pthreads.]) +AH_TEMPLATE([GC_GNU_THREADS], [Define to support GNU pthreads.]) +AH_TEMPLATE([GC_HPUX_THREADS], [Define to support HP/UX 11 pthreads.]) +AH_TEMPLATE([GC_IRIX_THREADS], [Define to support Irix pthreads.]) +AH_TEMPLATE([GC_LINUX_THREADS], [Define to support pthreads on Linux.]) +AH_TEMPLATE([GC_NETBSD_THREADS], [Define to support NetBSD pthreads.]) +AH_TEMPLATE([GC_OPENBSD_THREADS], [Define to support OpenBSD pthreads.]) +AH_TEMPLATE([GC_OSF1_THREADS], [Define to support Tru64 pthreads.]) +AH_TEMPLATE([GC_SOLARIS_THREADS], [Define to support Solaris pthreads.]) +AH_TEMPLATE([GC_WIN32_THREADS], [Define to support win32 threads.]) + +dnl System header feature requests. +AH_TEMPLATE([_POSIX_C_SOURCE], [The POSIX feature macro.]) +AH_TEMPLATE([_PTHREADS], [Indicates the use of pthreads (NetBSD).]) + THREADDLLIBS= need_atomic_ops_asm=false ## Libraries needed to support dynamic loading and/or threads. @@ -88,70 +107,76 @@ case "$THREADS" in THREADS=posix THREADDLLIBS=-lpthread case "$host" in - x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*) - AC_DEFINE([GC_LINUX_THREADS], 1, [gc linux threads]) - AC_DEFINE([_REENTRANT], 1, [reentrant]) + x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux* | sparc*-*-linux*) + AC_DEFINE(GC_LINUX_THREADS) + AC_DEFINE(_REENTRANT) if test "${enable_parallel_mark}" = yes; then - AC_DEFINE([PARALLEL_MARK], 1, [parallel mark]) + AC_DEFINE(PARALLEL_MARK) fi - AC_DEFINE([THREAD_LOCAL_ALLOC], 1, [thread local alloc]) - AC_MSG_WARN("Explict GC_INIT() calls may be required."); + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explicit GC_INIT() calls may be required."); ;; *-*-linux*) - AC_DEFINE([GC_LINUX_THREADS], 1, [gc linux threads]) - AC_DEFINE([_REENTRANT], 1, [reentrant]) + AC_DEFINE(GC_LINUX_THREADS) + AC_DEFINE(_REENTRANT) ;; *-*-aix*) - AC_DEFINE([GC_AIX_THREADS], 1, [gc aix threads]) - AC_DEFINE([_REENTRANT], 1, [reentrant]) + AC_DEFINE(GC_AIX_THREADS) + AC_DEFINE(_REENTRANT) ;; *-*-hpux11*) AC_MSG_WARN("Only HP/UX 11 POSIX threads are supported.") - AC_DEFINE([GC_HPUX_THREADS], 1, [gc hpux threads]) - AC_DEFINE([_POSIX_C_SOURCE], 199506L, [posix c source]) + AC_DEFINE(GC_HPUX_THREADS) + AC_DEFINE(_POSIX_C_SOURCE,199506L) if test "${enable_parallel_mark}" = yes; then - AC_DEFINE([PARALLEL_MARK], 1, [parallel mark]) + AC_DEFINE(PARALLEL_MARK) fi - AC_DEFINE([THREAD_LOCAL_ALLOC], 1, [thread local alloc]) - AC_MSG_WARN("Explict GC_INIT() calls may be required."); + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explicit GC_INIT() calls may be required."); THREADDLLIBS="-lpthread -lrt" # HPUX needs REENTRANT for the _r calls. - AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads]) + AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads.]) ;; *-*-hpux10*) AC_MSG_WARN("Only HP-UX 11 POSIX threads are supported.") ;; + *-*-openbsd*) + AC_DEFINE(GC_OPENBSD_THREADS) + THREADDLLIBS=-pthread + INCLUDES="$INCLUDES -pthread" + openbsd_threads=true + ;; *-*-freebsd*) AC_MSG_WARN("FreeBSD does not yet fully support threads with Boehm GC.") - AC_DEFINE([GC_FREEBSD_THREADS], 1, [gc freebsd threads]) + AC_DEFINE(GC_FREEBSD_THREADS) INCLUDES="$INCLUDES -pthread" ;; *-*-kfreebsd*-gnu) - AC_DEFINE([GC_FREEBSD_THREADS], 1, [gc freebsd threads]) + AC_DEFINE(GC_FREEBSD_THREADS) INCLUDES="$INCLUDES -pthread" THREADDLLIBS=-pthread - AC_DEFINE([_REENTRANT], 1, [reentrant]) + AC_DEFINE(_REENTRANT) if test "${enable_parallel_mark}" = yes; then - AC_DEFINE([PARALLEL_MARK], 1, [parallel mark]) + AC_DEFINE(PARALLEL_MARK) fi - AC_DEFINE([THREAD_LOCAL_ALLOC], 1, [thread local alloc]) - AC_DEFINE([USE_COMPILER_TLS], 1, [use compiler tls]) + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_DEFINE(USE_COMPILER_TLS) ;; *-*-gnu*) - AC_DEFINE([GC_GNU_THREADS], 1, [GC GNU threads]) + AC_DEFINE(GC_GNU_THREADS) AC_DEFINE(_REENTRANT) AC_DEFINE(THREAD_LOCAL_ALLOC) ;; *-*-netbsd*) AC_MSG_WARN("Only on NetBSD 2.0 or later.") - AC_DEFINE([GC_NETBSD_THREADS], 1, [GC NetBSD threads]) - AC_DEFINE([_REENTRANT], 1, [reentrant]) - AC_DEFINE([_PTHREADS], 1, [pthreads]) + AC_DEFINE(GC_NETBSD_THREADS) + AC_DEFINE(_REENTRANT) + AC_DEFINE(_PTHREADS) THREADDLLIBS="-lpthread -lrt" ;; *-*-solaris*) - AC_DEFINE([GC_SOLARIS_THREADS], 1, [gc solaris threads]) - AC_DEFINE([THREAD_LOCAL_ALLOC], 1, [thread local alloc]) + AC_DEFINE(GC_SOLARIS_THREADS) + AC_DEFINE(THREAD_LOCAL_ALLOC) THREADDLLIBS="-lpthread -lrt" if test "$GCC" != yes; then CFLAGS="$CFLAGS -O" @@ -159,29 +184,35 @@ case "$THREADS" in fi ;; *-*-irix*) - AC_DEFINE([GC_IRIX_THREADS], 1, [gc irix threads]) + AC_DEFINE(GC_IRIX_THREADS) ;; *-*-cygwin*) - AC_DEFINE([GC_WIN32_THREADS], 1, [gc win32 threads]) - AC_DEFINE([THREAD_LOCAL_ALLOC], 1, [thread local alloc]) + AC_DEFINE(GC_THREADS) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + # Cygwin doesn't have a real libpthread, so Libtool can't link + # against it. + THREADDLLIBS="" win32_threads=true ;; *-*-darwin*) - AC_DEFINE([GC_DARWIN_THREADS], 1, [gc darwin threads]) - AC_DEFINE([THREAD_LOCAL_ALLOC], 1, [thread local alloc]) - AC_MSG_WARN("Explict GC_INIT() calls may be required."); - # Parallel-mark is currently unreliable on Darwin; ignore request - # if test "${enable_parallel_mark}" = yes; then - # AC_DEFINE(PARALLEL_MARK) - # fi + AC_DEFINE(GC_DARWIN_THREADS) + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explicit GC_INIT() calls may be required."); + # Parallel-mark is currently unreliable on Darwin; ignore request + # if test "${enable_parallel_mark}" = yes; then + # AC_DEFINE(PARALLEL_MARK) + # fi darwin_threads=true ;; *-*-osf*) - AC_DEFINE([GC_OSF1_THREADS], 1, [gc osf1 threads]) + AC_DEFINE(GC_OSF1_THREADS) if test "${enable_parallel_mark}" = yes; then - AC_DEFINE([PARALLEL_MARK], 1, [parallel mark]) - AC_DEFINE([THREAD_LOCAL_ALLOC], 1, [thread local alloc]) - AC_MSG_WARN("Explict GC_INIT() calls may be required."); + AC_DEFINE(PARALLEL_MARK) + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explicit GC_INIT() calls may be required."); # May want to enable it in other cases, too. # Measurements havent yet been done. fi @@ -194,9 +225,14 @@ case "$THREADS" in esac ;; win32) - AC_DEFINE([GC_WIN32_THREADS], 1, [gc win32 threads]) - dnl Wine getenv may not return NULL for missing entry - AC_DEFINE([NO_GETENV], 1, [no getenv]) + AC_DEFINE(GC_THREADS) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + AC_DEFINE(THREAD_LOCAL_ALLOC) + fi + win32_threads=true + AC_DEFINE([EMPTY_GETENV_RESULTS], [1], + [Wine getenv may not return NULL for missing entry.]) ;; dgux386) THREADS=dgux386 @@ -204,20 +240,22 @@ case "$THREADS" in # Use pthread GCC switch THREADDLLIBS=-pthread if test "${enable_parallel_mark}" = yes; then - AC_DEFINE([PARALLEL_MARK], 1, [parallel mark]) + AC_DEFINE(PARALLEL_MARK) fi - AC_DEFINE([THREAD_LOCAL_ALLOC], 1, [thread local alloc]) - AC_MSG_WARN("Explict GC_INIT() calls may be required."); - AC_DEFINE([GC_DGUX386_THREADS], 1, [gc dgux386 threads]) - AC_DEFINE([DGUX_THREADS], 1, [dgux threads]) + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_MSG_WARN("Explicit GC_INIT() calls may be required."); + AC_DEFINE([GC_DGUX386_THREADS], 1, + [Define to enable support for DB/UX threads on i386.]) + AC_DEFINE([DGUX_THREADS], 1, + [Define to enable support for DB/UX threads.]) # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread INCLUDES="-pthread $INCLUDES" ;; aix) THREADS=posix THREADDLLIBS=-lpthread - AC_DEFINE([GC_AIX_THREADS], 1, [gc aix threads]) - AC_DEFINE([_REENTRANT], 1, [reentrant]) + AC_DEFINE(GC_AIX_THREADS) + AC_DEFINE(_REENTRANT) ;; decosf1 | irix | mach | os2 | solaris | dce | vxworks) AC_MSG_ERROR(thread package $THREADS not yet supported) @@ -231,12 +269,11 @@ AM_CONDITIONAL(THREADS, test x$THREADS != xnone) AM_CONDITIONAL(PTHREADS, test x$THREADS = xposix) AM_CONDITIONAL(DARWIN_THREADS, test x$darwin_threads = xtrue) AM_CONDITIONAL(WIN32_THREADS, test x$win32_threads = xtrue) +AM_CONDITIONAL(OPENBSD_THREADS, test x$openbsd_threads = xtrue) -case "$host" in +case "$host" in powerpc-*-darwin*) powerpc_darwin=true - dnl CACAO: disable this for now - AC_DEFINE([DARWIN_DONT_PARSE_STACK], 1, [don't use FindTopOfStack]) ;; esac @@ -298,13 +335,14 @@ AC_MSG_RESULT($compiler_xlc) AM_CONDITIONAL(COMPILER_XLC,test $compiler_xlc = yes) if test $compiler_xlc = yes -a "$powerpc_darwin" = true; then # the darwin stack-frame-walking code is completely broken on xlc - AC_DEFINE(DARWIN_DONT_PARSE_STACK) + AC_DEFINE([DARWIN_DONT_PARSE_STACK], 1, [See doc/README.macros.]) fi # We never want libdl on darwin. It is a fake libdl that just ends up making -# dyld calls anyway +# dyld calls anyway. The same applies to Cygwin. case "$host" in *-*-darwin*) ;; + *-*-cygwin*) ;; *) AC_CHECK_LIB(dl, dlopen, THREADDLLIBS="$THREADDLLIBS -ldl") ;; @@ -349,7 +387,7 @@ case "$TARGET_ECOS" in no) ;; *) - AC_DEFINE([ECOS], 1, [ecos]) + AC_DEFINE([ECOS], 1, [Define to enable eCos target support.]) CXXINCLUDES="-I${TARGET_ECOS}/include" addobjs="$addobjs ecos.lo" ;; @@ -379,7 +417,7 @@ AC_MSG_RESULT($enable_shared) # Configuration of machine-dependent code # -AC_MSG_CHECKING(which machine-dependent code should be used) +AC_MSG_CHECKING(which machine-dependent code should be used) machdep= case "$host" in alpha-*-openbsd*) @@ -392,34 +430,43 @@ case "$host" in machdep="mach_dep.lo" ;; i?86-*-solaris2.[[89]] | i?86-*-solaris2.1?) - AC_DEFINE([SOLARIS25_PROC_VDB_BUG_FIXED], 1, [solaris 2.5 proc vdb bug fixed]) + AC_DEFINE([SOLARIS25_PROC_VDB_BUG_FIXED], 1, + [See the comment in gcconfig.h.]) ;; mipstx39-*-elf*) machdep="mach_dep.lo" - AC_DEFINE([STACKBASE], __stackbase, [stackbase]) - AC_DEFINE([DATASTART_IS_ETEXT], 1, [datastart is etext]) ;; mips-dec-ultrix*) machdep="mach-dep.lo" ;; mips-nec-sysv*|mips-unknown-sysv*) ;; - mips*-*-linux*) - ;; + mips*-*-linux*) + ;; mips-*-*) machdep="mach_dep.lo" - AC_DEFINE([NO_EXECUTE_PERMISSION], 1, [no execute permission]) + dnl AC_DEFINE(NO_EXECUTE_PERMISSION) dnl This is now redundant, but it is also important for incremental GC dnl performance under Irix. ;; + sparc*-*-linux*) + machdep="mach_dep.lo sparc_mach_dep.lo" + ;; sparc-*-netbsd*) machdep="mach_dep.lo sparc_netbsd_mach_dep.lo" ;; + sparc64-*-netbsd*) + machdep="mach_dep.lo sparc_mach_dep.lo" + ;; + sparc*-*-openbsd*) + machdep="mach_dep.lo sparc_mach_dep.lo" + ;; sparc-sun-solaris2.3) machdep="mach_dep.lo sparc_mach_dep.lo" - AC_DEFINE([SUNOS53_SHARED_LIB], 1, [sun os 5.3 shared lib]) + AC_DEFINE(SUNOS53_SHARED_LIB, 1, + [Define to work around a Solaris 5.3 bug (see dyn_load.c).]) ;; - sparc*-sun-solaris2.*) + sparc*-sun-solaris2*) machdep="mach_dep.lo sparc_mach_dep.lo" ;; ia64-*-*) @@ -438,6 +485,7 @@ AC_PROG_LIBTOOL # # Check for AViiON Machines running DGUX +# FIXME: Should this be moved down to below the gc-debug processing? # ac_is_dgux=no AC_CHECK_HEADER(sys/dg_sys_info.h, @@ -445,7 +493,7 @@ AC_CHECK_HEADER(sys/dg_sys_info.h, ## :GOTCHA: we do not check anything but sys/dg_sys_info.h if test $ac_is_dgux = yes; then - if test "$enable_full_debug" = "yes"; then + if test "$enable_gc_debug" = "yes"; then CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" else @@ -500,19 +548,12 @@ case "$host" in *) AC_MSG_RESULT(no) ;; esac -dnl We need to override the top-level CFLAGS. This is how we do it. -dnl MY_CFLAGS="$CFLAGS" -dnl AC_SUBST(MY_CFLAGS) - -dnl pass CFLAGS to Makefiles via AM_CFLAGS -CFLAGS=$OPT_CFLAGS -AM_CFLAGS=$ARCH_CFLAGS -AC_SUBST(AM_CFLAGS) - dnl Include defines that have become de facto standard. dnl ALL_INTERIOR_POINTERS can be overridden in startup code. -AC_DEFINE([NO_EXECUTE_PERMISSION], 1, [no exceute permission]) -AC_DEFINE([ALL_INTERIOR_POINTERS], 1, [all interior pointers]) +AC_DEFINE([NO_EXECUTE_PERMISSION], [1], + [Define to allow the collector to disable execute permission of heap objects.]) +AC_DEFINE([ALL_INTERIOR_POINTERS], [1], + [Define to recognise all pointers to the interior of objects.]) dnl Interface Selection @@ -526,14 +567,56 @@ AC_ARG_ENABLE(gcj-support, AM_CONDITIONAL(ENABLE_GCJ_SUPPORT, [test x"$enable_gcj_support" != xno]) if test x"$enable_gcj_support" != xno; then - AC_DEFINE(GC_GCJ_SUPPORT, 1, [Define to include support for gcj]) + AC_DEFINE(GC_GCJ_SUPPORT, 1, [Define to include support for gcj.]) fi +dnl Debugging +dnl --------- + +AH_TEMPLATE([GC_HAVE_BUILTIN_BACKTRACE], + [Define if backtrace information is supported.]) +AH_TEMPLATE([MAKE_BACK_GRAPH], [See doc/README.macros.]) +AH_TEMPLATE([SAVE_CALL_COUNT], + [The number of caller frames saved when allocating with the + debugging API.]) +UNWINDLIBS= +AC_ARG_ENABLE(gc-debug, +[AC_HELP_STRING([--enable-gc-debug], + [include full support for pointer backtracing etc.])], +[ if test "$enable_gc_debug" = "yes"; then + AC_MSG_WARN("Should define GC_DEBUG and use debug alloc. in clients.") + AC_DEFINE([KEEP_BACK_PTRS], 1, + [Define to save back-pointers in debugging headers.]) + keep_back_ptrs=true + AC_DEFINE([DBG_HDRS_ALL], 1, + [Define to force debug headers on all objects.]) + case $host in + ia64-*-linux* ) + AC_DEFINE(MAKE_BACK_GRAPH) + AC_DEFINE(SAVE_CALL_COUNT, 8) + AC_CHECK_LIB(unwind, backtrace, [ + AC_DEFINE(GC_HAVE_BUILTIN_BACKTRACE) + UNWINDLIBS=-lunwind + AC_MSG_WARN("Client code may need to link against libunwind.") + ]) + ;; + x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* ) + AC_DEFINE(MAKE_BACK_GRAPH) + AC_MSG_WARN("Client must not use -fomit-frame-pointer.") + AC_DEFINE(SAVE_CALL_COUNT, 8) + ;; + i[3456]86-*-dgux*) + AC_DEFINE(MAKE_BACK_GRAPH) + ;; + esac ] + fi) +AM_CONDITIONAL([KEEP_BACK_PTRS], [test x"$keep_back_ptrs" = xtrue]) + AC_ARG_ENABLE(java-finalization, [AC_HELP_STRING([--disable-java-finalization], [Disable support for java finalization.])]) if test x"$enable_java_finalization" != xno; then - AC_DEFINE([JAVA_FINALIZATION], 1, [java finalization]) + AC_DEFINE([JAVA_FINALIZATION], 1, [See doc/README.macros.]) fi AC_ARG_ENABLE(atomic-uncollectable, @@ -549,14 +632,17 @@ AC_ARG_ENABLE(redirect-malloc, [Redirect malloc and friends to GC routines])]) if test "${enable_redirect_malloc}" = yes; then - if test "${enable_full_debug}" = yes; then - AC_DEFINE([REDIRECT_MALLOC], GC_debug_malloc_replacement, [redirect malloc]) - AC_DEFINE([REDIRECT_REALLOC], GC_debug_realloc_replacement, [redirect realloc]) - AC_DEFINE([REDIRECT_FREE], GC_debug_free, [redirect free]) + if test "${enable_gc_debug}" = yes; then + AC_DEFINE([REDIRECT_MALLOC], GC_debug_malloc_replacement, + [If defined, redirect malloc to this function.]) + AC_DEFINE([REDIRECT_REALLOC], GC_debug_realloc_replacement, + [If defined, redirect GC_realloc to this function.]) + AC_DEFINE([REDIRECT_FREE], GC_debug_free, + [If defined, redirect free to this function.]) else - AC_DEFINE([REDIRECT_MALLOC], GC_malloc, [redirect malloc]) + AC_DEFINE(REDIRECT_MALLOC, GC_malloc) fi - AC_DEFINE([GC_USE_DLOPEN_WRAP], 1, [gc use dlopen wrap]) + AC_DEFINE([GC_USE_DLOPEN_WRAP], 1, [See doc/README.macros.]) fi AC_ARG_ENABLE(large-config, @@ -564,58 +650,28 @@ AC_ARG_ENABLE(large-config, [Optimize for large (> 100 MB) heap or root set])]) if test "${enable_large_config}" = yes; then - AC_DEFINE(LARGE_CONFIG, 1, [Define to optimize for large heaps or root sets]) + AC_DEFINE(LARGE_CONFIG, 1, [Define to optimize for large heaps or root sets.]) fi dnl This is something of a hack. When cross-compiling we turn off dnl some functionality. We also enable the "small" configuration. dnl These is only correct when targetting an embedded system. FIXME. if test -n "${with_cross_host}"; then - AC_DEFINE([NO_CLOCK], 1, [no clock]) - AC_DEFINE([SMALL_CONFIG], 1, [small config]) - AC_DEFINE([NO_DEBUGGING], 1, [no debugging]) + AC_DEFINE([NO_CLOCK], 1, [Define to not use system clock (cross compiling).]) + AC_DEFINE([SMALL_CONFIG], 1, + [Define to tune the collector for small heap sizes.]) + AC_DEFINE([NO_DEBUGGING], 1, + [Disable debugging, like GC_dump and its callees.]) fi -dnl Debugging -dnl --------- - -UNWINDLIBS= -AC_ARG_ENABLE(gc-debug, -[AC_HELP_STRING([--enable-gc-debug], - [include full support for pointer backtracing etc.])], -[ if test "$enable_gc_debug" = "yes"; then - AC_MSG_WARN("Should define GC_DEBUG and use debug alloc. in clients.") - AC_DEFINE([KEEP_BACK_PTRS], 1, [keep back ptrs]) - AC_DEFINE([DBG_HDRS_ALL], 1, [dbg hdrs all]) - case $host in - ia64-*-linux* ) - AC_DEFINE([MAKE_BACK_GRAPH], 1, [make back graph]) - AC_DEFINE([SAVE_CALL_COUNT], 8, [save call count]) - AC_CHECK_LIB(unwind, backtrace, [ - AC_DEFINE([GC_HAVE_BUILTIN_BACKTRACE], 1, [have builtin backtrace]) - UNWINDLIBS=-lunwind - AC_MSG_WARN("Client code may need to link against libunwind.") - ]) - ;; - x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* ) - AC_DEFINE([MAKE_BACK_GRAPH], 1, [make back graph]) - AC_MSG_WARN("Client must not use -fomit-frame-pointer.") - AC_DEFINE([SAVE_CALL_COUNT], 8, [save call count]) - ;; - i[3456]86-*-dgux*) - AC_DEFINE([MAKE_BACK_GRAPH], 1, [make back graph]) - ;; - esac ] - fi) - AC_SUBST(UNWINDLIBS) AC_ARG_ENABLE(gc-assertions, [AC_HELP_STRING([--enable-gc-assertions], [collector-internal assertion checking])]) if test "${enable_gc_assertions}" = yes; then - AC_DEFINE([GC_ASSERTIONS], 1, [gc assertions]) + AC_DEFINE([GC_ASSERTIONS], 1, [Define to enable internal debug assertions.]) fi AC_ARG_ENABLE(munmap, @@ -629,68 +685,52 @@ AC_ARG_ENABLE(munmap, esac] ) if test "${enable_munmap}" != ""; then - AC_DEFINE([USE_MMAP], 1, [use mmap]) - AC_DEFINE([USE_MUNMAP], 1, [ use munmap]) + AC_DEFINE([USE_MMAP], 1, + [Define to use mmap instead of sbrk to expand the heap.]) + AC_DEFINE([USE_MUNMAP], 1, + [Define to return memory to OS with munmap calls + (see doc/README.macros).]) if test "${MUNMAP_THRESHOLD}" = "yes"; then MUNMAP_THRESHOLD=6 fi - AC_DEFINE_UNQUOTED([MUNMAP_THRESHOLD], ${MUNMAP_THRESHOLD}, [munmap threshold]) + AC_DEFINE_UNQUOTED([MUNMAP_THRESHOLD], [${MUNMAP_THRESHOLD}], + [Number of GC cycles to wait before unmapping an unused block.]) fi AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host") -dnl Atomic Ops -dnl ---------- - -atomic_ops_libs=-latomic_ops -AC_CHECK_HEADER(atomic_ops.h, - [ AC_MSG_NOTICE([Using pre-installed libatomic_ops]) ], - [ ao_dir= - for candidate in ${srcdir}/libatomic_ops*; do - case $candidate in - *.tar.gz) - ;; - *install) - dnl generated by alternate Makefile. - ;; - *) - if test -e "$candidate"; then - ao_dir="$candidate" - fi - ;; - esac - done - if test -z "$ao_dir"; then - AC_MSG_ERROR([Missig libatomic_ops.]) - fi - ao_version="${ao_dir#*libatomic_ops-}" - AC_MSG_NOTICE([Using internal version of libatomic_ops]) - - dnl Automake does not accept shell variables in AC_CONFIG_SUBDIRS - test -e libatomic_ops \ - || ln -s ${ao_dir} libatomic_ops - AC_CONFIG_SUBDIRS(libatomic_ops) - - dnl Also copy the source files to be linked in. - test -e atomic_ops.c \ - || ln -s libatomic_ops/src/atomic_ops.c \ - atomic_ops.c - - test -e atomic_ops_sysdeps.S \ - || ln -s libatomic_ops/src/atomic_ops_sysdeps.S \ - atomic_ops_sysdeps.S - - dnl This gets the source include files, which is often close enough. - dnl It also makes atomic_ops_sysdeps.S assemble. - GC_CFLAGS="${GC_CFLAGS} -I libatomic_ops/src" - maybe_libatomic_ops="libatomic_ops" +# Atomic Ops +# ---------- + +# Do we want to use an external libatomic_ops? By default use it if it's +# found. +AC_ARG_WITH([libatomic-ops], + [AS_HELP_STRING([--with-libatomic-ops[=yes|no|check]], + [Use a pre-installed libatomic_ops? (default: check)])], + [], [with_libatomic_ops=check]) + +# Check for an external libatomic_ops if the answer was yes or check. If not +# found, fail on yes, and convert check to no. +AS_IF([test x"$with_libatomic_ops" != xno], + [ AC_CHECK_HEADER([atomic_ops.h], [], + [ AS_IF([test x"$with_libatomic_ops" != xcheck], + [AC_MSG_ERROR([A pre-installed libatomic_ops was not found.])]) + with_libatomic_ops=no ]) ]) + +# Finally, emit the definitions for bundled or pre-installed AO. +AC_MSG_CHECKING([which libatomic_ops to use]) +AS_IF([test x"$with_libatomic_ops" != xno], + [ AC_MSG_RESULT([pre-installed]) + ATOMIC_OPS_LIBS="-latomic_ops" + AC_SUBST([ATOMIC_OPS_LIBS]) ], + [ AC_MSG_RESULT([bundled]) + AC_CONFIG_SUBDIRS([libatomic_ops]) ]) - -AM_CONDITIONAL(USE_INTERNAL_LIBATOMIC_OPS, - test -n "$maybe_libatomic_ops" -a "$THREADS" != "none") -AM_CONDITIONAL(NEED_ATOMIC_OPS_ASM, test -n "$maybe_libatomic_ops" -a x$need_atomic_ops_asm = xtrue) -AC_SUBST(atomic_ops_libs) +AM_CONDITIONAL([USE_INTERNAL_LIBATOMIC_OPS], + [test x$with_libatomic_ops = xno -a x"$THREADS" != xnone]) +AM_CONDITIONAL([NEED_ATOMIC_OPS_ASM], + [test x$with_libatomic_ops = xno -a x$need_atomic_ops_asm = xtrue]) dnl Produce the Files dnl ----------------- @@ -698,7 +738,7 @@ dnl ----------------- AC_CONFIG_FILES([Makefile bdw-gc.pc]) AC_CONFIG_COMMANDS([default],, - [ srcdir=${srcdir} + [ srcdir="${srcdir}" host=${host} CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} CC="${CC}"