#!/usr/bin/env bash # Builds Forge: the vocabulary chapter from the manifest in forge/Author.singe, the book as # build/Forge.html and build/Forge.pdf, and the distributable build/Forge.game -- forge/ with the # book and four samples beside it, packed by Singe's own --pack. Singe is not part of this # project: point SINGE at the engine binary to pack with, or leave it to find the newest build in a # Singe tree beside this one. # # ./build.sh uses ../singe/.builddir/Singe-v*-Linux-x86_64 # SINGE=/path/to/Singe-v3.00-Linux-x86_64 ./build.sh # # Needs lua5.4, asciidoctor and asciidoctor-pdf. The version comes from VERSION: four numbers, # patch 1 meaning a beta and tweak saying which, so 1.00.1.1 is "1.00b1", as Singe numbers itself. set -euo pipefail here=$(cd "$(dirname "$0")" && pwd) out=$here/build singe=${SINGE:-$(ls -t "$here"/../singe/.builddir/Singe-v*-Linux-x86_64 2>/dev/null | head -1)} for tool in lua5.4 asciidoctor asciidoctor-pdf; do if ! command -v "$tool" > /dev/null; then echo "error: $tool not found" >&2 exit 1 fi done if [[ -z $singe || ! -x $singe ]]; then echo "error: no Singe binary; set SINGE to the engine to pack with" >&2 exit 1 fi read -r major minor patch tweak <<< "$(tr '.' ' ' < "$here/VERSION")" if [[ $patch == 1 ]]; then version="${major}.${minor}b${tweak}" else version="${major}.${minor}" fi mkdir -p "$out" # The vocabulary tables come from the manifest itself, so the book cannot drift from it. (cd "$here" && lua5.4 util/forgeVocabulary.lua > docs/ForgeVocabulary.adoc) asciidoctor -a data-uri -a revnumber="$version" "$here/docs/Forge.adoc" -o "$out/Forge.html" asciidoctor-pdf -a revnumber="$version" "$here/docs/Forge.adoc" -o "$out/Forge.pdf" # The package: the scripts, the kit, the tutorials, the book, and the samples that need no art # beyond what Singe ships, so the chooser has something to open on a fresh install. Packing # refuses to overwrite, and it runs in the staging folder because Singe writes Singe/ and data/ into # its working directory. stage=$out/stage rm -rf "$stage" "$out/Forge.game" mkdir -p "$stage" cp -r "$here/forge" "$stage/Forge" cp "$out/Forge.pdf" "$stage/Forge/" cp "$here"/testScripts/author/{platformer,breakout,qte,fmv}.forge "$stage/Forge/" (cd "$stage" && "$singe" --pack "$stage/Forge" "$out/Forge.game") rm -rf "$stage" echo "Forge $version, packed with $singe:" ls -la "$out/Forge.html" "$out/Forge.pdf" "$out/Forge.game"