#!/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