diff options
Diffstat (limited to 'games/mame/mkgroovy.sh')
-rw-r--r-- | games/mame/mkgroovy.sh | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/games/mame/mkgroovy.sh b/games/mame/mkgroovy.sh new file mode 100644 index 0000000000..c2524b6622 --- /dev/null +++ b/games/mame/mkgroovy.sh @@ -0,0 +1,114 @@ +#!/bin/bash + +# mkgroovy.sh - create a groovymame diff, if possible. + +# Since the groovymame author switched to github, there are no more +# groovymame diffs to download (the ones that used to be hosted on +# google drive). This rather ugly script just uses the github API to +# get a diff we can apply. + +# Note: in my testing, requesting the same diff repeatedly from +# the API results in identical files, but I'm not sure this is +# guaranteed. It only matters if you're repeatedly test-running +# this script, really. + +# The github 'compare' API is basically just a wrapper for the git +# command, run on a remote repo. We can use it to download a diff +# between 2 tags, without having to clone the repo (save a ton of +# time and bandwidth). + +# To understand this, see the github API docs: https://docs.github.com/en/rest/ + +# to see info on the repo: +# curl -H "Accept: application/vnd.github.v3+json" 'https://api.github.com/users/antonioginer/repos' + +# to get a list of releases: +# curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/antonioginer/GroovyMAME/releases +# looks like these are in chronological order, newest first. + +# DIFFURL should end up looking like this: +# curl -H "Accept: application/vnd.github.v3.diff" 'https://api.github.com/repos/antonioginer/GroovyMAME/compare/{mame0237}...{gm0237sr002e}' + +# Note: 'git diff' doesn't include timestamps in its output, +# and there's no way to make the gh API include them. To +# get ccache to play nice, I have to add the timestamps to +# the context headers in the diff myself. AFAICT, that's the +# only way to get ccache to play nice with this patch. Even with +# CCACHE_SLOPPINESS=include_file_mtime, it complains that the headers +# have a different modification time than what was expected, on the +# 2nd (cached) build. I'm pretty sure this only happens because mame +# uses a precompiled header, and ccache's precompiled header support +# isn't quite perfect yet. The timestamps I put in the patch are just +# the release date of the tag. They're not quite in the same format +# 'diff' produces, but 'patch' accepts them just fine. + +if [ -n "$1" ]; then + MAMEVER="$1" +else + if [ -e mame.info ]; then + source ./mame.info + MAMEVER="$VERSION" + else + echo "No MAME version argument and no mame.info in current dir." + fi +fi + +MAMEVER=${MAMEVER/./} + +RELEASEURL="https://api.github.com/repos/antonioginer/GroovyMAME/releases" +CMPURL="https://api.github.com/repos/antonioginer/GroovyMAME/compare/" +JSONHDR="Accept: application/vnd.github.v3+json" +DIFFHDR="Accept: application/vnd.github.v3.diff" + +JSON="$( mktemp -t mkgroovy.XXXXXXXXXX.json )" +curl -sS -H "$HEADER" "$RELEASEURL" >> "$JSON" + +GMTAG="$( + grep '"tag_name.*"'".*$MAMEVER" "$JSON" \ + | head -1 \ + | sed 's,.*"\(gm'"$MAMEVER"'[^"]*\)".*,\1,'\ + )" + +GMDATE="$( + grep '"created_at"' "$JSON" \ + | head -1 \ + | cut -d'"' -f4 + )" + +rm "$JSON" + +case "$GMTAG" in + gm$MAMEVER*) ;; # OK + "") cat <<EOF +!!! Can't find a GroovyMAME release for MAME $MAMEVER, try again tomorrow? +EOF + exit 1 ;; + *) cat <<EOF +!!! GMTAG is "$GMTAG", which doesn't look right. Investigate. +EOF + exit 1 ;; +esac + +MAMETAG="mame$MAMEVER" +DIFFURL="$CMPURL{$MAMETAG}...{$GMTAG}" + +echo "=== GMTAG='$GMTAG' MAMETAG='$MAMETAG'" +echo "=== DIFFURL='$DIFFURL'" + +OUTPUT="$GMTAG.diff" +if [ -e "$OUTPUT" -o -e "$OUTPUT.xz" ]; then + echo "=== $OUTPUT(.xz)? already exists and is the latest version for mame $MAMEVER, nothing to do." + exit 0 # not an error! +fi + +echo "=== Downloading diff." +curl -sS -H "$DIFFHDR" "$DIFFURL" > "$OUTPUT" + +echo "=== Fudging timestamps to $GMDATE" +sed -i '/^\(+++\|---\)/s,$,\t'"$GMDATE," "$OUTPUT" + +echo -n "=== Output is '$OUTPUT', type " +file -b --mime "$OUTPUT" + +xz -9 "$OUTPUT" +echo "=== Compressed to $OUTPUT.xz" |