#!/usr/bin/python ## ## license:BSD-3-Clause ## copyright-holders:Aaron Giles, Andrew Gardner from __future__ import with_statement import re import sys def parse_args(): def usage(): sys.stderr.write('Usage: verinfo.py [-b mame|mess|ume] [-r|-p] [-o ] \n') sys.exit(1) flags = True target = 'mame' format = 'rc' input = None output = None i = 1 while i < len(sys.argv): if flags and (sys.argv[i] == '-r'): format = 'rc' elif flags and (sys.argv[i] == '-p'): format = 'plist' elif flags and (sys.argv[i] == '-b'): i += 1 if (i >= len(sys.argv)): usage() else: target = sys.argv[i] elif flags and (sys.argv[i] == '-o'): i += 1 if (i >= len(sys.argv)) or (output is not None): usage() else: output = sys.argv[i] elif flags and (sys.argv[i] == '--'): flags = False elif flags and sys.argv[i].startswith('-'): usage() elif input is not None: usage() else: input = sys.argv[i] i += 1 if input is None: usage() return target, format, input, output def extract_version(input): pattern = re.compile('\s+BARE_BUILD_VERSION\s+"(([^."]+)\.([^."]+))"') for line in input.readlines(): match = pattern.search(line) if match: return match.group(1), match.group(2), match.group(3) return None, None, None build, outfmt, srcfile, dstfile = parse_args() try: fp = open(srcfile, 'rU') except IOError: sys.stderr.write("Unable to open source file '%s'\n" % srcfile) sys.exit(1) version_string, version_major, version_minor = extract_version(fp) version_build = "0" version_subbuild = "0" if not version_string: sys.stderr.write("Unable to extract version from source file '%s'\n" % srcfile) sys.exit(1) fp.close() if dstfile is not None: try: fp = open(dstfile, 'w') except IOError: sys.stderr.write("Unable to open output file '%s'\n" % dstfile) sys.exit(1) else: fp = sys.stdout if build == "mess": # MESS author = "MESS Team" comments = "Multi Emulation Super System" company_name = "MESS Team" file_description = "MESS" internal_name = "MESS" original_filename = "MESS" product_name = "MESS" bundle_identifier = "org.mamedev.mess" else: # MAME author = "Nicola Salmoria and the MAME Team" comments = "Multi-purpose emulation framework" company_name = "MAME Team" file_description = "MAME" internal_name = "MAME" if build == "mame" else build original_filename = "MAME" if build == "mame" else build product_name = "MAME" if build == "mame" else build bundle_identifier = "org.mamedev." + build legal_copyright = "Copyright Nicola Salmoria and the MAME team" if outfmt == 'rc': fp.write('VS_VERSION_INFO VERSIONINFO\n') fp.write('\tFILEVERSION %s,%s,%s,%s\n' % (version_major, version_minor, version_build, version_subbuild)) fp.write('\tPRODUCTVERSION %s,%s,%s,%s\n' % (version_major, version_minor, version_build, version_subbuild)) fp.write('\tFILEFLAGSMASK 0x3fL\n') if version_build == 0: fp.write('\tFILEFLAGS 0x0L\n') else: fp.write('\tFILEFLAGS VS_FF_PRERELEASE\n') fp.write('\tFILEOS VOS_NT_WINDOWS32\n') fp.write('\tFILETYPE VFT_APP\n') fp.write('\tFILESUBTYPE VFT2_UNKNOWN\n') fp.write('BEGIN\n') fp.write('\tBLOCK "StringFileInfo"\n') fp.write('\tBEGIN\n') fp.write('#ifdef UNICODE\n') fp.write('\t\tBLOCK "040904b0"\n') fp.write('#else\n') fp.write('\t\tBLOCK "040904E4"\n') fp.write('#endif\n') fp.write('\t\tBEGIN\n') fp.write('\t\t\tVALUE "Author", "%s\\0"\n' % author) fp.write('\t\t\tVALUE "Comments", "%s\\0"\n' % comments) fp.write('\t\t\tVALUE "CompanyName", "%s\\0"\n' % company_name) fp.write('\t\t\tVALUE "FileDescription", "%s\\0"\n' % file_description) fp.write('\t\t\tVALUE "FileVersion", "%s, %s, %s, %s\\0"\n' % (version_major, version_minor, version_build, version_subbuild)) fp.write('\t\t\tVALUE "InternalName", "%s\\0"\n' % internal_name) fp.write('\t\t\tVALUE "LegalCopyright", "%s\\0"\n' % legal_copyright) fp.write('\t\t\tVALUE "OriginalFilename", "%s\\0"\n' % original_filename) fp.write('\t\t\tVALUE "ProductName", "%s\\0"\n' % product_name) fp.write('\t\t\tVALUE "ProductVersion", "%s\\0"\n' % version_string) fp.write('\t\tEND\n') fp.write('\tEND\n') fp.write('\tBLOCK "VarFileInfo"\n') fp.write('\tBEGIN\n') fp.write('#ifdef UNICODE\n') fp.write('\t\tVALUE "Translation", 0x409, 1200\n') fp.write('#else\n') fp.write('\t\tVALUE "Translation", 0x409, 1252\n') fp.write('#endif\n') fp.write('\tEND\n') fp.write('END\n') elif outfmt == 'plist': fp.write('\n') fp.write('\n') fp.write('\n') fp.write('\n') fp.write('\tCFBundleDisplayName\n') fp.write('\t%s\n' % product_name) fp.write('\tCFBundleIdentifier\n') fp.write('\t%s\n' % bundle_identifier) fp.write('\tCFBundleInfoDictionaryVersion\n') fp.write('\t6.0\n') fp.write('\tCFBundleName\n') fp.write('\t%s\n' % product_name) fp.write('\tCFBundleShortVersionString\n') fp.write('\t%s.%s.%s\n' % (version_major, version_minor, version_build)) fp.write('\n') fp.write('\n') fp.flush()