AppImage: Add script for generating AppImages with desktop integration

This commit is contained in:
Albert Liu 2020-04-13 21:22:32 -07:00
parent 7677c95fa7
commit a2a9bd16fa
7 changed files with 83 additions and 0 deletions

View file

@ -0,0 +1,10 @@
[Desktop Entry]
Type=Application
Name=DuckStation Qt
GenericName=PlayStation 1 Emulator
Comment=Fast-ish PlayStation 1 emulator
Icon=duckstation-qt
TryExec=duckstation-qt
Exec=duckstation-qt %f
Terminal=true
Categories=Game;Emulator;Qt;

View file

@ -0,0 +1,10 @@
[Desktop Entry]
Type=Application
Name=DuckStation SDL
GenericName=PlayStation 1 Emulator
Comment=Fast-ish PlayStation 1 emulator
Icon=duckstation-sdl
TryExec=duckstation-sdl
Exec=duckstation-sdl %f
Terminal=true
Categories=Game;Emulator;

63
appimage/generate-appimages.sh Executable file
View file

@ -0,0 +1,63 @@
#!/bin/bash
function get_tools_and_plugins() {
wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
chmod a+x linuxdeploy-x86_64.AppImage
wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage
chmod a+x linuxdeploy-plugin-qt-x86_64.AppImage
}
# NOTE: Keep this script in the same directory as resources for AppImage creation
APPIMAGE_RESOURCES_DIR=$(dirname $(readlink -f $0))
echo "APPIMAGE_RESOURCES_DIR set to ${APPIMAGE_RESOURCES_DIR}"
if [[ "$#" -ne 1 ]]; then
echo "Wrong number of arguments (\$# = $# args) provided."
echo "Usage: create-appimage.sh <build_directory_path>"
exit 1
else
BUILD_DIR=$1
echo "BUILD_DIR set to ${BUILD_DIR}"
fi
# Acquire linuxdeploy and linuxdeploy-plugin-qt
get_tools_and_plugins
# Copy icons into the <resolution>/<app_name>.<ext> directory structure that linuxdeploy nominally expects,
# e.g. 16x16/duckstation-qt.png, 32x32/duckstation-qt.png, etc.
FRONTENDS=("qt" "sdl")
ICONS_QT=()
ICONS_SDL=()
ICON_PNG_RESOLUTIONS=($(seq 16 16 64)) # 16, 32, 48, 64
for res in ${ICON_PNG_RESOLUTIONS[@]}; do
mkdir -p ${BUILD_DIR}/AppImage-icons/${res}x${res}
for frontend in ${FRONTENDS[@]}; do
# Copy icon to proper directory
cp ${APPIMAGE_RESOURCES_DIR}/icon-${res}px.png ${BUILD_DIR}/AppImage-icons/${res}x${res}/duckstation-${frontend}.png
# Append icon filepath to array that will later be passed to linuxdeploy
eval "ICONS_${frontend^^}+=(${BUILD_DIR}/AppImage-icons/${res}x${res}/duckstation-${frontend}.png)"
done
done
# Outputted file from linuxdeploy is named based on the .desktop file Name key;
# We rename it to something generic that buildbot or CI scripts can modify
# as they wish outside of this script, e.g. to distinguish between Release or
# Debug builds, since we don't have awareness of that inside this script
./linuxdeploy-x86_64.AppImage --appdir=./AppDir-duckstation-qt \
--executable=${BUILD_DIR}/src/duckstation-qt/duckstation-qt \
--desktop-file=${APPIMAGE_RESOURCES_DIR}/duckstation-qt.desktop \
${ICONS_QT[@]/#/--icon-file=} \
--plugin=qt \
--output=appimage \
&& mv DuckStation_Qt*.AppImage duckstation-qt-x64.AppImage
./linuxdeploy-x86_64.AppImage --appdir=./AppDir-duckstation-sdl \
--executable=${BUILD_DIR}/src/duckstation-sdl/duckstation-sdl \
--desktop-file=${APPIMAGE_RESOURCES_DIR}/duckstation-sdl.desktop \
${ICONS_SDL[@]/#/--icon-file=} \
--output=appimage \
&& mv DuckStation_SDL*.AppImage duckstation-sdl-x64.AppImage
# Resulting AppImage files will be located in the directory this script is called from

BIN
appimage/icon-16px.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 B

BIN
appimage/icon-32px.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
appimage/icon-64px.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB