#!/usr/bin/env bash # Compila o Cuyo do fredygames.com: o quebra-cabeca de bolas coloridas de Immanuel Halupczok, Bernhard # Seckinger, Mark Weyer e colaboradores (codigo, fases, graficos e musica sob a GPL-2.0-or-later, como diz o # AUTHORS e o cabecalho de cada arquivo) em WebAssembly, com o Emscripten 6.0.10 e as portas SDL2 2.32.10, # SDL2_mixer 2.8.0 (com a libmodplug 11022021, que toca o modulo IT da musica) e zlib 1.3.2 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-cuyo.sh # # Fonte: cuyo_2.1.0.orig.tar.gz do Debian (cuyo 2.1.0, com parser.cc e scanner.cc ja gerados, sem precisar de # flex nem bison), conferido pelo SHA-256 e guardado em artifacts/cache/cuyo/. O jogo usa o SDL 1.2. O patch # (cuyo/cuyo-fredygames.patch): # - acrescenta src/cysdl12.h/.cpp, o pedaco do SDL 1.2 que o jogo usa sobre o SDL2 (tela de 32 bits em # memoria mostrada numa textura, SDL_DisplayFormat, sem repeticao de tecla, um unico "modo de video" para o # jogo escolher o tamanho de janela que prefere, o SDL_keysym com o campo unicode); o SDL_Delay do laco # principal devolve a vez ao navegador (Asyncify); # - sdltools.cpp: sem o colorkey de paleta (SDL 2 nao tem; o navegador nao usa tela com paleta) e sem o evento # de redimensionar a janela; blatt.cpp: as teclas do teclado numerico; cuyointl.h: ngettext sem traducoes; # - data/summary.ld: sem as fases "Tetris", "Pacman" e "ASCII" (nomes de jogos comerciais; o "ASCII" mostra # "APPLE ][" na tela); a fase "Paratroopers" (nome de um jogo de computador, como diz o comentario do # autor) passa a se chamar "Parachutists" (summary.ld e paratroopers.ld). # O script tira do pacote essas tres fases (tetris.ld, pacman.ld, ascii.ld), a fase de exemplo (example.ld, # que nao esta na lista) e as imagens que so elas usam (ia*.xpm.gz, btGrey, btScore, btTetris e as sp*.xpm.gz: # spBlinky, spClyde, spEyes, spGhost, spInkey, spLabyrinth, spPacman*, spPfeil, spPinky). data/ (as fases .ld, pics/ com as imagens .xpm.gz e sounds/) vai num cuyo.data (--preload-file), # em /data. As preferencias (.cuyo) ficam em /home/web_user. # # Saida: artifacts/build/cuyo-2.1.0/cuyo.{js,wasm,data}, que o bundle.yaml confere pelo SHA-256. set -euo pipefail VERSION=2.1.0 SRC_SHA256=6c0809a59a2d236f15d8fbd68d61fb1465e51f6c327d7f7ae4db9f4e44dad89f 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/cuyo-$VERSION" cache="$root/artifacts/cache/cuyo" tarball="cuyo_$VERSION.orig.tar.gz" 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 cuyo/ (repositorio) ou ao lado do script (pasta de fontes do site). aux() { if [ -f "$here/cuyo/$1" ]; then echo "$here/cuyo/$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/c/cuyo/$tarball" mv "$src_tar.part" "$src_tar" fi fi echo "$SRC_SHA256 $src_tar" | shasum -a 256 -c - >&2 rm -rf "$out" mkdir -p "$out/obj" s=cuyo mkdir "$out/$s" tar xzf "$src_tar" -C "$out/$s" --strip-components 1 patch -d "$out/$s" -p1 --quiet --no-backup-if-mismatch < "$(aux cuyo-fredygames.patch)" cat > "$out/$s/config.h" <