From 5d9161fecebbef59e43f1a8aff797dc67315556b Mon Sep 17 00:00:00 2001 From: Damglador Date: Sat, 28 Jun 2025 15:50:43 +0200 Subject: [PATCH] AppImage packaging --- packages/appimage/AppRun | 25 ++++++++ packages/appimage/Build | 80 +++++++++++++++++++++++++ packages/appimage/isle-portable.desktop | 20 +++++++ 3 files changed, 125 insertions(+) create mode 100755 packages/appimage/AppRun create mode 100755 packages/appimage/Build create mode 100755 packages/appimage/isle-portable.desktop diff --git a/packages/appimage/AppRun b/packages/appimage/AppRun new file mode 100755 index 00000000..0da15db1 --- /dev/null +++ b/packages/appimage/AppRun @@ -0,0 +1,25 @@ +#!/bin/sh + +HERE="$(dirname "$(readlink -f "${0}")")" + +MAIN=$(grep -r "^Exec=.*" "$HERE"/*.desktop | head -n 1 | cut -d "=" -f 2 | cut -d " " -f 1) + +# MAIN_BIN=$(find "$HERE/usr/bin" -name "$MAIN" | head -n 1) +MAIN_BIN="$HERE/usr/bin/isle-config" + +export PATH="${HERE}/usr/bin/":$PATH # Prefer bundled binaries + +export QT_QPA_PLATFORMTHEME=xdgdesktopportal # Use XDG filepicker for forward compatability +[ -z "$QT_PLUGIN_PATH" ] && export QT_PLUGIN_PATH=/usr/lib/qt6/plugins:/usr/lib64/qt6/plugins # Use system Qt theme, will fallback to the default one if unavailable + + +if [ ! -z $APPIMAGE ]; then + BINARY_NAME=$(basename "$ARGV0") + if [ -e "$HERE/usr/bin/$BINARY_NAME" ]; then + exec "$HERE/usr/bin/$BINARY_NAME" "$@" + else + exec "${MAIN_BIN}" "$@" + fi +else + exec "${MAIN_BIN}" "$@" +fi diff --git a/packages/appimage/Build b/packages/appimage/Build new file mode 100755 index 00000000..bcafc27f --- /dev/null +++ b/packages/appimage/Build @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +set -e + +export LD_LIBRARY_PATH="build/lib:$LD_LIBRARY_PATH" +export QMAKE=/usr/lib/qt6/bin/qmake + +BUILD_SOURCE=../../build +APPRUN_SOURCE=AppRun +DESKTOP_FILE_SOURCE=isle-portable.desktop + +cd $(dirname $0) + +clean(){ + rm -rf assets tools build AppDir +} + +download(){ + if [ ! -e "$1" ]; then + curl -Lo "$1" "$2" + fi +} + +prepare(){ + mkdir -p tools + mkdir -p assets + + download tools/appimagetool.AppImage https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-$(uname -m).AppImage + chmod u+x tools/appimagetool.AppImage + + download tools/linuxdeploy.AppImage https://github.com/linuxdeploy/linuxdeploy/releases/latest/download/linuxdeploy-$(uname -m).AppImage + chmod u+x tools/linuxdeploy.AppImage + + download tools/linuxdeploy-plugin-qt.AppImage https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/latest/download/linuxdeploy-plugin-qt-$(uname -m).AppImage + chmod u+x tools/linuxdeploy-plugin-qt.AppImage + + download assets/isle.png https://github.com/isledecomp/isle/blob/master/assets/isle.png?raw=true + magick assets/isle.png -resize 256x256 assets/isle.png + download assets/isle-config.png https://github.com/isledecomp/isle/blob/master/assets/config.png?raw=true + magick assets/isle-config.png -resize 256x256 assets/isle-config.png + + if [ ! -f "assets/isle-portable.desktop" ]; then + cp $DESKTOP_FILE_SOURCE assets/isle-portable.desktop + cp $APPRUN_SOURCE assets/AppRun + fi + + if [ ! -d "build" ]; then + cp -r $BUILD_SOURCE build + fi +} + +compile(){ + + NO_STRIP=1 tools/linuxdeploy.AppImage \ + --plugin qt \ + -e build/bin/isle \ + -e build/bin/isle-config \ + -d assets/isle-portable.desktop \ + -i assets/isle.png \ + -i assets/isle-config.png \ + --custom-apprun=AppRun \ + --appdir=AppDir +} + +package(){ + tools/appimagetool.AppImage AppDir "LEGO_Island-$(uname -m).AppImage" +} + +stop(){ + exit +} + +for func in "$@"; do + "$func" +done +prepare +compile +package +# Symlinks named as binaries in appimage can call these binaries specifically +# ln -s "LEGO_Island-$(uname -m).AppImage" isle-config +# ln -s "LEGO_Island-$(uname -m).AppImage" isle \ No newline at end of file diff --git a/packages/appimage/isle-portable.desktop b/packages/appimage/isle-portable.desktop new file mode 100755 index 00000000..06a69841 --- /dev/null +++ b/packages/appimage/isle-portable.desktop @@ -0,0 +1,20 @@ +[Desktop Entry] +Name=LEGO Island +GenericName= +Comment=LEGO-themed open-world adventure game +Name[uk_UA]=LEGO Island +GenericName[uk_UA]= +Comment[uk_UA]=Тематична LEGO гра з відкритим світом +Actions=Settings +Categories=Game;AdventureGame;ActionGame;KidsGame; +Exec=isle +Icon=isle +StartupNotify=true +StartupWMClass=lego-isle +Type=Application + +[Desktop Action Settings] +Exec=isle-config +Name=Settings +Name[uk_UA]=Налаштування +Icon=isle-config \ No newline at end of file