shtools/zrct2/zrct2-install
2022-01-14 14:49:48 +01:00

228 lines
5.1 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# values: true/false
# parameters:
# DISCORD_RPC
# DESKTOP_ENTRY
# CLEAN_SRC
echo_red () {
printf "\033[1;31m%s\033[0m\n" "$1"
}
echo_blue () {
printf "\033[1;34m%s\033[0m\n" "$1"
}
echo_yellow () {
printf "\033[1;33m%s\033[0m\n" "$1"
}
echo_white () {
printf "\033[1;37m%s\033[0m\n" "$1"
}
_done () {
printf "\033[1;32mDone\033[0m\n\n"
}
warning () {
printf "\033[0;33m%s\033[0m\n" "$1" >&2
}
abort()
{
echo_red "ERROR: ABORTING" >&2
exit "$1"
}
APT_PACKAGES="gcc g++ git make cmake libsdl2-dev libicu-dev pkg-config libjansson-dev libspeex-dev libspeexdsp-dev libcurl4-openssl-dev libcrypto++-dev libfontconfig1-dev libfreetype6-dev libpng-dev libssl-dev libzip-dev"
DNF_PACKAGES="gcc gcc-c++ jansson-devel openssl-devel SDL2-devel libicu-devel speexdsp-devel libcurl-devel cmake fontconfig-devel freetype-devel libpng-devel libzip-devel mesa-libGL-devel"
PACMAN_PACKAGES="gcc gcc-libs git cmake sdl2 fontconfig libzip libpng curl jansson speexdsp openssl icu"
echo_white "Installing packages"
if which apt >/dev/null 2>&1
then
sudo apt install --no-install-recommends -y $APT_PACKAGES || abort $?
elif which dnf >/dev/null 2>&1
then
sudo dnf install $DNF_PACKAGES || abort $?
elif which pacman >/dev/null 2>&1
then
sudo pacman -S --needed $PACMAN_PACKAGES || abort $?
else
warning "Unsupported packaging system. Skipping package install and attempting to continue"
fi
_done
[ -z "$DESTDIR" ] && DESTDIR='OpenRCT2'
[ -z "$SRCDIR" ] && SRCDIR='openrct2-src'
## PULLING SOURCE ## .
echo_white "Getting source code"
if [ -d "$SRCDIR" ]
then
echo_blue "Source code already present"
cd "$SRCDIR" || abort $?
git pull || abort $?
else
git clone https://github.com/OpenRCT2/OpenRCT2.git --depth=1 "$SRCDIR" || abort $?
cd "$SRCDIR" || abort $?
fi
_done
unset DISCORDRPC
add_discord_rpc()
{
DISCORDRPC=true
echo_white "Getting source code"
if [ -d "discord-rpc" ]
then
echo_blue "Discord rpc already present"
git -C discord-rpc pull || abort $?
else
git clone https://github.com/discordapp/discord-rpc.git || abort $?
fi
echo_white "Getting rapidjson fix"
if [ -d "rapidjson" ]
then
echo_blue "rapidjson already present"
git -C rapidjson pull || abort $?
else
git clone https://github.com/janisozaur/rapidjson.git || abort $?
fi
cp -r rapidjson/include/rapidjson discord-rpc/src || abort $?
_done
}
remove_discord_rpc()
{
unset DISCORDRPC
if [ -d "discord-rpc" ]
then
echo_yellow "Discord rpc present, deleting"
rm -rf discord-rpc || abort $?
fi
if [ -d "rapidjson" ]
then
echo_yellow "rapidjson present, deleting"
rm -rf rapidjson || abort $?
fi
}
## DISCORD-RPC ## ./$SCRDIR
if [ -n "$DISCORD_RPC" ]
then
if [ "$DISCORD_RPC" = "true" ]
then
add_discord_rpc
else
remove_discord_rpc
fi
else
printf "Add discord rich presence?(may cause compilation errors)[y/N]: "
read -r discord
case $discord in
[Yy]* )
add_discord_rpc
;;
* )
remove_discord_rpc
;;
esac
fi
## CMAKE ## ./$SCRDIR
echo_white "Preparing build files"
if [ -d "build" ]
then
echo_yellow "Build files already present. Deleting and rebuilding"
rm -r build
fi
mkdir -p build || abort $?
cd build || abort $?
cmake -DCMAKE_BUILD_TYPE=Release .. || abort $?
_done
## BUILD ## ./$SCRDIR/build
echo_white "Building binary"
if ! make -j "$(nproc --all)"
then
[ -n "$DISCORDRPC" ] && echo_red "Compliation with discord-rpc failed. Retry without." >&2
abort 1
fi
_done
echo_white "Building g2.dat"
make g2 -j "$(nproc --all)" || abort $?
_done
## DOWNLOAD DATA ## ./$SCRDIR/build
echo_white "Downloading game data"
mkdir -p temp_install || abort $?
DESTDIR=./temp_install make install || abort $?
_done
## MAKE FOLDERS ## ./$SCRDIR/build
echo_white "Making game folders"
mkdir -p "../../$DESTDIR" || abort $?
mkdir -p "../../$DESTDIR/data" || abort $?
cp -r temp_install/usr/local/share/openrct2/* "../../$DESTDIR/data" || abort $?
cp "temp_install/usr/local/share/icons/hicolor/256x256/apps/openrct2.png" "../../$DESTDIR/icon.png" || abort $?
mv openrct2 openrct2-cli "../../$DESTDIR" || abort $?
rm -rf temp_install || abort $?
_done
cd "../.." || abort $?
cd "$DESTDIR" || abort $?
add_desktop_entry()
{
{
echo "[Desktop Entry]"
echo "Name=OpenRCT2"
echo "Comment=RCT2 but Open!"
echo "Type=Application"
echo "Exec=$(pwd)/openrct2"
echo "Icon=$(pwd)/icon.png"
echo "Categories=Game"
echo "Keywords=Roller;Coaster;Tycoon"
} > openrct2.desktop
sudo ln -sf "$(pwd)/openrct2.desktop" "/usr/share/applications"
}
## DESKTOP ENTRY ## ./$DESTDIR
if [ -n "$DESKTOP_ENTRY" ]
then
if [ "$DESKTOP_ENTRY" = "true" ]
then
add_desktop_entry
fi
else
printf "Do you want to add a desktop entry (/usr/share)?[Y/n]: "
read -r yn
case $yn in
[Nn]* )
;;
* )
add_desktop_entry
;;
esac
fi
cd .. || abort $?
## CLEAN ## ./
if [ -n "$CLEAN_SRC" ]
then
if [ "$CLEAN_SRC" = "true" ]
then
rm -rf "$SRCDIR"
fi
else
printf "Clean source files?[Y/n]: "
read -r yn
case $yn in
[Nn]* )
;;
* )
rm -rf "$SRCDIR"
;;
esac
fi
exit 0