#!/bin/bash
# Generated by tools/gen_builddeps_script.py from rpm/picodata.spec and debian/control.
# Do not edit manually, regenerate instead.
# USE_DYNAMIC_BUILD=0
#
# Usage: $0 [--list | <os>]
#   without arguments the OS is detected via /etc/os-release

# Functions are called in if-conditions on purpose, their failures are handled there.
# shellcheck disable=SC2310

set -euo pipefail

SUPPORTED="altlinux-p9 altlinux-p10 altlinux-p11 astralinux-1.7 astralinux-1.8 rosa-chrome ubuntu-jammy ubuntu-noble ubuntu-resolute centos-8 centos-9 debian-bookworm debian-trixie redos-7.3 redos-8.0 fedora-43 fedora-44 onyx-3"

SUDO=""
UID_NUM="$(id -u)"
[[ "${UID_NUM}" -ne 0 ]] && SUDO="sudo"

repo_enabled() {
    local repos
    repos="$("${PM}" repolist --enabled 2>/dev/null)" || return 1
    grep -qi "^${1}" <<< "${repos}"
}

detect_os() {
    [[ -r /etc/os-release ]] || return 1
    # shellcheck disable=SC1091
    . /etc/os-release
    case "${ID:-}|${VERSION_ID:-}|${VERSION_CODENAME:-}" in
        altlinux\|p9\|*|altlinux\|9\|*|altlinux\|9.*\|*) echo altlinux-p9 ;;
        altlinux\|p10\|*|altlinux\|10\|*|altlinux\|10.*\|*) echo altlinux-p10 ;;
        altlinux\|p11\|*|altlinux\|11\|*|altlinux\|11.*\|*) echo altlinux-p11 ;;
        astra\|1.7*\|*) echo astralinux-1.7 ;;
        astra\|1.8*\|*) echo astralinux-1.8 ;;
        rosa\|*\|*) echo rosa-chrome ;;
        ubuntu\|*\|jammy) echo ubuntu-jammy ;;
        ubuntu\|*\|noble) echo ubuntu-noble ;;
        ubuntu\|*\|resolute) echo ubuntu-resolute ;;
        centos\|8\|*|centos\|8.*\|*) echo centos-8 ;;
        centos\|9\|*|centos\|9.*\|*) echo centos-9 ;;
        debian\|*\|bookworm) echo debian-bookworm ;;
        debian\|*\|trixie) echo debian-trixie ;;
        redos\|7.3*\|*) echo redos-7.3 ;;
        redos\|8*\|*) echo redos-8.0 ;;
        fedora\|43\|*) echo fedora-43 ;;
        fedora\|44\|*) echo fedora-44 ;;
        osnova\|3*\|*|onyx\|3*\|*|*\|*\|onyx3) echo onyx-3 ;;
        *) return 1 ;;
    esac
}

case "${1:-}" in
    -h|--help)
        echo "Usage: $0 [--list | <os>]"
        echo "Supported: ${SUPPORTED}"
        exit 0 ;;
    --list)
        tr " " "\n" <<< "${SUPPORTED}"
        exit 0 ;;
    '')
        if ! TARGET="$(detect_os)"; then
            echo "Cannot detect OS, pass it as an argument. Supported: ${SUPPORTED}" >&2
            exit 1
        fi ;;
    *)
        TARGET="$1" ;;
esac

echo "Installing build dependencies for ${TARGET}"

case "${TARGET}" in
    altlinux-p9)
        ${SUDO} apt-get update
        ${SUDO} apt-get install -y gcc gcc-c++ make git curl ca-certificates cmake autoconf automake libtool patch llvm-common-clang-devel libstdc++-devel-static readline-devel openssl-devel libcurl-devel libicu-devel libyaml-devel libzstd-devel
        ;;
    altlinux-p10)
        ${SUDO} apt-get update
        ${SUDO} apt-get install -y gcc gcc-c++ make git curl ca-certificates cmake autoconf automake libtool patch llvm-common-clang-devel libstdc++-devel-static readline-devel openssl-devel libcurl-devel libicu-devel libyaml-devel libzstd-devel
        ;;
    altlinux-p11)
        ${SUDO} apt-get update
        ${SUDO} apt-get install -y gcc gcc-c++ make git curl ca-certificates cmake autoconf automake libtool patch llvm-common-clang-devel libstdc++-devel-static readline-devel openssl-devel libcurl-devel libicu-devel libyaml-devel libzstd-devel
        ;;
    astralinux-1.7)
        export DEBIAN_FRONTEND=noninteractive
        ${SUDO} apt-get update
        ${SUDO} apt-get install -y --no-install-recommends build-essential git curl ca-certificates pkg-config libssl-dev libclang-dev cmake autoconf automake libtool patch
        ;;
    astralinux-1.8)
        export DEBIAN_FRONTEND=noninteractive
        ${SUDO} apt-get update
        ${SUDO} apt-get install -y --no-install-recommends build-essential git curl ca-certificates pkg-config libssl-dev libclang-dev cmake autoconf automake libtool patch
        ;;
    rosa-chrome)
        PM="$(command -v dnf || command -v yum)"
        ${SUDO} "${PM}" install -y gcc gcc-c++ make git /usr/bin/curl ca-certificates cmake autoconf automake libtool patch lib64clang-devel lib64luajit-5.1-devel lib64zstd-devel lib64z-devel lib64yaml-devel lib64curl-devel lib64icu-devel lib64openssl-devel lib64readline-devel lib64stdc++-static-devel lib64gomp-static-devel lib64crypt-devel
        ;;
    ubuntu-jammy)
        export DEBIAN_FRONTEND=noninteractive
        ${SUDO} apt-get update
        ${SUDO} apt-get install -y --no-install-recommends build-essential git curl ca-certificates pkg-config libssl-dev libclang-dev cmake autoconf automake libtool patch
        ;;
    ubuntu-noble)
        export DEBIAN_FRONTEND=noninteractive
        ${SUDO} apt-get update
        ${SUDO} apt-get install -y --no-install-recommends build-essential git curl ca-certificates pkg-config libssl-dev libclang-dev cmake autoconf automake libtool patch
        ;;
    ubuntu-resolute)
        export DEBIAN_FRONTEND=noninteractive
        ${SUDO} apt-get update
        ${SUDO} apt-get install -y --no-install-recommends build-essential git curl ca-certificates pkg-config libssl-dev libclang-dev cmake autoconf automake libtool patch
        ;;
    centos-8)
        PM="$(command -v dnf || command -v yum)"
        if ! repo_enabled powertools; then
            ${SUDO} "${PM}" install -y dnf-plugins-core
            ${SUDO} "${PM}" config-manager --set-enabled powertools
        fi
        ${SUDO} "${PM}" install -y gcc gcc-c++ make git /usr/bin/curl ca-certificates cmake autoconf automake libtool patch clang-devel libstdc++-static readline-devel openssl-devel libcurl-devel libicu-devel libyaml-devel libzstd-devel
        ;;
    centos-9)
        PM="$(command -v dnf || command -v yum)"
        if ! repo_enabled crb; then
            ${SUDO} "${PM}" install -y dnf-plugins-core
            ${SUDO} "${PM}" config-manager --set-enabled crb
        fi
        ${SUDO} "${PM}" install -y gcc gcc-c++ make git /usr/bin/curl ca-certificates cmake autoconf automake libtool patch clang-devel libstdc++-static readline-devel openssl-devel libcurl-devel libicu-devel libyaml-devel libzstd-devel
        ;;
    debian-bookworm)
        export DEBIAN_FRONTEND=noninteractive
        ${SUDO} apt-get update
        ${SUDO} apt-get install -y --no-install-recommends build-essential git curl ca-certificates pkg-config libssl-dev libclang-dev cmake autoconf automake libtool patch
        ;;
    debian-trixie)
        export DEBIAN_FRONTEND=noninteractive
        ${SUDO} apt-get update
        ${SUDO} apt-get install -y --no-install-recommends build-essential git curl ca-certificates pkg-config libssl-dev libclang-dev cmake autoconf automake libtool patch
        ;;
    redos-7.3)
        PM="$(command -v dnf || command -v yum)"
        ${SUDO} "${PM}" install -y gcc gcc-c++ make git /usr/bin/curl ca-certificates cmake autoconf automake libtool patch cmake3 clang-devel libstdc++-static readline-devel openssl-devel libcurl-devel libicu-devel libyaml-devel libzstd-devel
        ;;
    redos-8.0)
        PM="$(command -v dnf || command -v yum)"
        ${SUDO} "${PM}" install -y gcc gcc-c++ make git /usr/bin/curl ca-certificates cmake autoconf automake libtool patch clang-devel libstdc++-static readline-devel openssl-devel libcurl-devel libicu-devel libyaml-devel libzstd-devel
        ;;
    fedora-43)
        PM="$(command -v dnf || command -v yum)"
        ${SUDO} "${PM}" install -y gcc gcc-c++ make git /usr/bin/curl ca-certificates cmake autoconf automake libtool patch clang-devel libstdc++-static readline-devel openssl-devel libcurl-devel libicu-devel libyaml-devel libzstd-devel perl-FindBin
        ;;
    fedora-44)
        PM="$(command -v dnf || command -v yum)"
        ${SUDO} "${PM}" install -y gcc gcc-c++ make git /usr/bin/curl ca-certificates cmake autoconf automake libtool patch clang-devel libstdc++-static readline-devel openssl-devel libcurl-devel libicu-devel libyaml-devel libzstd-devel perl-FindBin
        ;;
    onyx-3)
        export DEBIAN_FRONTEND=noninteractive
        ${SUDO} apt-get update
        ${SUDO} apt-get install -y --no-install-recommends build-essential git curl ca-certificates pkg-config libssl-dev libclang-dev cmake autoconf automake libtool patch
        ;;
    *)
        echo "Unsupported OS: ${TARGET}. Supported: ${SUPPORTED}" >&2
        exit 1 ;;
esac
