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 )
113 $maysudo "$pacman" -S --needed --noconfirm "${deps[@]}"
114 exit 0
115fi
116
117# Void
118# https://voidlinux.org/packages/
119xbps=$(command -v xbps-install || true)
120if [[ -n $xbps ]]; then
121 deps=(
122 alsa-lib-devel
123 fontconfig-devel
124 libxcb-devel
125 libxkbcommon-devel
126 libzstd-devel
127 openssl-devel
128 wayland-devel
129 vulkan-loader
130 mold
131 sqlite-devel
132 )
133 $maysudo "$xbps" -Syu "${deps[@]}"
134 exit 0
135fi
136
137# Gentoo
138# https://packages.gentoo.org/
139emerge=$(command -v emerge || true)
140if [[ -n $emerge ]]; then
141 deps=(
142 app-arch/zstd
143 dev-libs/openssl
144 dev-libs/wayland
145 media-libs/alsa-lib
146 media-libs/fontconfig
147 media-libs/vulkan-loader
148 x11-libs/libxcb
149 x11-libs/libxkbcommon
150 sys-devel/mold
151 dev-db/sqlite
152 )
153 $maysudo "$emerge" -u "${deps[@]}"
154 exit 0
155fi
156
157echo "Unsupported Linux distribution in script/linux"