mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-05 04:08:12 +02:00
* 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
This commit is contained in:
parent
5edf809963
commit
11519c46c4
3 changed files with 94 additions and 2 deletions
|
|
@ -1,3 +1,12 @@
|
|||
2005-03-21 John (J5) Palmieri <johnp@redhat.com>
|
||||
|
||||
* 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 <walters@verbum.org>
|
||||
|
||||
Patch suggested by Inguva Rajasekhar <ringuva@novell.com>.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
80
python/lvalue_cast_post_process.py
Executable file
80
python/lvalue_cast_post_process.py
Executable file
|
|
@ -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] + " <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())
|
||||
Loading…
Add table
Reference in a new issue