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