mirror of
https://github.com/got-feedBack/feedBack-desktop.git
synced 2026-07-21 20:31:28 +00:00
159 lines
7.4 KiB
Bash
Executable File
159 lines
7.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Development environment setup
|
|
# Installs all dependencies and verifies the build chain
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
|
|
cd "$PROJECT_DIR"
|
|
|
|
echo "=== Slopsmith Desktop Development Setup ==="
|
|
echo ""
|
|
|
|
# Check prerequisites
|
|
echo "Checking prerequisites..."
|
|
|
|
check_command() {
|
|
if command -v "$1" &>/dev/null; then
|
|
echo " [OK] $1"
|
|
else
|
|
echo " [MISSING] $1 — $2"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Verify the media chain: ffmpeg (WEM/OGG transcode), ffprobe (demucs probes
|
|
# stream metadata before invoking ffmpeg), and ffmpeg's libvorbis encoder
|
|
# (Sloppak conversion encodes .ogg with `-c:a libvorbis`).
|
|
# $1 — install hint shown when ffmpeg/ffprobe are missing.
|
|
# $2 — platform-specific remediation shown when libvorbis is absent.
|
|
check_media_chain() {
|
|
local install_hint="$1"
|
|
local libvorbis_hint="$2"
|
|
command -v ffmpeg >/dev/null 2>&1 && echo " [OK] ffmpeg" || echo " [MISSING] ffmpeg ($install_hint)"
|
|
command -v ffprobe >/dev/null 2>&1 && echo " [OK] ffprobe" || echo " [MISSING] ffprobe (ships with ffmpeg — $install_hint)"
|
|
if command -v ffmpeg >/dev/null 2>&1; then
|
|
if ffmpeg -hide_banner -encoders 2>/dev/null | grep -wq libvorbis; then
|
|
echo " [OK] ffmpeg libvorbis encoder"
|
|
else
|
|
echo " [WARN] ffmpeg lacks the libvorbis encoder — Sloppak conversion"
|
|
echo " falls back to the lower-quality built-in vorbis encoder."
|
|
echo " $libvorbis_hint"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
check_command node "Install Node.js 20+" || exit 1
|
|
check_command npm "Comes with Node.js" || exit 1
|
|
check_command cmake "Install cmake (apt/brew/pacman)" || exit 1
|
|
check_command python3 "Install Python 3.12+" || exit 1
|
|
check_command git "Install git" || exit 1
|
|
|
|
# Platform-specific checks
|
|
case "$(uname -s)" in
|
|
Linux)
|
|
echo ""
|
|
echo "Checking Linux build dependencies..."
|
|
pkg-config --exists alsa 2>/dev/null && echo " [OK] ALSA" || echo " [MISSING] ALSA dev headers (apt: libasound2-dev / pacman: alsa-lib)"
|
|
pkg-config --exists jack 2>/dev/null && echo " [OK] JACK" || echo " [MISSING] JACK dev headers (apt: libjack-jackd2-dev / pacman: jack2)"
|
|
pkg-config --exists freetype2 2>/dev/null && echo " [OK] freetype2" || echo " [MISSING] freetype2 (apt: libfreetype-dev / pacman: freetype2)"
|
|
pkg-config --exists x11 2>/dev/null && echo " [OK] X11" || echo " [MISSING] X11 dev headers"
|
|
pkg-config --exists xrandr 2>/dev/null && echo " [OK] Xrandr" || echo " [MISSING] Xrandr dev headers"
|
|
pkg-config --exists xcursor 2>/dev/null && echo " [OK] Xcursor" || echo " [MISSING] Xcursor dev headers"
|
|
pkg-config --exists xinerama 2>/dev/null && echo " [OK] Xinerama" || echo " [MISSING] Xinerama dev headers"
|
|
check_media_chain "apt: ffmpeg / pacman: ffmpeg" \
|
|
"Most distro ffmpeg packages enable libvorbis — reinstall your distro's ffmpeg if this build does not."
|
|
command -v vgmstream-cli >/dev/null 2>&1 && echo " [OK] vgmstream-cli" || echo " [MISSING] vgmstream-cli (AUR: yay -S vgmstream-cli-bin / or github.com/vgmstream/vgmstream/releases)"
|
|
;;
|
|
Darwin)
|
|
echo ""
|
|
echo "Checking macOS dependencies..."
|
|
xcode-select -p &>/dev/null && echo " [OK] Xcode Command Line Tools" || echo " [MISSING] Run: xcode-select --install"
|
|
check_media_chain "brew install ffmpeg" \
|
|
"Homebrew's ffmpeg 8.1.1+ omits libvorbis — install a static ffmpeg build instead (packaged builds bundle one)."
|
|
command -v vgmstream-cli >/dev/null 2>&1 && echo " [OK] vgmstream-cli" || echo " [MISSING] vgmstream-cli (brew install vgmstream)"
|
|
;;
|
|
MINGW*|MSYS*|CYGWIN*)
|
|
echo ""
|
|
echo "Checking Windows (Git Bash) dependencies..."
|
|
check_media_chain "install ffmpeg and add it to PATH (e.g. winget install Gyan.FFmpeg)" \
|
|
"Most prebuilt Windows ffmpeg builds (e.g. Gyan) include libvorbis — pick one that does."
|
|
command -v vgmstream-cli >/dev/null 2>&1 && echo " [OK] vgmstream-cli" || echo " [MISSING] vgmstream-cli (github.com/vgmstream/vgmstream/releases — add to PATH)"
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
|
|
# Initialize submodules
|
|
echo "Initializing git submodules..."
|
|
git submodule update --init --recursive 2>/dev/null || echo " Note: Run 'git submodule update --init --recursive' manually if this is a fresh clone"
|
|
|
|
# Install npm dependencies
|
|
echo ""
|
|
echo "Installing npm dependencies..."
|
|
npm install
|
|
|
|
# Locate Slopsmith. Matches the build scripts (bundle-slopsmith.sh,
|
|
# bundle-python.sh, build-macos.sh): an explicit $SLOPSMITH_DIR is honoured
|
|
# verbatim — a typo or partial checkout there is surfaced, never silently
|
|
# masked by a sibling or legacy checkout. Only when $SLOPSMITH_DIR is unset
|
|
# do we fall back to ../slopsmith then ~/Repositories/slopsmith, and a
|
|
# fallback candidate only counts if it actually contains server.py.
|
|
SLOPSMITH_DIR_ENV="${SLOPSMITH_DIR:-}"
|
|
if [ -z "${SLOPSMITH_DIR:-}" ]; then
|
|
if [ -f "$PROJECT_DIR/../slopsmith/server.py" ]; then
|
|
SLOPSMITH_DIR="$PROJECT_DIR/../slopsmith"
|
|
elif [ -f "$HOME/Repositories/slopsmith/server.py" ]; then
|
|
SLOPSMITH_DIR="$HOME/Repositories/slopsmith"
|
|
fi
|
|
fi
|
|
|
|
if [ -n "${SLOPSMITH_DIR:-}" ] && [ -f "$SLOPSMITH_DIR/server.py" ]; then
|
|
SLOPSMITH_DIR="$(cd "$SLOPSMITH_DIR" && pwd)"
|
|
echo ""
|
|
echo "Slopsmith found at: $SLOPSMITH_DIR"
|
|
|
|
# On Windows/Git Bash a bash check passes for an MSYS path like
|
|
# /c/src/slopsmith, but `npm run dev` (Electron) resolves $SLOPSMITH_DIR
|
|
# with Node, which needs a native Windows path. Warn before setup
|
|
# reports a config that dev mode would still fail to start.
|
|
case "$(uname -s)" in
|
|
MINGW*|MSYS*|CYGWIN*)
|
|
if [ -n "$SLOPSMITH_DIR_ENV" ] && [ "${SLOPSMITH_DIR_ENV#/}" != "$SLOPSMITH_DIR_ENV" ]; then
|
|
echo ""
|
|
echo " NOTE: \$SLOPSMITH_DIR is an MSYS/Git-Bash path. 'npm run dev' needs a"
|
|
echo " native Windows path. Re-export it as:"
|
|
if command -v cygpath >/dev/null 2>&1; then
|
|
echo " export SLOPSMITH_DIR='$(cygpath -w "$SLOPSMITH_DIR_ENV")'"
|
|
else
|
|
echo " a native path such as C:\\src\\slopsmith"
|
|
fi
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
PYTHON="${PROJECT_DIR}/.venv/bin/python3"
|
|
[ -x "$PYTHON" ] || PYTHON="python3"
|
|
echo "Checking Python dependencies (\"$PYTHON\")..."
|
|
"$PYTHON" -c "import fastapi" 2>/dev/null && echo " [OK] fastapi" || echo " [MISSING] \"$PYTHON\" -m pip install -r \"$SLOPSMITH_DIR/requirements.txt\""
|
|
"$PYTHON" -c "import uvicorn" 2>/dev/null && echo " [OK] uvicorn" || echo " [MISSING] \"$PYTHON\" -m pip install -r \"$SLOPSMITH_DIR/requirements.txt\""
|
|
elif [ -n "${SLOPSMITH_DIR:-}" ]; then
|
|
echo ""
|
|
echo "WARNING: \$SLOPSMITH_DIR is set to '$SLOPSMITH_DIR' but no server.py was found there."
|
|
echo " Fix the path or unset \$SLOPSMITH_DIR to fall back to ../slopsmith or ~/Repositories/slopsmith."
|
|
else
|
|
echo ""
|
|
echo "WARNING: Slopsmith not found. Set \$SLOPSMITH_DIR, clone to $PROJECT_DIR/../slopsmith, or use ~/Repositories/slopsmith"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Setup Complete ==="
|
|
echo ""
|
|
echo "Build commands:"
|
|
echo " npm run build:audio # Build JUCE native addon"
|
|
echo " npm run build:ts # Compile TypeScript"
|
|
echo " npm run dev # Run in development mode"
|
|
echo " npm run dist:linux # Build Linux package"
|