#!/usr/bin/env bash # Compila o Moon-Buggy 1.0.51 do fredygames.com (Jochen Voss, GNU GPL 2) em WebAssembly com o Emscripten # 6.0.10, sobre a camada de terminal de curses-web/ (curses desenhado num canvas; ver curses-web/README.md). # # source /emsdk_env.sh # emsdk install 6.0.10 && emsdk activate 6.0.10 # src/FredGames.Bundler/Builds/build-moon-buggy.sh # # Fonte: moon-buggy_1.0.51.orig.tar.gz do Debian, conferido pelo SHA-256 e guardado em # artifacts/cache/moon-buggy/. moon-buggy/moon-buggy-fredygames.patch (so ativo no navegador): sem tty (o # terminal nao e preparado) e a espera por tecla ou prazo (select no stdin) vira a espera da pagina # (cw_wait_input). moon-buggy/config.h faz o papel do ./configure; SCORE_DIR=/moon-buggy-saves (a pagina guarda a # pasta no IndexedDB). O copying.h e o buggy.h ja vem prontos no tarball. # # Saida: artifacts/build/moon-buggy-1.0.51/moon-buggy.{js,wasm}, que o bundle.yaml do jogo confere pelo SHA-256. set -euo pipefail VERSION=1.0.51 SRC_SHA256=352dc16ccae4c66f1e87ab071e6a4ebeb94ff4e4f744ce1b12a769d02fe5d23f 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/moon-buggy-$VERSION" cache="$root/artifacts/cache/moon-buggy" tarball="$cache/moon-buggy_$VERSION.orig.tar.gz" . "$here/curses-web/flags.sh" 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 if [ ! -f "$tarball" ]; then mkdir -p "$cache" curl -fsSL -o "$tarball.part" "https://deb.debian.org/debian/pool/main/m/moon-buggy/moon-buggy_$VERSION.orig.tar.gz" mv "$tarball.part" "$tarball" fi echo "$SRC_SHA256 $tarball" | shasum -a 256 -c - >&2 rm -rf "$out" mkdir -p "$out/work/obj" "$out/work/src" S="$out/work/src" tar xzf "$tarball" -C "$S" --strip-components=1 patch -d "$S" -p1 --no-backup-if-mismatch < "$here/moon-buggy/moon-buggy-fredygames.patch" >&2 cp "$here/moon-buggy/config.h" "$S/config.h" objs=() for f in buggy main mode title pager game level ground laser meteor highscore realname queue vclock date persona \ signal keyboard terminal cursor random error xmalloc xstrdup hpath; do o="$out/work/obj/$f.o" objs+=("$o") emcc "${CW_CFLAGS[@]}" -DHAVE_CONFIG_H -DSCORE_DIR='"/moon-buggy-saves"' -ffile-prefix-map="$out/work/=" -I"$S" -c "$S/$f.c" -o "$o" done for f in "$here/bsdgames/compat.c" "$CW_DIR/curses.c"; do o="$out/work/obj/$(basename "$f").o" objs+=("$o") emcc "${CW_CFLAGS[@]}" -ffile-prefix-map="$CW_DIR/=curses-web/" -ffile-prefix-map="$here/=" -c "$f" -o "$o" done emcc "${objs[@]}" -lm "${CW_LDFLAGS[@]}" -o "$out/moon-buggy.js" rm -rf "$out/work" shasum -a 256 "$out/moon-buggy.js" "$out/moon-buggy.wasm"