From 2667d8cd95a2a29c35c1bb8f4629c22fd0aa98e9 Mon Sep 17 00:00:00 2001
From: Xavier Claessens <xavier.claessens@collabora.com>
Date: Thu, 2 Jan 2020 21:56:10 -0500
Subject: [PATCH 1/3] Skip G_GNUC_(BEGIN|END)_IGNORE_DEPRECATIONS lines

For some reason, glib has to put empty line before and after each of
these lines otherwise the symbol following it is undeclared.
---
 gtkdoc/scan.py | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gtkdoc/scan.py b/gtkdoc/scan.py
index d04d4d4..7de08ad 100644
--- a/gtkdoc/scan.py
+++ b/gtkdoc/scan.py
@@ -561,6 +561,11 @@ def ScanHeaderContent(input_lines, decl_list, get_types, options):
                     logging.info('Found start of comment: %s', line.strip())
                 continue
 
+            # Skip begin/end deprecation macros.
+            m = re.search(r'^\s*G_GNUC_(BEGIN|END)_IGNORE_DEPRECATIONS', line)
+            if m:
+                continue
+
             logging.info('no decl: %s', line.strip())
 
             cm = [m.match(line) for m in CLINE_MATCHER]
-- 
2.20.1


From 9e58548688c9768cf41c59ccef531d438ffb2504 Mon Sep 17 00:00:00 2001
From: Xavier Claessens <xavier.claessens@collabora.com>
Date: Fri, 3 Jan 2020 06:47:47 -0500
Subject: [PATCH 2/3] typedef can be followed by decorator

---
 gtkdoc/scan.py | 30 +++++++++++++++++-------------
 1 file changed, 17 insertions(+), 13 deletions(-)

diff --git a/gtkdoc/scan.py b/gtkdoc/scan.py
index 7de08ad..5a5da92 100644
--- a/gtkdoc/scan.py
+++ b/gtkdoc/scan.py
@@ -96,19 +96,8 @@ CLINE_MATCHER = [
         (struct|union)\s*
         \w*\s*{""", re.VERBOSE),
     # 12-14: OTHER TYPEDEFS
-    re.compile(
-        r"""^\s*typedef\s+
-        (?:struct|union)\s+\w+[\s\*]+
-        (\w+)                                # 1: name
-        \s*;""", re.VERBOSE),
-    re.compile(
-        r"""^\s*
-        (?:G_GNUC_EXTENSION\s+)?
-        typedef\s+
-        (.+[\s\*])                           # 1: e.g. 'unsigned int'
-        (\w+)                                # 2: name
-        (?:\s*\[[^\]]+\])*
-        \s*;""", re.VERBOSE),
+    None,  # in InitScanner()
+    None,  # in InitScanner()
     re.compile(r'^\s*typedef\s+'),
     # 15: VARIABLES (extern'ed variables)
     None,  # in InitScanner()
@@ -267,6 +256,21 @@ def InitScanner(options):
         %s                                   # 3: optional decorator
         \s*;""" % optional_decorators_regex, re.VERBOSE)
     # OTHER TYPEDEFS
+    CLINE_MATCHER[12] = re.compile(
+        r"""^\s*typedef\s+
+        (?:struct|union)\s+\w+[\s\*]+
+        (\w+)                                # 1: name
+        %s                                   # 2: optional decorator
+        \s*;""" % optional_decorators_regex, re.VERBOSE)
+    CLINE_MATCHER[13] = re.compile(
+        r"""^\s*
+        (?:G_GNUC_EXTENSION\s+)?
+        typedef\s+
+        (.+?[\s\*])                          # 1: e.g. 'unsigned int'
+        (\w+)                                # 2: name
+        (?:\s*\[[^\]]+\])*
+        %s                                   # 3: optional decorator
+        \s*;""" % optional_decorators_regex, re.VERBOSE)
     CLINE_MATCHER[15] = re.compile(
         r"""^\s*
         (?:extern|[A-Za-z_]+VAR%s)\s+
-- 
2.20.1


From 5bfe23f0257e1b4c6c9a4e3a2dbb180455f753f2 Mon Sep 17 00:00:00 2001
From: Jason Crain <jason@inspiresomeone.us>
Date: Mon, 6 Jan 2020 19:05:42 -0700
Subject: [PATCH 3/3] scan: support deprecated struct members

gcc allows deprecating members of structs. For example:

struct data {
  int x G_GNUC_DEPRECATED_FOR(replacement);
};

However, this currently causes the entire struct to be marked as
deprecated and confuses mkdb because it doesn't understand the
G_GNUC_DEPRECATED_FOR symbol.

Fix this by having the whole struct only be marked as deprecated if the
'_DEPRECATED' is after the closing bracket of the struct, similar to how
it already does for enums, and having scan automatically remove all
G_GNUC_* decorators from struct members, similar to how it already does
for functions.
---
 gtkdoc/scan.py | 12 ++++++++++--
 tests/scan.py  | 17 +++++++++++++++++
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/gtkdoc/scan.py b/gtkdoc/scan.py
index 5a5da92..6c6534a 100644
--- a/gtkdoc/scan.py
+++ b/gtkdoc/scan.py
@@ -538,7 +538,7 @@ def ScanHeaderContent(input_lines, decl_list, get_types, options):
         # section (#endif /* XXX_DEPRECATED */
         if deprecated_conditional_nest == 0 and '_DEPRECATED' in line:
             m = re.search(r'^\s*#\s*(if*|define|endif)', line)
-            if not (m or in_declaration == 'enum'):
+            if not (m or in_declaration == 'enum' or in_declaration == 'struct'):
                 logging.info('Found deprecation annotation (decl: "%s"): "%s"',
                              in_declaration, line.strip())
                 deprecated_conditional_nest += 0.1
@@ -953,9 +953,17 @@ def ScanHeaderContent(input_lines, decl_list, get_types, options):
                     title = '<TITLE>%s</TITLE>' % objectname
 
                 logging.info('Store struct: "%s"', symbol)
+                # Structs could contain deprecated members and that doesn't
+                # mean the whole struct is deprecated, so they are ignored when
+                # setting deprecated_conditional_nest above. Here we can check
+                # if the _DEPRECATED is between '}' and ';' which would mean
+                # the struct as a whole is deprecated.
+                if re.search(r'\n\s*\}.*_DEPRECATED.*;\s*$', decl):
+                    deprecated = '<DEPRECATED/>\n'
                 if AddSymbolToList(slist, symbol):
                     structsym = in_declaration.upper()
-                    stripped_decl = re.sub('(%s)' % optional_decorators_regex, '', decl)
+                    regex = r'(?:\s+(?:G_GNUC_\w+(?:\(\w*\))?%s))' % ignore_decorators
+                    stripped_decl = re.sub(regex, '', decl)
                     decl_list.append('<%s>\n<NAME>%s</NAME>\n%s%s</%s>\n' %
                                      (structsym, symbol, deprecated, stripped_decl, structsym))
                     if symbol in forward_decls:
diff --git a/tests/scan.py b/tests/scan.py
index ad63541..6d608b6 100755
--- a/tests/scan.py
+++ b/tests/scan.py
@@ -552,6 +552,23 @@ class ScanHeaderContentStructs(ScanHeaderContentTestCase):
         slist, doc_comments = self.scanHeaderContent([header])
         self.assertDecl('data', expected, slist)
 
+    def test_HandleDeprecatedMemberDecorator(self):
+        """Struct with deprecated members."""
+        header = textwrap.dedent("""\
+            struct data {
+              int x1 G_GNUC_DEPRECATED;
+              int x2 G_GNUC_DEPRECATED_FOR(replacement);
+            };""")
+        expected = textwrap.dedent("""\
+            struct data {
+              int x1;
+              int x2;
+            };""")
+        scan.InitScanner(self.options)
+        slist, doc_comments = self.scanHeaderContent(
+                header.splitlines(keepends=True))
+        self.assertDecl('data', expected, slist)
+
 
 class ScanHeaderContentUnions(ScanHeaderContentTestCase):
     """Test parsing of union declarations."""
-- 
2.20.1

