diff --git a/deploy/windows/cpack-options.cmake.in b/deploy/windows/cpack-options.cmake.in new file mode 100644 index 000000000..f290ac384 --- /dev/null +++ b/deploy/windows/cpack-options.cmake.in @@ -0,0 +1,6 @@ +#SPDX-FileCopyrightText: 2025 Chris Rizzitello +#SPDX-License-Identifier: MIT + +if(CPACK_GENERATOR MATCHES 7Z|ZIP) + set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_FILE_NAME}-portable) +endif() diff --git a/deploy/windows/deploy.cmake b/deploy/windows/deploy.cmake index 1b539dcb2..ccc1ec1e4 100644 --- a/deploy/windows/deploy.cmake +++ b/deploy/windows/deploy.cmake @@ -5,10 +5,20 @@ # calling CMAKE_CURRENT_LIST_DIR after include would return the wrong scope var set(MY_DIR ${CMAKE_CURRENT_LIST_DIR}) +set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE) +set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .) +include(InstallRequiredSystemLibraries) + install(CODE "execute_process( COMMAND ${DEPLOYQT} --no-compiler-runtime --no-system-d3d-compiler --no-quick-import -network \"\${CMAKE_INSTALL_PREFIX}/deskflow.exe\" )") +configure_file(${MY_DIR}/pre-cpack.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/pre-cpack.cmake @ONLY) +set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_CURRENT_BINARY_DIR}/pre-cpack.cmake) + +configure_file(${MY_DIR}/cpack-options.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cpack-options.cmake @ONLY) +set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_CURRENT_BINARY_DIR}/cpack-options.cmake) + # Setup OS_STRING if(CMAKE_SYSTEM_PROCESSOR MATCHES AMD64) set(OS_STRING "win-x64") @@ -18,6 +28,8 @@ else() set(OS_STRING "win-${CMAKE_SYSTEM_PROCESSOR}") endif() +list(APPEND CPACK_GENERATOR "7Z") + # If Wix4+ is installed make a package find_program(WIX_APP wix) if (NOT "${WIX_APP}" STREQUAL "") diff --git a/deploy/windows/pre-cpack.cmake.in b/deploy/windows/pre-cpack.cmake.in new file mode 100644 index 000000000..a3237d2c1 --- /dev/null +++ b/deploy/windows/pre-cpack.cmake.in @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: 2025 Chris Rizzitello +# SPDX-License-Identifier: MIT + +if(CPACK_GENERATOR MATCHES 7Z|ZIP) + string(REPLACE " " "*" _TEMP_LIST "@CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS@") + set(${PORTABLE_LIBS} "") + foreach(ITEM ${_TEMP_LIST}) + string(REPLACE "*" " " _ITEM ${ITEM}) + file(COPY ${_ITEM} DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}) + endforeach() + file(WRITE ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/settings/Deskflow.conf " ") + file(REMOVE ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/deskflow-daemon.exe) + file(WRITE ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/README.txt +" Portable Deskflow: @CMAKE_PROJECT_VERSION@ + + The portable version must have the settings/Deskflow.conf file to save settings, or it will try to use the system settings location. + The portable version does not include the daemon, so the client will not work at UAC prompts or the login screen. +") +endif()