diff --git a/release-tool b/release-tool index 434547fc..a3813fd9 100755 --- a/release-tool +++ b/release-tool @@ -640,9 +640,13 @@ build() { -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" $CMAKE_OPTIONS "$SRC_DIR" logInfo "Compiling and packaging sources..." - make $MAKE_OPTIONS package + make $MAKE_OPTIONS preinstall + # Call cpack directly instead of calling make package. + # This is important because we want to build the MSI when making a + # release. + cpack -G "NSIS;WIX;ZIP" - mv "./${APP_NAME}-${RELEASE_NAME}-"*.{exe,zip} ../ + mv "./${APP_NAME}-${RELEASE_NAME}-"*.{exe,msi,zip} ../ else mkdir -p "${OUTPUT_DIR}/bin-release" diff --git a/share/windows/wix-banner.bmp b/share/windows/wix-banner.bmp new file mode 100644 index 00000000..14a13b8f Binary files /dev/null and b/share/windows/wix-banner.bmp differ diff --git a/share/windows/wix-dialog.bmp b/share/windows/wix-dialog.bmp new file mode 100644 index 00000000..b26ad1e2 Binary files /dev/null and b/share/windows/wix-dialog.bmp differ diff --git a/share/windows/wix-patch.xml b/share/windows/wix-patch.xml new file mode 100644 index 00000000..1c1d222a --- /dev/null +++ b/share/windows/wix-patch.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/share/windows/wix-template.xml b/share/windows/wix-template.xml new file mode 100644 index 00000000..1e47029e --- /dev/null +++ b/share/windows/wix-template.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + ProductIcon.ico + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0b9f7a82..42e1bdbd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -309,6 +309,13 @@ if(MINGW) set(OUTPUT_FILE_POSTFIX "Win32") endif() + # We have to copy the license file in the configuration phase. + # CMake checks that CPACK_RESOURCE_FILE_LICENSE actually exists and + # we have to copy it because WiX needs it to have a .txt extension. + execute_process(COMMAND ${CMAKE_COMMAND} -E copy + "${CMAKE_SOURCE_DIR}/LICENSE.GPL-2" + "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") + set(CPACK_GENERATOR "ZIP;NSIS") set(CPACK_STRIP_FILES ON) set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}") @@ -316,7 +323,7 @@ if(MINGW) set(CPACK_PACKAGE_VERSION ${KEEPASSXC_VERSION}) set(CPACK_PACKAGE_VENDOR "${PROGNAME} Team") string(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/windows/installer-header.bmp") - set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.GPL-2") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") set(CPACK_NSIS_MUI_UNIICON "${CPACK_NSIS_MUI_ICON}") @@ -329,6 +336,13 @@ if(MINGW) set(CPACK_NSIS_DISPLAY_NAME ${PROGNAME}) set(CPACK_NSIS_PACKAGE_NAME "${PROGNAME} v${KEEPASSXC_VERSION}") set(CPACK_NSIS_MUI_FINISHPAGE_RUN "../${PROGNAME}.exe") + set(CPACK_WIX_UPGRADE_GUID 88785A72-3EAE-4F29-89E3-BC6B19BA9A5B) + set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") + set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/share/windows/wix-banner.bmp") + set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/share/windows/wix-dialog.bmp") + set(CPACK_WIX_TEMPLATE "${CMAKE_SOURCE_DIR}/share/windows/wix-template.xml") + set(CPACK_WIX_PATCH_FILE "${CMAKE_SOURCE_DIR}/share/windows/wix-patch.xml") + set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://keepassxc.org") include(CPack) install(CODE "