#!/usr/bin/env bash # Gera o mr-rescue.love do Mr. Rescue (Tangram Games; codigo zlib, arte/musica CC BY-SA 3.0) a partir do # commit a5be73c do repositorio SimonLarsen/mrrescue, com duas mudancas nossas (publicadas junto do fonte): # mr-rescue/browser-main-loop.patch o love.run do jogo e um "while true" que nunca devolve o controle; no # navegador isso trava a aba. O patch o transforma na forma do LOVE 11 (devolve a funcao # de um quadro, que o love.js chama a cada frame), com a mesma logica; # mr-rescue/tserial.lua substitui o TSerial.lua, que nao traz nenhum texto de licenca no repositorio # (o LICENSE do jogo diz que ele "nao e coberto"); a nossa e uma reescrita # independente de 40 linhas, com a mesma interface (pack/unpack), em zlib. # O .love e um zip deterministico (ordem alfabetica, data fixa, deflate) sem .git*, README.md e .gitignore. # # src/FredGames.Bundler/Builds/build-mr-rescue.sh # # Saida: artifacts/build/mr-rescue-a5be73c/mr-rescue.love set -euo pipefail COMMIT=a5be73c60acb8d1be506f7b5e48e784492ba96ce SHA256=2d739a277c6e34593e639e675eaa249c40bafd4214859f0d46033b8acfc21659 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/mr-rescue-a5be73c" cache="$root/artifacts/build/cache" mkdir -p "$cache" tarball="$cache/mrrescue-a5be73c.tar.gz" [ -f "$tarball" ] || curl -fsSL "https://github.com/SimonLarsen/mrrescue/archive/$COMMIT.tar.gz" -o "$tarball" echo "$SHA256 $tarball" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$tarball" -C "$out/tree" --strip-components 1 patch -d "$out/tree" -p1 < "$here/mr-rescue/browser-main-loop.patch" cp "$here/mr-rescue/tserial.lua" "$out/tree/TSerial.lua" python3 -I - "$out/tree" "$out/mr-rescue.love" <<'PY' import os, sys, zipfile src, dest = sys.argv[1:] names = [] for base, dirs, files in os.walk(src): for f in files: rel = os.path.relpath(os.path.join(base, f), src).replace(os.sep, '/') if rel in ('README.md', '.gitignore') or rel.startswith('.git'): continue names.append(rel) with zipfile.ZipFile(dest, 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as z: for rel in sorted(names): info = zipfile.ZipInfo(rel, (1980, 1, 1, 0, 0, 0)) info.compress_type = zipfile.ZIP_DEFLATED info.external_attr = 0o644 << 16 info.create_system = 3 with open(os.path.join(src, rel), 'rb') as fh: z.writestr(info, fh.read(), compresslevel=9) PY shasum -a 256 "$out/mr-rescue.love"