linux

  1#!/usr/bin/env bash
  2
  3set -ex
  4
  5# install the wasm toolchain
  6which rustup > /dev/null 2>&1 || curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
  7
  8# if sudo is not installed, define an empty alias
  9maysudo=$(command -v sudo || command -v doas || true)
 10
 11# Ubuntu, Debian, etc.
 12# https://packages.ubuntu.com/
 13apt=$(command -v apt-get || true)
 14if [[ -n $apt ]]; then
 15  deps=(
 16    gcc
 17    g++
 18    libasound2-dev
 19    libfontconfig-dev
 20    libwayland-dev
 21    libxkbcommon-x11-dev
 22    libssl-dev
 23    libstdc++-12-dev
 24    libzstd-dev
 25    libvulkan1
 26    libgit2-dev
 27    make
 28    cmake
 29    clang
 30    mold
 31    jq
 32    gettext-base
 33    elfutils
 34    libsqlite3-dev
 35  )
 36  $maysudo "$apt" install -y "${deps[@]}"
 37  exit 0
 38fi
 39
 40# Fedora, CentOS, RHEL, etc.
 41# https://packages.fedoraproject.org/
 42dnf=$(command -v dnf || true)
 43if [[ -n $dnf ]]; then
 44  deps=(
 45    gcc
 46    g++
 47    clang
 48    cmake
 49    mold
 50    alsa-lib-devel
 51    fontconfig-devel
 52    wayland-devel
 53    libxkbcommon-x11-devel
 54    openssl-devel
 55    libzstd-devel
 56    # Perl dependencies are needed for openssl-sys crate see https://docs.rs/openssl/latest/openssl/
 57    perl-FindBin
 58    perl-IPC-Cmd
 59    perl-File-Compare
 60    perl-File-Copy
 61    vulkan-loader
 62    sqlite-devel
 63  )
 64
 65  # libxkbcommon-x11-devel is in the crb repo on RHEL and CentOS, not needed for Fedora
 66  if ! grep -q "Fedora" /etc/redhat-release; then
 67    $maysudo "$dnf" config-manager --set-enabled crb
 68  fi
 69
 70  $maysudo "$dnf" install -y "${deps[@]}"
 71  exit 0
 72fi
 73
 74# openSUSE
 75# https://software.opensuse.org/
 76zyp=$(command -v zypper || true)
 77if [[ -n $zyp ]]; then
 78  deps=(
 79    gcc
 80    gcc-c++
 81    clang
 82    make
 83    cmake
 84    alsa-devel
 85    fontconfig-devel
 86    wayland-devel
 87    libxkbcommon-x11-devel
 88    openssl-devel
 89    libzstd-devel
 90    libvulkan1
 91    mold
 92    sqlite3-devel
 93  )
 94  $maysudo "$zyp" install -y "${deps[@]}"
 95  exit 0
 96fi
 97
 98# Arch, Manjaro, etc.
 99# https://archlinux.org/packages
100pacman=$(command -v pacman || true)
101if [[ -n $pacman ]]; then
102  deps=(
103    gcc
104    clang
105    cmake
106    alsa-lib
107    fontconfig
108    wayland
109    libgit2
110    libxkbcommon-x11
111    openssl
112    zstd
113    pkgconf
114    mold
115    sqlite
116    jq
117  )
118  $maysudo "$pacman" -S --needed --noconfirm "${deps[@]}"
119  exit 0
120fi
121
122# Void
123# https://voidlinux.org/packages/
124xbps=$(command -v xbps-install || true)
125if [[ -n $xbps ]]; then
126  deps=(
127    gettext-devel
128    clang
129    cmake
130    jq
131    elfutils-devel
132    gcc
133    alsa-lib-devel
134    fontconfig-devel
135    libxcb-devel
136    libxkbcommon-devel
137    libzstd-devel
138    openssl-devel
139    wayland-devel
140    vulkan-loader
141    mold
142    sqlite-devel
143  )
144  $maysudo "$xbps" -Syu "${deps[@]}"
145  exit 0
146fi
147
148# Gentoo
149# https://packages.gentoo.org/
150emerge=$(command -v emerge || true)
151if [[ -n $emerge ]]; then
152  deps=(
153    app-arch/zstd
154    dev-libs/openssl
155    dev-libs/wayland
156    dev-util/cmake
157    media-libs/alsa-lib
158    media-libs/fontconfig
159    media-libs/vulkan-loader
160    x11-libs/libxcb
161    x11-libs/libxkbcommon
162    sys-devel/mold
163    dev-db/sqlite
164  )
165  $maysudo "$emerge" -u "${deps[@]}"
166  exit 0
167fi
168
169echo "Unsupported Linux distribution in script/linux"