-AC_MSG_CHECKING([for exception model to use])
-AC_LANG_PUSH(C)
-AC_ARG_ENABLE(sjlj-exceptions,
- AS_HELP_STRING([--enable-sjlj-exceptions],
- [force use of builtin_setjmp for exceptions]),
-[:],
-[dnl Botheration. Now we've got to detect the exception model.
-dnl Link tests against libgcc.a are problematic since -- at least
-dnl as of this writing -- we've not been given proper -L bits for
-dnl single-tree newlib and libgloss.
-dnl
-dnl This is what AC_TRY_COMPILE would do if it didn't delete the
-dnl conftest files before we got a change to grep them first.
-cat > conftest.$ac_ext << EOF
-[#]line __oline__ "configure"
-@interface Frob
-@end
-@implementation Frob
-@end
-int proc();
-int foo()
-{
- @try {
- return proc();
- }
- @catch (Frob* ex) {
- return 0;
- }
-}
-EOF
-old_CFLAGS="$CFLAGS"
-dnl work around that we don't have Objective-C support in autoconf
-CFLAGS="-x objective-c -fgnu-runtime -fobjc-exceptions -S"
-if AC_TRY_EVAL(ac_compile); then
- if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
- enable_sjlj_exceptions=yes
- elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
- enable_sjlj_exceptions=no
+gt_BITFIELD_TYPE_MATTERS
+
+# -----------
+# boehm-gc
+# -----------
+
+AC_ARG_ENABLE(objc-gc,
+[AS_HELP_STRING([--enable-objc-gc],
+ [enable use of Boehm's garbage collector with the
+ GNU Objective-C runtime])],,enable_objc_gc=no)
+AC_ARG_WITH([target-bdw-gc],
+[AS_HELP_STRING([--with-target-bdw-gc=PATHLIST],
+ [specify prefix directory for installed bdw-gc package.
+ Equivalent to --with-target-bdw-gc-include=PATH/include
+ plus --with-target-bdw-gc-lib=PATH/lib])])
+AC_ARG_WITH([target-bdw-gc-include],
+[AS_HELP_STRING([--with-target-bdw-gc-include=PATHLIST],
+ [specify directories for installed bdw-gc include files])])
+AC_ARG_WITH([target-bdw-gc-lib],
+[AS_HELP_STRING([--with-target-bdw-gc-lib=PATHLIST],
+ [specify directories for installed bdw-gc library])])
+
+case "$enable_objc_gc" in
+no)
+ use_bdw_gc=no
+ ;;
+*)
+ AC_MSG_CHECKING([for bdw garbage collector])
+ if test "x$with_target_bdw_gc$with_target_bdw_gc_include$with_target_bdw_gc_lib" = x; then
+ dnl no bdw-gw options, assuming bdw-gc in default locations
+ BDW_GC_CFLAGS=
+ BDW_GC_LIBS="-lgc"
+ else
+ dnl bdw-gw options passed by configure flags
+ if test "x$with_target_bdw_gc_include" = x && test "x$with_target_bdw_gc_lib" != x; then
+ AC_MSG_ERROR([found --with-target-bdw-gc-lib but --with-target-bdw-gc-include missing])
+ elif test "x$with_target_bdw_gc_include" != x && test "x$with_target_bdw_gc_lib" = x; then
+ AC_MSG_ERROR([found --with-target-bdw-gc-include but --with-target-bdw-gc-lib missing])
+ else
+ AC_MSG_RESULT([using paths configured with --with-target-bdw-gc options])
+ fi
+ mldir=`${CC-gcc} --print-multi-directory 2>/dev/null`
+ bdw_val=
+ if test "x$with_target_bdw_gc" != x; then
+ for i in `echo $with_target_bdw_gc | tr ',' ' '`; do
+ case "$i" in
+ *=*) sd=${i%%=*}; d=${i#*=} ;;
+ *) sd=.; d=$i ;;
+ esac
+ if test "$mldir" = "$sd"; then
+ bdw_val=$d
+ fi
+ done
+ if test "x$bdw_val" = x; then
+ AC_MSG_ERROR([no multilib path ($mldir) found in --with-target-bdw-gc])
+ fi
+ bdw_inc_dir="$bdw_val/include"
+ bdw_lib_dir="$bdw_val/lib"
+ fi
+ bdw_val=
+ if test "x$with_target_bdw_gc_include" != x; then
+ for i in `echo $with_target_bdw_gc_include | tr ',' ' '`; do
+ case "$i" in
+ *=*) sd=${i%%=*}; d=${i#*=} ;;
+ *) sd=.; d=$i; fallback=$i ;;
+ esac
+ if test "$mldir" = "$sd"; then
+ bdw_val=$d
+ fi
+ done
+ if test "x$bdw_val" = x && test "x$bdw_inc_dir" = x && test "x$fallback" != x; then
+ bdw_inc_dir="$fallback"
+ elif test "x$bdw_val" = x; then
+ AC_MSG_ERROR([no multilib path ($mldir) found in --with-target-bdw-gc-include])
+ else
+ bdw_inc_dir="$bdw_val"
+ fi
+ fi
+ bdw_val=
+ if test "x$with_target_bdw_gc_lib" != x; then
+ for i in `echo $with_target_bdw_gc_lib | tr ',' ' '`; do
+ case "$i" in
+ *=*) sd=${i%%=*}; d=${i#*=} ;;
+ *) sd=.; d=$i ;;
+ esac
+ if test "$mldir" = "$sd"; then
+ bdw_val=$d
+ fi
+ done
+ if test "x$bdw_val" = x; then
+ AC_MSG_ERROR([no multilib path ($mldir) found in --with-target-bdw-gc-lib])
+ fi
+ bdw_lib_dir="$bdw_val"
+ fi
+ if test "x$bdw_inc_dir" = x; then
+ AC_MSG_ERROR([no multilib path ($mldir) found in --with-target-bdw-gc-include])
+ fi
+ if test "x$bdw_lib_dir" = x; then
+ AC_MSG_ERROR([no multilib path ($mldir) found in --with-target-bdw-gc-lib])
+ fi
+ BDW_GC_CFLAGS="-I$bdw_inc_dir"
+ if test -f $bdw_lib_dir/libgc.la; then
+ BDW_GC_LIBS="$bdw_lib_dir/libgc.la"
+ else
+ BDW_GC_LIBS="-L$bdw_lib_dir -lgc"
+ fi
+ AC_MSG_RESULT([found])