summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Miodrag Milanović <mmicko@gmail.com>2015-02-21 09:46:10 +0100
committer Miodrag Milanović <mmicko@gmail.com>2015-02-21 09:46:10 +0100
commit7ed9885050577423f1bdc98e5d6929a003bdf431 (patch)
tree5963bfb0d5e5a5e3432fdb7b499cb24b648a1266
parent56c076cb067aa892024700fd0baa190940b6761c (diff)
parentefaf15477286013bb7c947f8784bd41262e6f4cc (diff)
Merge pull request #140 from cuavas/master
Version info for OSX binaries
-rw-r--r--makefile6
-rw-r--r--src/build/verinfo.py194
-rw-r--r--src/osd/sdl/sdl.mak18
3 files changed, 140 insertions, 78 deletions
diff --git a/makefile b/makefile
index 830e20b0a18..d4534f5310c 100644
--- a/makefile
+++ b/makefile
@@ -943,14 +943,14 @@ else
EMULATOROBJ = $(EMULATOROBJLIST)
endif
-$(EMULATOR): $(EMULATOROBJ)
+$(EMULATOR): $(EMULATOROBJ) $(SRC)/version.c
$(CC) $(CDEFS) $(CFLAGS) -c $(SRC)/version.c -o $(VERSIONOBJ)
@echo Linking $@...
ifeq ($(TARGETOS),emscripten)
# Emscripten's linker seems to be stricter about the ordering of files
- $(LD) $(LDFLAGS) $(LDFLAGSEMULATOR) $(VERSIONOBJ) -Wl,--start-group $^ -Wl,--end-group $(LIBS) -o $@
+ $(LD) $(LDFLAGS) $(LDFLAGSEMULATOR) $(VERSIONOBJ) -Wl,--start-group $(EMULATOROBJ) -Wl,--end-group $(LIBS) -o $@
else
- $(LD) $(LDFLAGS) $(LDFLAGSEMULATOR) $(VERSIONOBJ) $^ $(LIBS) -o $@
+ $(LD) $(LDFLAGS) $(LDFLAGSEMULATOR) $(VERSIONOBJ) $(EMULATOROBJ) $(LIBS) -o $@
endif
ifeq ($(TARGETOS),win32)
ifdef SYMBOLS
diff --git a/src/build/verinfo.py b/src/build/verinfo.py
index 71f616f4415..465f8d0e3cb 100644
--- a/src/build/verinfo.py
+++ b/src/build/verinfo.py
@@ -2,48 +2,71 @@
from __future__ import with_statement
-import sys
import os
+import re
+import sys
-def usage():
- sys.stderr.write('Usage: verinfo.py [-b mame|mess|ume] <filename>\n')
- return 0
-
-build = "mame"
-if (len(sys.argv)==1):
- usage()
- sys.exit(1)
+def parse_args():
+ def usage():
+ sys.stderr.write('Usage: verinfo.py [-b mame|mess|ume] [-r|-p] <filename>\n')
+ sys.exit(1)
-if (sys.argv[1]=='-b'):
- if (sys.argv[2]=='mame'):
- build = "mame"
- elif (sys.argv[2]=='mess'):
- build = "mess"
- elif (sys.argv[2]=='ume'):
- build = "ume"
- else :
- usage()
- sys.exit(1)
+ flags = True
+ target = 'mame'
+ input = None
+ output = 'rc'
+ i = 1
+ while i < len(sys.argv):
+ if flags and (sys.argv[i] == '-r'):
+ output = 'rc'
+ elif flags and (sys.argv[i] == '-p'):
+ output = 'plist'
+ elif flags and (sys.argv[i] == '-b'):
+ i += 1;
+ if (i >= len(sys.argv)) or (sys.argv[i] not in ('mame', 'mess', 'ume')):
+ usage()
+ else:
+ target = 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, 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, srcfile, outfmt = parse_args()
-srcfile = sys.argv[len(sys.argv)-1]
try:
- fp = open(srcfile, 'rb')
+ fp = open(srcfile, 'rb')
except IOError:
- sys.stderr.write("Unable to open source file '%s'" % srcfile)
- sys.exit(1)
-
-for line in fp.readlines():
- if line.find("BARE_BUILD_VERSION")!=-1 and line.find('"')!=-1 and line.find('.')!=-1:
- version_string = line[line.find('"')+1:]
- version_string = version_string[0:version_string.find('"')]
- break
+ sys.stderr.write("Unable to open source file '%s'\n" % srcfile)
+ sys.exit(1)
-version_major = version_string[0:version_string.find('.')]
-version_minor = version_string[version_string.find('.')+1:]
+version_string, version_major, version_minor = extract_version(fp)
version_build = "0"
version_subbuild = "0"
-if (build == "mess") :
+if not version_string:
+ sys.stderr.write("Unable to extract version from source file '%s'\n" % srcfile)
+ sys.exit(1)
+
+if build == "mess":
# MESS
author = "MESS Team";
comments = "Multi Emulation Super System";
@@ -52,7 +75,8 @@ if (build == "mess") :
internal_name = "MESS";
original_filename = "MESS";
product_name = "MESS";
-elif (build == "ume") :
+ bundle_identifier = "org.mamedev.mess"
+elif build == "ume":
# UME
author = "MAME and MESS Team"
comments = "Universal Machine Emulator"
@@ -61,7 +85,8 @@ elif (build == "ume") :
internal_name = "UME"
original_filename = "UME"
product_name = "UME"
-else :
+ bundle_identifier = "org.mamedev.ume"
+else:
# MAME
author = "Nicola Salmoria and the MAME Team"
comments = "Multiple Arcade Machine Emulator"
@@ -70,47 +95,66 @@ else :
internal_name = "MAME"
original_filename = "MAME"
product_name = "MAME"
+ bundle_identifier = "org.mamedev.mame"
legal_copyright = "Copyright Nicola Salmoria and the MAME team"
-print("VS_VERSION_INFO VERSIONINFO")
-print("\tFILEVERSION %s,%s,%s,%s" % (version_major, version_minor, version_build, version_subbuild))
-print("\tPRODUCTVERSION %s,%s,%s,%s" % (version_major, version_minor, version_build, version_subbuild))
-print("\tFILEFLAGSMASK 0x3fL")
-if (version_build == 0) :
- print("\tFILEFLAGS 0x0L")
-else :
- print("\tFILEFLAGS VS_FF_PRERELEASE")
-print("\tFILEOS VOS_NT_WINDOWS32")
-print("\tFILETYPE VFT_APP")
-print("\tFILESUBTYPE VFT2_UNKNOWN")
-print("BEGIN")
-print("\tBLOCK \"StringFileInfo\"")
-print("\tBEGIN")
-print("#ifdef UNICODE")
-print("\t\tBLOCK \"040904b0\"")
-print("#else")
-print("\t\tBLOCK \"040904E4\"")
-print("#endif")
-print("\t\tBEGIN")
-print("\t\t\tVALUE \"Author\", \"%s\\0\"" % author)
-print("\t\t\tVALUE \"Comments\", \"%s\\0\"" % comments)
-print("\t\t\tVALUE \"CompanyName\", \"%s\\0\"" % company_name)
-print("\t\t\tVALUE \"FileDescription\", \"%s\\0\"" % file_description)
-print("\t\t\tVALUE \"FileVersion\", \"%s, %s, %s, %s\\0\"" % (version_major, version_minor, version_build, version_subbuild))
-print("\t\t\tVALUE \"InternalName\", \"%s\\0\"" % internal_name)
-print("\t\t\tVALUE \"LegalCopyright\", \"%s\\0\"" % legal_copyright)
-print("\t\t\tVALUE \"OriginalFilename\", \"%s\\0\"" % original_filename)
-print("\t\t\tVALUE \"ProductName\", \"%s\\0\"" % product_name)
-print("\t\t\tVALUE \"ProductVersion\", \"%s\\0\"" % version_string)
-print("\t\tEND")
-print("\tEND")
-print("\tBLOCK \"VarFileInfo\"")
-print("\tBEGIN")
-print("#ifdef UNICODE")
-print("\t\tVALUE \"Translation\", 0x409, 1200")
-print("#else")
-print("\t\tVALUE \"Translation\", 0x409, 1252")
-print("#endif")
-print("\tEND")
-print("END") \ No newline at end of file
+if outfmt == 'rc':
+ print("VS_VERSION_INFO VERSIONINFO")
+ print("\tFILEVERSION %s,%s,%s,%s" % (version_major, version_minor, version_build, version_subbuild))
+ print("\tPRODUCTVERSION %s,%s,%s,%s" % (version_major, version_minor, version_build, version_subbuild))
+ print("\tFILEFLAGSMASK 0x3fL")
+ if (version_build == 0) :
+ print("\tFILEFLAGS 0x0L")
+ else :
+ print("\tFILEFLAGS VS_FF_PRERELEASE")
+ print("\tFILEOS VOS_NT_WINDOWS32")
+ print("\tFILETYPE VFT_APP")
+ print("\tFILESUBTYPE VFT2_UNKNOWN")
+ print("BEGIN")
+ print("\tBLOCK \"StringFileInfo\"")
+ print("\tBEGIN")
+ print("#ifdef UNICODE")
+ print("\t\tBLOCK \"040904b0\"")
+ print("#else")
+ print("\t\tBLOCK \"040904E4\"")
+ print("#endif")
+ print("\t\tBEGIN")
+ print("\t\t\tVALUE \"Author\", \"%s\\0\"" % author)
+ print("\t\t\tVALUE \"Comments\", \"%s\\0\"" % comments)
+ print("\t\t\tVALUE \"CompanyName\", \"%s\\0\"" % company_name)
+ print("\t\t\tVALUE \"FileDescription\", \"%s\\0\"" % file_description)
+ print("\t\t\tVALUE \"FileVersion\", \"%s, %s, %s, %s\\0\"" % (version_major, version_minor, version_build, version_subbuild))
+ print("\t\t\tVALUE \"InternalName\", \"%s\\0\"" % internal_name)
+ print("\t\t\tVALUE \"LegalCopyright\", \"%s\\0\"" % legal_copyright)
+ print("\t\t\tVALUE \"OriginalFilename\", \"%s\\0\"" % original_filename)
+ print("\t\t\tVALUE \"ProductName\", \"%s\\0\"" % product_name)
+ print("\t\t\tVALUE \"ProductVersion\", \"%s\\0\"" % version_string)
+ print("\t\tEND")
+ print("\tEND")
+ print("\tBLOCK \"VarFileInfo\"")
+ print("\tBEGIN")
+ print("#ifdef UNICODE")
+ print("\t\tVALUE \"Translation\", 0x409, 1200")
+ print("#else")
+ print("\t\tVALUE \"Translation\", 0x409, 1252")
+ print("#endif")
+ print("\tEND")
+ print("END")
+elif outfmt == 'plist':
+ print('<?xml version="1.0" encoding="UTF-8"?>')
+ print('<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">')
+ print('<plist version="1.0">')
+ print('<dict>')
+ print('\t<key>CFBundleDisplayName</key>')
+ print('\t<string>%s</string>' % product_name)
+ print('\t<key>CFBundleIdentifier</key>')
+ print('\t<string>%s</string>' % bundle_identifier)
+ print('\t<key>CFBundleInfoDictionaryVersion</key>')
+ print('\t<string>6.0</string>')
+ print('\t<key>CFBundleName</key>')
+ print('\t<string>%s</string>' % product_name)
+ print('\t<key>CFBundleShortVersionString</key>')
+ print('\t<string>%s.%s.%s</string>' % (version_major, version_minor, version_build))
+ print('</dict>')
+ print('</plist>')
diff --git a/src/osd/sdl/sdl.mak b/src/osd/sdl/sdl.mak
index da6bd17a727..c4391597417 100644
--- a/src/osd/sdl/sdl.mak
+++ b/src/osd/sdl/sdl.mak
@@ -539,6 +539,24 @@ ifeq ($(TARGETOS),macosx)
OSDCOREOBJS += $(SDLOBJ)/osxutils.o
SDLOS_TARGETOS = macosx
+ifeq ($(TARGET),mame)
+MACOSX_EMBED_INFO_PLIST = 1
+endif
+ifeq ($(TARGET),mess)
+MACOSX_EMBED_INFO_PLIST = 1
+endif
+ifeq ($(TARGET),ume)
+MACOSX_EMBED_INFO_PLIST = 1
+endif
+ifdef MACOSX_EMBED_INFO_PLIST
+INFOPLIST = $(SDLOBJ)/$(TARGET)-Info.plist
+LDFLAGSEMULATOR += -sectcreate __TEXT __info_plist $(INFOPLIST)
+$(EMULATOR): $(INFOPLIST)
+$(INFOPLIST): $(SRC)/build/verinfo.py $(SRC)/version.c
+ @echo Emitting $@...
+ $(PYTHON) $(SRC)/build/verinfo.py -b $(TARGET) -p $(SRC)/version.c > $@
+endif
+
ifndef MACOSX_USE_LIBSDL
# Compile using framework (compile using libSDL is the exception)
ifeq ($(SDL_LIBVER),sdl2)