From 8b0ca9ef814cab1d790739144c8119275e6ead68 Mon Sep 17 00:00:00 2001 From: TheAssassin Date: Sun, 1 Jul 2018 14:04:35 +0200 Subject: [PATCH 1/8] AppImage build scripts, mk. 1 Produces working AppImage for bionic and newer distros. --- scripts/linux/build-appimage-docker.sh | 12 ++++ scripts/linux/build-appimage.sh | 76 ++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 scripts/linux/build-appimage-docker.sh create mode 100644 scripts/linux/build-appimage.sh diff --git a/scripts/linux/build-appimage-docker.sh b/scripts/linux/build-appimage-docker.sh new file mode 100644 index 0000000000..9cc9aee10b --- /dev/null +++ b/scripts/linux/build-appimage-docker.sh @@ -0,0 +1,12 @@ +#! /bin/bash + +set -ex + +REPO_ROOT=$(readlink -f $(dirname "$0")/../..) + +docker run --rm -it -e NO_CLEANUP=1 -e CI=1 --device /dev/fuse:mrw -v $(readlink -f .):/ws openrct2/openrct2:ubuntu_amd64 bash -xc " +cd /ws +apt-get update +apt-get install -y wget libfuse2 +bash -xe scripts/linux/build-appimage.sh +" diff --git a/scripts/linux/build-appimage.sh b/scripts/linux/build-appimage.sh new file mode 100644 index 0000000000..acc0da6a94 --- /dev/null +++ b/scripts/linux/build-appimage.sh @@ -0,0 +1,76 @@ +#! /bin/bash + +set -e +set -x + +# use RAM disk if possible +if [ "$CI" == "" ] && [ -d /dev/shm ]; then + TEMP_BASE=/dev/shm +else + TEMP_BASE=/tmp +fi + +BUILD_DIR=$(mktemp -d -p "$TEMP_BASE" AppImageUpdate-build-XXXXXX) + +cleanup () { + if [ -d "$BUILD_DIR" ]; then + rm -rf "$BUILD_DIR" + fi +} + +[ "$NO_CLEANUP" == "" ] && trap cleanup EXIT + +# store repo root as variable +REPO_ROOT=$(readlink -f $(dirname "$0")/../..) +OLD_CWD=$(readlink -f .) + +pushd "$BUILD_DIR" + +#pushd "$REPO_ROOT" +#wget -c http://download.icu-project.org/files/icu4c/59.1/icu4c-59_1-src.tgz +#echo "54923fa9fab5b2b83f235fb72523de37 icu4c-59_1-src.tgz" | md5sum -c +#popd +# +#tar xf "$REPO_ROOT"/icu4c-59_1-src.tgz +# +#if which clang &>/dev/null; then +# export CC=clang +# if which clang++ &>/dev/null; then +# export CXX=clang++ +# else +# export CXX=clang +# fi +#fi +# +#if which ccache &>/dev/null; then +# export CC="ccache $CC" CXX="ccache $CXX" +#fi +# +# +#pushd icu/source +#./runConfigureICU Linux --enable-static --enable-shared --prefix="$BUILD_DIR"/ext +#unset CC CXX +#make install -j$(nproc) +#popd +# +#export PKG_CONFIG_PATH=$(readlink -f ext/lib/pkgconfig) +# +#cmake "$REPO_ROOT" -DCMAKE_PREFIX_PATH=$(readlink -f ext) + +#wget https://raw.githubusercontent.com/wheybags/glibc_version_header/master/version_headers/force_link_glibc_2.27.h + +#flags="-include "$(readlink -f "force_link_glibc_2.27.h") +CC=clang CXX=clang++ CFLAGS="$flags" CXXFLAGS="$flags" cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_EXE_LINKER_FLAGS="-pthread" + +make -j$(nproc) VERBOSE=1 +make install DESTDIR=AppDir + +wget https://github.com/TheAssassin/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage +chmod +x linuxdeploy*.AppImage +./linuxdeploy*.AppImage --appimage-extract +wget https://github.com/TheAssassin/linuxdeploy-plugin-checkrt/releases/download/continuous/linuxdeploy-plugin-checkrt-x86_64.sh +chmod +x linuxdeploy-plugin-checkrt-*.sh +mv linuxdeploy-plugin-checkrt-*.sh squashfs-root/usr/bin +ARCH=x86_64 squashfs-root/AppRun --appdir AppDir/ --output appimage -l /lib/x86_64-linux-gnu/libz.so.1 + +mv OpenRCT2*.AppImage "$OLD_CWD"/ From e567c568bbfc9bb57ff797849042e5545560fcd4 Mon Sep 17 00:00:00 2001 From: TheAssassin Date: Sun, 1 Jul 2018 14:08:18 +0200 Subject: [PATCH 2/8] Remove deprecated icu build --- scripts/linux/build-appimage.sh | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/scripts/linux/build-appimage.sh b/scripts/linux/build-appimage.sh index acc0da6a94..dde6f84d09 100644 --- a/scripts/linux/build-appimage.sh +++ b/scripts/linux/build-appimage.sh @@ -26,37 +26,6 @@ OLD_CWD=$(readlink -f .) pushd "$BUILD_DIR" -#pushd "$REPO_ROOT" -#wget -c http://download.icu-project.org/files/icu4c/59.1/icu4c-59_1-src.tgz -#echo "54923fa9fab5b2b83f235fb72523de37 icu4c-59_1-src.tgz" | md5sum -c -#popd -# -#tar xf "$REPO_ROOT"/icu4c-59_1-src.tgz -# -#if which clang &>/dev/null; then -# export CC=clang -# if which clang++ &>/dev/null; then -# export CXX=clang++ -# else -# export CXX=clang -# fi -#fi -# -#if which ccache &>/dev/null; then -# export CC="ccache $CC" CXX="ccache $CXX" -#fi -# -# -#pushd icu/source -#./runConfigureICU Linux --enable-static --enable-shared --prefix="$BUILD_DIR"/ext -#unset CC CXX -#make install -j$(nproc) -#popd -# -#export PKG_CONFIG_PATH=$(readlink -f ext/lib/pkgconfig) -# -#cmake "$REPO_ROOT" -DCMAKE_PREFIX_PATH=$(readlink -f ext) - #wget https://raw.githubusercontent.com/wheybags/glibc_version_header/master/version_headers/force_link_glibc_2.27.h #flags="-include "$(readlink -f "force_link_glibc_2.27.h") From 5ce90f89064efd20a309ba6b4fdeea613b3aa392 Mon Sep 17 00:00:00 2001 From: TheAssassin Date: Sun, 1 Jul 2018 14:12:05 +0200 Subject: [PATCH 3/8] libfuse2 isn't needed any more --- scripts/linux/build-appimage-docker.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/linux/build-appimage-docker.sh b/scripts/linux/build-appimage-docker.sh index 9cc9aee10b..fc49e231e0 100644 --- a/scripts/linux/build-appimage-docker.sh +++ b/scripts/linux/build-appimage-docker.sh @@ -7,6 +7,6 @@ REPO_ROOT=$(readlink -f $(dirname "$0")/../..) docker run --rm -it -e NO_CLEANUP=1 -e CI=1 --device /dev/fuse:mrw -v $(readlink -f .):/ws openrct2/openrct2:ubuntu_amd64 bash -xc " cd /ws apt-get update -apt-get install -y wget libfuse2 +apt-get install -y wget bash -xe scripts/linux/build-appimage.sh " From 4cc80613cb6444fe7660ad5f828148acc8f88919 Mon Sep 17 00:00:00 2001 From: TheAssassin Date: Wed, 29 Aug 2018 22:05:57 +0200 Subject: [PATCH 4/8] Remove compatibility hacks --- scripts/linux/build-appimage-docker.sh | 2 +- scripts/linux/build-appimage.sh | 16 ++++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/scripts/linux/build-appimage-docker.sh b/scripts/linux/build-appimage-docker.sh index fc49e231e0..8ac54e010a 100644 --- a/scripts/linux/build-appimage-docker.sh +++ b/scripts/linux/build-appimage-docker.sh @@ -7,6 +7,6 @@ REPO_ROOT=$(readlink -f $(dirname "$0")/../..) docker run --rm -it -e NO_CLEANUP=1 -e CI=1 --device /dev/fuse:mrw -v $(readlink -f .):/ws openrct2/openrct2:ubuntu_amd64 bash -xc " cd /ws apt-get update -apt-get install -y wget +apt-get install -y wget libcairo2 bash -xe scripts/linux/build-appimage.sh " diff --git a/scripts/linux/build-appimage.sh b/scripts/linux/build-appimage.sh index dde6f84d09..292d34ed72 100644 --- a/scripts/linux/build-appimage.sh +++ b/scripts/linux/build-appimage.sh @@ -10,7 +10,7 @@ else TEMP_BASE=/tmp fi -BUILD_DIR=$(mktemp -d -p "$TEMP_BASE" AppImageUpdate-build-XXXXXX) +BUILD_DIR=$(mktemp -d -p "$TEMP_BASE" OpenRCT2-appimage-build-XXXXXX) cleanup () { if [ -d "$BUILD_DIR" ]; then @@ -26,20 +26,16 @@ OLD_CWD=$(readlink -f .) pushd "$BUILD_DIR" -#wget https://raw.githubusercontent.com/wheybags/glibc_version_header/master/version_headers/force_link_glibc_2.27.h - -#flags="-include "$(readlink -f "force_link_glibc_2.27.h") -CC=clang CXX=clang++ CFLAGS="$flags" CXXFLAGS="$flags" cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_EXE_LINKER_FLAGS="-pthread" +# standard linuxdeploy pattern +#see https://docs.appimage.org/packaging-guide/from-source/index.html for more information +cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX=/usr make -j$(nproc) VERBOSE=1 make install DESTDIR=AppDir wget https://github.com/TheAssassin/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage chmod +x linuxdeploy*.AppImage -./linuxdeploy*.AppImage --appimage-extract -wget https://github.com/TheAssassin/linuxdeploy-plugin-checkrt/releases/download/continuous/linuxdeploy-plugin-checkrt-x86_64.sh -chmod +x linuxdeploy-plugin-checkrt-*.sh -mv linuxdeploy-plugin-checkrt-*.sh squashfs-root/usr/bin -ARCH=x86_64 squashfs-root/AppRun --appdir AppDir/ --output appimage -l /lib/x86_64-linux-gnu/libz.so.1 + +./linuxdeploy*.AppImage --appimage-extract-and-run --appdir AppDir/ --output appimage mv OpenRCT2*.AppImage "$OLD_CWD"/ From b189ea27b4ed161e10d73a66e4b215e69e451f89 Mon Sep 17 00:00:00 2001 From: TheAssassin Date: Wed, 29 Aug 2018 22:23:53 +0200 Subject: [PATCH 5/8] Switch to ninja --- scripts/linux/build-appimage.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/linux/build-appimage.sh b/scripts/linux/build-appimage.sh index 292d34ed72..daa2facb32 100644 --- a/scripts/linux/build-appimage.sh +++ b/scripts/linux/build-appimage.sh @@ -28,10 +28,10 @@ pushd "$BUILD_DIR" # standard linuxdeploy pattern #see https://docs.appimage.org/packaging-guide/from-source/index.html for more information -cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX=/usr +cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -make -j$(nproc) VERBOSE=1 -make install DESTDIR=AppDir +ninja -v -j$(nproc) +DESTDIR=AppDir ninja install wget https://github.com/TheAssassin/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage chmod +x linuxdeploy*.AppImage From 0b3ddc85d62cfd77b3d6eeba44b1f8c9970a0439 Mon Sep 17 00:00:00 2001 From: TheAssassin Date: Wed, 29 Aug 2018 22:32:43 +0200 Subject: [PATCH 6/8] Remove redundant CLI flags --- scripts/linux/build-appimage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/linux/build-appimage.sh b/scripts/linux/build-appimage.sh index daa2facb32..a05a06f66e 100644 --- a/scripts/linux/build-appimage.sh +++ b/scripts/linux/build-appimage.sh @@ -30,7 +30,7 @@ pushd "$BUILD_DIR" #see https://docs.appimage.org/packaging-guide/from-source/index.html for more information cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -ninja -v -j$(nproc) +ninja -v DESTDIR=AppDir ninja install wget https://github.com/TheAssassin/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage From 9da9a9968aedc2e1577eed865af8ddcf6dac0f26 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 29 Sep 2018 13:58:38 +0100 Subject: [PATCH 7/8] Add /../share/openrct2 as possible install location This allows AppImage to work correctly. --- src/openrct2/platform/Platform.Linux.cpp | 27 ++++++++++++++---------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/openrct2/platform/Platform.Linux.cpp b/src/openrct2/platform/Platform.Linux.cpp index 1c08b43356..bac2f000dd 100644 --- a/src/openrct2/platform/Platform.Linux.cpp +++ b/src/openrct2/platform/Platform.Linux.cpp @@ -119,19 +119,24 @@ namespace Platform path = Path::Combine(exeDirectory, "data"); if (!Path::DirectoryExists(path)) { - // 3. Try standard system app directories - path = FindInstallPath(); - if (path.empty()) + // 3. Try ${exeDir}/../share/openrct2 + path = Path::Combine(exeDirectory, "../share/openrct2"); + if (!Path::DirectoryExists(path)) { - // 4. Fallback to ${cwd}/data - path = GetCurrentWorkingDirectory(); - if (!path.empty()) + // 4. Try standard system app directories + path = FindInstallPath(); + if (path.empty()) { - path = Path::Combine(path, "data"); - } - else - { - return "/"; + // 5. Fallback to ${cwd}/data + path = GetCurrentWorkingDirectory(); + if (!path.empty()) + { + path = Path::Combine(path, "data"); + } + else + { + return "/"; + } } } } From e46b5c752ade2968846038cf13f184fcb2d7538e Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 29 Sep 2018 14:00:30 +0100 Subject: [PATCH 8/8] Build AppImage for release --- scripts/linux/build-appimage-docker.sh | 0 scripts/linux/build-appimage.sh | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 scripts/linux/build-appimage-docker.sh mode change 100644 => 100755 scripts/linux/build-appimage.sh diff --git a/scripts/linux/build-appimage-docker.sh b/scripts/linux/build-appimage-docker.sh old mode 100644 new mode 100755 diff --git a/scripts/linux/build-appimage.sh b/scripts/linux/build-appimage.sh old mode 100644 new mode 100755 index a05a06f66e..cf37525bc9 --- a/scripts/linux/build-appimage.sh +++ b/scripts/linux/build-appimage.sh @@ -28,7 +28,7 @@ pushd "$BUILD_DIR" # standard linuxdeploy pattern #see https://docs.appimage.org/packaging-guide/from-source/index.html for more information -cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX=/usr -G Ninja +cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -DCMAKE_BUILD_TYPE=Release ninja -v DESTDIR=AppDir ninja install