X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=boehm-gc%2Fconfigure.in;h=f109c9003edce1c794bfd1aaa85e484df07c1f13;hb=947b705a23ee35a84bae1df604b1540232618f74;hp=eb37d7b8d3f30a478d926928d6edfce4063abdc8;hpb=41e6be0dbfb73bfa610c4a62cb2b3f33514dd46b;p=pf3gnuchains%2Fgcc-fork.git diff --git a/boehm-gc/configure.in b/boehm-gc/configure.in index eb37d7b8d3f..f109c9003ed 100644 --- a/boehm-gc/configure.in +++ b/boehm-gc/configure.in @@ -1,105 +1,196 @@ +# Copyright (c) 1999, 2000, 2001, 2002, 2003 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, +# provided the above notices are retained, and a notice that the code was +# modified is included with the above copyright notice. +# +# Original author: Tom Tromey + dnl Process this file with autoconf to produce configure. -AC_INIT(gc_mark.h) +AC_PREREQ(2.13) +AC_INIT(gcj_mlc.c) -dnl Can't be done in BOEHM_CONFIGURE because that confuses automake. -AC_CONFIG_AUX_DIR(..) +# This works around the fact that libtool configuration may change LD +# for this particular configuration, but some shells, instead of +# keeping the changes in LD private, export them just because LD is +# exported. +ORIGINAL_LD_FOR_MULTILIBS=$LD -AC_CANONICAL_SYSTEM +dnl Can't be done in GC_CONFIGURE because that confuses automake. +AC_CONFIG_AUX_DIR(.) -BOEHM_CONFIGURE(.) +GC_CONFIGURE(.) AM_PROG_LIBTOOL dnl We use these options to decide which functions to include. AC_ARG_WITH(target-subdir, -[ --with-target-subdir=SUBDIR Configuring with a cross compiler]) +[ --with-target-subdir=SUBDIR + configuring with a cross compiler]) AC_ARG_WITH(cross-host, -[ --with-cross-host=HOST Configuring with a cross compiler]) +[ --with-cross-host=HOST configuring with a cross compiler]) AM_MAINTAINER_MODE # automake wants to see AC_EXEEXT. But we don't need it. And having # it is actually a problem, because the compiler we're passed can't # necessarily do a full link. So we fool automake here. -if test "x" = "y"; then - AC_EXEEXT +if false; then + # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands + # to nothing, so nothing would remain between `then' and `fi' if it + # were not for the `:' below. + : + AC_EXEEXT fi -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 +AC_MSG_CHECKING([for thread model used by GCC]) +THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'` +if test -z "$THREADS"; then + THREADS=no fi +AC_MSG_RESULT([$THREADS]) -INCLUDES= +AC_ARG_ENABLE(parallel-mark, +[ --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]) + ;; + esac] +) + +INCLUDES="-I`cd $srcdir && ${PWDCMD-pwd}`/include" +THREADLIBS= case "$THREADS" in no | none | single) THREADS=none ;; posix | pthreads) THREADS=posix + THREADLIBS=-lpthread case "$host" in + x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*) + AC_DEFINE(GC_LINUX_THREADS) + AC_DEFINE(_REENTRANT) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + ;; *-*-linux*) - AC_DEFINE(LINUX_THREADS) + AC_DEFINE(GC_LINUX_THREADS) + AC_DEFINE(_REENTRANT) + ;; + *-*-aix*) + AC_DEFINE(GC_AIX_THREADS) AC_DEFINE(_REENTRANT) ;; + *-*-hpux*) + AC_MSG_WARN("Only HP/UX 11 threads are supported.") + AC_DEFINE(GC_HPUX_THREADS) + AC_DEFINE(_POSIX_C_SOURCE,199506L) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + THREADLIBS="-lpthread -lrt" + ;; + *-*-freebsd*) + AC_MSG_WARN("FreeBSD does not yet fully support threads with Boehm GC.") + AC_DEFINE(GC_FREEBSD_THREADS) + INCLUDES="$INCLUDES -pthread" + THREADLIBS=-pthread + ;; *-*-solaris*) - AC_DEFINE(SOLARIS_THREADS) - AC_DEFINE(_SOLARIS_PTHREADS) + AC_DEFINE(GC_SOLARIS_THREADS) + AC_DEFINE(GC_SOLARIS_PTHREADS) + ;; + *-*-irix*) + AC_DEFINE(GC_IRIX_THREADS) + ;; + *-*-cygwin*) + AC_DEFINE(GC_WIN32_THREADS) + ;; + *-*-darwin*) + AC_DEFINE(GC_DARWIN_THREADS) + AC_DEFINE(THREAD_LOCAL_ALLOC) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + ;; + *-*-osf*) + AC_DEFINE(GC_OSF1_THREADS) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + AC_DEFINE(THREAD_LOCAL_ALLOC) + # May want to enable it in other cases, too. + # Measurements havent yet been done. + fi + INCLUDES="$INCLUDES -pthread" + THREADLIBS="-lpthread -lrt" ;; esac ;; - qt) - AC_DEFINE(QUICK_THREADS) - INCLUDES="-I${boehm_gc_basedir}/../qthreads" + win32) + AC_DEFINE(GC_WIN32_THREADS) + dnl Old wine getenv may not return NULL for missing entry. + dnl Define EMPTY_GETENV_RESULTS here to work around the bug. ;; - decosf1 | irix | mach | os2 | solaris | win32 | dce | vxworks) + dgux386) + THREADS=dgux386 +AC_MSG_RESULT($THREADLIBS) + # Use pthread GCC switch + THREADLIBS=-pthread + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + AC_DEFINE(THREAD_LOCAL_ALLOC) + AC_DEFINE(GC_DGUX386_THREADS) + AC_DEFINE(DGUX_THREADS) + # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread + INCLUDES="-pthread $INCLUDES" + ;; + aix) + THREADS=posix + THREADLIBS=-lpthread + AC_DEFINE(GC_AIX_THREADS) + AC_DEFINE(_REENTRANT) + ;; + decosf1 | irix | mach | os2 | solaris | 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) - -AC_ARG_ENABLE(java-gc, -changequote(<<,>>)dnl -<< --enable-java-gc=TYPE choose garbage collector [boehm]>>, -changequote([,]) - GC=$enableval, - GC=boehm) -target_all= -if test "$GC" = "boehm"; then - target_all=libgcjgc.la -fi +AC_SUBST(THREADLIBS) + +case "$host" in + powerpc-*-darwin*) + powerpc_darwin=true + ;; +esac +AM_CONDITIONAL(POWERPC_DARWIN,test x$powerpc_darwin = xtrue) + +# We never want libdl on darwin. It is a fake libdl that just ends up making +# dyld calls anyway +case "$host" in + *-*-darwin*) ;; + *) + AC_CHECK_LIB(dl, dlopen, EXTRA_TEST_LIBS="$EXTRA_TEST_LIBS -ldl") + ;; +esac + +AC_SUBST(EXTRA_TEST_LIBS) + +target_all=libgcjgc.la AC_SUBST(target_all) +AC_SUBST(target_alias) dnl If the target is an eCos system, use the appropriate eCos dnl I/O routines. @@ -107,11 +198,14 @@ 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.], +[ --with-ecos enable runtime eCos target support], TARGET_ECOS="$with_ecos" ) addobjs= +addlibs= +addincludes= +addtests= CXXINCLUDES= case "$TARGET_ECOS" in no) @@ -122,36 +216,147 @@ case "$TARGET_ECOS" in addobjs="$addobjs ecos.lo" ;; esac + +if test "${enable_cplusplus}" = yes; then + addincludes="$addincludes include/gc_cpp.h include/gc_allocator.h" + addtests="$addtests test_cpp" +fi + +AM_CONDITIONAL(CPLUSPLUS, test "${enable_cplusplus}" = yes) + AC_SUBST(CXX) AC_SUBST(INCLUDES) AC_SUBST(CXXINCLUDES) +# Configuration of shared libraries +# +AC_MSG_CHECKING(whether to build shared libraries) +AC_ENABLE_SHARED + +case "$host" in + alpha-*-openbsd*) + enable_shared=no + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + ;; +esac + +# Configuration of machine-dependent code +# +# We don't set NO_EXECUTE_PERMISSION by default because gcj (and +# anything else that creates trampolines in gc-allocated memory) +# always needs exec permission. The exceptions to this are IA-64 and +# some variations of Power PC, where trampolines don't contain +# executable code. +# +AC_MSG_CHECKING(which machine-dependent code should be used) machdep= case "$host" in - alpha-*-*) + alpha*-*-openbsd*) machdep="alpha_mach_dep.lo" + if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then + AC_MSG_WARN(OpenBSD/Alpha without dlopen(). Shared library support is disabled) + fi + ;; + alpha*-*-linux*) + machdep="alpha_mach_dep.lo" + ;; + i?86-*-solaris2.[[89]] | i?86-*-solaris2.1?) + AC_DEFINE(SOLARIS25_PROC_VDB_BUG_FIXED) ;; mipstx39-*-elf*) machdep="mips_ultrix_mach_dep.lo" AC_DEFINE(STACKBASE, __stackbase) AC_DEFINE(DATASTART_IS_ETEXT) ;; - sparc-sun-solaris2.3*) + mips-dec-ultrix*) + machdep="mips_ultrix_mach-dep.lo" + ;; + mips-nec-sysv*|mips-unknown-sysv*) + ;; + mips*-*-linux*) + ;; + mips-*-*) + machdep="mips_sgi_mach_dep.lo" + ;; + sparc-*-netbsd*) + machdep="sparc_netbsd_mach_dep.lo" + ;; + sparc-sun-solaris2.3) + machdep="sparc_mach_dep.lo" AC_DEFINE(SUNOS53_SHARED_LIB) ;; + sparc-sun-solaris2.*) + machdep="sparc_mach_dep.lo" + ;; + ia64-*-*) + AC_DEFINE(NO_EXECUTE_PERMISSION) + machdep="mach_dep.lo ia64_save_regs_in_stack.lo" + ;; esac if test x"$machdep" = x; then +AC_MSG_RESULT($machdep) machdep="mach_dep.lo" fi addobjs="$addobjs $machdep" AC_SUBST(addobjs) +AC_SUBST(addincludes) +AC_SUBST(addlibs) +AC_SUBST(addtests) + +AC_PROG_LIBTOOL + +# +# Check for AViiON Machines running DGUX +# +AC_MSG_CHECKING(if host is AViiON running DGUX) +ac_is_dgux=no +AC_CHECK_HEADER(sys/dg_sys_info.h, +[ac_is_dgux=yes;]) + +AC_MSG_RESULT($ac_is_dgux) + ## :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 + CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" + CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" + else + CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" + CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2" + fi + AC_SUBST(CFLAGS) + AC_SUBST(CXXFLAGS) +fi + +dnl We use these options to decide which functions to include. +AC_ARG_WITH(target-subdir, +[ --with-target-subdir=SUBDIR + configuring with a cross compiler]) +AC_ARG_WITH(cross-host, +[ --with-cross-host=HOST configuring with a cross compiler]) + +# automake wants to see AC_EXEEXT. But we don't need it. And having +# it is actually a problem, because the compiler we're passed can't +# necessarily do a full link. So we fool automake here. +if false; then + # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands + # to nothing, so nothing would remain between `then' and `fi' if it + # were not for the `:' below. + : + AC_EXEEXT +fi dnl As of 4.13a2, the collector will not properly work on Solaris when dnl built with gcc and -O. So we remove -O in the appropriate case. +dnl +AC_MSG_CHECKING(whether Solaris gcc optimization fix is necessary) case "$host" in - sparc-sun-solaris2*) + sparc-sun-solaris2*|*aix*) if test "$GCC" = yes; then + AC_MSG_RESULT(yes) new_CFLAGS= for i in $CFLAGS; do case "$i" in @@ -163,51 +368,86 @@ case "$host" in esac done CFLAGS="$new_CFLAGS" + else + AC_MSG_RESULT(no) fi ;; + *) AC_MSG_RESULT(no) ;; esac dnl We need to override the top-level CFLAGS. This is how we do it. MY_CFLAGS="$CFLAGS" AC_SUBST(MY_CFLAGS) -dnl Define a few things to retarget the library towards -dnl embedded Java. +dnl Include defines that have become de facto standard. +dnl ALL_INTERIOR_POINTERS can be overridden in startup code. AC_DEFINE(SILENT) AC_DEFINE(NO_SIGNALS) -AC_DEFINE(NO_DEBUGGING) -AC_DEFINE(JAVA_FINALIZATION) +AC_DEFINE(ALL_INTERIOR_POINTERS) -dnl Create boehm-config.h so that libjava can find it. -dnl It is required to use gc_priv.h, which is required to write -dnl a new marking function. So config.h in this package is -dnl poorly named. -AC_LINK_FILES(config.h, boehm-config.h) +dnl By default, make the library as general as possible. +AC_DEFINE(JAVA_FINALIZATION) +AC_DEFINE(GC_GCJ_SUPPORT) +AC_DEFINE(ATOMIC_UNCOLLECTABLE) 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. +dnl some functionality. These is only correct when targetting an +dnl embedded system. FIXME. if test -n "${with_cross_host}"; then AC_DEFINE(NO_SIGSET) - AC_DEFINE(NO_CLOCK) - AC_DEFINE(SMALL_CONFIG) + AC_DEFINE(NO_DEBUGGING) fi +AC_ARG_ENABLE(full-debug, +[ --enable-full-debug include full support for pointer backtracing etc.], +[ if test "$enable_full_debug" = "yes"; then + AC_MSG_WARN("Must define GC_DEBUG and use debug alloc. in clients.") + AC_DEFINE(KEEP_BACK_PTRS) + AC_DEFINE(DBG_HDRS_ALL) + case $host in + ia64-*-linux* ) + AC_DEFINE(MAKE_BACK_GRAPH) + ;; + 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) + +if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + toolexecdir='$(exec_prefix)/$(target_alias)' + toolexeclibdir='$(toolexecdir)/lib' +else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + toolexeclibdir='$(libdir)' +fi +multi_os_directory=`$CC -print-multi-os-directory` +case $multi_os_directory in + .) ;; # Avoid trailing /. + *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; +esac +AC_SUBST(toolexecdir) +AC_SUBST(toolexeclibdir) + if test "${multilib}" = "yes"; then multilib_arg="--enable-multilib" else multilib_arg= fi -AC_OUTPUT(Makefile, -[ -dnl Put all the -D options in a file. These are required before -dnl boehm-config.h can be included. This is a huge hack brought -dnl about by overall poor structuring of this entire library. -echo "$DEFS" > boehm-cflags +AC_OUTPUT(Makefile include/Makefile, [ +dnl Put all the -I and -D options in a file. +echo "$INCLUDES $DEFS" > boehm-cflags if test -n "$CONFIG_FILES"; then - ac_file=Makefile . ${boehm_gc_basedir}/../config-ml.in + LD="${ORIGINAL_LD_FOR_MULTILIBS}" + ac_file=Makefile . ${gc_basedir}/../config-ml.in fi], srcdir=${srcdir} host=${host} @@ -215,7 +455,9 @@ target=${target} with_multisubdir=${with_multisubdir} ac_configure_args="${multilib_arg} ${ac_configure_args}" CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} -boehm_gc_basedir=${boehm_gc_basedir} +gc_basedir=${gc_basedir} CC="${CC}" +ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}" DEFS="$DEFS" +INCLUDES="$INCLUDES" )