Blob Blame History Raw
From 6a049ccc0ad96f25c3f7d8540b218ffe8921d8c5 Mon Sep 17 00:00:00 2001
From: Scott Talbert <swt@techie.net>
Date: Tue, 5 Dec 2023 23:42:21 -0500
Subject: [PATCH] Support building with Doxygen 1.9.7

Doxygen 1.9.7 made some changes whereby some method definitions are now
defined in separate XML files, with a "refid" that links to them.  In
order to support this, we need to follow these "refids" to pick up the
method definition from the separate group XML files.
---
 etgtools/extractors.py | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/etgtools/extractors.py b/etgtools/extractors.py
index 8c992cb14..5ae1361f9 100644
--- a/etgtools/extractors.py
+++ b/etgtools/extractors.py
@@ -62,6 +62,8 @@ def extract(self, element):
         # class. Should be overridden in derived classes to get what each one
         # needs in addition to the base.
         self.name = element.find(self.nameTag).text
+        if self.name is None:
+            self.name = ''
         if '::' in self.name:
             loc = self.name.rfind('::')
             self.name = self.name[loc+2:]
@@ -1574,12 +1576,21 @@ def addElement(self, element):
             extractingMsg(kind, element)
             for node in element.findall('sectiondef/memberdef'):
                 self.addElement(node)
+            for node in element.findall('sectiondef/member'):
+                node = self.resolveRefid(node)
+                self.addElement(node)
 
         else:
             raise ExtractorError('Unknown module item kind: %s' % kind)
 
         return item
 
+    def resolveRefid(self, node):
+        from etgtools import XMLSRC
+        refid = node.get('refid')
+        fname = os.path.join(XMLSRC, refid.rsplit('_', 1)[0]) + '.xml'
+        root = et.parse(fname).getroot()
+        return root.find(".//memberdef[@id='{}']".format(refid))
 
 
     def addCppFunction(self, type, name, argsString, body, doc=None, **kw):