#!/usr/bin/env bash # Compila o Hex-a-hop do fredygames.com: o quebra-cabeca de hexagonos de Tom Beaumont (codigo e dados sob a # GPL-2.0-or-later; musicas e sons com as licencas de cada arquivo, CC BY-SA 3.0, CC BY 3.0 ou dominio # publico) em WebAssembly, com o Emscripten 6.0.10 e as portas SDL2 2.32.10, SDL2_image 2.6.0 (PNG), # SDL2_ttf 2.20.2 e SDL2_mixer 2.8.0 (OGG) 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-hex-a-hop.sh # # Fonte: hex-a-hop_1.1.0+git20140926.orig.tar.xz do Debian (o repositorio do projeto no SourceForge no # commit de 26/09/2014), conferido pelo SHA-256 e guardado em artifacts/cache/hex-a-hop/. O jogo usa o # SDL 1.2. O patch (hex-a-hop/hex-a-hop-fredygames.patch): # - acrescenta src/hhsdl12.h/.c, o pedaco do SDL 1.2 que o jogo usa sobre o SDL2 (tela de 32 bits em # memoria mostrada numa textura, SDL_DisplayFormat, color key, sem repeticao de tecla, os codigos de # tecla do SDL 1.2, que o jogo usa como indice), e src/compat/SDL/SDL_endian.h; o SDL_Delay dos laços # devolve a vez ao navegador (Asyncify); # - gfx.cpp: sem o evento de atividade da janela (o SDL 2 nao tem). # O jogo ja tem o caminho de texto com o SDL_ttf (sem o SDL_Pango): a fonte e a Fira Sans Regular # (SIL OFL 1.1) do google/fonts, no commit e com o sha256 abaixo. Dos dados vao so os PNG, o levels.dat e # as musicas e sons em OGG (as copias em FLAC e WAV e os .xml de licenca ficam de fora; o texto deles vai # no LICENSE.txt) num hexahop.data (--preload-file) em /data/. Os progressos ficam em # /home/web_user/.hex-a-hop. # # Saida: artifacts/build/hex-a-hop-1.1.0/hexahop.{js,wasm,data}, que o bundle.yaml confere pelo SHA-256. set -euo pipefail VERSION=1.1.0 SRC_SHA256=7c53916830db8f15fff87b4873acb83693d63b66e74cb36bcd39507bce1d56c0 FONTS_COMMIT=45e3d5269e4a17d823f6d84470bc084dc5ae46f6 FONT_SHA256=c29556a2719bf613ef3d5e070e40d903a8965d9c081beca1375dc1e6e0f93c23 OFL_SHA256=8f24842e9174beda18a556c2ae7d54f5dc444340c19a3a9ef77e23bca366adbd 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/hex-a-hop-$VERSION" cache="$root/artifacts/cache/hex-a-hop" tarball="hex-a-hop_$VERSION+git20140926.orig.tar.xz" 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 hex-a-hop/ (repositorio) ou ao lado do script (pasta de fontes do site). aux() { if [ -f "$here/hex-a-hop/$1" ]; then echo "$here/hex-a-hop/$1"; else echo "$here/$1"; fi } # fetch : usa o arquivo ao lado do script, ou baixa para o cache. fetch() { local file="$here/$(basename "$2")" if [ ! -f "$file" ]; then file="$2" if [ ! -f "$file" ]; then mkdir -p "$(dirname "$file")" curl -fsSL -o "$file.part" "$1" mv "$file.part" "$file" fi fi echo "$3 $file" | shasum -a 256 -c - >&2 echo "$file" } src_tar="$(fetch "https://deb.debian.org/debian/pool/main/h/hex-a-hop/$tarball" "$cache/$tarball" "$SRC_SHA256")" gf="https://raw.githubusercontent.com/google/fonts/$FONTS_COMMIT/ofl/firasans" font="$(fetch "$gf/FiraSans-Regular.ttf" "$cache/FiraSans-Regular.ttf" "$FONT_SHA256")" fetch "$gf/OFL.txt" "$cache/OFL-FiraSans.txt" "$OFL_SHA256" >/dev/null rm -rf "$out" mkdir -p "$out/obj" "$out/hexahop" s=hex-a-hop mkdir "$out/$s" tar xJf "$src_tar" -C "$out/$s" --strip-components 1 patch -d "$out/$s" -p1 --quiet --no-backup-if-mismatch < "$(aux hex-a-hop-fredygames.patch)" cat > "$out/$s/config.h" <