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"