testsAndMisc/linux_configuration/scripts/single_use/fixes/fix_stepmania.sh
Krzysztof kuhy Rudnicki 42a66a1419 refactor(linux_configuration/scripts): split all scripts into single_use/ and periodic_background/
- Move all linux_configuration scripts into two semantic categories:
  - single_use/: scripts run once manually (fresh install, fixes, setup)
  - periodic_background/: scripts run by systemd timers or daemons
- Preserve existing subdirectory structure within each category
- Fix lib/common.sh source paths for new directory depths
- Fix CONFIG_DIR depth in setup_periodic_system.sh and check_and_enable_services.sh
- Update all references in tests, fresh-install/main.sh, nix modules, and docs
- Fix check_polling_antipatterns.sh false positives (||, regex |, case patterns, jq strings)
- Fix pre-existing mypy exclusion path and type annotations for moved tools/ directory
- Rewrite check_polling_antipatterns.sh using awk (no bash regex loops); add require_serial: true
2026-05-15 00:32:35 +02:00

144 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Fix StepMania AUR build failure due to missing vorbis libraries in linker
#
# Error addressed:
# /usr/bin/ld: /usr/local/lib/libavcodec.a(libvorbisenc.o): undefined reference to symbol 'vorbis_encode_setup_vbr'
# /usr/bin/ld: /usr/lib/libvorbisenc.so.2: error adding symbols: DSO missing from command line
#
# Cause:
# Static libavcodec.a depends on libvorbisenc but cmake doesn't add it to linker flags
#
# Solution:
# Add vorbis libraries to LDFLAGS before building
#
# Usage:
# ./fix_stepmania.sh
set -euo pipefail
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
# shellcheck source=../../lib/common.sh
source "$SCRIPT_DIR/../../lib/common.sh"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
log_info() { echo -e "${BLUE}[INFO]${NC} $*"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
log_error() { echo -e "${RED}[ERROR]${NC} $*"; }
log_success() { echo -e "${GREEN}[OK]${NC} $*"; }
check_dependencies() {
log_info "Checking dependencies..."
local missing=()
# Check for vorbis libraries
if ! pacman -Q libvorbis &>/dev/null; then
missing+=("libvorbis")
fi
# Check for yay or paru
if ! has_cmd yay && ! has_cmd paru; then
log_error "Neither yay nor paru found. Please install an AUR helper."
exit 1
fi
if [[ ${#missing[@]} -gt 0 ]]; then
log_warn "Missing packages: ${missing[*]}"
log_info "Installing missing dependencies..."
sudo pacman -S --needed "${missing[@]}"
else
log_success "All dependencies present"
fi
}
get_aur_helper() {
if has_cmd yay; then
echo "yay"
elif has_cmd paru; then
echo "paru"
fi
}
build_stepmania() {
local aur_helper
aur_helper=$(get_aur_helper)
log_info "Building StepMania with vorbis libraries in LDFLAGS..."
log_info "Using AUR helper: $aur_helper"
# Export LDFLAGS with vorbis libraries to fix the linking issue
# The static libavcodec.a needs these shared libraries
export LDFLAGS="${LDFLAGS:-} -lvorbis -lvorbisenc -lvorbisfile -logg"
log_info "LDFLAGS set to: $LDFLAGS"
# Clean any previous failed build
if [[ -d "$HOME/.cache/$aur_helper/stepmania" ]]; then
log_info "Cleaning previous build cache..."
rm -rf "$HOME/.cache/$aur_helper/stepmania"
fi
# Build with the modified LDFLAGS
# --noconfirm for non-interactive, --cleanafter to cleanup
"$aur_helper" -S --rebuild --noconfirm stepmania
log_success "StepMania built successfully!"
}
alternative_fix_info() {
cat <<'EOF'
If the automated fix doesn't work, try these alternatives:
1. Use system ffmpeg instead of static libavcodec:
- Edit the PKGBUILD to use shared ffmpeg libraries
- Remove any bundled/static ffmpeg references
2. Manually edit CMakeLists.txt:
- Find target_link_libraries for StepMania executable
- Add: vorbis vorbisenc vorbisfile ogg
3. Check if /usr/local/lib/libavcodec.a is from a custom ffmpeg build:
- If so, rebuild ffmpeg with --enable-shared or remove the static lib
- System ffmpeg in /usr/lib should be preferred
4. Use the stepmania-git package instead which may have different build config
EOF
}
main() {
echo "======================================"
echo " StepMania Build Fix"
echo "======================================"
echo ""
check_dependencies
echo ""
log_info "This fix adds vorbis libraries to LDFLAGS to resolve:"
log_info " 'undefined reference to symbol vorbis_encode_setup_vbr'"
echo ""
read -rp "Proceed with rebuild? [Y/n] " response
case "$response" in
[nN][oO] | [nN])
log_info "Aborted."
alternative_fix_info
exit 0
;;
*)
build_stepmania
;;
esac
}
main "$@"