[libvirt] [PATCH 1/2] apibuild: Generate macro/@string attribute

Jiri Denemark jdenemar at redhat.com
Mon Jun 8 09:34:35 UTC 2015


If a macro has a string value, the @string attribute will contain the
value. Otherwise @string attribute will be missing.

For example, the following macro definition from libvirt-domain.h:

 /**
  * VIR_MIGRATE_PARAM_URI:
  * ...
  */
 # define VIR_MIGRATE_PARAM_URI               "migrate_uri"

will result in

 <macro name='VIR_MIGRATE_PARAM_URI' file='libvirt-domain' string='migrate_uri'>
   <info><![CDATA[...]]></info>
 </macro>

https://bugzilla.redhat.com/show_bug.cgi?id=1229199

Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
---
 docs/apibuild.py | 47 ++++++++++++++++++++++++++++-------------------
 1 file changed, 28 insertions(+), 19 deletions(-)

diff --git a/docs/apibuild.py b/docs/apibuild.py
index 18278db..d93d1d6 100755
--- a/docs/apibuild.py
+++ b/docs/apibuild.py
@@ -1028,9 +1028,12 @@ class CParser:
                     name = string.split(name, '(') [0]
                 except:
                     pass
-                info = self.parseMacroComment(name, not self.is_header)
+                strValue = None
+                if len(lst) == 1 and lst[0][0] == '"' and lst[0][-1] == '"':
+                    strValue = lst[0][1:-1]
+                (args, desc) = self.parseMacroComment(name, not self.is_header)
                 self.index_add(name, self.filename, not self.is_header,
-                                "macro", info)
+                               "macro", (args, desc, strValue))
                 return token
 
         #
@@ -2144,24 +2147,30 @@ class docBuilder:
 
     def serialize_macro(self, output, name):
         id = self.idx.macros[name]
-        output.write("    <macro name='%s' file='%s'>\n" % (name,
+        output.write("    <macro name='%s' file='%s'" % (name,
                      self.modulename_file(id.header)))
-        if id.info is not None:
-            try:
-                (args, desc) = id.info
-                if desc is not None and desc != "":
-                    output.write("      <info><![CDATA[%s]]></info>\n" % (desc))
-                    self.indexString(name, desc)
-                for arg in args:
-                    (name, desc) = arg
-                    if desc is not None and desc != "":
-                        output.write("      <arg name='%s' info='%s'/>\n" % (
-                                     name, escape(desc)))
-                        self.indexString(name, desc)
-                    else:
-                        output.write("      <arg name='%s'/>\n" % (name))
-            except:
-                pass
+        if id.info is None:
+            args = []
+            desc = None
+            strValue = None
+        else:
+            (args, desc, strValue) = id.info
+
+        if strValue is not None:
+            output.write(" string='%s'" % strValue)
+        output.write(">\n")
+
+        if desc is not None and desc != "":
+            output.write("      <info><![CDATA[%s]]></info>\n" % (desc))
+            self.indexString(name, desc)
+        for arg in args:
+            (name, desc) = arg
+            if desc is not None and desc != "":
+                output.write("      <arg name='%s' info='%s'/>\n" % (
+                             name, escape(desc)))
+                self.indexString(name, desc)
+            else:
+                output.write("      <arg name='%s'/>\n" % (name))
         output.write("    </macro>\n")
 
     def serialize_union(self, output, field, desc):
-- 
2.4.2




More information about the libvir-list mailing list