[glib: 1/3] glib-mkenums: Parse and skip deprecation/availability annotations




commit 856aeba9e453e67dc5cc308d1f099f133f1f629c
Author: Philip Withnall <pwithnall endlessos org>
Date:   Wed Mar 10 19:48:22 2021 +0000

    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 <pwithnall endlessos org>
    
    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"""


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]