1.32-deprecation-parse-fixes.patch (7181B)
- 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