#!/usr/bin/python # vim: encoding=utf-8 #expand *.in scripts for MSVC Builds import os import sys import re import string import argparse def get_version(srcroot): ver = {} RE_VERSION = re.compile(r'^m4_define\(\[(glib_\w+)\],\s*\[(\d+)\]\)') with open(os.path.join(srcroot, 'configure.ac'), 'r') as ac: for i in ac: mo = RE_VERSION.search(i) if mo: ver[mo.group(1).upper()] = int(mo.group(2)) ver['GLIB_BINARY_AGE'] = 100 * ver['GLIB_MINOR_VERSION'] + ver['GLIB_MICRO_VERSION'] ver['GLIB_VERSION'] = '%d.%d.%d' % (ver['GLIB_MAJOR_VERSION'], ver['GLIB_MINOR_VERSION'], ver['GLIB_MICRO_VERSION']) ver['LT_RELEASE'] = '%d.%d' % (ver['GLIB_MAJOR_VERSION'], ver['GLIB_MINOR_VERSION']) ver['LT_CURRENT'] = 100 * ver['GLIB_MINOR_VERSION'] + ver['GLIB_MICRO_VERSION'] - ver['GLIB_INTERFACE_AGE'] ver['LT_REVISION'] = ver['GLIB_INTERFACE_AGE'] ver['LT_AGE'] = ver['GLIB_BINARY_AGE'] - ver['GLIB_INTERFACE_AGE'] ver['LT_CURRENT_MINUS_AGE'] = ver['LT_CURRENT'] - ver['LT_AGE'] return ver def process_in(src, dest, vars): RE_VARS = re.compile(r'@(\w+?)@') with open(src, 'r') as s: with open(dest, 'w') as d: for i in s: i = RE_VARS.sub(lambda x: str(vars[x.group(1)]), i) d.write(i) def get_srcroot(): if not os.path.isabs(__file__): path = os.path.abspath(__file__) else: path = __file__ dirname = os.path.dirname(path) return os.path.abspath(os.path.join(dirname, '..', '..')) def main(argv): prog_desc = 'Create Various autogenerated Win32-specific Source Files' parser = argparse.ArgumentParser(description=prog_desc) parser.add_argument('--glib-mkenums', dest='mkenums', action='store_const', const=1, help='Generate glib-mkenums') parser.add_argument('--perl', dest='perl', metavar='PATH', default='C:\\Perl\\bin\\perl.exe', action='store', help='path to the perl interpretor (default: C:\\Perl\\bin\\perl.exe)') args = parser.parse_args() srcroot = get_srcroot() ver = get_version(srcroot) no_args = True if args.mkenums is not None: # Generate glib-mkenums script from glib-mkenums ver.update({'PERL_PATH': args.perl}) target = os.path.join(srcroot, 'gobject', 'glib-mkenums') process_in(target + '.in', target, ver) no_args = False if no_args is True: raise SystemExit('Action argument required. Please see %s --help for details.' % __file__) if __name__ == '__main__': sys.exit(main(sys.argv))