#!/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 filling flood galaxies guess inertia keen lightup loopy magnets map mines mosaic net pattern pearl range rect signpost singles slant solo tents towers tracks unequal unruly 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)