forked from flightlessmango/MangoHud
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuild.sh
executable file
·190 lines (172 loc) · 7.72 KB
/
build.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#!/bin/bash
OS_RELEASE_FILES=("/etc/os-release" "/usr/lib/os-release")
XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
DATA_DIR="$XDG_DATA_HOME/DiRTHud"
LAYER="build/release/usr/share/vulkan/implicit_layer.d/DiRThud.json"
INSTALL_DIR="build/package/DiRTHud"
IMPLICIT_LAYER_DIR="$XDG_DATA_HOME/vulkan/implicit_layer.d"
VERSION=$(git describe --long --tags --always | sed 's/\([^-]*-g\)/r\1/;s/-/./g;s/^v//')
# Correctly identify the os-release file.
for os_release in ${OS_RELEASE_FILES[@]} ; do
if [[ ! -e "${os_release}" ]]; then
continue
fi
DISTRO=$(sed 1q ${os_release} | sed 's/NAME=//g' | sed 's/"//g')
done
dependencies() {
if [[ ! -f build/release/usr/lib64/libDiRTHud.so ]]; then
missing_deps() {
echo "# Missing dependencies:$INSTALL"
read -rp "Do you wish the script to install these packages? [y/N]" PERMISSION
case "$PERMISSION" in
"y"|"Y") echo "Attempting to install missing packages"; sleep 0.5;;
*) echo "Continuing with missing dependencies"; sleep 1;;
esac
}
install() {
for i in $(eval echo $DEPS); do
$MANAGER_QUERY "$i" &> /dev/null
if [[ $? == 1 ]]; then
INSTALL="$INSTALL""$i "
fi
done
if [[ ! -z "$INSTALL" ]]; then
missing_deps
if [[ "$PERMISSION" == "Y" || "$PERMISSION" == "y" ]]; then
sudo $MANAGER_INSTALL $INSTALL
fi
fi
}
echo "# Checking Dependencies"
case $DISTRO in
"Arch Linux"|"Manjaro")
MANAGER_QUERY="pacman -Q"
MANAGER_INSTALL="pacman -S"
DEPS="{gcc,meson,pkgconf,python-mako,glslang,libglvnd,lib32-libglvnd}"
install
;;
"Fedora")
MANAGER_QUERY="dnf list installed"
MANAGER_INSTALL="dnf install"
DEPS="{meson,gcc,g++,libX11-devel,glslang,python-mako,mesa-libGL-devel}"
install
unset INSTALL
DEPS="{glibc-devel.i686,libstdc++-devel.i686,libX11-devel.i686}"
install
;;
*"buntu"|"Linux Mint"|"Debian"|"Zorin OS"|"Pop!_OS")
MANAGER_QUERY="dpkg-query -s"
MANAGER_INSTALL="apt install"
DEPS="{gcc,g++,gcc-multilib,g++-multilib,ninja-build,python3-pip,python3-setuptools,python3-wheel,pkg-config,mesa-common-dev,libx11-dev:i386}"
install
if [[ $(sudo pip3 show meson; echo $?) == 1 || $(sudo pip3 show mako; echo $?) == 1 ]]; then
sudo pip3 install meson mako
fi
if [[ ! -f /usr/local/bin/glslangValidator ]]; then
wget https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-linux-Release.zip
unzip glslang-master-linux-Release.zip bin/glslangValidator
sudo install -m755 bin/glslangValidator /usr/local/bin/
rm bin/glslangValidator glslang-master-linux-Release.zip
fi
;;
"Solus")
unset MANAGER_QUERY
unset DEPS
MANAGER_INSTALL="eopkg it"
local packages=("mesalib-32bit-devel" "glslang" "libstdc++-32bit" "glibc-32bit-devel" "mako")
# eopkg doesn't emit exit codes properly, so use the python API to find if a package is installed.
for package in ${packages[@]}; do
python -c "import pisi.db; import sys; idb = pisi.db.installdb.InstallDB(); sys.exit(0 if idb.has_package(\"${package}\") else 1)"
if [[ $? -ne 0 ]]; then
INSTALL="${INSTALL}""${package} "
fi
done
# likewise, ensure the whole system.devel component is satisfied
python -c "import pisi.db; import sys; idb = pisi.db.installdb.InstallDB(); cdb = pisi.db.componentdb.ComponentDB(); mpkgs = [x for x in cdb.get_packages('system.devel') if not idb.has_package(x)]; sys.exit(0 if len(mpkgs) == 0 else 1)"
if [[ $? -ne 0 ]]; then
INSTALL="${INSTALL}""-c system.devel "
fi
install
;;
*)
echo "# Unable to find distro information!"
echo "# Attempting to build regardless"
esac
fi
}
configure() {
dependencies
git submodule update --init --depth 50
if [[ ! -f "build/meson64/build.ninja" ]]; then
meson build/meson64 --libdir lib64 --prefix "$PWD/build/release/usr"
fi
if [[ ! -f "build/meson32/build.ninja" ]]; then
export CC="gcc -m32"
export CXX="g++ -m32"
export PKG_CONFIG_PATH="/usr/lib32/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/pkgconfig:${PKG_CONFIG_PATH_32}"
export LLVM_CONFIG="/usr/bin/llvm-config32"
meson build/meson32 --libdir lib32 --prefix "$PWD/build/release/usr"
fi
}
build() {
if [[ ! -f "build/meson64/build.ninja" ]]; then
configure
fi
ninja -C build/meson32 install
ninja -C build/meson64 install
}
package() {
LIB="build/release/usr/lib64/libDiRTHud.so"
LIB32="build/release/usr/lib32/libDiRTHud.so"
if [[ ! -f "$LIB" || "$LIB" -ot "build/meson64/src/libDiRTHud.so" ]]; then
build
fi
mkdir -p "$INSTALL_DIR/.local/share/"{DiRTHud,vulkan/implicit_layer.d}
mkdir -p "$INSTALL_DIR/.config/DiRTHud"
cp "$LIB32" "$INSTALL_DIR/.local/share/DiRTHud/libDiRTHud32.so"
cp "$LIB" "$INSTALL_DIR/.local/share/DiRTHud/libDiRTHud.so"
cp "$LAYER" "$INSTALL_DIR/.local/share/vulkan/implicit_layer.d/DiRThud64.json"
cp "$LAYER" "$INSTALL_DIR/.local/share/vulkan/implicit_layer.d/DiRThud32.json"
cp --preserve=mode "bin/install.sh" "build/package/DiRTHud/install.sh"
cp "bin/DiRTHud.conf" "$INSTALL_DIR/.config/DiRTHud/DiRTHud.conf"
cp "bin/DiRTHud.conf" "$INSTALL_DIR/.local/share/DiRTHud/DiRTHud.conf"
sed -i "s|64bit|32bit|g" "$INSTALL_DIR/.local/share/vulkan/implicit_layer.d/DiRThud32.json"
tar -C build/package -cpzf "build/DiRTHud-$VERSION.tar.gz" .
}
install() {
PKG="build/DiRTHud-$VERSION.tar.gz"
if [[ ! -f "$PKG" || "$PKG" -ot "build/meson64/src/libDiRTHud.so" ]]; then
package
fi
if [[ -f "$XDG_CONFIG_HOME/DiRTHud/DiRTHud.conf" ]]; then
tar xzf "build/DiRTHud-$VERSION.tar.gz" -C "$XDG_DATA_HOME/" "./DiRTHud/.local/share/"{DiRTHud,vulkan} --strip-components=4
else
tar xzf "build/DiRTHud-$VERSION.tar.gz" -C "$XDG_DATA_HOME/" "./DiRTHud/.local/share/"{DiRTHud,vulkan} --strip-components=4
tar xzf "build/DiRTHud-$VERSION.tar.gz" -C "$XDG_CONFIG_HOME/" "./DiRTHud/.config/DiRTHud" --strip-components=3
fi
sed -i "s|libDiRTHud.so|$XDG_DATA_HOME/DiRTHud/libDiRTHud32.so|g" "$XDG_DATA_HOME/vulkan/implicit_layer.d/DiRThud32.json"
sed -i "s|libDiRTHud.so|$XDG_DATA_HOME/DiRTHud/libDiRTHud.so|g" "$XDG_DATA_HOME/vulkan/implicit_layer.d/DiRThud64.json"
}
clean() {
rm -rf "build"
}
uninstall() {
rm -rfv "$XDG_DATA_HOME/DiRTHud"
rm -fv "$IMPLICIT_LAYER_DIR"/{DiRThud64,DiRThud32}.json
}
for a in $@; do
case $a in
"") build;;
"pull") git pull;;
"configure") configure;;
"build") build;;
"package") package;;
"install") install;;
"clean") clean;;
"uninstall") uninstall;;
*)
echo "Unrecognized command argument: $a"
echo 'Accepted arguments: "pull", "configure", "build", "package", "install", "clean", "uninstall".'
esac
done