dbus/python Makefile.am, 1.7, 1.8 lvalue_cast_post_process.py, NONE, 1.1

John Palmieri johnp at freedesktop.org
Mon Mar 21 13:13:58 PST 2005


Update of /cvs/dbus/dbus/python
In directory gabe:/tmp/cvs-serv3896/python

Modified Files:
	Makefile.am 
Added Files:
	lvalue_cast_post_process.py 
Log Message:
* python/lvalue_cast_post_process.py - added post processor to fix Pyrex
  code so that it compiles with gcc4.0
                                                                                                                              
* python/Makefile.am: Added lvalue_cast_post_process.py to EXTRA_DIST
  run dbus_bindings.c through lvalue_cast_post_process.py and copy the
  results back to dbus_binding.c



Index: Makefile.am
===================================================================
RCS file: /cvs/dbus/dbus/python/Makefile.am,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- Makefile.am	23 Jun 2004 14:59:44 -0000	1.7
+++ Makefile.am	21 Mar 2005 21:13:56 -0000	1.8
@@ -16,7 +16,8 @@
 EXTRA_DIST = 			\
 	dbus_h_wrapper.h	\
 	dbus_bindings.pyx.in	\
-	extract.py
+	extract.py		\
+	lvalue_cast_post_process.py	
 
 CLEANFILES =			\
 	dbus_bindings.pyx	\
@@ -26,5 +27,7 @@
 dbus_bindings.pyx: dbus_bindings.pyx.in extract.py
 	-$(PYTHON) extract.py dbus_bindings.pyx.in -I$(top_builddir)  > dbus_bindings.pyx
 
-dbus_bindings.c: dbus_bindings.pyx
+dbus_bindings.c: dbus_bindings.pyx lvalue_cast_post_process.py
 	-pyrexc dbus_bindings.pyx
+	-$(PYTHON) lvalue_cast_post_process.py dbus_bindings.c
+	-mv dbus_bindings.c.gcc4fix dbus_bindings.c

--- NEW FILE: lvalue_cast_post_process.py ---
#!/bin/env python

import re
import sys

exp_pattern = re.compile('(.*)=(.*);')
lval_pyobject_pattern = re.compile('\s*\(\((PyObject[ ]?\*)\)([A-Za-z0-9_ ]+)\)')
lval_structcast_pattern = re.compile('\s*\((struct [A-Za-z0-9_]+ \*)\)([A-Za-z0-9_]+)\-\>([A-Za-z0-9_]+)')

def parse_expression(exp):
	exp_match = exp_pattern.match(exp)
	if exp_match:
		lvalue = exp_match.group(1)
		rvalue = exp_match.group(2)

		lval_match = lval_pyobject_pattern.match(lvalue)

		if lval_match:
			cast = lval_match.group(1)
			lvar = lval_match.group(2)

			return "%s = (%s)(%s);" % (lvar, cast, rvalue)
		else:
			lval_match = lval_structcast_pattern.match(lvalue)
			if lval_match:
				cast = lval_match.group(1)
				casted_var = lval_match.group(2)
				member_var = lval_match.group(3)

				result = "%s->%s = ((%s)%s);" % (
					    casted_var, 
					    member_var, 
					    cast,
					    rvalue)

				return result

	return None

def main():
	if len(sys.argv) != 2:
		print "USAGE: " + sys.argv[0] + " <file name>" 
		return(-1)	

	file = sys.argv[1]
	f = open(file)
	gcc4fix_filename = file + ".gcc4fix"
	outputf = open(gcc4fix_filename, 'w')

	lines = f.readlines()
	f.close()
	for line in lines:
		c = line.count(";")
		if c == 0:
			outputf.write(line)
			continue

		exprs = line.split(';')
		line = ""
		last = exprs.pop()
		for expr in exprs:
			expr = expr + ";"

			result = parse_expression(expr)
			if result:
				line = line + result
			else:
				line = line + expr

		if (last.strip()!=''):
			line = line + last
		else:
			line = line + "\n"
			
		outputf.write(line)
	
	outputf.close()

if __name__ == "__main__":
	sys.exit(main())



More information about the dbus-commit mailing list