| 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 <mark.hatle@windriver.com> |
| |
| 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)) |