configure.ac: Check if the current compiler supports the transactions Some distributions appear to have compilers that are built without support for transactions, even though they are GCC 4.7 or newer. Upstream-Status: Submitted [RPM5 maintainer] Signed-off-by: Mark Hatle Index: rpm-5.4.15/configure.ac =================================================================== --- rpm-5.4.15.orig/configure.ac +++ rpm-5.4.15/configure.ac @@ -425,9 +425,34 @@ dnl # --- other optimizations rpm_CFLAGS_ADD([-D_FORTIFY_SOURCE=2 -fstack-protector], [RPM_CFLAGS]) dnl # rpm_CFLAGS_ADD([-fstack-protector-all],[RPM_CFLAGS]) - if test \( ".`$CC --version 2>&1 | grep 'GCC'`" != . \); then - rpm_CFLAGS_ADD([-fgnu-tm], [RPM_CFLAGS]) - fi +dnl # Check if the current gcc supports -fgnu-tm and __transaction_atomic +AC_MSG_CHECKING([If the compiler supports __transaction_atomic]) +save_CFLAGS="$CFLAGS" +save_LDFLAGS="$LDFLAGS" +CFLAGS="${CFLAGS} -fgnu-tm -litm" +LDFLAGS="${LDFLAGS} -litm" +AC_LINK_IFELSE([AC_LANG_SOURCE([[ +int +main() +{ +#if !__clang__ && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 7) || (__GNUC__ > 4)) /* XXX gud enuf? */ + int i = 0; + __transaction_atomic { i++; } +#else +# error Compiler does not support __transaction_atomic +#endif + return 0; +} +]])], [ + AC_DEFINE([HAVE_GNUC_TM_ATOMIC], [1], + [Define to 1 if the compiler supports __transaction_atomic.]) + AC_MSG_RESULT([yes]) +], [ + CFLAGS="$save_CFLAGS" + LDFLAGS="$save_LDFLAGS" + AC_MSG_RESULT([no]) +]) + dnl # --- options below are added to RPM_CFLAGS but _NOT_ added to CFLAGS CPPFLAGS="$CPPFLAGS $RPM_CPPFLAGS" Index: rpm-5.4.15/rpmio/rpmutil.h =================================================================== --- rpm-5.4.15.orig/rpmio/rpmutil.h +++ rpm-5.4.15/rpmio/rpmutil.h @@ -105,7 +105,7 @@ # define RPM_GNUC_INTERNAL #endif -#if !__clang__ && __GNUC__ == 4 && __GNUC_MINOR__ >= 7 /* XXX gud enuf? */ +#ifdef HAVE_GNUC_TM_ATOMIC # define RPM_GNUC_TM_SAFE __attribute__((transaction_safe)) # define RPM_GNUC_TM_PURE __attribute__((transaction_pure)) # define RPM_GNUC_TM_CALLABLE __attribute__((transaction_callable))