12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import argparse
- import subprocess
- import re
- import os
- import tarfile
- def parse_args():
- parser = argparse.ArgumentParser(description='Wrapper script to invoke swig.')
- parser.add_argument('--swig', help='path to the swig executable')
- parser.add_argument('--default-module', type=str, help='swig -module argument value for inputs without %module statement')
- parser.add_argument('--package-by-file', help='path to file which dir must be converted to swig -package argument')
- parser.add_argument('--jsrc', help='jsrc output archive filename')
- parser.add_argument('--src', help='input .swg file path')
- parser.add_argument('--out-header', help='header file which must exist even if it was not generated by swig')
- parser.add_argument('args', nargs="*", help='regular swig arguments')
- return parser.parse_args()
- def path2pkg(path):
- return path.replace('/', '.').replace('-', '_')
- def main(args):
- package = path2pkg(os.path.dirname(args.package_by_file))
- outdir = None
- if args.jsrc:
- outdir = package.replace('.', '/')
- outdir_abs = os.path.join(os.path.dirname(args.jsrc), outdir)
- if not os.path.exists(outdir_abs):
- os.makedirs(outdir_abs)
- cmd = [args.swig, '-c++', '-java', '-package', package] + (['-outdir', outdir_abs] if outdir is not None else []) + args.args
- if '-module' not in args.args and args.default_module:
- with open(args.src, 'r') as f:
- if not re.search(r'(?m)^%module\b', f.read()):
- cmd += ['-module', args.default_module]
- subprocess.check_call(cmd + [args.src])
- if args.out_header and not os.path.exists(args.out_header):
- open(args.out_header, 'w').close()
- if args.jsrc:
- with tarfile.open(args.jsrc, 'a') as tf:
- tf.add(outdir_abs, arcname=outdir)
- if __name__ == '__main__':
- main(parse_args())
|