Add DRI2 support. (v2)
[free-sw/xcb/libxcb] / src / c_client.py
index 299ad54..d86d05e 100755 (executable)
@@ -135,6 +135,9 @@ def c_open(self):
     _ns = self.namespace
     _ns.c_ext_global_name = _n(_ns.prefix + ('id',))
 
+    # Build the type-name collision avoidance table used by c_enum
+    build_collision_table()
+
     _h_setlevel(0)
     _c_setlevel(0)
 
@@ -216,21 +219,36 @@ def c_close(self):
             cfile.write('\n')
     cfile.close()
 
+def build_collision_table():
+    global namecount
+    namecount = {}
+
+    for v in module.types.values():
+        name = _t(v[0])
+        namecount[name] = (namecount.get(name) or 0) + 1
+
 def c_enum(self, name):
     '''
     Exported function that handles enum declarations.
     '''
+
+    tname = _t(name)
+    if namecount[tname] > 1:
+        tname = _t(name + ('enum',))
+
     _h_setlevel(0)
     _h('')
+    _h('typedef enum %s {', tname)
 
-    next = -1
+    count = len(self.values)
 
     for (enam, eval) in self.values:
-        if eval == '':
-            next += 1
-        else:
-            next = int(eval)
-        _h('static const uint32_t %s = %d;', _n(name + (enam,)).upper(), next)
+        count = count - 1
+        equals = ' = ' if eval != '' else ''
+        comma = ',' if count > 0 else ''
+        _h('    %s%s%s%s', _n(name + (enam,)).upper(), equals, eval, comma)
+
+    _h('} %s;', tname)
 
 def _c_type_setup(self, name, postfix):
     '''