From 8aac9896a6e2306d5c4fd3cdb71d4fadec4771a6 Mon Sep 17 00:00:00 2001 From: Taylor Richards Date: Sat, 18 Oct 2025 13:05:46 -0400 Subject: [PATCH] fix AppImage setup for fso and qtfred - generate appimage for qtfred if it's available - separate fso and qtfred install roots - move fso appimage files out of global space - fix qtfred appimage launch script - prefer X11 Qt backend for qtfred --- CMakeLists.txt | 3 ++- ci/linux/generate_appimage.sh | 19 +++++++++++++---- cmake/appimage.cmake | 21 ------------------- freespace2/CMakeLists.txt | 19 +++++++++++++++++ .../cmake}/AppImage.desktop.in | 0 {cmake => freespace2/cmake}/AppRun.in | 0 qtfred/cmake/AppRun.in | 12 +++++++++-- 7 files changed, 46 insertions(+), 28 deletions(-) delete mode 100644 cmake/appimage.cmake rename {cmake => freespace2/cmake}/AppImage.desktop.in (100%) rename {cmake => freespace2/cmake}/AppRun.in (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 78eb5b14699..1de90062f17 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -170,7 +170,8 @@ SET(GENERATED_SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated_source) include(generateHeaders) if(FSO_BUILD_APPIMAGE) - include(appimage) + SET(BINARY_DESTINATION "bin") + SET(LIBRAY_DESTINATION "lib") endif() include(clang-tidy) diff --git a/ci/linux/generate_appimage.sh b/ci/linux/generate_appimage.sh index 22afd2d19a5..11bc7300a7e 100755 --- a/ci/linux/generate_appimage.sh +++ b/ci/linux/generate_appimage.sh @@ -3,12 +3,23 @@ INSTALL_FOLDER=$1 # Install Freespace2 targets -cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_FOLDER -DCOMPONENT=Unspecified -P cmake_install.cmake -cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_FOLDER -DCOMPONENT=Freespace2 -P cmake_install.cmake +cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_FOLDER/Freespace2 -DCOMPONENT=Unspecified -P cmake_install.cmake +cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_FOLDER/Freespace2 -DCOMPONENT=Freespace2 -P cmake_install.cmake # We need to be a bit creative for determining the AppImage name since we don't want to hard-code the name -FILENAME="$(find $INSTALL_FOLDER/bin -name 'fs2_open_*' -type f -printf "%f\n").AppImage" -appimagetool -n $INSTALL_FOLDER "$INSTALL_FOLDER/$FILENAME" +FILENAME="$(find $INSTALL_FOLDER/Freespace2/bin -name 'fs2_open_*' -type f -printf "%f\n").AppImage" +appimagetool -n "$INSTALL_FOLDER/Freespace2" "$INSTALL_FOLDER/$FILENAME" chmod +x "$INSTALL_FOLDER/$FILENAME" +# Maybe install qtFRED targets +if [ -f qtfred/cmake_install.cmake ]; then + cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_FOLDER/qtFRED -DCOMPONENT=Unspecified -P cmake_install.cmake + cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_FOLDER/qtFRED -DCOMPONENT=qtFRED -P cmake_install.cmake + + # We need to be a bit creative for determining the AppImage name since we don't want to hard-code the name + FILENAME="$(find $INSTALL_FOLDER/qtFRED/bin -iname 'qtfred_*' -type f -printf "%f\n").AppImage" + appimagetool -n "$INSTALL_FOLDER/qtFRED" "$INSTALL_FOLDER/$FILENAME" + chmod +x "$INSTALL_FOLDER/$FILENAME" +fi + ls -al $INSTALL_FOLDER diff --git a/cmake/appimage.cmake b/cmake/appimage.cmake deleted file mode 100644 index cb87f1bea7d..00000000000 --- a/cmake/appimage.cmake +++ /dev/null @@ -1,21 +0,0 @@ - -SET(BINARY_DESTINATION "bin") -SET(LIBRAY_DESTINATION "lib") - -configure_file("${CMAKE_CURRENT_LIST_DIR}/AppRun.in" "${CMAKE_CURRENT_BINARY_DIR}/AppRun.gen" @ONLY) -file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AppRun-$" - INPUT "${CMAKE_CURRENT_BINARY_DIR}/AppRun.gen") - -install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/AppRun-$" DESTINATION "." RENAME "AppRun" - COMPONENT "Freespace2") - - -configure_file("${CMAKE_CURRENT_LIST_DIR}/AppImage.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/AppImage.desktop.gen" @ONLY) -file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AppImage-$.desktop" - INPUT "${CMAKE_CURRENT_BINARY_DIR}/AppImage.desktop.gen") - -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/AppImage-$.desktop" DESTINATION "." RENAME "fso.desktop" - COMPONENT "Freespace2") - -install(FILES "${CMAKE_SOURCE_DIR}/freespace2/resources/app_icon.png" DESTINATION "." - COMPONENT "Freespace2") diff --git a/freespace2/CMakeLists.txt b/freespace2/CMakeLists.txt index 118b0bc98d9..aeb6afd9eae 100644 --- a/freespace2/CMakeLists.txt +++ b/freespace2/CMakeLists.txt @@ -65,6 +65,25 @@ if (FSO_INSTALL_DEBUG_FILES) endif() endif() +if(FSO_BUILD_APPIMAGE) + configure_file("${CMAKE_CURRENT_LIST_DIR}/cmake/AppRun.in" "${CMAKE_CURRENT_BINARY_DIR}/AppRun.gen" @ONLY) + file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AppRun-$" + INPUT "${CMAKE_CURRENT_BINARY_DIR}/AppRun.gen") + + install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/AppRun-$" DESTINATION "." RENAME "AppRun" + COMPONENT "Freespace2") + + configure_file("${CMAKE_CURRENT_LIST_DIR}/cmake/AppImage.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/AppImage.desktop.gen" @ONLY) + file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AppImage-$.desktop" + INPUT "${CMAKE_CURRENT_BINARY_DIR}/AppImage.desktop.gen") + + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/AppImage-$.desktop" DESTINATION "." RENAME "fso.desktop" + COMPONENT "Freespace2") + + install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/resources/app_icon.png" DESTINATION "." + COMPONENT "Freespace2") +endif() + enable_clang_tidy(Freespace2) INCLUDE(util) diff --git a/cmake/AppImage.desktop.in b/freespace2/cmake/AppImage.desktop.in similarity index 100% rename from cmake/AppImage.desktop.in rename to freespace2/cmake/AppImage.desktop.in diff --git a/cmake/AppRun.in b/freespace2/cmake/AppRun.in similarity index 100% rename from cmake/AppRun.in rename to freespace2/cmake/AppRun.in diff --git a/qtfred/cmake/AppRun.in b/qtfred/cmake/AppRun.in index 04fb1bf416d..5111c1c2600 100644 --- a/qtfred/cmake/AppRun.in +++ b/qtfred/cmake/AppRun.in @@ -1,4 +1,12 @@ #!/bin/bash HERE=$(dirname $(readlink -f "${0}")) -export LD_LIBRARY_PATH=${HERE}/usr/lib:$LD_LIBRARY_PATH -exec "${HERE}/usr/bin/$" "$@" +export LD_LIBRARY_PATH=${HERE}/lib:$LD_LIBRARY_PATH + +# Qt5 doesn't work so well with Wayland for us so prefer the use of X11 unless +# another backend is already specified +# (NOTE: the -platform option will override this so we don't need to test for it) +if [ -z "$QT_QPA_PLATFORM" ]; then + export QT_QPA_PLATFORM="xcb;wayland" +fi + +exec "${HERE}/bin/$" "$@"