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