#!/usr/bin/env bash # Compila a Simon Tatham's Portable Puzzle Collection (MIT) para WebAssembly, a partir do snapshot # oficial puzzles-20260923.616da16 (o tarball que o autor publica em # https://www.chiark.greenend.org.uk/~sgtatham/puzzles/, commit 616da16 do git.tartarus.org), com o # suporte a Emscripten do proprio projeto (cmake/platforms/emscripten.cmake + emcc.c, emccpre.js, # emcclib.js), sem nenhuma mudanca no fonte. E o mesmo comando do Buildscr do autor # ("emcmake cmake" + make), so que em Release e apenas com os quebra-cabecas publicados aqui. # # source artifacts/tools/emsdk/emsdk_env.sh # Emscripten 6.0.10 # src/FredGames.Bundler/Builds/build-sgt-puzzles.sh # # Saida: artifacts/build/sgt-puzzles-20260923.616da16/.{js,wasm}, que os bundle.yaml das # paginas sgt- conferem pelo SHA-256. Outra versao do Emscripten gera outros bytes. set -euo pipefail VERSION=20260923.616da16 SHA256=cc419c8060b4e22be398aa03e30651fbce146eee510645c303fb6f5f1b77b78e EMSCRIPTEN=6.0.10 PUZZLES=(bridges dominosa fifteen galaxies keen lightup loopy mines net pattern rect signpost singles slant solo tents towers tracks unequal untangle) here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/sgt-puzzles-$VERSION" cache="$root/artifacts/build/cache" tarball="puzzles-$VERSION.tar.gz" if ! emcc --version 2>/dev/null | head -1 | grep -q " $EMSCRIPTEN "; then echo "Precisa do Emscripten $EMSCRIPTEN no PATH (source artifacts/tools/emsdk/emsdk_env.sh)." >&2 exit 1 fi mkdir -p "$cache" [ -f "$cache/$tarball" ] || curl -fsSL --retry 6 --connect-timeout 60 --max-time 600 \ "https://www.chiark.greenend.org.uk/~sgtatham/puzzles/$tarball" -o "$cache/$tarball" echo "$SHA256 $cache/$tarball" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$cache/$tarball" -C "$out/tree" --strip-components 1 # Sem o halibut no PATH o CMake so avisa e pula o manual (que este site nao serve). (cd "$out/tree" && emcmake cmake -B build -DCMAKE_BUILD_TYPE=Release -DHALIBUT=HALIBUT-NOTFOUND \ -DMIN_FIREFOX_VERSION=79 -DMIN_CHROME_VERSION=85 . >/dev/null) make -C "$out/tree/build" -j"$(sysctl -n hw.ncpu 2>/dev/null || nproc)" "${PUZZLES[@]}" >/dev/null for p in "${PUZZLES[@]}"; do cp "$out/tree/build/$p.js" "$out/tree/build/$p.wasm" "$out/" done rm -rf "$out/tree" (cd "$out" && shasum -a 256 ./*.js ./*.wasm)