From 81ef2515cee1c5c0dd46be667e23e6f407b68728 Mon Sep 17 00:00:00 2001 From: Frederic Peters Date: Tue, 29 Apr 2008 12:08:43 +0000 Subject: [project @ fpeters@0d.be-20080326094754-cw66nuog62q06ekk] merging benjamin branch Original author: Frederic Peters Date: 2008-03-26 10:47:54.384000+01:00 --- bindings/bindings.py | 29 ++++++++++++++++++++++++----- bindings/java/Makefile.am | 2 +- bindings/lang_java.py | 5 +++++ bindings/lang_php5_helpers/php_code.py | 8 ++++++-- bindings/lang_python.py | 2 +- bindings/overrides.xml | 4 ++-- bindings/php5/Makefile.am | 2 +- 7 files changed, 40 insertions(+), 12 deletions(-) (limited to 'bindings') diff --git a/bindings/bindings.py b/bindings/bindings.py index da90f34d..9e95789c 100644 --- a/bindings/bindings.py +++ b/bindings/bindings.py @@ -33,15 +33,30 @@ import elementtree.ElementTree as ET class BindingData: src_dir = os.path.dirname(__file__) - def __init__(self): + def __init__(self, options = None): self.headers = [] self.constants = [] self.structs = [] self.struct_dict = {} self.functions = [] self.enums = [] + self.options = options self.overrides = ET.parse(os.path.join(self.src_dir, 'overrides.xml')) + def match_tag_language(self,tag): + if self.options and self.options.language: + languages = tag.attrib.get('language') + if languages: + lang_list = languages.split(' ') + if self.options.language in lang_list: + return True + else: + return False + else: + return True + else: + return True + def display_structs(self): for struct in self.structs: struct.display() @@ -158,6 +173,8 @@ class Function: def apply_overrides(self): for func in binding.overrides.findall('func'): + if not binding.match_tag_language(func): + continue if func.attrib.get('name') != self.name: continue for param in func.findall('param'): @@ -173,8 +190,8 @@ class Function: arg[2]['default'] = param.attrib.get('default') if param.attrib.get('type'): arg[0] = param.attrib.get('type') - if param.attrib.get('type_qualifier'): - arg[2]['type_qualifier'] = param.attrib.get('type_qualifier') + if param.attrib.get('elem_type'): + arg[2]['elem_type'] = param.attrib.get('elem_type') if func.attrib.get('rename'): self.rename = func.attrib.get('rename') if func.attrib.get('return_owner'): @@ -186,8 +203,10 @@ class Function: if func.attrib.get('return_type_qualifier'): self.return_type_qualifier = func.attrib.get('return_type_qualifier') for param in binding.overrides.findall('arg'): + if not binding.match_tag_language(param): + continue arg_name = param.attrib.get('name') - arg_sub = param.attrib.get('substitute') + arg_sub = param.attrib.get('rename') if arg_name and arg_sub: args = [ x for x in self.args if x[1] == arg_name] for arg in args: @@ -424,7 +443,7 @@ def main(): parser.print_help() sys.exit(1) - binding = BindingData() + binding = BindingData(options) parse_headers(options.srcdir, options.idwsf) binding.look_for_docstrings(options.srcdir, options.exception_doc) binding.order_class_hierarchy() diff --git a/bindings/java/Makefile.am b/bindings/java/Makefile.am index 7c2b6e39..25b952c6 100644 --- a/bindings/java/Makefile.am +++ b/bindings/java/Makefile.am @@ -48,7 +48,7 @@ BUILT_SOURCES = com_entrouvert_lasso_LassoJNI.c com_entrouvert_lasso_LassoJNI.h BINDING_OPTION=#--enable-exception-docs -$(java_lasso_source_files) com_entrouvert_lasso_LassoJNI.c: ../lang_java_wrapper_top.c ../lang_java.py +$(java_lasso_source_files) com_entrouvert_lasso_LassoJNI.c: ../lang_java_wrapper_top.c ../lang_java.py ../bindings.py $(PYTHON) $(top_srcdir)/bindings/bindings.py $(BINDING_OPTION) -l java --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) cp $(srcdir)/GObject.java com/entrouvert/lasso diff --git a/bindings/lang_java.py b/bindings/lang_java.py index 84aa885f..64f7cd8c 100644 --- a/bindings/lang_java.py +++ b/bindings/lang_java.py @@ -524,6 +524,11 @@ protected static native void destroy(long cptr); if is_string_type(arg_type): print >> fd, ' if (%s)' % arg_name print >> fd, ' g_free(%s);' % arg_name + elif arg_type == 'GList*': + if arg_options.get('elem_type') == 'char*': + print >> fd, ' free_glist(&%s, free);' % arg_name + else: + raise Exception('Freeing args of type list of \'%s\' not supported.' % arg_options.get('elem_type')) # Return if m.return_type: diff --git a/bindings/lang_php5_helpers/php_code.py b/bindings/lang_php5_helpers/php_code.py index 5c175f87..fc4a2f95 100644 --- a/bindings/lang_php5_helpers/php_code.py +++ b/bindings/lang_php5_helpers/php_code.py @@ -149,8 +149,12 @@ function getRequestTypeFromSoapMsg($mesg) { print >> self.fd, '' if m.name == method_prefix + 'new_from_dump': - print >> self.fd, ' public static function newFromDump($dump) {' - print >> self.fd, ' return cptrToPhp(%s($dump));' % m.name + if len(m.args) == 1: + print >> self.fd, ' public static function newFromDump($dump) {' + print >> self.fd, ' return cptrToPhp(%s($dump));' % m.name + else: + print >> self.fd, ' public static function newFromDump($server, $dump) {' + print >> self.fd, ' return cptrToPhp(%s($server->_cptr, $dump));' % m.name # XXX: Else throw an exception print >> self.fd, ' }' print >> self.fd, '' diff --git a/bindings/lang_python.py b/bindings/lang_python.py index 87d72e61..049de1fa 100644 --- a/bindings/lang_python.py +++ b/bindings/lang_python.py @@ -794,7 +794,7 @@ register_constants(PyObject *d) for f, arg in zip(parse_tuple_format, m.args): if arg[0] == 'GList*': - qualifier = arg[2].get('type_qualifier') + qualifier = arg[2].get('elem_type') if qualifier == 'char*': print >> fd, ' set_list_of_strings(&%s, cvt_%s);' % (arg[1], arg[1]) elif qualifier == 'xmlNode*': diff --git a/bindings/overrides.xml b/bindings/overrides.xml index 75049e1a..cd9f6063 100644 --- a/bindings/overrides.xml +++ b/bindings/overrides.xml @@ -37,7 +37,7 @@ - + @@ -112,7 +112,7 @@ - + diff --git a/bindings/php5/Makefile.am b/bindings/php5/Makefile.am index 94b22ee5..a5682282 100644 --- a/bindings/php5/Makefile.am +++ b/bindings/php5/Makefile.am @@ -19,7 +19,7 @@ if WSF_ENABLED EXTRA_ARGS = --enable-id-wsf endif -lasso.php _lasso.c: ../lang_php5.py ../lang_php5_helpers/php_code.py +lasso.php _lasso.c: ../lang_php5.py ../lang_php5_helpers/php_code.py ../lang_php5_helpers/wrapper_source.py $(PYTHON) $(top_srcdir)/bindings/bindings.py -l php5 --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) doc: -- cgit