mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-07-04 20:23:11 +02:00
git-subtree-dir: linux_configuration git-subtree-mainline:11427631cdgit-subtree-split:0762e3d07b
144 lines
3.5 KiB
Bash
Executable File
144 lines
3.5 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 "$@"
|