Simplify an reorganise GC changes

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/tools/make/trunk@27574 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2009-01-11 08:41:17 +00:00
parent 2cb8c7c2ea
commit 1d2ac39fe3
6 changed files with 82 additions and 166 deletions

View file

@ -1,3 +1,12 @@
2009-01-11 Richard Frith-Macdonald <rfm@gnu.org>
* configure.ac:
* configure:
* library-combo.make:
* config.make.in:
* common.make:
Simplify GC changes.
2009-01-10 Richard Frith-Macdonald <rfm@gnu.org>
* configure.ac: Check for objc garbage collection.

View file

@ -582,6 +582,11 @@ ifeq ($(USE_OBJC_EXCEPTIONS), yes)
INTERNAL_LDFLAGS += -shared-libgcc -fexceptions
endif
# If we are using garbage collection we set a define to say so.
ifeq ($(OBJC_WITH_GC), yes)
OBJCFLAGS += -DGS_WITH_GC=1
endif
#
# Now decide whether to build shared objects or not. Nothing depending
# on the value of the shared variable is allowed before this point!

View file

@ -170,7 +170,7 @@ USE_OBJC_EXCEPTIONS = @USE_OBJC_EXCEPTIONS@
#
# Whether we are using the ObjC garbage cllection library.
#
USE_OBJC_GC = @USE_OBJC_GC@
OBJC_WITH_GC = @OBJC_WITH_GC@
#
# Whether the compiler is GCC with precompiled header support

172
configure vendored
View file

@ -273,7 +273,7 @@ PACKAGE_BUGREPORT=
ac_unique_file="application.make"
ac_default_prefix=NONE
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP CXX CXXFLAGS ac_ct_CXX build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os ac_cv_library_combo cc_cppprecomp cc_bundle CYGWIN RANLIB AR DLLTOOL ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S TAR CHOWN GNUSTEP_MAKE_STRICT_V2_MODE GNUSTEP_ABSOLUTE_INSTALL_PATHS GNUSTEP_CONFIG_FILE GNUSTEP_USER_CONFIG_FILE GNUSTEP_USER_DEFAULTS_DIR GNUSTEP_MAKEFILES HOST_INSTALL GNUSTEP_FLATTENED GNUSTEP_IS_FLATTENED GNUSTEP_SYSTEM_APPS GNUSTEP_SYSTEM_ADMIN_APPS GNUSTEP_SYSTEM_WEB_APPS GNUSTEP_SYSTEM_TOOLS GNUSTEP_SYSTEM_ADMIN_TOOLS GNUSTEP_SYSTEM_LIBRARY GNUSTEP_SYSTEM_HEADERS GNUSTEP_SYSTEM_LIBRARIES GNUSTEP_SYSTEM_DOC GNUSTEP_SYSTEM_DOC_INFO GNUSTEP_SYSTEM_DOC_MAN GNUSTEP_NETWORK_APPS GNUSTEP_NETWORK_ADMIN_APPS GNUSTEP_NETWORK_WEB_APPS GNUSTEP_NETWORK_TOOLS GNUSTEP_NETWORK_ADMIN_TOOLS GNUSTEP_NETWORK_LIBRARY GNUSTEP_NETWORK_HEADERS GNUSTEP_NETWORK_LIBRARIES GNUSTEP_NETWORK_DOC GNUSTEP_NETWORK_DOC_INFO GNUSTEP_NETWORK_DOC_MAN GNUSTEP_LOCAL_APPS GNUSTEP_LOCAL_ADMIN_APPS GNUSTEP_LOCAL_WEB_APPS GNUSTEP_LOCAL_TOOLS GNUSTEP_LOCAL_ADMIN_TOOLS GNUSTEP_LOCAL_LIBRARY GNUSTEP_LOCAL_HEADERS GNUSTEP_LOCAL_LIBRARIES GNUSTEP_LOCAL_DOC GNUSTEP_LOCAL_DOC_INFO GNUSTEP_LOCAL_DOC_MAN GNUSTEP_USER_DIR_APPS GNUSTEP_USER_DIR_ADMIN_APPS GNUSTEP_USER_DIR_WEB_APPS GNUSTEP_USER_DIR_TOOLS GNUSTEP_USER_DIR_ADMIN_TOOLS GNUSTEP_USER_DIR_LIBRARY GNUSTEP_USER_DIR_HEADERS GNUSTEP_USER_DIR_LIBRARIES GNUSTEP_USER_DIR_DOC GNUSTEP_USER_DIR_DOC_INFO GNUSTEP_USER_DIR_DOC_MAN GNUSTEP_SYSTEM_USERS_DIR GNUSTEP_NETWORK_USERS_DIR GNUSTEP_LOCAL_USERS_DIR GNUSTEP_SYSTEM_ROOT GNUSTEP_NETWORK_ROOT GNUSTEP_LOCAL_ROOT GNUSTEP_USER_DIR GNUSTEP_MULTI_PLATFORM BACKEND_BUNDLE USE_OBJC_GC objc_threaded ac_cv_objc_threaded USE_OBJC_EXCEPTIONS AUTO_DEPENDENCIES GCC_WITH_PRECOMPILED_HEADERS SOLARIS_SHARED INCLUDES LIB_DIR OBJCFLAGS GNUMAKE MAKE_WITH_INFO_FUNCTION GNUSTEP_STRIP_MAKEFILES GNUSTEP_MAKE_VERSION GNUSTEP_MAKE_MAJOR_VERSION GNUSTEP_MAKE_MINOR_VERSION GNUSTEP_MAKE_SUBMINOR_VERSION clean_target_os clean_target_cpu clean_target_vendor LATEX2HTML LIBOBJS LTLIBOBJS'
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP CXX CXXFLAGS ac_ct_CXX build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os OBJC_WITH_GC ac_cv_library_combo cc_cppprecomp cc_bundle CYGWIN RANLIB AR DLLTOOL ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S TAR CHOWN GNUSTEP_MAKE_STRICT_V2_MODE GNUSTEP_ABSOLUTE_INSTALL_PATHS GNUSTEP_CONFIG_FILE GNUSTEP_USER_CONFIG_FILE GNUSTEP_USER_DEFAULTS_DIR GNUSTEP_MAKEFILES HOST_INSTALL GNUSTEP_FLATTENED GNUSTEP_IS_FLATTENED GNUSTEP_SYSTEM_APPS GNUSTEP_SYSTEM_ADMIN_APPS GNUSTEP_SYSTEM_WEB_APPS GNUSTEP_SYSTEM_TOOLS GNUSTEP_SYSTEM_ADMIN_TOOLS GNUSTEP_SYSTEM_LIBRARY GNUSTEP_SYSTEM_HEADERS GNUSTEP_SYSTEM_LIBRARIES GNUSTEP_SYSTEM_DOC GNUSTEP_SYSTEM_DOC_INFO GNUSTEP_SYSTEM_DOC_MAN GNUSTEP_NETWORK_APPS GNUSTEP_NETWORK_ADMIN_APPS GNUSTEP_NETWORK_WEB_APPS GNUSTEP_NETWORK_TOOLS GNUSTEP_NETWORK_ADMIN_TOOLS GNUSTEP_NETWORK_LIBRARY GNUSTEP_NETWORK_HEADERS GNUSTEP_NETWORK_LIBRARIES GNUSTEP_NETWORK_DOC GNUSTEP_NETWORK_DOC_INFO GNUSTEP_NETWORK_DOC_MAN GNUSTEP_LOCAL_APPS GNUSTEP_LOCAL_ADMIN_APPS GNUSTEP_LOCAL_WEB_APPS GNUSTEP_LOCAL_TOOLS GNUSTEP_LOCAL_ADMIN_TOOLS GNUSTEP_LOCAL_LIBRARY GNUSTEP_LOCAL_HEADERS GNUSTEP_LOCAL_LIBRARIES GNUSTEP_LOCAL_DOC GNUSTEP_LOCAL_DOC_INFO GNUSTEP_LOCAL_DOC_MAN GNUSTEP_USER_DIR_APPS GNUSTEP_USER_DIR_ADMIN_APPS GNUSTEP_USER_DIR_WEB_APPS GNUSTEP_USER_DIR_TOOLS GNUSTEP_USER_DIR_ADMIN_TOOLS GNUSTEP_USER_DIR_LIBRARY GNUSTEP_USER_DIR_HEADERS GNUSTEP_USER_DIR_LIBRARIES GNUSTEP_USER_DIR_DOC GNUSTEP_USER_DIR_DOC_INFO GNUSTEP_USER_DIR_DOC_MAN GNUSTEP_SYSTEM_USERS_DIR GNUSTEP_NETWORK_USERS_DIR GNUSTEP_LOCAL_USERS_DIR GNUSTEP_SYSTEM_ROOT GNUSTEP_NETWORK_ROOT GNUSTEP_LOCAL_ROOT GNUSTEP_USER_DIR GNUSTEP_MULTI_PLATFORM BACKEND_BUNDLE objc_threaded ac_cv_objc_threaded USE_OBJC_EXCEPTIONS AUTO_DEPENDENCIES GCC_WITH_PRECOMPILED_HEADERS SOLARIS_SHARED INCLUDES LIB_DIR OBJCFLAGS GNUMAKE MAKE_WITH_INFO_FUNCTION GNUSTEP_STRIP_MAKEFILES GNUSTEP_MAKE_VERSION GNUSTEP_MAKE_MAJOR_VERSION GNUSTEP_MAKE_MINOR_VERSION GNUSTEP_MAKE_SUBMINOR_VERSION clean_target_os clean_target_cpu clean_target_vendor LATEX2HTML LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@ -818,6 +818,11 @@ Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-objc-garbage-collection
Use objc garbage collection. Use this option if you want
to use garbage collection for objective-c software.
--enable-strict-v2-mode
Enable strict gnustep-make version 2 mode by default. Use this
option to have gnustep-make be aggressively backwards-incompatible
@ -892,11 +897,6 @@ Optional Features:
not supported / does not work on your machine.
--enable-objc-garbage-collection
Use objc garbage collection. Use this option if you want
to use garbage collection for objective-c software.
--enable-native-objc-exceptions
Use native Objective-C exceptions. Use this option if you want
to use the native Objective-C exception support (@try/@catch/@finally)
@ -3121,6 +3121,27 @@ else
fi;
#--------------------------------------------------------------------
# Check if objc should use garbage collection.
#--------------------------------------------------------------------
if test "gnugc"=`echo $ac_cv_library_combo|tr '-' ' '|awk '{print $1}'`; then
gc=yes
else
gc=no
fi
# Check whether --enable-objc-garbage-collection or --disable-objc-garbage-collection was given.
if test "${enable_objc_garbage_collection+set}" = set; then
enableval="$enable_objc_garbage_collection"
OBJC_WITH_GC=$enableval
else
OBJC_WITH_GC=$gc
fi;
if test "$OBJC_WITH_GC" = "yes"; then
ac_cv_library_combo="gnugc-gnu-gnu"
fi
if test "$ac_cv_library_combo" = "" -o "$ac_cv_library_combo" = "no"; then
case "$host_os" in
darwin*) ac_cv_library_combo=apple-apple-apple ;;
@ -4644,144 +4665,24 @@ if test "$gs_cv_objc_libdir" != "NONE"; then
export LD_LIBRARY_PATH
fi
#--------------------------------------------------------------------
# Check if libobjc has garbage collection.
#--------------------------------------------------------------------
# Check whether --enable-objc-garbage-collection or --disable-objc-garbage-collection was given.
if test "${enable_objc_garbage_collection+set}" = set; then
enableval="$enable_objc_garbage_collection"
USE_OBJC_GC=$enableval
else
USE_OBJC_GC=no
fi;
OBJCRT=-lobjc
saved_CFLAGS="$CFLAGS"
saved_LIBS="$LIBS"
CFLAGS="$CFLAGS -x objective-c -I$srcdir $OBJC_CPPFLAGS $OBJC_LDFLAGS"
if test "$OBJC_RUNTIME_LIB" = "gnu"; then
CFLAGS="$CFLAGS -fgnu-runtime -DGNU_RUNTIME"
OBJCRT="-lobjc"
fi
if test "$OBJC_RUNTIME_LIB" = "gnugc"; then
CFLAGS="$CFLAGS -fgnu-runtime -DGNU_RUNTIME"
OBJCRT="-lobjc -ldl -lgc"
fi
if test "$OBJC_RUNTIME_LIB" = "nx"; then
CFLAGS="$CFLAGS -DNeXT_RUNTIME"
OBJCRT="-lobjc"
fi
if test "$OBJC_RUNTIME_LIB" = "apple"; then
CFLAGS="$CFLAGS -DAPPLE_RUNTIME"
fi
if test "$USE_OBJC_GC" = "yes"; then
echo "$as_me:$LINENO: checking whether we should use ObjC garbage collection" >&5
echo $ECHO_N "checking whether we should use ObjC garbage collection... $ECHO_C" >&6
LIBS="-lobjc_gc -ldl"
echo "$as_me:$LINENO: checking for class_ivar_set_gcinvisible" >&5
echo $ECHO_N "checking for class_ivar_set_gcinvisible... $ECHO_C" >&6
if test "${ac_cv_func_class_ivar_set_gcinvisible+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
/* Define class_ivar_set_gcinvisible to an innocuous variant, in case <limits.h> declares class_ivar_set_gcinvisible.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
#define class_ivar_set_gcinvisible innocuous_class_ivar_set_gcinvisible
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char class_ivar_set_gcinvisible (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
#ifdef __STDC__
# include <limits.h>
#else
# include <assert.h>
#endif
#undef class_ivar_set_gcinvisible
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
{
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char class_ivar_set_gcinvisible ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_class_ivar_set_gcinvisible) || defined (__stub___class_ivar_set_gcinvisible)
choke me
#else
char (*f) () = class_ivar_set_gcinvisible;
#endif
#ifdef __cplusplus
}
#endif
int
main ()
{
return f != class_ivar_set_gcinvisible;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_func_class_ivar_set_gcinvisible=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_func_class_ivar_set_gcinvisible=no
fi
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
echo "$as_me:$LINENO: result: $ac_cv_func_class_ivar_set_gcinvisible" >&5
echo "${ECHO_T}$ac_cv_func_class_ivar_set_gcinvisible" >&6
if test $ac_cv_func_class_ivar_set_gcinvisible = yes; then
gc_ok=yes
else
gc_ok=no
fi
if test "$gc_ok" = yes; then
OBJCRT="$LIBS"
else
{ echo "$as_me:$LINENO: Garbage collection was requested, but the library couldn't" >&5
echo "$as_me: Garbage collection was requested, but the library couldn't" >&6;}
{ echo "$as_me:$LINENO: be found." >&5
echo "$as_me: be found." >&6;}
USE_OBJC_GC=no
fi
OBJCRT="-lobjc"
fi
@ -4807,7 +4708,8 @@ echo "$as_me:$LINENO: checking whether objc has thread support" >&5
echo $ECHO_N "checking whether objc has thread support... $ECHO_C" >&6
if test "$OBJC_THREAD" != ""; then
LIBS="$OBJCRT $LIBS $OBJC_THREAD"
if test "$cross_compiling" = yes; then
if test "$cross_compiling" = yes; then
objc_threaded=""
else
cat >conftest.$ac_ext <<_ACEOF
@ -6359,6 +6261,7 @@ s,@target@,$target,;t t
s,@target_cpu@,$target_cpu,;t t
s,@target_vendor@,$target_vendor,;t t
s,@target_os@,$target_os,;t t
s,@OBJC_WITH_GC@,$OBJC_WITH_GC,;t t
s,@ac_cv_library_combo@,$ac_cv_library_combo,;t t
s,@cc_cppprecomp@,$cc_cppprecomp,;t t
s,@cc_bundle@,$cc_bundle,;t t
@ -6435,7 +6338,6 @@ s,@GNUSTEP_LOCAL_ROOT@,$GNUSTEP_LOCAL_ROOT,;t t
s,@GNUSTEP_USER_DIR@,$GNUSTEP_USER_DIR,;t t
s,@GNUSTEP_MULTI_PLATFORM@,$GNUSTEP_MULTI_PLATFORM,;t t
s,@BACKEND_BUNDLE@,$BACKEND_BUNDLE,;t t
s,@USE_OBJC_GC@,$USE_OBJC_GC,;t t
s,@objc_threaded@,$objc_threaded,;t t
s,@ac_cv_objc_threaded@,$ac_cv_objc_threaded,;t t
s,@USE_OBJC_EXCEPTIONS@,$USE_OBJC_EXCEPTIONS,;t t

View file

@ -64,6 +64,27 @@ ac_cv_library_combo=$withval,
ac_cv_library_combo=$ac_cv_library_combo
)
#--------------------------------------------------------------------
# Check if objc should use garbage collection.
#--------------------------------------------------------------------
if test "gnugc"=`echo $ac_cv_library_combo|tr '-' ' '|awk '{print $1}'`; then
gc=yes
else
gc=no
fi
AC_ARG_ENABLE(objc-garbage-collection, [
--enable-objc-garbage-collection
Use objc garbage collection. Use this option if you want
to use garbage collection for objective-c software.
],
OBJC_WITH_GC=$enableval,
OBJC_WITH_GC=$gc)
AC_SUBST(OBJC_WITH_GC)
if test "$OBJC_WITH_GC" = "yes"; then
ac_cv_library_combo="gnugc-gnu-gnu"
fi
if test "$ac_cv_library_combo" = "" -o "$ac_cv_library_combo" = "no"; then
case "$host_os" in
darwin*) ac_cv_library_combo=apple-apple-apple ;;
@ -1063,48 +1084,27 @@ if test "$gs_cv_objc_libdir" != "NONE"; then
export LD_LIBRARY_PATH
fi
#--------------------------------------------------------------------
# Check if libobjc has garbage collection.
#--------------------------------------------------------------------
AC_ARG_ENABLE(objc-garbage-collection, [
--enable-objc-garbage-collection
Use objc garbage collection. Use this option if you want
to use garbage collection for objective-c software.
],
USE_OBJC_GC=$enableval,
USE_OBJC_GC=no)
OBJCRT=-lobjc
saved_CFLAGS="$CFLAGS"
saved_LIBS="$LIBS"
CFLAGS="$CFLAGS -x objective-c -I$srcdir $OBJC_CPPFLAGS $OBJC_LDFLAGS"
if test "$OBJC_RUNTIME_LIB" = "gnu"; then
CFLAGS="$CFLAGS -fgnu-runtime -DGNU_RUNTIME"
OBJCRT="-lobjc"
fi
if test "$OBJC_RUNTIME_LIB" = "gnugc"; then
CFLAGS="$CFLAGS -fgnu-runtime -DGNU_RUNTIME"
OBJCRT="-lobjc -ldl -lgc"
fi
if test "$OBJC_RUNTIME_LIB" = "nx"; then
CFLAGS="$CFLAGS -DNeXT_RUNTIME"
OBJCRT="-lobjc"
fi
if test "$OBJC_RUNTIME_LIB" = "apple"; then
CFLAGS="$CFLAGS -DAPPLE_RUNTIME"
OBJCRT="-lobjc"
fi
if test "$USE_OBJC_GC" = "yes"; then
AC_MSG_CHECKING(whether we should use ObjC garbage collection)
LIBS="-lobjc_gc -ldl"
AC_CHECK_FUNC(class_ivar_set_gcinvisible, gc_ok=yes, gc_ok=no)
if test "$gc_ok" = yes; then
OBJCRT="$LIBS"
else
AC_MSG_NOTICE([Garbage collection was requested, but the library couldn't])
AC_MSG_NOTICE([be found.])
USE_OBJC_GC=no
fi
fi
AC_SUBST(USE_OBJC_GC)
#--------------------------------------------------------------------
# Check if libobjc was compiled with thread support.
#--------------------------------------------------------------------

View file

@ -101,9 +101,9 @@ endif
ifeq ($(OBJC_RUNTIME_LIB), gnugc)
OBJC_LDFLAGS =
OBJC_LIB_DIR =
OBJC_LIBS = -lobjc_gc -lgc
OBJC_LIBS = -lobjc_gc -ldl -lgc
RUNTIME_FLAG = -fgnu-runtime
RUNTIME_DEFINE = -DGNU_RUNTIME=1 -DOBJC_WITH_GC=1
RUNTIME_DEFINE = -DGNU_RUNTIME=1 -DGS_WITH_GC=1
ifeq ($(debug),yes)
RUNTIME_DEFINE += -DGC_DEBUG
endif