From b7934ae15507211640f6ac7797e8330b9db66a23 Mon Sep 17 00:00:00 2001 From: coco875 Date: Tue, 10 Dec 2024 23:51:47 +0100 Subject: [PATCH] configure the app image --- .gitignore | 3 +- CMakeLists.txt | 17 +++++- Starship.desktop | 9 ++++ cmake/configure-packaging.cmake | 29 +++++++++++ cmake/packaging.cmake | 89 ++++++++++++++++++++++++++++++++ logo.png | Bin 0 -> 12110 bytes 6 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 Starship.desktop create mode 100644 cmake/configure-packaging.cmake create mode 100644 cmake/packaging.cmake create mode 100644 logo.png diff --git a/.gitignore b/.gitignore index 197cd865..4f7d42c5 100644 --- a/.gitignore +++ b/.gitignore @@ -47,4 +47,5 @@ Starship.log *.sav *.lib *.pdb -dumps/ \ No newline at end of file +dumps/ +_packages/* diff --git a/CMakeLists.txt b/CMakeLists.txt index e14777e0..b922be65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -555,4 +555,19 @@ add_custom_target( WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND ${TORCH_EXECUTABLE} pack port starship.otr COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/starship.otr" "${CMAKE_BINARY_DIR}/starship.otr" -) \ No newline at end of file +) + +set_property(TARGET ${PROJECT_NAME} PROPERTY APPIMAGE_DESKTOP_FILE_TERMINAL YES) +set_property(TARGET ${PROJECT_NAME} PROPERTY APPIMAGE_DESKTOP_FILE "${CMAKE_SOURCE_DIR}/Starship.desktop") +set_property(TARGET ${PROJECT_NAME} PROPERTY APPIMAGE_ICON_FILE "${CMAKE_SOURCE_DIR}/logo.png") + +if(CMAKE_SYSTEM_NAME MATCHES "Linux") + set(CPACK_GENERATOR "External") +elseif(CMAKE_SYSTEM_NAME MATCHES "Windows|NintendoSwitch|CafeOS") + set(CPACK_GENERATOR "ZIP") +elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") + set(CPACK_GENERATOR "Bundle") +endif() + +set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_SOURCE_DIR}/cmake/configure-packaging.cmake) +include(cmake/packaging.cmake) \ No newline at end of file diff --git a/Starship.desktop b/Starship.desktop new file mode 100644 index 00000000..566ac94f --- /dev/null +++ b/Starship.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Version=1.0 +Name=2SHIP +Exec=Starship +Terminal=false +Icon=logo +Type=Application +Categories=Game; +X-AppImage-Integrate=false \ No newline at end of file diff --git a/cmake/configure-packaging.cmake b/cmake/configure-packaging.cmake new file mode 100644 index 00000000..8d6869bd --- /dev/null +++ b/cmake/configure-packaging.cmake @@ -0,0 +1,29 @@ +set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) +set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY 0) +set(CPACK_COMPONENTS_ALL "Starship") + +if (CPACK_GENERATOR STREQUAL "External") + list(APPEND CPACK_COMPONENTS_ALL "extractor" "appimage") +endif() + +if (CPACK_GENERATOR MATCHES "DEB|RPM") +# https://unix.stackexchange.com/a/11552/254512 +set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/ship/bin")#/${CMAKE_PROJECT_VERSION}") +set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY 0) +elseif (CPACK_GENERATOR MATCHES "ZIP") +set(CPACK_PACKAGING_INSTALL_PREFIX "") +endif() + +if (CPACK_GENERATOR MATCHES "External") +set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) +SET(CPACK_MONOLITHIC_INSTALL 1) +set(CPACK_PACKAGING_INSTALL_PREFIX "/usr/bin") +endif() + +if (CPACK_GENERATOR MATCHES "Bundle") + set(CPACK_BUNDLE_NAME "Starship") + set(CPACK_BUNDLE_PLIST "macosx/Info.plist") + set(CPACK_BUNDLE_ICON "macosx/Starship.icns") + set(CPACK_BUNDLE_STARTUP_COMMAND "macosx/Starship-macos.sh") + set(CPACK_BUNDLE_APPLE_CERT_APP "-") +endif() \ No newline at end of file diff --git a/cmake/packaging.cmake b/cmake/packaging.cmake new file mode 100644 index 00000000..a32192d4 --- /dev/null +++ b/cmake/packaging.cmake @@ -0,0 +1,89 @@ +# these are cache variables, so they could be overwritten with -D, + +set(CPACK_PACKAGE_NAME "${PROJECT_NAME}" + CACHE STRING "The resulting package name" +) + +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Simple C++ application" + CACHE STRING "Package description for the package metadata" +) +set(CPACK_PACKAGE_VENDOR "Some Company") + +set(CPACK_VERBATIM_VARIABLES YES) + +set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME}) +SET(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_SOURCE_DIR}/_packages") + +set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) +set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") + +set(CPACK_PACKAGE_CONTACT "YOUR@E-MAIL.net") +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "YOUR NAME") + +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md") +set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md") + +if (CMAKE_SYSTEM_NAME STREQUAL "Linux") +set(CPACK_SYSTEM_NAME ${LSB_RELEASE_CODENAME_SHORT}) +# package name for deb +# if set, then instead of some-application-0.9.2-Linux.deb +# you'll get some-application_0.9.2_amd64.deb (note the underscores too) +#set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) +execute_process(COMMAND dpkg --print-architecture OUTPUT_VARIABLE ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE) +set( CPACK_DEBIAN_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}-${ARCHITECTURE}.deb ) +# if you want every group to have its own package, +# although the same happens if this is not sent (so it defaults to ONE_PER_GROUP) +# and CPACK_DEB_COMPONENT_INSTALL is set to YES +set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE)#ONE_PER_GROUP) +# without this you won't be able to pack only specified component +set(CPACK_DEB_COMPONENT_INSTALL YES) + +set(CPACK_EXTERNAL_ENABLE_STAGING YES) +set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${PROJECT_BINARY_DIR}/appimage-generate.cmake") + +file(GENERATE + OUTPUT "${PROJECT_BINARY_DIR}/appimage-generate.cmake" + CONTENT [[ +include(CMakePrintHelpers) +cmake_print_variables(CPACK_TEMPORARY_DIRECTORY) +cmake_print_variables(CPACK_TOPLEVEL_DIRECTORY) +cmake_print_variables(CPACK_PACKAGE_DIRECTORY) +cmake_print_variables(CPACK_PACKAGE_FILE_NAME) + +find_program(LINUXDEPLOY_EXECUTABLE + NAMES linuxdeploy linuxdeploy-x86_64.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-x86_64.AppImage + ${LINUXDEPLOY_EXECUTABLE} + INACTIVITY_TIMEOUT 10 + LOG ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/download.log + STATUS LINUXDEPLOY_DOWNLOAD) + execute_process(COMMAND chmod +x ${LINUXDEPLOY_EXECUTABLE} COMMAND_ECHO STDOUT) +endif() + +execute_process( + COMMAND + NO_STRIP=true ${CMAKE_COMMAND} -E env + OUTPUT=${CPACK_PACKAGE_FILE_NAME}.appimage + VERSION=$,${CPACK_PACKAGE_VERSION},0.1.0> + ${LINUXDEPLOY_EXECUTABLE} + --appimage-extract-and-run + --appdir=${CPACK_TEMPORARY_DIRECTORY} + --executable=$ + $<$>:--desktop-file=$> + $<$>:--icon-file=$> + --output=appimage + --verbosity=2 +) +]]) + +endif() + +include(CPack) \ No newline at end of file diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..56ddadf1a10f692e756aac3e2caa8ced823fef84 GIT binary patch literal 12110 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 YU-iAY)5N_j9JB=9)78&qol`;+0OX