86 lines · 4.2 KB · Text
RawDownload
##  GenerateAppImage.cmake#  cmake/modules##  This gets called by cmake/macros/GenerateInstaller.cmake and is intended to package Interface AppImages only.##  Created by Julian Groß on 2025-04-12.#  Copyright 2025-2026 Overte e.V.##  Distributed under the Apache License, Version 2.0.#  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html# set(APPIMAGE_DESKTOP_FILE ${CPACK_CMAKE_SOURCE_DIR}/interface/org.overte.interface.desktop)set(APPIMAGE_ICON_FILE ${CPACK_CMAKE_SOURCE_DIR}/interface/icon/interface.svg) find_program(LINUXDEPLOY_EXECUTABLE  NAMES linuxdeploy linuxdeploy-${CMAKE_SYSTEM_PROCESSOR}.AppImage  PATHS ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy) if (NOT LINUXDEPLOY_EXECUTABLE)  message(STATUS "Downloading linuxdeploy")  set(LINUXDEPLOY_EXECUTABLE ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/linuxdeploy)  file(DOWNLOAD      https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-${CMAKE_SYSTEM_PROCESSOR}.AppImage      ${LINUXDEPLOY_EXECUTABLE}      LOG ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/linuxdeploy-download.log      STATUS LINUXDEPLOY_DOWNLOAD)  execute_process(COMMAND chmod +x ${LINUXDEPLOY_EXECUTABLE} COMMAND_ECHO STDOUT)endif() find_program(LINUXDEPLOY_PLUGIN_QT_EXECUTABLE  NAMES linuxdeploy-plugin-qt linuxdeploy-plugin-qt-${CMAKE_SYSTEM_PROCESSOR}.AppImage  PATHS ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy) if (NOT LINUXDEPLOY_PLUGIN_QT_EXECUTABLE)  message(STATUS "Downloading linuxdeploy-plugin-qt")  set(LINUXDEPLOY_PLUGIN_QT_EXECUTABLE ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/linuxdeploy-plugin-qt)  file(DOWNLOAD      https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-${CMAKE_SYSTEM_PROCESSOR}.AppImage      ${LINUXDEPLOY_PLUGIN_QT_EXECUTABLE}      LOG ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/linuxdeploy-plugin-qt-download.log      STATUS LINUXDEPLOY-PLUGIN-QT_DOWNLOAD)  execute_process(COMMAND chmod +x ${LINUXDEPLOY_PLUGIN_QT_EXECUTABLE} COMMAND_ECHO STDOUT)endif()  file(COPY ${CPACK_CMAKE_SOURCE_DIR}/interface/org.overte.interface.appdata.xml DESTINATION ${CPACK_TEMPORARY_DIRECTORY}/usr/share/metainfo/)file(COPY ${CPACK_PACKAGE_DIRECTORY}/interface/plugins DESTINATION ${CPACK_TEMPORARY_DIRECTORY}/usr/bin/)file(COPY ${CPACK_PACKAGE_DIRECTORY}/interface/scripts DESTINATION ${CPACK_TEMPORARY_DIRECTORY}/usr/bin/)file(COPY ${CPACK_PACKAGE_DIRECTORY}/interface/resources DESTINATION ${CPACK_TEMPORARY_DIRECTORY}/usr/bin/)file(COPY ${CPACK_PACKAGE_DIRECTORY}/interface/resources.rcc DESTINATION ${CPACK_TEMPORARY_DIRECTORY}/usr/bin/) if(CPACK_CMAKE_BUILD_TYPE STREQUAL "Debug")    set(APPIMAGE_FILENAME ${CPACK_PACKAGE_FILE_NAME}-${CPACK_CMAKE_BUILD_TYPE}-${CPACK_OVERTE_RENDERING_BACKEND}-${CMAKE_SYSTEM_PROCESSOR}.AppImage)elseif(CPACK_CMAKE_BUILD_TYPE)    set(APPIMAGE_FILENAME ${CPACK_PACKAGE_FILE_NAME}-${CPACK_OVERTE_RENDERING_BACKEND}-${CMAKE_SYSTEM_PROCESSOR}.AppImage)else()    message(FATAL_ERROR "CPACK_CMAKE_BUILD_TYPE should have been set but isn't. This is most likely a mistake during refactoring.")endif() execute_process(  COMMAND    ${CMAKE_COMMAND} -E env      LDAI_OUTPUT=${APPIMAGE_FILENAME}      LINUXDEPLOY_OUTPUT_VERSION=${CPACK_PACKAGE_VERSION}      QML_SOURCES_PATHS=${CPACK_CMAKE_SOURCE_DIR}/interface/resources/qml/      # Including libnss3 causes issues:      # https://github.com/overte-org/overte/issues/1835      # https://github.com/probonopd/linuxdeployqt/issues/35      # https://github.com/probonopd/linuxdeployqt/issues/35#issuecomment-382994446      LINUXDEPLOY_EXCLUDED_LIBRARIES=libnss3.so\;libnssutil3.so      # QMake tells linuxdeploy-plugin-qt where to find Qt.      QMAKE=${CPACK_QMAKE_EXECUTABLE}    ${LINUXDEPLOY_EXECUTABLE}    --appdir=${CPACK_TEMPORARY_DIRECTORY}    --executable=${CPACK_PACKAGE_DIRECTORY}/interface/interface    # We copied our plugins earlier; Here we tell LinuxDeploy to deploy their dependencies.    # For example libopenxr_loader.so for our OpenXR plugin.    --deploy-deps-only=${CPACK_TEMPORARY_DIRECTORY}/usr/bin/plugins    --desktop-file=${APPIMAGE_DESKTOP_FILE}    --icon-file=${APPIMAGE_ICON_FILE}    --plugin qt    --output=appimage  COMMAND_ERROR_IS_FATAL ANY)