#!/usr/bin/env bash
set -euo pipefail
echo "==> Checking system dependencies for a2a_cpp..."
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
OS_VERSION=$VERSION_ID
else
echo "Error: Cannot detect OS type"
exit 1
fi
if [ "$EUID" -ne 0 ]; then
echo "Warning: Not running as root. You may need sudo privileges to install packages."
SUDO="sudo"
else
SUDO=""
fi
command_exists() {
command -v "$1" >/dev/null 2>&1
}
check_deb_package() {
dpkg -l "$1" 2>/dev/null | grep -q "^ii"
}
check_yum_package() {
yum list installed "$1" >/dev/null 2>&1
}
install_dependencies() {
local need_curl=0
local need_openssl=0
case "$OS" in
ubuntu|debian)
if check_deb_package libcurl4 || check_deb_package libcurl3; then
echo " - libcurl: OK"
else
echo " - libcurl: NOT FOUND"
need_curl=1
fi
if check_deb_package libcurl4-openssl-dev; then
echo " - libcurl-devel: OK"
else
echo " - libcurl-devel: NOT FOUND"
need_curl=1
fi
if check_deb_package libssl-dev; then
echo " - openssl-devel: OK"
else
echo " - openssl-devel: NOT FOUND"
need_openssl=1
fi
;;
centos|rhel|fedora|euleros)
if check_yum_package libcurl; then
echo " - libcurl: OK"
else
echo " - libcurl: NOT FOUND"
need_curl=1
fi
if check_yum_package libcurl-devel; then
echo " - libcurl-devel: OK"
else
echo " - libcurl-devel: NOT FOUND"
need_curl=1
fi
if check_yum_package openssl-libs; then
echo " - openssl-libs: OK"
else
echo " - openssl-libs: NOT FOUND"
need_openssl=1
fi
if check_yum_package openssl-devel; then
echo " - openssl-devel: OK"
else
echo " - openssl-devel: NOT FOUND"
need_openssl=1
fi
;;
arch|manjaro)
if pacman -Q curl >/dev/null 2>&1; then
echo " - curl (lib+devel): OK"
else
echo " - curl (lib+devel): NOT FOUND"
need_curl=1
fi
if pacman -Q openssl >/dev/null 2>&1; then
echo " - openssl (lib+devel): OK"
else
echo " - openssl (lib+devel): NOT FOUND"
need_openssl=1
fi
;;
*)
if command_exists curl-config; then
echo " - libcurl: OK"
else
echo " - libcurl: NOT FOUND"
need_curl=1
fi
if [ -f /usr/include/openssl/ssl.h ] || [ -f /usr/local/include/openssl/ssl.h ]; then
echo " - openssl: OK"
else
echo " - openssl: NOT FOUND"
need_openssl=1
fi
;;
esac
if [ $need_curl -eq 0 ] && [ $need_openssl -eq 0 ]; then
echo "==> All dependencies are already installed!"
return 0
fi
echo ""
echo "==> Installing missing dependencies..."
case "$OS" in
ubuntu|debian)
echo "Detected Debian/Ubuntu system"
$SUDO apt-get update -qq
if [ $need_curl -eq 1 ]; then
echo "Installing libcurl and libcurl4-openssl-dev..."
$SUDO apt-get install -y libcurl4-openssl-dev
fi
if [ $need_openssl -eq 1 ]; then
echo "Installing libssl-dev (openssl-devel)..."
$SUDO apt-get install -y libssl-dev
fi
;;
centos|rhel|fedora|euleros)
echo "Detected RHEL/CentOS/Fedora/EulerOS system"
if [ $need_curl -eq 1 ]; then
echo "Installing libcurl and libcurl-devel..."
$SUDO yum install -y libcurl libcurl-devel
fi
if [ $need_openssl -eq 1 ]; then
echo "Installing openssl-libs and openssl-devel..."
$SUDO yum install -y openssl-libs openssl-devel
fi
;;
arch|manjaro)
echo "Detected Arch Linux system"
if [ $need_curl -eq 1 ]; then
echo "Installing curl (includes libcurl)..."
$SUDO pacman -S --noconfirm curl
fi
if [ $need_openssl -eq 1 ]; then
echo "Installing openssl (includes lib and devel)..."
$SUDO pacman -S --noconfirm openssl
fi
;;
*)
echo "Error: Unsupported OS: $OS"
echo "Please install libcurl-devel and openssl manually"
exit 1
;;
esac
echo ""
echo "==> Dependency installation complete!"
}
check_dependencies() {
echo ""
echo "==> Verifying installation..."
if command_exists curl-config && command_exists openssl; then
echo "✓ All dependencies verified successfully!"
return 0
else
echo "✗ Some dependencies are still missing. Please check the errors above."
exit 1
fi
}