4
from string import Template
6
def type_to_signature(itype):
9
return "[%s" % type_to_signature(itype[:-2])
16
if itype == "boolean":
29
return "Ljava/lang/String;"
31
return "Ljava/lang/Object;"
32
return "Lorg/sflphone/service/%s;" % itype
34
def parse_java_file(input_stream, package, module):
36
package_prefix = "Java_%s_%sJNI" % (package.replace(".", "_"), module)
37
for line in input_stream:
38
definition = re.match(r'.*public final static native ([^\( ]*) ([^\)]*)\(([^)]*)\).*',line)
39
if definition is not None:
40
retour = definition.group(1)
41
name = definition.group(2)
42
args = definition.group(3)
44
args_frags = args.split(',')
45
for args_frag in args_frags:
46
argf = re.match(r'(\b)?([^ ]+) .*', args_frag.strip())
48
args_sigs.append(type_to_signature(argf.group(2)))
49
sig = "(%s)%s" % (''.join(args_sigs), type_to_signature(retour))
50
outputs.append("{\"%s\", \"%s\", (void*)& %s_%s}" % (name, sig, package_prefix, name.replace('_', '_1')))
53
def render_to_template(defs, template_string):
54
template = Template(template_string)
55
return template.substitute(defs= ",\r\n".join(defs) )
58
if __name__ == "__main__":
60
opts, args = getopt.getopt(sys.argv[1:], "i:o:t:m:p:", ["input=", "output=", "template=", "module=", "package="])
61
except getopt.GetoptError, err:
62
# print help information and exit:
63
print str(err) # will print something like "option -a not recognized"
67
template_string = None
71
if o in ("-i", "--input"):
72
input_stream = open(a)
73
if o in ("-o", "--output"):
74
output_file = open(a, "w")
75
if o in ("-t", "--template"):
76
template_string = open(a).read()
77
if o in ("-m", "--module"):
79
if o in ("-p", "--package"):
82
defs = parse_java_file(input_stream, package, module)
83
output_file.write(render_to_template(defs, template_string))