#!/usr/bin/env bash # Compila o YSoccer (Massimo Modica, Daniele Giannarini, Marco Modica; GPL-2.0-or-later; github.com/ysoccer/ysoccer) para a # web pela porta de ray77 (github.com/ray77/ysoccer-web, commit da8da8c: modulo java/teavm com gdx-teavm 1.4.0, libGDX 1.13.1, # TeaVM; mesma licenca), JDK 17 do artifacts/tools e o Gradle wrapper do projeto (8.13, sha256 pinado) com GRADLE_USER_HOME em # artifacts/build/cache/gradle-ysoccer: # # src/FredGames.Bundler/Builds/build-ysoccer.sh # # Mudancas (ysoccer/ysoccer-fredygames.patch + ysoccer/fix-assets.py): # - so os modulos core e teavm entram na build (sem android, lwjgl3 nem server) e sem o plugin do Android; # - sem o link para o site do projeto (Main.java), sem baixar logs no console e com prefixos proprios de armazenamento # (preferencias em localStorage e arquivos salvos em IndexedDB), porque todos os jogos do site dividem a origem; # - sons: saem as gravacoes de torcida, cantos, apito e abertura da partida, que nao tem origem registrada # (SoundManager usa um som mudo no lugar; NullSound.java); # - fora da arvore: blitzmax/ (versao antiga, com dados de clubes reais), android/ (demo), java/android, java/lwjgl3, java/server # e o README (cita o jogo original); o fonte publicado e essa arvore; # - dados: saem os times e competicoes de clubes e selecoes reais e os arquivos de importacao do SWOS; ficam dez times # "inventados" de data/teams/CUSTOM (personagens historicos e coisas) e uma liga nossa com eles; as fotos dos fundos # de menu (origem desconhecida) viram fundos gerados; sai a pasta docs/ (cita o SWOS); ver fix-assets.py. # index.html e nosso (CSP so desta origem). O JavaScript do TeaVM desta versao NAO e reprodutivel (a ordem de algumas # classes geradas por reflexao muda a cada build, mesmo com optimization SIMPLE, hashCode fixo e um so processador): o # sha256 do bundle.yaml e o da saida desta execucao, mantida em artifacts/build. # # Saida: artifacts/build/ysoccer-/{ysoccer-web.tar.gz, ysoccer--source.tar.gz (a arvore patchada e podada que # gerou o binario: fonte completo para a GPL)}. set -euo pipefail here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$here/java-web/env.sh" ysoccer 17 COMMIT=da3cf36011a2051dacead5b4f8bde6d7e61b0250 SHA256=5cdf52298f4f3ec8313cee8a214e3eff4ddccc88f01988ec4c66323523bfd1c4 out="$root/artifacts/build/ysoccer-${COMMIT:0:7}" py="$root/artifacts/tools/venv/bin/python" jw_fetch "https://codeload.github.com/ray77/ysoccer-web/tar.gz/$COMMIT" "$SHA256" "ysoccer-${COMMIT:0:7}.tar.gz" rm -rf "$out"; mkdir -p "$out/project" tar -xzf "$cache/ysoccer-${COMMIT:0:7}.tar.gz" -C "$out/project" --strip-components 1 cd "$out/project" patch -s -E -p1 < "$here/ysoccer/ysoccer-fredygames.patch" "$py" -I "$here/ysoccer/fix-assets.py" java/assets # fora da arvore (e do fonte publicado): a versao antiga em BlitzMax, o demo Android e os modulos que nao entram na build; # trazem dados de clubes reais, sons e textos que citam o jogo original da Sensible Software, e o README fala dele rm -rf android blitzmax java/android java/lwjgl3 java/server README.md # fonte completo da build (arvore patchada e podada, antes de compilar), tar deterministico jw_pack_tree() { ( cd "$1" && find . -type f | sort | sed 's|^\./||' > "$out/.srclist" && COPYFILE_DISABLE=1 tar --format=ustar --uid 0 --gid 0 --uname root --gname root -n -cf - -T "$out/.srclist" ) | gzip -n -9 > "$2"; rm -f "$out/.srclist"; } jw_pack_tree "$out/project" "$out/ysoccer-${COMMIT:0:7}-source.tar.gz" cd java jw_gradle :teavm:buildTeaVM > "$out/gradle.log" 2>&1 || { tail -40 "$out/gradle.log" >&2; exit 1; } JW_NO_PROGRESS=1 jw_post teavm/build/dist/webapp "$out/web" ysoccer YSoccer '#101028' '#e0e0e0' app.js cd "$out" jw_pack web ysoccer-web.tar.gz ( shasum -a 256 ysoccer-web.tar.gz "ysoccer-${COMMIT:0:7}-source.tar.gz"; cd web && find . -type f -print0 | sort -z | xargs -0 shasum -a 256 ) > SHA256SUMS head -2 SHA256SUMS; du -sh web