trunk/src/build/verinfo.py
| r243704 | r243705 | |
| 9 | 9 | |
| 10 | 10 | def parse_args(): |
| 11 | 11 | def usage(): |
| 12 | | sys.stderr.write('Usage: verinfo.py [-b mame|mess|ume] [-r|-p] <filename>\n') |
| 12 | sys.stderr.write('Usage: verinfo.py [-b mame|mess|ume] [-r|-p] [-o <outfile>] <srcfile>\n') |
| 13 | 13 | sys.exit(1) |
| 14 | 14 | |
| 15 | 15 | flags = True |
| 16 | 16 | target = 'mame' |
| 17 | format = 'rc' |
| 17 | 18 | input = None |
| 18 | | output = 'rc' |
| 19 | output = None |
| 19 | 20 | i = 1 |
| 20 | 21 | while i < len(sys.argv): |
| 21 | 22 | if flags and (sys.argv[i] == '-r'): |
| 22 | | output = 'rc' |
| 23 | format = 'rc' |
| 23 | 24 | elif flags and (sys.argv[i] == '-p'): |
| 24 | | output = 'plist' |
| 25 | format = 'plist' |
| 25 | 26 | elif flags and (sys.argv[i] == '-b'): |
| 26 | 27 | i += 1; |
| 27 | 28 | if (i >= len(sys.argv)) or (sys.argv[i] not in ('mame', 'mess', 'ume')): |
| 28 | 29 | usage() |
| 29 | 30 | else: |
| 30 | 31 | target = sys.argv[i] |
| 32 | elif flags and (sys.argv[i] == '-o'): |
| 33 | i += 1; |
| 34 | if (i >= len(sys.argv)) or (output is not None): |
| 35 | usage() |
| 36 | else: |
| 37 | output = sys.argv[i] |
| 31 | 38 | elif flags and (sys.argv[i] == '--'): |
| 32 | 39 | flags = False |
| 33 | 40 | elif flags and sys.argv[i].startswith('-'): |
| r243704 | r243705 | |
| 39 | 46 | i += 1 |
| 40 | 47 | if input is None: |
| 41 | 48 | usage() |
| 42 | | return target, input, output |
| 49 | return target, format, input, output |
| 43 | 50 | |
| 44 | 51 | |
| 45 | 52 | def extract_version(input): |
| r243704 | r243705 | |
| 51 | 58 | return None, None, None |
| 52 | 59 | |
| 53 | 60 | |
| 54 | | build, srcfile, outfmt = parse_args() |
| 61 | build, outfmt, srcfile, dstfile = parse_args() |
| 55 | 62 | |
| 56 | 63 | try: |
| 57 | | fp = open(srcfile, 'rb') |
| 64 | fp = open(srcfile, 'rU') |
| 58 | 65 | except IOError: |
| 59 | 66 | sys.stderr.write("Unable to open source file '%s'\n" % srcfile) |
| 60 | 67 | sys.exit(1) |
| r243704 | r243705 | |
| 65 | 72 | if not version_string: |
| 66 | 73 | sys.stderr.write("Unable to extract version from source file '%s'\n" % srcfile) |
| 67 | 74 | sys.exit(1) |
| 75 | fp.close() |
| 68 | 76 | |
| 77 | if dstfile is not None: |
| 78 | try: |
| 79 | fp = open(dstfile, 'w') |
| 80 | except IOError: |
| 81 | sys.stderr.write("Unable to open output file '%s'\n" % dstfile) |
| 82 | sys.exit(1) |
| 83 | else: |
| 84 | fp = sys.stdout |
| 85 | |
| 69 | 86 | if build == "mess": |
| 70 | 87 | # MESS |
| 71 | 88 | author = "MESS Team"; |
| r243704 | r243705 | |
| 100 | 117 | legal_copyright = "Copyright Nicola Salmoria and the MAME team" |
| 101 | 118 | |
| 102 | 119 | if outfmt == 'rc': |
| 103 | | print("VS_VERSION_INFO VERSIONINFO") |
| 104 | | print("\tFILEVERSION %s,%s,%s,%s" % (version_major, version_minor, version_build, version_subbuild)) |
| 105 | | print("\tPRODUCTVERSION %s,%s,%s,%s" % (version_major, version_minor, version_build, version_subbuild)) |
| 106 | | print("\tFILEFLAGSMASK 0x3fL") |
| 107 | | if (version_build == 0) : |
| 108 | | print("\tFILEFLAGS 0x0L") |
| 109 | | else : |
| 110 | | print("\tFILEFLAGS VS_FF_PRERELEASE") |
| 111 | | print("\tFILEOS VOS_NT_WINDOWS32") |
| 112 | | print("\tFILETYPE VFT_APP") |
| 113 | | print("\tFILESUBTYPE VFT2_UNKNOWN") |
| 114 | | print("BEGIN") |
| 115 | | print("\tBLOCK \"StringFileInfo\"") |
| 116 | | print("\tBEGIN") |
| 117 | | print("#ifdef UNICODE") |
| 118 | | print("\t\tBLOCK \"040904b0\"") |
| 119 | | print("#else") |
| 120 | | print("\t\tBLOCK \"040904E4\"") |
| 121 | | print("#endif") |
| 122 | | print("\t\tBEGIN") |
| 123 | | print("\t\t\tVALUE \"Author\", \"%s\\0\"" % author) |
| 124 | | print("\t\t\tVALUE \"Comments\", \"%s\\0\"" % comments) |
| 125 | | print("\t\t\tVALUE \"CompanyName\", \"%s\\0\"" % company_name) |
| 126 | | print("\t\t\tVALUE \"FileDescription\", \"%s\\0\"" % file_description) |
| 127 | | print("\t\t\tVALUE \"FileVersion\", \"%s, %s, %s, %s\\0\"" % (version_major, version_minor, version_build, version_subbuild)) |
| 128 | | print("\t\t\tVALUE \"InternalName\", \"%s\\0\"" % internal_name) |
| 129 | | print("\t\t\tVALUE \"LegalCopyright\", \"%s\\0\"" % legal_copyright) |
| 130 | | print("\t\t\tVALUE \"OriginalFilename\", \"%s\\0\"" % original_filename) |
| 131 | | print("\t\t\tVALUE \"ProductName\", \"%s\\0\"" % product_name) |
| 132 | | print("\t\t\tVALUE \"ProductVersion\", \"%s\\0\"" % version_string) |
| 133 | | print("\t\tEND") |
| 134 | | print("\tEND") |
| 135 | | print("\tBLOCK \"VarFileInfo\"") |
| 136 | | print("\tBEGIN") |
| 137 | | print("#ifdef UNICODE") |
| 138 | | print("\t\tVALUE \"Translation\", 0x409, 1200") |
| 139 | | print("#else") |
| 140 | | print("\t\tVALUE \"Translation\", 0x409, 1252") |
| 141 | | print("#endif") |
| 142 | | print("\tEND") |
| 143 | | print("END") |
| 120 | fp.write('VS_VERSION_INFO VERSIONINFO\n') |
| 121 | fp.write('\tFILEVERSION %s,%s,%s,%s\n' % (version_major, version_minor, version_build, version_subbuild)) |
| 122 | fp.write('\tPRODUCTVERSION %s,%s,%s,%s\n' % (version_major, version_minor, version_build, version_subbuild)) |
| 123 | fp.write('\tFILEFLAGSMASK 0x3fL\n') |
| 124 | if (version_build == 0): |
| 125 | fp.write('\tFILEFLAGS 0x0L\n') |
| 126 | else: |
| 127 | fp.write('\tFILEFLAGS VS_FF_PRERELEASE\n') |
| 128 | fp.write('\tFILEOS VOS_NT_WINDOWS32\n') |
| 129 | fp.write('\tFILETYPE VFT_APP\n') |
| 130 | fp.write('\tFILESUBTYPE VFT2_UNKNOWN\n') |
| 131 | fp.write('BEGIN\n') |
| 132 | fp.write('\tBLOCK "StringFileInfo"\n') |
| 133 | fp.write('\tBEGIN\n') |
| 134 | fp.write('#ifdef UNICODE\n') |
| 135 | fp.write('\t\tBLOCK "040904b0"\n') |
| 136 | fp.write('#else\n') |
| 137 | fp.write('\t\tBLOCK "040904E4"\n') |
| 138 | fp.write('#endif\n') |
| 139 | fp.write('\t\tBEGIN\n') |
| 140 | fp.write('\t\t\tVALUE "Author", "%s\\0"\n' % author) |
| 141 | fp.write('\t\t\tVALUE "Comments", "%s\\0"\n' % comments) |
| 142 | fp.write('\t\t\tVALUE "CompanyName", "%s\\0"\n' % company_name) |
| 143 | fp.write('\t\t\tVALUE "FileDescription", "%s\\0"\n' % file_description) |
| 144 | fp.write('\t\t\tVALUE "FileVersion", "%s, %s, %s, %s\\0"\n' % (version_major, version_minor, version_build, version_subbuild)) |
| 145 | fp.write('\t\t\tVALUE "InternalName", "%s\\0"\n' % internal_name) |
| 146 | fp.write('\t\t\tVALUE "LegalCopyright", "%s\\0"\n' % legal_copyright) |
| 147 | fp.write('\t\t\tVALUE "OriginalFilename", "%s\\0"\n' % original_filename) |
| 148 | fp.write('\t\t\tVALUE "ProductName", "%s\\0"\n' % product_name) |
| 149 | fp.write('\t\t\tVALUE "ProductVersion", "%s\\0"\n' % version_string) |
| 150 | fp.write('\t\tEND\n') |
| 151 | fp.write('\tEND\n') |
| 152 | fp.write('\tBLOCK "VarFileInfo"\n') |
| 153 | fp.write('\tBEGIN\n') |
| 154 | fp.write('#ifdef UNICODE\n') |
| 155 | fp.write('\t\tVALUE "Translation", 0x409, 1200\n') |
| 156 | fp.write('#else\n') |
| 157 | fp.write('\t\tVALUE "Translation", 0x409, 1252\n') |
| 158 | fp.write('#endif\n') |
| 159 | fp.write('\tEND\n') |
| 160 | fp.write('END\n') |
| 144 | 161 | elif outfmt == 'plist': |
| 145 | | print('<?xml version="1.0" encoding="UTF-8"?>') |
| 146 | | print('<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">') |
| 147 | | print('<plist version="1.0">') |
| 148 | | print('<dict>') |
| 149 | | print('\t<key>CFBundleDisplayName</key>') |
| 150 | | print('\t<string>%s</string>' % product_name) |
| 151 | | print('\t<key>CFBundleIdentifier</key>') |
| 152 | | print('\t<string>%s</string>' % bundle_identifier) |
| 153 | | print('\t<key>CFBundleInfoDictionaryVersion</key>') |
| 154 | | print('\t<string>6.0</string>') |
| 155 | | print('\t<key>CFBundleName</key>') |
| 156 | | print('\t<string>%s</string>' % product_name) |
| 157 | | print('\t<key>CFBundleShortVersionString</key>') |
| 158 | | print('\t<string>%s.%s.%s</string>' % (version_major, version_minor, version_build)) |
| 159 | | print('</dict>') |
| 160 | | print('</plist>') |
| 162 | fp.write('<?xml version="1.0" encoding="UTF-8"?>\n') |
| 163 | fp.write('<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n') |
| 164 | fp.write('<plist version="1.0">\n') |
| 165 | fp.write('<dict>\n') |
| 166 | fp.write('\t<key>CFBundleDisplayName</key>\n') |
| 167 | fp.write('\t<string>%s</string>\n' % product_name) |
| 168 | fp.write('\t<key>CFBundleIdentifier</key>\n') |
| 169 | fp.write('\t<string>%s</string>\n' % bundle_identifier) |
| 170 | fp.write('\t<key>CFBundleInfoDictionaryVersion</key>\n') |
| 171 | fp.write('\t<string>6.0</string>\n') |
| 172 | fp.write('\t<key>CFBundleName</key>\n') |
| 173 | fp.write('\t<string>%s</string>\n' % product_name) |
| 174 | fp.write('\t<key>CFBundleShortVersionString</key>\n') |
| 175 | fp.write('\t<string>%s.%s.%s</string>\n' % (version_major, version_minor, version_build)) |
| 176 | fp.write('</dict>\n') |
| 177 | fp.write('</plist>\n') |
| 178 | fp.flush() |