From 2f4e77dab241997af797a21081ee71eaf9e0d2c7 Mon Sep 17 00:00:00 2001 From: beaglejoe Date: Sun, 5 Nov 2023 22:25:58 +0000 Subject: [PATCH] Add option to create portable app for Windows git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9208 30fe4595-0a0c-4342-8851-515496e4dcbd --- CMakeLists.txt | 47 +++++++++++++++++++++++++++ cmake/options.cmake | 2 ++ packaging/portable/sd-portable.bat.in | 1 + 3 files changed, 50 insertions(+) create mode 100644 packaging/portable/sd-portable.bat.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 694401932..04d8cbc2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -259,3 +259,50 @@ IF(OPTION_ALL_IN_ONE_PACKAGING) ENDIF(MSVC AND ${CMAKE_VERSION} VERSION_LESS "3.17") INCLUDE(CPack) ENDIF(OPTION_ALL_IN_ONE_PACKAGING) + +IF(OPTION_PORTABLE_PACKAGING) + IF(NOT ${CMAKE_VERSION} VERSION_LESS "3.0") + #[[ + This section adds a batch file for running speed-dreams-2.exe with a local settings directory. + This is similar to how 'Portable Apps' work. + It also adds projects to build a self-extracting 7-zip file (if 7-zip is installed) + ]] + ENDIF(NOT ${CMAKE_VERSION} VERSION_LESS "3.0") + IF(WIN32) + + find_program(7ZIP_EXE 7z.exe PATH_SUFFIXES 7-Zip) + find_file(7ZIP_WIN 7z.sfx PATH_SUFFIXES 7-Zip) + + set(SD_EXE_NAME "speed-dreams-2.exe") + SET(PORTABLE_PACKAGE_FILE_NAME "speed-dreams-2-r${SVN_REV}-portable-setup" CACHE STRING "Name for portable package file") + SET(PORTABLE_BATCH_FILE_NAME "speed-dreams-2-r${SVN_REV}-portable.bat" CACHE STRING "Name for portable batch file") + + CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/packaging/portable/sd-portable.bat.in" + "${CMAKE_BINARY_DIR}/${PORTABLE_BATCH_FILE_NAME}" @ONLY) + + INSTALL(PROGRAMS "${CMAKE_BINARY_DIR}/${PORTABLE_BATCH_FILE_NAME}" DESTINATION .) + + # NOTE this WILL pick up changes and additions! + # just re-build INSTALL no need to rerun CMake configure! + INSTALL(DIRECTORY packaging/portable/settings DESTINATION . ) + + if(7ZIP_EXE AND 7ZIP_WIN) + + ADD_CUSTOM_TARGET(PORTABLE_INSTALL) + ADD_CUSTOM_TARGET(PORTABLE_PACKAGE DEPENDS PORTABLE_INSTALL) + + ADD_CUSTOM_COMMAND(TARGET PORTABLE_INSTALL + COMMAND "${CMAKE_COMMAND}" --build . --target INSTALL --config $ + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Building INSTALL...") + + ADD_CUSTOM_COMMAND(TARGET PORTABLE_PACKAGE + COMMAND ${7ZIP_EXE} a -sfx7z.sfx ${CMAKE_BINARY_DIR}/${PORTABLE_PACKAGE_FILE_NAME} * + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_PREFIX} + COMMENT "Building portable package...") + + else(7ZIP_EXE AND 7ZIP_WIN) + message(STATUS "Could not find 7-ZIP. Portable build disabled.") + endif(7ZIP_EXE AND 7ZIP_WIN) + ENDIF(WIN32) +ENDIF(OPTION_PORTABLE_PACKAGING) \ No newline at end of file diff --git a/cmake/options.cmake b/cmake/options.cmake index 67e674687..8e2760a23 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -92,6 +92,8 @@ MACRO(ADD_SD_COMPILE_OPTIONS) SET(OPTION_ALL_IN_ONE_PACKAGING false CACHE BOOL "Enable CPack's monolithic PACKAGE") + SET(OPTION_PORTABLE_PACKAGING false CACHE BOOL "Enable creation of Portable App as a self-extracting zip") + SET(OPTION_TRACKEDITOR true CACHE BOOL "Build the TrackEditor (Requires Java)") IF(APPLE) diff --git a/packaging/portable/sd-portable.bat.in b/packaging/portable/sd-portable.bat.in new file mode 100644 index 000000000..7a2329eec --- /dev/null +++ b/packaging/portable/sd-portable.bat.in @@ -0,0 +1 @@ +".\bin\@SD_EXE_NAME@" --localdir ./settings \ No newline at end of file