Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions AppImage.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
find_program(APPIMAGETOOL_PATH appimagetool OPTIONAL)

if (NOT APPIMAGETOOL_PATH)
function(generate_appimage TARGET DESKTOP ICON)
message("appimagetool was not found. Skipping AppImage generation")
endfunction()
else()
function(generate_appimage TARGET NAME DESKTOP ICON)
cmake_path(GET ICON FILENAME ICON_FILENAME)
cmake_path(GET DESKTOP FILENAME DESKTOP_FILENAME)
cmake_path(GET ICON STEM ICON_FILENAME_NOEXT)

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/bin/${NAME}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/bin
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${TARGET}> ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/bin/${NAME}
DEPENDS ${TARGET})

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/share/icons/hicolor/256x256/apps/${ICON_FILENAME}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/share/icons/hicolor/256x256
COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/share/icons/hicolor/256x256/apps/${ICON_FILENAME}
DEPENDS ${ICON})

configure_file(${DESKTOP} ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/share/applications/${DESKTOP_FILENAME})

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/appdir/.DirIcon
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/appdir
COMMAND ${CMAKE_COMMAND} -E copy usr/share/icons/hicolor/256x256/apps/${ICON_FILENAME} .DirIcon
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/appdir
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/share/icons/hicolor/256x256/apps/${ICON_FILENAME})

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/appdir/AppRun
COMMAND ${CMAKE_COMMAND} -E create_symlink usr/bin/${NAME} AppRun
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/appdir
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/bin/${NAME})

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/appdir/${ICON_FILENAME}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/appdir
COMMAND ${CMAKE_COMMAND} -E copy usr/share/icons/hicolor/256x256/apps/${ICON_FILENAME} ${ICON_FILENAME}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/appdir
DEPENDS ${ICON})

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/appdir/${DESKTOP_FILENAME}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/appdir
COMMAND ${CMAKE_COMMAND} -E create_symlink usr/share/applications/${DESKTOP_FILENAME} ${DESKTOP_FILENAME}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/appdir
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/share/applications/${DESKTOP_FILENAME})

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}.AppImage
COMMAND ${APPIMAGETOOL_PATH} ${CMAKE_CURRENT_BINARY_DIR}/appdir ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}.AppImage
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/bin/${NAME}
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/share/icons/hicolor/256x256/apps/${ICON_FILENAME}
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/appdir/usr/share/applications/${DESKTOP_FILENAME}
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/appdir/.DirIcon
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/appdir/AppRun
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/appdir/${ICON_FILENAME}
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/appdir/${DESKTOP_FILENAME}
)

add_custom_target(${TARGET}_AppImage
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}.AppImage)
endfunction()
endif()
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ elseif (UNIX)
find_package(OpenSSL REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE
ZLIB::ZLIB OpenSSL::SSL OpenSSL::Crypto CURL::libcurl)
include(AppImage.cmake)
generate_appimage(${PROJECT_NAME} "beammp-launcher" ${CMAKE_CURRENT_SOURCE_DIR}/beammp-launcher.desktop ${CMAKE_CURRENT_SOURCE_DIR}/beammp.png)
else(WIN32) #MINGW
add_definitions("-D_WIN32_WINNT=0x0600")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -s --static")
Expand Down
9 changes: 9 additions & 0 deletions beammp-launcher.desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=BeamMP Launcher
Icon=@ICON_FILENAME_NOEXT@
TryExec=@NAME@
Exec=@NAME@
Categories=Game
Terminal=true
Binary file added beammp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions src/Startup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,10 @@ void CheckName() {
std::wstring DN = GetEN(), CDir = Utils::ToWString(options.executable_name), FN = CDir.substr(CDir.find_last_of('\\') + 1);
#elif defined(__linux__)
std::string DN = GetEN(), CDir = options.executable_name, FN = CDir.substr(CDir.find_last_of('/') + 1);
if (DN.find_last_of(".AppImage") != std::string::npos) {
warn("Looks like launcher is an AppImage. Skipping name check");
return;
}
#endif
if (FN != DN) {
if (fs::exists(DN))
Expand Down
Loading