From 11519c46c42e1dc65614ad9ba214604561b9788e Mon Sep 17 00:00:00 2001 From: "John (J5) Palmieri" Date: Mon, 21 Mar 2005 21:13:56 +0000 Subject: * 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 --- ChangeLog | 9 +++++ python/Makefile.am | 7 +++- python/lvalue_cast_post_process.py | 80 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 2 deletions(-) create mode 100755 python/lvalue_cast_post_process.py diff --git a/ChangeLog b/ChangeLog index 9527ca88..5a49f8b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-03-21 John (J5) Palmieri + + * 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 + 2005-03-20 Colin Walters Patch suggested by Inguva Rajasekhar . diff --git a/python/Makefile.am b/python/Makefile.am index 25191630..3fd678b3 100644 --- a/python/Makefile.am +++ b/python/Makefile.am @@ -16,7 +16,8 @@ nodist_dbus_bindings_la_SOURCES = dbus_bindings.c 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 @@ CLEANFILES = \ 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 diff --git a/python/lvalue_cast_post_process.py b/python/lvalue_cast_post_process.py new file mode 100755 index 00000000..66129004 --- /dev/null +++ b/python/lvalue_cast_post_process.py @@ -0,0 +1,80 @@ +#!/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] + " " + 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()) -- cgit