summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--games/mame/complay.py152
-rw-r--r--games/mame/mame.SlackBuild16
-rw-r--r--games/mame/mame.info6
3 files changed, 168 insertions, 6 deletions
diff --git a/games/mame/complay.py b/games/mame/complay.py
new file mode 100644
index 0000000000..4eecaa9735
--- /dev/null
+++ b/games/mame/complay.py
@@ -0,0 +1,152 @@
+#!/usr/bin/python
+##
+## license:BSD-3-Clause
+## copyright-holders:Vas Crabb
+
+import os
+import sys
+import xml.sax
+import xml.sax.saxutils
+import zlib
+
+
+class ErrorHandler(object):
+ def __init__(self, **kwargs):
+ super(ErrorHandler, self).__init__(**kwargs)
+ self.errors = 0
+ self.warnings = 0
+
+ def error(self, exception):
+ self.errors += 1
+ sys.stderr.write('error: %s' % (exception))
+
+ def fatalError(self, exception):
+ raise exception
+
+ def warning(self, exception):
+ self.warnings += 1
+ sys.stderr.write('warning: %s' % (exception))
+
+
+class Minifyer(object):
+ def __init__(self, output, **kwargs):
+ super(Minifyer, self).__init__(**kwargs)
+
+ self.output = output
+ self.incomplete_tag = False
+ self.element_content = ''
+
+ def setDocumentLocator(self, locator):
+ pass
+
+ def startDocument(self):
+ self.output('<?xml version="1.0"?>')
+
+ def endDocument(self):
+ self.output('\n')
+
+ def startElement(self, name, attrs):
+ self.flushElementContent()
+ if self.incomplete_tag:
+ self.output('>')
+ self.output('<%s' % (name))
+ for name in attrs.getNames():
+ self.output(' %s=%s' % (name, xml.sax.saxutils.quoteattr(attrs[name])))
+ self.incomplete_tag = True
+
+ def endElement(self, name):
+ self.flushElementContent()
+ if self.incomplete_tag:
+ self.output('/>')
+ else:
+ self.output('</%s>' % (name))
+ self.incomplete_tag = False
+
+ def characters(self, content):
+ self.element_content += content
+
+ def ignorableWhitespace(self, whitespace):
+ pass
+
+ def processingInstruction(self, target, data):
+ pass
+
+ def flushElementContent(self):
+ self.element_content = self.element_content.strip()
+ if self.element_content:
+ if self.incomplete_tag:
+ self.output('>')
+ self.incomplete_tag = False
+ self.output(xml.sax.saxutils.escape(self.element_content))
+ self.element_content = ''
+
+
+class XmlError(Exception):
+ pass
+
+
+def compressLayout(src, dst, comp):
+ state = [0, 0]
+ def write(block):
+ for ch in bytearray(block):
+ if 0 == state[0]:
+ dst('\t')
+ elif 0 == (state[0] % 32):
+ dst(',\n\t')
+ else:
+ dst(', ')
+ state[0] += 1
+ dst('%3u' % (ch))
+
+ def output(text):
+ block = text.encode('UTF-8')
+ state[1] += len(block)
+ write(comp.compress(block))
+
+ error_handler = ErrorHandler()
+ content_handler = Minifyer(output)
+ parser = xml.sax.make_parser()
+ parser.setErrorHandler(error_handler)
+ parser.setContentHandler(content_handler)
+ try:
+ parser.parse(src)
+ write(comp.flush())
+ dst('\n')
+ except xml.sax.SAXException as exception:
+ print('fatal error: %s' % (exception))
+ raise XmlError('Fatal error parsing XML')
+ if (error_handler.errors > 0) or (error_handler.warnings > 0):
+ raise XmlError('Error(s) and/or warning(s) parsing XML')
+
+ return state[1], state[0]
+
+
+if __name__ == '__main__':
+ if len(sys.argv) != 4:
+ print('Usage:')
+ print(' complay <source.lay> <output.h> <varname>')
+ sys.exit(0 if len(sys.argv) <= 1 else 1)
+
+ srcfile = sys.argv[1]
+ dstfile = sys.argv[2]
+ varname = sys.argv[3]
+
+ comp_type = 1
+ try:
+ dst = open(dstfile,'w')
+ dst.write('static const unsigned char %s_data[] = {\n' % (varname))
+ byte_count, comp_size = compressLayout(srcfile, lambda x: dst.write(x), zlib.compressobj())
+ dst.write('};\n\n')
+ dst.write('const internal_layout %s = {\n' % (varname))
+ dst.write('\t%d, sizeof(%s_data), %d, %s_data\n' % (byte_count, varname, comp_type, varname))
+ dst.write('};\n')
+ dst.close()
+ except XmlError:
+ dst.close()
+ os.remove(dstfile)
+ sys.exit(2)
+ except IOError:
+ sys.stderr.write("Unable to open output file '%s'\n" % dstfile)
+ os.remove(dstfile)
+ dst.close()
+ sys.exit(3)
diff --git a/games/mame/mame.SlackBuild b/games/mame/mame.SlackBuild
index b499fac9ae..fce5d18287 100644
--- a/games/mame/mame.SlackBuild
+++ b/games/mame/mame.SlackBuild
@@ -9,6 +9,9 @@
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
+# 20170726 bkw:
+# - Updated for v0.188.
+
# 20170702 bkw:
# - Updated for v0.187.
@@ -82,7 +85,7 @@
# - Update .ini file slightly (sound=sdl, not sound=1)
PRGNAM=mame
-VERSION=${VERSION:-0.187}
+VERSION=${VERSION:-0.188}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
@@ -134,11 +137,11 @@ chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-o -perm 511 \) -print0 | \
- xargs -0 chmod 755
+ xargs -r -0 chmod 755
find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -print0 | \
- xargs -0 chmod 644
+ xargs -r -0 chmod 644
# OK, building modern mame is a bit of a PITA. It uses genie (written
# in lua, a fork of premake), but you don't get to run genie directly,
@@ -146,6 +149,13 @@ find -L . \
# genie with arguments based on the options in the main makefile. Also,
# it uses python to convert XML layout files to C++ code.
+# complay.py is the layout compressor. Layouts are XML, complay
+# compresses them and also seems to generate C code. The script got
+# updated between mame 0.187 and 0.188, and the new version doesn't
+# work. I don't know enough about Python to fix this in a timely
+# manner, so for now I'll just use the old version of the script.
+cp $CWD/complay.py scripts/build/complay.py
+
# Where possible, use system libraries instead of building the ones
# bundled with the mame source. However, SBo's lua is (still!) too old
# for mame.
diff --git a/games/mame/mame.info b/games/mame/mame.info
index 79c92ddb72..fb7a2407b7 100644
--- a/games/mame/mame.info
+++ b/games/mame/mame.info
@@ -1,8 +1,8 @@
PRGNAM="mame"
-VERSION="0.187"
+VERSION="0.188"
HOMEPAGE="http://mamedev.org/"
-DOWNLOAD="https://github.com/mamedev/mame/archive/mame0187/mame-mame0187.tar.gz"
-MD5SUM="304ad6657fa5b6928fa0257f91be10c1"
+DOWNLOAD="https://github.com/mamedev/mame/archive/mame0188/mame-mame0188.tar.gz"
+MD5SUM="d0811c2cfe39bf8b622c35b4012c8392"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="SDL2_ttf"