From 856aeba9e453e67dc5cc308d1f099f133f1f629c Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Wed, 10 Mar 2021 19:48:22 +0000 Subject: [PATCH 1/2] glib-mkenums: Parse and skip deprecation/availability annotations Teach `glib-mkenums` how to parse and ignore: - `GLIB_AVAILABLE_ENUMERATOR_IN_x_xx` - `GLIB_DEPRECATED_ENUMERATOR_IN_x_xx` - `GLIB_DEPRECATED_ENUMERATOR_IN_x_xx_FOR(x)` Future work could expose the deprecation/availability information as substitutions in the template file, but this commit does not do that. It does, however, add some unit tests for the annotations. Signed-off-by: Philip Withnall Fixes: #2327 --- gobject/glib-mkenums.in | 8 +++-- gobject/tests/mkenums.py | 78 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/gobject/glib-mkenums.in b/gobject/glib-mkenums.in index 199868039..b996a733a 100755 --- a/gobject/glib-mkenums.in +++ b/gobject/glib-mkenums.in @@ -219,6 +219,7 @@ def parse_entries(file, file_name): m = re.match(r'''\s* (\w+)\s* # name + (\s+[A-Z]+_(?:AVAILABLE|DEPRECATED)_ENUMERATOR_IN_[0-9_]+(?:_FOR\s*\(\s*\w+\s*\))?\s*)? # availability (?:=( # value \s*\w+\s*\(.*\)\s* # macro with multiple args | # OR @@ -231,12 +232,15 @@ def parse_entries(file, file_name): if m: groups = m.groups() name = groups[0] + availability = None value = None options = None if len(groups) > 1: - value = groups[1] + availability = groups[1] if len(groups) > 2: - options = groups[2] + value = groups[2] + if len(groups) > 3: + options = groups[3] if flags is None and value is not None and '<<' in value: seenbitshift = 1 diff --git a/gobject/tests/mkenums.py b/gobject/tests/mkenums.py index 876089d4f..a3273c525 100644 --- a/gobject/tests/mkenums.py +++ b/gobject/tests/mkenums.py @@ -650,6 +650,84 @@ comment: {standard_bottom_comment} "0", ) + def test_available_in(self): + """Test GLIB_AVAILABLE_ENUMERATOR_IN_2_68 handling + https://gitlab.gnome.org/GNOME/glib/-/issues/2327""" + h_contents = """ + typedef enum { + G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER GLIB_AVAILABLE_ENUMERATOR_IN_2_68 = (1<<2) + } GDBusServerFlags; + """ + result = self.runMkenumsWithHeader(h_contents) + self.assertEqual("", result.err) + self.assertSingleEnum( + result, + "GDBusServerFlags", + "g_dbus_server_flags", + "G_DBUS_SERVER_FLAGS", + "DBUS_SERVER_FLAGS", + "G", + "", + "flags", + "Flags", + "FLAGS", + "G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER", + "user", + "4", + ) + + def test_deprecated_in(self): + """Test GLIB_DEPRECATED_ENUMERATOR_IN_2_68 handling + https://gitlab.gnome.org/GNOME/glib/-/issues/2327""" + h_contents = """ + typedef enum { + G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER GLIB_DEPRECATED_ENUMERATOR_IN_2_68 = (1<<2) + } GDBusServerFlags; + """ + result = self.runMkenumsWithHeader(h_contents) + self.assertEqual("", result.err) + self.assertSingleEnum( + result, + "GDBusServerFlags", + "g_dbus_server_flags", + "G_DBUS_SERVER_FLAGS", + "DBUS_SERVER_FLAGS", + "G", + "", + "flags", + "Flags", + "FLAGS", + "G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER", + "user", + "4", + ) + + def test_deprecated_in_for(self): + """Test GLIB_DEPRECATED_ENUMERATOR_IN_2_68_FOR() handling + https://gitlab.gnome.org/GNOME/glib/-/issues/2327""" + h_contents = """ + typedef enum { + G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER GLIB_DEPRECATED_ENUMERATOR_IN_2_68_FOR(G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER2) = (1<<2) + } GDBusServerFlags; + """ + result = self.runMkenumsWithHeader(h_contents) + self.assertEqual("", result.err) + self.assertSingleEnum( + result, + "GDBusServerFlags", + "g_dbus_server_flags", + "G_DBUS_SERVER_FLAGS", + "DBUS_SERVER_FLAGS", + "G", + "", + "flags", + "Flags", + "FLAGS", + "G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER", + "user", + "4", + ) + class TestRspMkenums(TestMkenums): """Run all tests again in @rspfile mode""" From c92d9dc267d3ccb27f37ae1a02a645c233dc75eb Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Wed, 10 Mar 2021 19:51:50 +0000 Subject: [PATCH 2/2] enums: Add missing GLIB_AVAILABLE_ENUMERATOR_IN_2_68 annotations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In the 2.68 cycle we’d added 3 new enumerator elements. Due to the preceding commit, they can now be annotated with `GLIB_AVAILABLE_ENUMERATOR_IN_2_68`, which will make it a bit easier for third party projects to notice when they’re using these symbols without having bumped their GLib dependency. Signed-off-by: Philip Withnall Fixes: #2327 --- gio/gioenums.h | 4 ++-- glib/guri.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gio/gioenums.h b/gio/gioenums.h index 5e83e9693..f2f66c875 100644 --- a/gio/gioenums.h +++ b/gio/gioenums.h @@ -1220,7 +1220,7 @@ typedef enum { G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS = (1<<2), G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION = (1<<3), G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING = (1<<4), - G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER = (1<<5) + G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER GLIB_AVAILABLE_ENUMERATOR_IN_2_68 = (1<<5) } GDBusConnectionFlags; /** @@ -1383,7 +1383,7 @@ typedef enum G_DBUS_SERVER_FLAGS_NONE = 0, G_DBUS_SERVER_FLAGS_RUN_IN_THREAD = (1<<0), G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS = (1<<1), - G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER = (1<<2) + G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER GLIB_AVAILABLE_ENUMERATOR_IN_2_68 = (1<<2) } GDBusServerFlags; /** diff --git a/glib/guri.h b/glib/guri.h index b6a4fd033..bfe9399a4 100644 --- a/glib/guri.h +++ b/glib/guri.h @@ -87,7 +87,7 @@ typedef enum { G_URI_FLAGS_ENCODED_QUERY = 1 << 5, G_URI_FLAGS_ENCODED_PATH = 1 << 6, G_URI_FLAGS_ENCODED_FRAGMENT = 1 << 7, - G_URI_FLAGS_SCHEME_NORMALIZE = 1 << 8, + G_URI_FLAGS_SCHEME_NORMALIZE GLIB_AVAILABLE_ENUMERATOR_IN_2_68 = 1 << 8, } GUriFlags; GLIB_AVAILABLE_IN_2_66