228 lines
5.1 KiB
Bash
Executable file
228 lines
5.1 KiB
Bash
Executable file
#!/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
|