* chore(release): prepare v0.10.0-beta Bump versions and release references across app, docs, installer, and website for the next beta release. Add v0.10.0-beta release notes entries covering reliability fixes and CI/test improvements since v0.9.0-beta. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai> * docs(release): align Python baseline references to 3.9+ Synchronize stale Python 3.8 references in agent guidance and distro dependency docs/scripts with the current 3.9+ minimum used by project metadata and release docs. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai> --------- Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
166 lines
6.8 KiB
Bash
Executable File
166 lines
6.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Check for system dependencies regardless of distro
|
|
# Returns helpful error messages with install commands
|
|
|
|
check_deps() {
|
|
MISSING=0
|
|
WARNINGS=0
|
|
|
|
echo "Checking Vocalinux system dependencies..."
|
|
echo ""
|
|
|
|
# Check for Python 3.9+
|
|
if command -v python3 >/dev/null 2>&1; then
|
|
PY_VERSION=$(python3 -c "import sys; print('.'.join(map(str, sys.version_info[:2])))")
|
|
echo "✓ Python $PY_VERSION"
|
|
|
|
if [ "$(echo "$PY_VERSION" | cut -d. -f1)" -lt 3 ] || \
|
|
[ "$(echo "$PY_VERSION" | cut -d. -f2)" -lt 9 ]; then
|
|
echo " ✗ Python 3.9+ required, found $PY_VERSION"
|
|
MISSING=1
|
|
fi
|
|
else
|
|
echo "✗ Python 3 not found"
|
|
MISSING=1
|
|
fi
|
|
|
|
# Check for pip
|
|
if command -v pip3 >/dev/null 2>&1; then
|
|
echo "✓ pip3"
|
|
else
|
|
echo "✗ pip3 not found"
|
|
MISSING=1
|
|
fi
|
|
|
|
# Check for pkg-config
|
|
if command -v pkg-config >/dev/null 2>&1; then
|
|
echo "✓ pkg-config"
|
|
else
|
|
echo "✗ pkg-config not found"
|
|
MISSING=1
|
|
fi
|
|
|
|
# Check for GTK3
|
|
if command -v pkg-config >/dev/null 2>&1 && pkg-config --exists gtk+-3.0 2>/dev/null; then
|
|
GTK_VERSION=$(pkg-config --modversion gtk+-3.0 2>/dev/null)
|
|
echo "✓ GTK3 $GTK_VERSION"
|
|
else
|
|
echo "✗ GTK3 development files not found"
|
|
MISSING=1
|
|
fi
|
|
|
|
# Check for PyGObject
|
|
if command -v pkg-config >/dev/null 2>&1 && pkg-config --exists gobject-introspection-1.0 2>/dev/null; then
|
|
echo "✓ GObject Introspection"
|
|
GI_TYPELIB_PATH=$(pkg-config --variable=typelibdir gobject-introspection-1.0 2>/dev/null)
|
|
echo " Typelib path: $GI_TYPELIB_PATH"
|
|
else
|
|
echo "✗ GObject Introspection not found"
|
|
MISSING=1
|
|
fi
|
|
|
|
# Check for PortAudio
|
|
if command -v pkg-config >/dev/null 2>&1 && pkg-config --exists portaudio-2.0 2>/dev/null; then
|
|
PA_VERSION=$(pkg-config --modversion portaudio-2.0 2>/dev/null)
|
|
echo "✓ PortAudio $PA_VERSION"
|
|
else
|
|
echo "⚠ PortAudio development files not found (required for audio)"
|
|
MISSING=1
|
|
fi
|
|
|
|
# Check for text injection tools
|
|
echo ""
|
|
echo "Text injection tools (at least one required):"
|
|
|
|
if command -v xdotool >/dev/null 2>&1; then
|
|
echo "✓ xdotool (X11)"
|
|
else
|
|
echo " xdotool not found (X11)"
|
|
fi
|
|
|
|
if command -v wtype >/dev/null 2>&1; then
|
|
echo "✓ wtype (Wayland)"
|
|
else
|
|
echo " wtype not found (Wayland)"
|
|
fi
|
|
|
|
if command -v ydotool >/dev/null 2>&1; then
|
|
echo "✓ ydotool (Wayland universal)"
|
|
else
|
|
echo " ydotool not found (Wayland)"
|
|
fi
|
|
|
|
# Detect distribution for install hints
|
|
echo ""
|
|
DETECTED_DISTRO="unknown"
|
|
if [ -f /etc/os-release ]; then
|
|
. /etc/os-release
|
|
DETECTED_DISTRO="$ID"
|
|
DETECTED_DISTRO_LIKE="$ID_LIKE"
|
|
fi
|
|
|
|
# Summary
|
|
echo ""
|
|
echo "===================================="
|
|
if [ $MISSING -eq 0 ]; then
|
|
echo "✓ All critical dependencies found!"
|
|
return 0
|
|
else
|
|
echo "✗ Some dependencies are missing"
|
|
echo ""
|
|
echo "Install based on your distribution:"
|
|
echo ""
|
|
|
|
# Determine distro family for install hints
|
|
if [[ "$DETECTED_DISTRO" == "ubuntu" || "$DETECTED_DISTRO_LIKE" == *"ubuntu"* || "$DETECTED_DISTRO" == "pop" || "$DETECTED_DISTRO" == "linuxmint" || "$DETECTED_DISTRO" == "elementary" || "$DETECTED_DISTRO" == "zorin" ]]; then
|
|
echo "Ubuntu/Debian-based:"
|
|
echo " sudo apt update"
|
|
echo " sudo apt install -y python3-gi gir1.2-gtk-3.0 gir1.2-gdkpixbuf-2.0 portaudio19-dev python3-dev python3-venv pkg-config xdotool wtype"
|
|
elif [[ "$DETECTED_DISTRO" == "fedora" || "$DETECTED_DISTRO_LIKE" == *"fedora"* || "$DETECTED_DISTRO" == "rhel" || "$DETECTED_DISTRO" == "centos" || "$DETECTED_DISTRO" == "rocky" || "$DETECTED_DISTRO" == "almalinux" ]]; then
|
|
echo "Fedora/RHEL-based:"
|
|
echo " sudo dnf install -y python3-gobject gtk3-devel gobject-introspection-devel portaudio-devel python3-devel python3-virtualenv pkg-config xdotool wtype"
|
|
elif [[ "$DETECTED_DISTRO" == "arch" || "$DETECTED_DISTRO_LIKE" == *"arch"* || "$DETECTED_DISTRO" == "manjaro" || "$DETECTED_DISTRO" == "endeavouros" ]]; then
|
|
echo "Arch Linux-based:"
|
|
echo " sudo pacman -S --needed python-gobject gtk3 gobject-introspection portaudio python pkg-config xdotool wtype"
|
|
elif [[ "$DETECTED_DISTRO" == "opensuse" || "$DETECTED_DISTRO_LIKE" == *"suse"* ]]; then
|
|
echo "openSUSE:"
|
|
echo " sudo zypper install -y python3-gobject python3-gobject-cairo gtk3 gobject-introspection-devel portaudio-devel python3-devel python3-virtualenv pkg-config xdotool wtype"
|
|
elif [[ "$DETECTED_DISTRO" == "gentoo" ]]; then
|
|
echo "Gentoo:"
|
|
echo " sudo emerge dev-python/pygobject:3 x11-libs/gtk+:3 dev-libs/libappindicator:3 media-libs/portaudio dev-lang/python:3.9 xdotool wtype"
|
|
elif [[ "$DETECTED_DISTRO" == "alpine" ]]; then
|
|
echo "Alpine Linux:"
|
|
echo " sudo apk add py3-gobject3 py3-pip gtk+3.0 py3-cairo portaudio-dev py3-virtualenv pkgconf xdotool wtype"
|
|
elif [[ "$DETECTED_DISTRO" == "void" ]]; then
|
|
echo "Void Linux:"
|
|
echo " sudo xbps-install -Sy python3-pip python3-gobject gtk+3 libappindicator gobject-introspection portaudio-devel python3-devel pkg-config xdotool wtype"
|
|
elif [[ "$DETECTED_DISTRO" == "solus" ]]; then
|
|
echo "Solus:"
|
|
echo " sudo eopkg install python3-pip python3-gobject gtk3 libappindicator gobject-introspection-devel portaudio-devel python3-virtualenv pkg-config xdotool wtype"
|
|
elif [[ "$DETECTED_DISTRO" == "mageia" ]]; then
|
|
echo "Mageia:"
|
|
if command -v dnf >/dev/null 2>&1; then
|
|
echo " sudo dnf install -y python3-gobject gtk3-devel gobject-introspection-devel portaudio-devel python3-devel python3-virtualenv pkg-config xdotool wtype"
|
|
else
|
|
echo " sudo urpmi -y python3-gobject gtk3-devel gobject-introspection-devel portaudio-devel python3-devel python3-virtualenv pkg-config xdotool wtype"
|
|
fi
|
|
else
|
|
echo "Ubuntu/Debian-based:"
|
|
echo " sudo apt install -y python3-gi gir1.2-gtk-3.0 portaudio19-dev python3-dev pkg-config xdotool wtype"
|
|
echo ""
|
|
echo "Fedora/RHEL-based:"
|
|
echo " sudo dnf install -y python3-gobject gtk3-devel portaudio-devel python3-devel pkg-config xdotool wtype"
|
|
echo ""
|
|
echo "Arch Linux:"
|
|
echo " sudo pacman -S python-gobject gtk3 portaudio python pkg-config xdotool wtype"
|
|
fi
|
|
|
|
echo ""
|
|
echo "After installing system dependencies, run the installer again:"
|
|
echo " ./install.sh"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_deps
|