From 1ac928729853d29d030944ece5e10db69d54267d Mon Sep 17 00:00:00 2001 From: mayunlong Date: Tue, 14 Feb 2023 19:09:08 +0800 Subject: [PATCH] glibcompat: Provide implementation for G_GNUC_NO_INLINE Currently, we require glib-2.56.0 at minimum (because of RHEL-8) but we use G_GNUC_NO_INLINE which was introduced in 2.58.0. While we provide an implementation for older versions, where the macro does not exists, it's a bit more tricky than that. Since we define GLIB_VERSION_MAX_ALLOWED we would get a compile time error when trying to use something too new, except for G_GNUC_NO_INLINE which was intentionally not marked as GLIB_AVAILABLE_MACRO_IN_2_58. But this is about to change with glib-2.73.2 (which contains commit [1]). At the same time, we can't just bump glib and thus we have to provide an alternative implementation without the version annotation. 1: https://gitlab.gnome.org/GNOME/glib/-/commit/a6f8fe071e44b0145619c21f3bfbc90c56ab805e Signed-off-by: Michal Privoznik Reviewed-by: Pavel Hrdina --- src/internal.h | 12 ------------ src/util/glibcompat.h | 9 +++++++++ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/internal.h b/src/internal.h index 302fddba34..440f01d370 100644 --- a/src/internal.h +++ b/src/internal.h @@ -94,18 +94,6 @@ # endif #endif -/** - * G_GNUC_NO_INLINE: - * - * Force compiler not to inline a method. Should be used if - * the method need to be overridable by test mocks. - * - * TODO: Remove after upgrading to GLib >= 2.58 - */ -#ifndef G_GNUC_NO_INLINE -# define G_GNUC_NO_INLINE __attribute__((__noinline__)) -#endif - /** * ATTRIBUTE_PACKED * diff --git a/src/util/glibcompat.h b/src/util/glibcompat.h index 6f50a76f3c..15d3266686 100644 --- a/src/util/glibcompat.h +++ b/src/util/glibcompat.h @@ -37,3 +37,12 @@ char *vir_g_strdup_vprintf(const char *msg, va_list args) #define g_canonicalize_filename vir_g_canonicalize_filename #undef g_fsync #define g_fsync vir_g_fsync + +/* Intentionally redefine macro so that it's not marked as available in 2.58 + * and newer. Drop when bumping to 2.58 or newer. */ +#undef G_GNUC_NO_INLINE +#if g_macro__has_attribute(__noinline__) +# define G_GNUC_NO_INLINE __attribute__ ((__noinline__)) +#else +# define G_GNUC_NO_INLINE +#endif -- 2.25.1