#!/usr/bin/env bash # Compila o Spout do fredygames.com: o jogo de voo em caverna de Kuni (2002-2006), na versao 1.4 de Nick # White (2010), ambos sob a licenca MIT, em WebAssembly com o Emscripten 6.0.10 e a porta SDL2 2.32.10 # dele. Este script e o patch fazem parte do codigo-fonte publicado junto do jogo. # # source /emsdk_env.sh # emsdk install 6.0.10 && emsdk activate 6.0.10 # src/FredGames.Bundler/Builds/build-spout.sh # # Fonte: o spout-1.4.tar.bz2 de Nick White. O site dele (njw.me.uk) saiu do ar; o Debian guarda o # mesmo arquivo como spout_1.4.orig.tar.bz2, e a assinatura GPG original (spout-1.4.tar.bz2.sig, no # Internet Archive, chave DSA 1F48567404E4653F de Nick White) confere com ele. Conferido pelo SHA-256 # e guardado em artifacts/cache/spout/ (o site hospeda o mesmo arquivo). Na pasta de fontes do site, # o script acha o tarball e o patch ao lado dele. # # spout-fredygames.patch: SDL 1.2 -> SDL2, o laco principal por emscripten_set_main_loop (o jogo # mantem o proprio relogio de 50 Hz), o recorde em /home/web_user/spout (a pagina guarda essa pasta # no IndexedDB) e Shift+Esc na tela de titulo sem fechar o jogo. Detalhes no inicio do patch. # # Saida: artifacts/build/spout-1.4/spout.{js,wasm}, que o bundle.yaml do jogo confere pelo SHA-256. set -euo pipefail VERSION=1.4 SRC_SHA256=4d9423a6f10cd436576aec906a8e6f4614d4313babdad1c6be3a199c3cc5fc7a EMSCRIPTEN=6.0.10 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/spout-$VERSION" cache="$root/artifacts/cache/spout" tarball="spout-$VERSION.tar.bz2" if ! emcc --version 2>/dev/null | head -1 | grep -q " $EMSCRIPTEN "; then echo "Precisa do Emscripten $EMSCRIPTEN no PATH (source /emsdk_env.sh)." >&2 exit 1 fi # Arquivo auxiliar: em spout/ (repositorio) ou ao lado do script (pasta de fontes do site). aux() { if [ -f "$here/spout/$1" ]; then echo "$here/spout/$1"; else echo "$here/$1"; fi } if [ -f "$here/$tarball" ]; then src_tar="$here/$tarball" else src_tar="$cache/$tarball" if [ ! -f "$src_tar" ]; then mkdir -p "$cache" curl -fsSL -o "$src_tar.part" \ "https://deb.debian.org/debian/pool/main/s/spout/spout_$VERSION.orig.tar.bz2" mv "$src_tar.part" "$src_tar" fi fi echo "$SRC_SHA256 $src_tar" | shasum -a 256 -c - >&2 rm -rf "$out" mkdir -p "$out" tar xjf "$src_tar" -C "$out" patch -d "$out/spout-$VERSION" -p1 --no-backup-if-mismatch < "$(aux spout-fredygames.patch)" # Compila de dentro da pasta de saida, com caminhos relativos. config.h e a copia do config.def.h que # o Makefile do jogo faria (zoom 4: a janela de 512x352 que a pagina escala). ( cd "$out" s="spout-$VERSION" cp "$s/config.def.h" "$s/config.h" emcc -O2 -std=gnu99 -ffile-prefix-map="$out/=" -w -I"$s" -DVERSION="\"$VERSION\"" \ "$s/spout.c" \ -sUSE_SDL=2 -sALLOW_MEMORY_GROWTH -sENVIRONMENT=web -lidbfs.js \ -sEXPORTED_RUNTIME_METHODS=FS,addRunDependency,removeRunDependency \ -o spout.js ) shasum -a 256 "$out/spout.js" "$out/spout.wasm"