desktop/dconf/patch-clang.patch

Fri, 15 Nov 2019 20:11:00 +0100

author
David Demelier <markand@malikania.fr>
date
Fri, 15 Nov 2019 20:11:00 +0100
changeset 1210
422313c3fcbd
parent 496
089b46d20c00
permissions
-rw-r--r--

text/rarian: initial import, closes #2311

diff --git a/gvdb/gvdb-reader.c b/gvdb/gvdb-reader.c
index aa3154feb901f244fa184a66ac7198072c038c4f..638649b29d9a9fa2ebba1939ef7f72c92ef0a287 100644
--- a/gvdb/gvdb-reader.c
+++ b/gvdb/gvdb-reader.c
@@ -17,6 +17,7 @@
  * Author: Ryan Lortie <desrt@desrt.ca>
  */
 
+#define GVDB_USE_WEAK_SYMBOLS
 #include "gvdb-reader.h"
 #include "gvdb-format.h"
 
diff --git a/gvdb/gvdb-reader.h b/gvdb/gvdb-reader.h
index 39827737d94dc7889e53b609c25c7ac8e2b3b870..1e88e43dcc3c212e727d2bf0c771f8e86caa90d7 100644
--- a/gvdb/gvdb-reader.h
+++ b/gvdb/gvdb-reader.h
@@ -22,40 +22,55 @@
 
 #include <glib.h>
 
+/* We cannot enable the weak attribute unconditionally here because both
+ * gvdb/gvdb-reader.c and tests/dconf-mock-gvdb.c include this file. The
+ * intention of using weak symbols here is to allow the latter to override
+ * functions defined in the former, so functions in tests/dconf-mock-gvdb.c
+ * must have strong bindings. */
+#ifdef GVDB_USE_WEAK_SYMBOLS
+# ifdef __GNUC__
+#  define GVDB_GNUC_WEAK __attribute__((weak))
+# else
+#  define GVDB_GNUC_WEAK
+# endif
+#else
+# define GVDB_GNUC_WEAK
+#endif
+
 typedef struct _GvdbTable GvdbTable;
 
 G_BEGIN_DECLS
 
-G_GNUC_INTERNAL
+G_GNUC_INTERNAL GVDB_GNUC_WEAK
 GvdbTable *             gvdb_table_new_from_bytes                       (GBytes       *bytes,
                                                                          gboolean      trusted,
                                                                          GError      **error);
-G_GNUC_INTERNAL
+G_GNUC_INTERNAL GVDB_GNUC_WEAK
 GvdbTable *             gvdb_table_new                                  (const gchar  *filename,
                                                                          gboolean      trusted,
                                                                          GError      **error);
-G_GNUC_INTERNAL
+G_GNUC_INTERNAL GVDB_GNUC_WEAK
 void                    gvdb_table_free                                 (GvdbTable    *table);
-G_GNUC_INTERNAL
+G_GNUC_INTERNAL GVDB_GNUC_WEAK
 gchar **                gvdb_table_get_names                            (GvdbTable    *table,
                                                                          gint         *length);
-G_GNUC_INTERNAL
+G_GNUC_INTERNAL GVDB_GNUC_WEAK
 gchar **                gvdb_table_list                                 (GvdbTable    *table,
                                                                          const gchar  *key);
-G_GNUC_INTERNAL
+G_GNUC_INTERNAL GVDB_GNUC_WEAK
 GvdbTable *             gvdb_table_get_table                            (GvdbTable    *table,
                                                                          const gchar  *key);
-G_GNUC_INTERNAL
+G_GNUC_INTERNAL GVDB_GNUC_WEAK
 GVariant *              gvdb_table_get_raw_value                        (GvdbTable    *table,
                                                                          const gchar  *key);
-G_GNUC_INTERNAL
+G_GNUC_INTERNAL GVDB_GNUC_WEAK
 GVariant *              gvdb_table_get_value                            (GvdbTable    *table,
                                                                          const gchar  *key);
 
-G_GNUC_INTERNAL
+G_GNUC_INTERNAL GVDB_GNUC_WEAK
 gboolean                gvdb_table_has_value                            (GvdbTable    *table,
                                                                          const gchar  *key);
-G_GNUC_INTERNAL
+G_GNUC_INTERNAL GVDB_GNUC_WEAK
 gboolean                gvdb_table_is_valid                             (GvdbTable    *table);
 
 G_END_DECLS

mercurial