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" update
 37  $maysudo "$apt" install -y "${deps[@]}"
 38  exit 0
 39fi
 40
 41# Fedora, CentOS, RHEL, etc.
 42# https://packages.fedoraproject.org/
 43dnf=$(command -v dnf || true)
 44if [[ -n $dnf ]]; then
 45  deps=(
 46    gcc
 47    g++
 48    clang
 49    cmake
 50    mold
 51    alsa-lib-devel
 52    fontconfig-devel
 53    wayland-devel
 54    libxkbcommon-x11-devel
 55    openssl-devel
 56    libzstd-devel
 57    # Perl dependencies are needed for openssl-sys crate see https://docs.rs/openssl/latest/openssl/
 58    perl-FindBin
 59    perl-IPC-Cmd
 60    perl-File-Compare
 61    perl-File-Copy
 62    vulkan-loader
 63    sqlite-devel
 64  )
 65
 66  # libxkbcommon-x11-devel is in the crb repo on RHEL and CentOS, not needed for Fedora
 67  if ! grep -q "Fedora" /etc/redhat-release; then
 68    $maysudo "$dnf" config-manager --set-enabled crb
 69  fi
 70
 71  $maysudo "$dnf" install -y "${deps[@]}"
 72  exit 0
 73fi
 74
 75# openSUSE
 76# https://software.opensuse.org/
 77zyp=$(command -v zypper || true)
 78if [[ -n $zyp ]]; then
 79  deps=(
 80    gcc
 81    gcc-c++
 82    clang
 83    make
 84    cmake
 85    alsa-devel
 86    fontconfig-devel
 87    wayland-devel
 88    libxkbcommon-x11-devel
 89    openssl-devel
 90    libzstd-devel
 91    libvulkan1
 92    mold
 93    sqlite3-devel
 94  )
 95  $maysudo "$zyp" install -y "${deps[@]}"
 96  exit 0
 97fi
 98
 99# Arch, Manjaro, etc.
100# https://archlinux.org/packages
101pacman=$(command -v pacman || true)
102if [[ -n $pacman ]]; then
103  deps=(
104    gcc
105    clang
106    cmake
107    alsa-lib
108    fontconfig
109    wayland
110    libgit2
111    libxkbcommon-x11
112    openssl
113    zstd
114    pkgconf
115    mold
116    sqlite
117    jq
118  )
119  $maysudo "$pacman" -S --needed --noconfirm "${deps[@]}"
120  exit 0
121fi
122
123# Void
124# https://voidlinux.org/packages/
125xbps=$(command -v xbps-install || true)
126if [[ -n $xbps ]]; then
127  deps=(
128    gettext-devel
129    clang
130    cmake
131    jq
132    elfutils-devel
133    gcc
134    alsa-lib-devel
135    fontconfig-devel
136    libxcb-devel
137    libxkbcommon-devel
138    libzstd-devel
139    openssl-devel
140    wayland-devel
141    vulkan-loader
142    mold
143    sqlite-devel
144  )
145  $maysudo "$xbps" -Syu "${deps[@]}"
146  exit 0
147fi
148
149# Gentoo
150# https://packages.gentoo.org/
151emerge=$(command -v emerge || true)
152if [[ -n $emerge ]]; then
153  deps=(
154    app-arch/zstd
155    dev-libs/openssl
156    dev-libs/wayland
157    dev-util/cmake
158    media-libs/alsa-lib
159    media-libs/fontconfig
160    media-libs/vulkan-loader
161    x11-libs/libxcb
162    x11-libs/libxkbcommon
163    sys-devel/mold
164    dev-db/sqlite
165  )
166  $maysudo "$emerge" -u "${deps[@]}"
167  exit 0
168fi
169
170echo "Unsupported Linux distribution in script/linux"