70 lines
2.1 KiB
CMake
70 lines
2.1 KiB
CMake
function(make_appimage)
|
|
set(optional)
|
|
set(args EXE NAME DIR_ICON ICON OUTPUT_NAME)
|
|
set(list_args ASSETS)
|
|
cmake_parse_arguments(
|
|
PARSE_ARGV 0
|
|
ARGS
|
|
"${optional}"
|
|
"${args}"
|
|
"${list_args}"
|
|
)
|
|
|
|
if(${ARGS_UNPARSED_ARGUMENTS})
|
|
message(WARNING "Unparsed arguments: ${ARGS_UNPARSED_ARGUMENTS}")
|
|
endif()
|
|
|
|
|
|
# download AppImageTool if needed (TODO: non-x86 build machine?)
|
|
SET(AIT_PATH "${CMAKE_BINARY_DIR}/AppImageTool.AppImage" CACHE INTERNAL "")
|
|
if (NOT EXISTS "${AIT_PATH}")
|
|
file(DOWNLOAD https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage "${AIT_PATH}")
|
|
execute_process(COMMAND chmod +x ${AIT_PATH})
|
|
endif()
|
|
|
|
# make the AppDir
|
|
set(APPDIR "${CMAKE_BINARY_DIR}/AppDir")
|
|
file(REMOVE_RECURSE "${APPDIR}") # remove if leftover
|
|
file(MAKE_DIRECTORY "${APPDIR}")
|
|
|
|
# copy executable to appdir
|
|
file(COPY "${ARGS_EXE}" DESTINATION "${APPDIR}" FOLLOW_SYMLINK_CHAIN)
|
|
get_filename_component(EXE_NAME "${ARGS_EXE}" NAME)
|
|
|
|
# create the script that will launch the AppImage
|
|
file(WRITE "${APPDIR}/AppRun"
|
|
"#!/bin/sh
|
|
cd \"$(dirname \"$0\")\";
|
|
./${EXE_NAME} $@"
|
|
)
|
|
execute_process(COMMAND chmod +x "${APPDIR}/AppRun")
|
|
|
|
# copy assets to appdir
|
|
file(COPY ${ARGS_ASSETS} DESTINATION "${APPDIR}")
|
|
|
|
# copy icon thumbnail
|
|
file(COPY ${ARGS_DIR_ICON} DESTINATION "${APPDIR}")
|
|
get_filename_component(THUMB_NAME "${ARGS_DIR_ICON}" NAME)
|
|
file(RENAME "${APPDIR}/${THUMB_NAME}" "${APPDIR}/.DirIcon")
|
|
|
|
# copy icon highres
|
|
file(COPY ${ARGS_ICON} DESTINATION "${APPDIR}")
|
|
get_filename_component(ICON_NAME "${ARGS_ICON}" NAME)
|
|
get_filename_component(ICON_EXT "${ARGS_ICON}" EXT)
|
|
file(RENAME "${APPDIR}/${ICON_NAME}" "${APPDIR}/${ARGS_NAME}${ICON_EXT}")
|
|
|
|
# Create the .desktop file
|
|
file(WRITE "${APPDIR}/${ARGS_NAME}.desktop"
|
|
"[Desktop Entry]
|
|
Type=Application
|
|
Name=${ARGS_NAME}
|
|
Icon=${ARGS_NAME}
|
|
Categories=X-None;"
|
|
)
|
|
|
|
# Invoke AppImageTool
|
|
execute_process(COMMAND ${AIT_PATH} ${APPDIR} ${ARGS_OUTPUT_NAME})
|
|
file(REMOVE_RECURSE "${APPDIR}")
|
|
|
|
endfunction()
|
|
|