#!/bin/sh # One-shot installer for MicroslopSam. Runs all setup steps, idempotently: # 1. record resolved paths in setup/microslopsam.env # 2. system dependencies (Wine, Winelib, helpers; needs sudo) # 3. wine prefix + SAPI4 runtime + MSTTS voices + registration # 4. Flextalk extraction + voices + registration # 5. host build (Winelib and PE) # 6. quick voice check # # Paths and tools come from setup/config.sh. Override anything with environment # variables (they win over setup/microslopsam.env), for example: # MICROSLOP_ASSETS=/srv/assets MICROSLOP_PREFIX=~/.wine-sam setup/install.sh # Set MICROSLOP_UPDATE_ENV=1 to rewrite an existing microslopsam.env. set -eu HERE=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) . "$HERE/config.sh" log() { printf '\n== %s\n' "$*"; } # 0) record the resolved configuration ---------------------------------------- ENVFILE="$HERE/microslopsam.env" if [ ! -f "$ENVFILE" ] || [ "${MICROSLOP_UPDATE_ENV:-0}" = "1" ]; then { echo "# Generated by setup/install.sh -- safe to edit or delete." echo "# Values are defaults; environment variables take precedence." printf ': "${MICROSLOP_ROOT:=%s}"\n' "$MICROSLOP_ROOT" printf ': "${MICROSLOP_BUILD:=%s}"\n' "$MICROSLOP_BUILD" printf ': "${MICROSLOP_PREFIX:=%s}"\n' "$MICROSLOP_PREFIX" printf ': "${MICROSLOP_ASSETS:=%s}"\n' "$MICROSLOP_ASSETS" printf ': "${MICROSLOP_FLEXTALK_DIR:=%s}"\n' "$MICROSLOP_FLEXTALK_DIR" printf ': "${MICROSLOP_SPEECH_H_DIR:=%s}"\n' "$MICROSLOP_SPEECH_H_DIR" printf ': "${MICROSLOP_DISPLAY:=%s}"\n' "$MICROSLOP_DISPLAY" } > "$ENVFILE" chmod 644 "$ENVFILE" 2>/dev/null || true log "configuration written to $ENVFILE" fi # 1) system dependencies ----------------------------------------------------- if [ "$(id -u)" = "0" ]; then log "installing system dependencies" "$HERE/install-deps.sh" else log "installing system dependencies (sudo)" sudo "$HERE/install-deps.sh" fi # 2) SAPI4 runtime + MSTTS voices -------------------------------------------- log "setting up wine prefix, SAPI4 runtime and MSTTS voices" "$HERE/setup-prefix.sh" "$MICROSLOP_ASSETS" # 3) Flextalk voices ---------------------------------------------------------- EXTRACTED="$MICROSLOP_FLEXTALK_DIR/extracted/TTS_Executables" if [ ! -d "$EXTRACTED/EngineDLLs" ]; then CAB="" for c in "$MICROSLOP_FLEXTALK_DIR/data1.cab" \ "$MICROSLOP_FLEXTALK_DIR/installer/flextalk/data1.cab" \ "$MICROSLOP_ASSETS/flextalk/data1.cab"; do if [ -f "$c" ]; then CAB="$c"; break; fi done if [ -z "$CAB" ]; then echo "Flextalk data1.cab not found; set MICROSLOP_FLEXTALK_DIR" >&2 exit 1 fi command -v unshield >/dev/null 2>&1 || { echo "unshield is required to extract the Flextalk installer" >&2 exit 1 } log "extracting Flextalk installer ($CAB)" rm -rf "$MICROSLOP_FLEXTALK_DIR/extracted" unshield -O -d "$MICROSLOP_FLEXTALK_DIR/extracted" x "$CAB" >/dev/null fi log "installing Flextalk voices" "$HERE/setup-flextalk.sh" "$EXTRACTED" # 4) host build --------------------------------------------------------------- log "building the host" [ -f "$MICROSLOP_SPEECH_H_DIR/speech.h" ] || { echo "speech.h not found in $MICROSLOP_SPEECH_H_DIR" >&2 exit 1 } mkdir -p "$MICROSLOP_BUILD" winegcc -m32 -O2 -o "$MICROSLOP_BUILD/sapi4host-winlib" "$MICROSLOP_ROOT/host/sapi4host.c" \ -I"$MICROSLOP_SPEECH_H_DIR" -lole32 -luser32 -ladvapi32 if command -v i686-w64-mingw32-gcc >/dev/null 2>&1; then i686-w64-mingw32-gcc -O2 -static -o "$MICROSLOP_BUILD/sapi4host.exe" \ "$MICROSLOP_ROOT/host/sapi4host.c" -I"$MICROSLOP_SPEECH_H_DIR" \ -lole32 -luser32 -ladvapi32 -luuid fi # 5) check -------------------------------------------------------------------- log "installed voices" "$HERE/run.sh" -l || true cat <