Files

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

246 lines
5.6 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
2024-09-30 17:46:21 -04:00
set -xeuo pipefail
2024-09-30 17:46:21 -04:00
# if root or if sudo/unavailable, define an empty variable
if [ "$(id -u)" -eq 0 ]
then maysudo=''
else maysudo="$(command -v sudo || command -v doas || true)"
fi
2024-09-30 17:46:21 -04:00
function finalize {
# after packages install (curl, etc), get the rust toolchain
which rustup > /dev/null 2>&1 || curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
# verify the mold situation
if ! command -v mold >/dev/null 2>&1; then
echo "Warning: Mold binaries are unavailable on your system." >&2
echo " Builds will be slower without mold. Try: script/install-mold" >&2
2024-09-30 17:46:21 -04:00
fi
echo "Finished installing Linux dependencies with script/linux"
}
2024-09-30 17:46:21 -04:00
# Ubuntu, Debian, Mint, Kali, Pop!_OS, Raspbian, etc.
apt=$(command -v apt-get || true)
if [[ -n $apt ]]; then
deps=(
2024-04-30 16:01:07 -06:00
gcc
g++
libasound2-dev
libfontconfig-dev
2024-02-15 01:50:11 +03:00
libwayland-dev
2024-02-15 11:58:47 -08:00
libxkbcommon-x11-dev
2024-02-29 05:06:11 +06:00
libssl-dev
2024-03-04 01:06:36 +05:45
libzstd-dev
libvulkan1
2024-04-22 21:05:12 +02:00
libgit2-dev
make
cmake
2024-06-12 15:16:05 -06:00
clang
2024-06-13 20:06:18 +05:30
jq
2024-12-03 20:27:12 +00:00
netcat-openbsd
2024-09-30 17:46:21 -04:00
git
curl
2024-06-13 20:06:18 +05:30
gettext-base
2024-06-13 22:05:58 -04:00
elfutils
2024-06-21 17:32:32 -06:00
libsqlite3-dev
2024-10-22 16:00:00 -06:00
musl-tools
musl-dev
build-essential
)
if (grep -qP 'PRETTY_NAME="(Linux Mint 22|.+24\.(04|10))' /etc/os-release); then
2024-09-30 17:46:21 -04:00
deps+=( mold libstdc++-14-dev )
2024-10-11 16:29:35 -04:00
elif (grep -qP 'PRETTY_NAME="((Debian|Raspbian).+12|Linux Mint 21|.+22\.04)' /etc/os-release); then
2024-09-30 17:46:21 -04:00
deps+=( mold libstdc++-12-dev )
2024-10-11 16:29:35 -04:00
elif (grep -qP 'PRETTY_NAME="((Debian|Raspbian).+11|Linux Mint 20|.+20\.04)' /etc/os-release); then
2024-09-30 17:46:21 -04:00
deps+=( libstdc++-10-dev )
fi
2024-09-18 14:28:00 -04:00
$maysudo "$apt" update
$maysudo "$apt" install -y "${deps[@]}"
2024-09-30 17:46:21 -04:00
finalize
exit 0
fi
2024-09-30 17:46:21 -04:00
# Fedora, CentOS, RHEL, Alma, Amazon 2023, Oracle, etc.
dnf=$(command -v dnf || true)
2024-09-30 17:46:21 -04:00
# Old Redhat (yum only): Amazon Linux 2, Oracle Linux 7, etc.
yum=$(command -v yum || true)
if [[ -n $dnf ]] || [[ -n $yum ]]; then
pkg_cmd="${dnf:-${yum}}"
deps=(
2024-11-30 22:20:31 +01:00
musl-gcc
gcc
2024-06-12 15:16:05 -06:00
clang
cmake
alsa-lib-devel
fontconfig-devel
2024-02-15 01:50:11 +03:00
wayland-devel
2024-02-15 11:58:47 -08:00
libxkbcommon-x11-devel
openssl-devel
2024-03-04 01:06:36 +05:45
libzstd-devel
vulkan-loader
2024-06-21 17:32:32 -06:00
sqlite-devel
2024-09-30 17:46:21 -04:00
jq
git
tar
)
2024-09-30 17:46:21 -04:00
# perl used for building openssl-sys crate. See: https://docs.rs/openssl/latest/openssl/
2024-12-03 20:27:12 +00:00
# openbsd-netcat is unavailable in RHEL8/9 (and nmap-ncat doesn't support sockets)
if grep -qP '^ID="?(fedora)' /etc/os-release; then
2024-09-30 17:46:21 -04:00
deps+=(
perl-FindBin
perl-IPC-Cmd
perl-File-Compare
perl-File-Copy
2024-12-03 20:27:12 +00:00
netcat
2024-09-30 17:46:21 -04:00
mold
)
elif grep -qP '^ID="?(rhel|rocky|alma|centos|ol)' /etc/os-release; then
2024-09-30 17:46:21 -04:00
deps+=( perl-interpreter )
fi
2024-09-30 17:46:21 -04:00
# gcc-c++ is g++ on RHEL8 and 8.x clones
if grep -qP '^ID="?(rhel|rocky|alma|centos|ol)' /etc/os-release \
&& grep -qP '^VERSION_ID="?(8)' /etc/os-release; then
2024-09-30 17:46:21 -04:00
deps+=( gcc-c++ )
else
deps+=( g++ )
fi
# libxkbcommon-x11-devel is in a non-default repo on RHEL 8.x/9.x (except on AmazonLinux)
if grep -qP '^VERSION_ID="?(8|9)' /etc/os-release && grep -qP '^ID="?(rhel|rocky|centos|alma|ol)' /etc/os-release; then
2024-09-30 17:46:21 -04:00
$maysudo dnf install -y 'dnf-command(config-manager)'
if grep -qP '^PRETTY_NAME="(AlmaLinux 8|Rocky Linux 8)' /etc/os-release; then
$maysudo dnf config-manager --set-enabled powertools
elif grep -qP '^PRETTY_NAME="((AlmaLinux|Rocky|CentOS Stream) 9|Red Hat.+(8|9))' /etc/os-release; then
$maysudo dnf config-manager --set-enabled crb
elif grep -qP '^PRETTY_NAME="Oracle Linux Server 8' /etc/os-release; then
$maysudo dnf config-manager --set-enabled ol8_codeready_builder
elif grep -qP '^PRETTY_NAME="Oracle Linux Server 9' /etc/os-release; then
$maysudo dnf config-manager --set-enabled ol9_codeready_builder
else
echo "Unexpected distro" && grep 'PRETTY_NAME' /etc/os-release && exit 1
fi
fi
2024-12-03 20:27:12 +00:00
$maysudo "$pkg_cmd" install -y "${deps[@]}"
2024-09-30 17:46:21 -04:00
finalize
exit 0
fi
2024-05-26 18:14:09 -06:00
# openSUSE
# https://software.opensuse.org/
zyp=$(command -v zypper || true)
if [[ -n $zyp ]]; then
deps=(
alsa-devel
clang
cmake
fontconfig-devel
gcc
gcc-c++
2024-09-30 17:46:21 -04:00
git
gzip
jq
libvulkan1
libxkbcommon-devel
libxkbcommon-x11-devel
libzstd-devel
make
mold
2024-12-03 20:27:12 +00:00
netcat-openbsd
openssl-devel
sqlite3-devel
tar
wayland-devel
xcb-util-devel
)
$maysudo "$zyp" install -y "${deps[@]}"
2024-09-30 17:46:21 -04:00
finalize
exit 0
fi
# Arch, Manjaro, etc.
# https://archlinux.org/packages
pacman=$(command -v pacman || true)
if [[ -n $pacman ]]; then
deps=(
gcc
clang
2024-12-10 21:05:53 -05:00
musl
cmake
alsa-lib
fontconfig
2024-02-15 01:50:11 +03:00
wayland
libgit2
2024-02-15 11:58:47 -08:00
libxkbcommon-x11
2024-12-03 20:27:12 +00:00
openbsd-netcat
openssl
zstd
pkgconf
mold
2024-06-21 17:32:32 -06:00
sqlite
jq
2024-09-30 17:46:21 -04:00
git
)
2024-09-30 17:46:21 -04:00
$maysudo "$pacman" -Syu --needed --noconfirm "${deps[@]}"
finalize
exit 0
fi
# Void
# https://voidlinux.org/packages/
xbps=$(command -v xbps-install || true)
if [[ -n $xbps ]]; then
deps=(
gettext-devel
clang
cmake
jq
elfutils-devel
gcc
alsa-lib-devel
fontconfig-devel
libxcb-devel
libxkbcommon-devel
2024-03-04 01:06:36 +05:45
libzstd-devel
2024-12-03 20:27:12 +00:00
openbsd-netcat
openssl-devel
wayland-devel
vulkan-loader
mold
2024-06-21 17:32:32 -06:00
sqlite-devel
)
$maysudo "$xbps" -Syu "${deps[@]}"
2024-09-30 17:46:21 -04:00
finalize
exit 0
fi
# Gentoo
# https://packages.gentoo.org/
emerge=$(command -v emerge || true)
if [[ -n $emerge ]]; then
deps=(
app-arch/zstd
2024-09-30 17:46:21 -04:00
app-misc/jq
dev-libs/openssl
dev-libs/wayland
dev-util/cmake
media-libs/alsa-lib
media-libs/fontconfig
media-libs/vulkan-loader
2024-12-03 20:27:12 +00:00
net-analyzer/openbsd-netcat
x11-libs/libxcb
x11-libs/libxkbcommon
sys-devel/mold
2024-06-21 17:32:32 -06:00
dev-db/sqlite
)
$maysudo "$emerge" -u "${deps[@]}"
2024-09-30 17:46:21 -04:00
finalize
exit 0
fi
echo "Unsupported Linux distribution in script/linux"
2024-09-30 17:46:21 -04:00
exit 1