mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-23 12:48:40 -05:00
207db8a5c4
To comply with the WSJT_X GPL v3 license, the closed source KVASD executable must be delivered separately and optionally to end users. To facilitate this a new install option has been added to the Windows installer to install KVASD by downloading it at install time. The installer first downloads the KVASD EULA from the Internet and presents it to the user for reading and agreement. If agreement is given the KVASD binary is downloaded from the Internet and checksummed using an MD5 hash, if that passes, it is installed along with WSJT-X. An uninstall record is also written to ensure that, if installed, KVASD will be un-installed if WSJT-X is un-installed. To facilitate this enhancment to the NSIS installer the standard CPack NSIS installer script template has been overridden with a project specific version. This version also implements the more modern and recomended nsDialogs mechanism for installer custom page construction including the install options page. See CMake/Modules/NSIS.template.in for details and CMakeCPackOptions.cmake.in for usage in this installer. Merged from branch wsjtx-1.4. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@4663 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
275 lines
9.8 KiB
CMake
275 lines
9.8 KiB
CMake
# This file is configured at cmake time, and loaded at cpack time.
|
|
# To pass variables to cpack from cmake, they must be configured
|
|
# in this file.
|
|
|
|
set (CPACK_PACKAGE_VENDOR "@PROJECT_VENDOR@")
|
|
set (CPACK_PACKAGE_CONTACT "@PROJECT_CONTACT@")
|
|
set (CPACK_PACKAGE_DESCRIPTION_FILE "@PROJECT_SOURCE_DIR@/Copyright.txt")
|
|
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "@PROJECT_SUMMARY_DESCRIPTION@")
|
|
set (CPACK_RESOURCE_FILE_LICENSE "@PROJECT_SOURCE_DIR@/license.txt")
|
|
set (CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
|
|
set (CPACK_PACKAGE_EXECUTABLES wsjtx "@PROJECT_NAME@")
|
|
set (CPACK_CREATE_DESKTOP_LINKS wsjtx)
|
|
set (CPACK_STRIP_FILES TRUE)
|
|
|
|
#
|
|
# components
|
|
#
|
|
#set (CPACK_COMPONENTS_ALL runtime kvasd)
|
|
#set (CPACK_COMPONENT_RUNTIME_DISPLAY_NAME "@PROJECT_NAME@ Application")
|
|
#set (CPACK_COMPONENT_RUNTIME_DESCRIPTION "@WSJTX_DESCRIPTION_SUMMARY@")
|
|
#set (CPACK_COMPONENT_KVASD_DISPLAY_NAME "KVASD Reed Solomon Decoder")
|
|
#set (CPACK_COMPONENT_KVASD_DESCRIPTION "Optional decoder component")
|
|
|
|
if (CPACK_GENERATOR MATCHES "NSIS")
|
|
set (CPACK_STRIP_FILES FALSE) # breaks Qt packaging on Windows
|
|
|
|
set (CPACK_NSIS_INSTALL_ROOT "C:\\WSJT")
|
|
|
|
# set the install/unistall icon used for the installer itself
|
|
# There is a bug in NSI that does not handle full unix paths properly.
|
|
set (CPACK_NSIS_MUI_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\wsjtx.ico")
|
|
set (CPACK_NSIS_MUI_UNIICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\wsjtx.ico")
|
|
# set the package header icon for MUI
|
|
set (CPACK_PACKAGE_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\installer_logo.bmp")
|
|
# tell cpack to create links to the doc files
|
|
set (CPACK_NSIS_MENU_LINKS
|
|
"@PROJECT_MANUAL_DIRECTORY_URL@/@PROJECT_MANUAL@" "@PROJECT_NAME@ Documentation"
|
|
"@PROJECT_HOMEPAGE@" "@PROJECT_NAME@ Web Site"
|
|
)
|
|
# Use the icon from wsjtx for add-remove programs
|
|
set (CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\wsjtx.exe")
|
|
|
|
set (CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
|
|
set (CPACK_NSIS_HELP_LINK "@PROJECT_MANUAL_DIRECTORY_URL@/@PROJECT_MANUAL@")
|
|
set (CPACK_NSIS_URL_INFO_ABOUT "@PROJECT_HOMEPAGE@")
|
|
set (CPACK_NSIS_CONTACT "${CPACK_PACKAGE_CONTACT}")
|
|
set (CPACK_NSIS_MUI_FINISHPAGE_RUN "wsjtx.exe")
|
|
set (CPACK_NSIS_MODIFY_PATH ON)
|
|
|
|
set (CPACK_NSIS_EXTRA_DEFINES "
|
|
;
|
|
; enable local plugins
|
|
;
|
|
!ifdef NSIS_WIN32_MAKENSIS
|
|
!define NSISCONF_3 ';' ; NSIS 2 tries to parse some preprocessor instructions inside \"!if 0\" blocks!
|
|
!addincludedir '@CMAKE_CURRENT_SOURCE_DIR@\\contrib\\NSIS\\Include'
|
|
!if \${NSIS_PACKEDVERSION} > 0x02ffffff ; NSIS 3+:
|
|
!define /redef NSISCONF_3 ''
|
|
\${NSISCONF_3} !addplugindir /x86-ansi '@CMAKE_CURRENT_SOURCE_DIR@\\contrib\\NSIS\\Plugins-i386-ansi'
|
|
\${NSISCONF_3} !addplugindir /x86-unicode '@CMAKE_CURRENT_SOURCE_DIR@\\contrib\\NSIS\\Plugins-i386-unicode'
|
|
!else ; NSIS 2:
|
|
!addplugindir '@CMAKE_CURRENT_SOURCE_DIR@\\contrib\\NSIS\\Plugins-i386-ansi'
|
|
!endif ;~ NSIS_PACKEDVERSION
|
|
!undef NSISCONF_3
|
|
!endif ;~ NSIS_WIN32_MAKENSIS
|
|
|
|
; global variables
|
|
Var KVASD_EXECUTABLE
|
|
Var CB_INSTALL_KVASD
|
|
Var INSTALL_KVASD
|
|
Var RichEditLicense
|
|
Var CheckBoxAgree
|
|
Var KVASD_LICENSE
|
|
|
|
; page callbacks
|
|
Function KVASD_page_create
|
|
Push $R0
|
|
|
|
\${If} $INSTALL_KVASD = \${BST_CHECKED}
|
|
\${AndIfNot} \${FileExists} $KVASD_LICENSE
|
|
GetTempFileName $KVASD_LICENSE
|
|
retry_eula:
|
|
NSISdl::download /TIMEOUT=30000 @PROJECT_KVASD_URL@/kvasd_eula.txt $KVASD_LICENSE
|
|
Pop $R0
|
|
\${If} $R0 != success
|
|
MessageBox MB_RETRYCANCEL|MB_ICONQUESTION 'Download: @PROJECT_KVASD_URL@/kvasd_eula.txt$\\nFailed: $R0' IDRETRY retry_eula
|
|
StrCpy $INSTALL_KVASD \${BST_UNCHECKED}
|
|
Delete $KVASD_LICENSE
|
|
\${EndIf}
|
|
\${EndIf}
|
|
|
|
\${If} $INSTALL_KVASD = \${BST_CHECKED}
|
|
\${AndIf} \${FileExists} $KVASD_LICENSE
|
|
!insertmacro MUI_HEADER_TEXT `$(MUI_TEXT_LICENSE_TITLE)` `Please agree the terms of this license before installing KVASD`
|
|
|
|
; disable install button until agreed
|
|
GetDlgItem $R0 $HWNDPARENT 1
|
|
EnableWindow $R0 0
|
|
|
|
nsDialogs::Create 1018
|
|
Pop $R0
|
|
; \${If} $R0 == error
|
|
; Abort
|
|
; \${EndIf}
|
|
|
|
nsDialogs::CreateControl RichEdit20A \${WS_VISIBLE}|\${WS_CHILD}|\${WS_TABSTOP}|\${WS_VSCROLL}|\${ES_MULTILINE}|\${ES_READONLY} \${__NSD_Text_EXSTYLE} 0 0 100% -24u ''
|
|
Pop $RichEditLicense
|
|
|
|
nsRichEdit::Load $RichEditLicense $KVASD_LICENSE
|
|
|
|
\${NSD_CreateCheckBox} 0 -20u 160u 12u `$(^AcceptBtn)`
|
|
Pop $CheckBoxAgree
|
|
\${NSD_OnClick} $CheckBoxAgree KVASD_Page_CheckBoxAgree_Click
|
|
nsDialogs::Show
|
|
\${Else}
|
|
Abort ; skip page
|
|
\${EndIf}
|
|
|
|
Pop $R0
|
|
FunctionEnd
|
|
|
|
Function KVASD_page_leave
|
|
FunctionEnd
|
|
|
|
; field callbacks
|
|
Function KVASD_Page_CheckBoxAgree_Click
|
|
Pop $0
|
|
|
|
\${NSD_GetState} $CheckBoxAgree $R0
|
|
\${If} $R0 = \${BST_CHECKED}
|
|
GetDlgItem $R0 $HWNDPARENT 1
|
|
EnableWindow $R0 1
|
|
\${Else}
|
|
GetDlgItem $R0 $HWNDPARENT 1
|
|
EnableWindow $R0 0
|
|
\${EndIf}
|
|
FunctionEnd"
|
|
)
|
|
|
|
set (CPACK_NSIS_EXTRA_INIT_COMMANDS "
|
|
; initial value of $INSATLL_KVASD chack box
|
|
IntOp $INSTALL_KVASD 0 + \${BST_CHECKED}"
|
|
)
|
|
|
|
set (CPACK_NSIS_EXTRA_PAGES "
|
|
; custom page for KVASD license display and acceptance
|
|
Page custom KVASD_page_create KVASD_page_leave"
|
|
)
|
|
|
|
set (CPACK_NSIS_EXTRA_INSTALL_OPTIONS "
|
|
; add a chackbox for installing KVASD
|
|
\${NSD_CreateCheckBox} 0u 110u 100% 10u 'Install the optional KVASD decoder'
|
|
Pop $CB_INSTALL_KVASD
|
|
\${NSD_SetState} $CB_INSTALL_KVASD $INSTALL_KVASD"
|
|
)
|
|
|
|
set (CPACK_NSIS_EXTRA_INSTALL_OPTIONS_READ "
|
|
\${NSD_GetState} $CB_INSTALL_KVASD $INSTALL_KVASD"
|
|
)
|
|
|
|
set (CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "
|
|
\${If} $INSTALL_KVASD = \${BST_CHECKED}
|
|
;
|
|
; fetch KVASD license
|
|
;
|
|
StrCpy $5 @PROJECT_KVASD_URL@/@SYSTEM_NAME@/kvasd@CMAKE_EXECUTABLE_SUFFIX@
|
|
GetTempFileName $1
|
|
retry:
|
|
NSISdl::download /TIMEOUT=30000 $5.md5 $1
|
|
Pop $R0
|
|
\${If} $R0 != success
|
|
MessageBox MB_RETRYCANCEL|MB_ICONQUESTION 'Download: $5.md5$\\nFailed: $R0' IDRETRY retry
|
|
Abort
|
|
\${EndIf}
|
|
ClearErrors
|
|
FileOpen $2 $1 r
|
|
\${If} \${Errors}
|
|
MessageBox MB_RETRYCANCEL|MB_ICONQUESTION 'Failed to read MD5 hash file: $5.md5' IDRETRY retry
|
|
Abort
|
|
\${EndIf}
|
|
|
|
; extract MD5 hash
|
|
FileRead $2 $3 32
|
|
FileClose $2
|
|
|
|
;
|
|
; fetch kvasd executable
|
|
;
|
|
GetTempFileName $KVASD_EXECUTABLE
|
|
NSISdl::download /TIMEOUT=30000 $5 $KVASD_EXECUTABLE
|
|
Pop $R0
|
|
\${If} $R0 != success
|
|
MessageBox MB_RETRYCANCEL|MB_ICONQUESTION 'Download: $5$\\nFailed: $R0' IDRETRY retry
|
|
Abort
|
|
\${EndIf}
|
|
|
|
; calculate MD5 hash
|
|
Crypto::HashFile 'MD5' $KVASD_EXECUTABLE
|
|
Pop $0
|
|
|
|
\${If} $3 != $0
|
|
MessageBox MB_RETRYCANCEL|MB_ICONQUESTION 'MD5 hash check failed on: $5$\\nExpected: [$4]$\\n Actual: [$0]' IDRETRY retry
|
|
Abort
|
|
\${EndIf}
|
|
|
|
skip_kvasd:
|
|
Delete $1 ; MD5 hash file
|
|
\${EndIf}
|
|
|
|
; save $INSTALL_KVASD to registry for use in teh un-installer
|
|
WriteRegDWORD SHCTX 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${CPACK_PACKAGE_INSTALL_REGISTRY_KEY}' \\
|
|
'InstallKvasd' $INSTALL_KVASD"
|
|
)
|
|
|
|
set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
|
|
; install the kvasd executable
|
|
\${If} $INSTALL_KVASD = \${BST_CHECKED}
|
|
\${AndIf} \${FileExists} $KVASD_EXECUTABLE
|
|
DetailPrint 'Installing: $INSTDIR\\@WSJT_BIN_DESTINATION@\\kvasd@CMAKE_EXECUTABLE_SUFFIX@'
|
|
Rename $KVASD_EXECUTABLE '$INSTDIR\\@WSJT_BIN_DESTINATION@\\kvasd@CMAKE_EXECUTABLE_SUFFIX@'
|
|
\${EndIf}"
|
|
)
|
|
|
|
set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
|
|
; fetch $INSTALL_KVASD from registry
|
|
ReadRegDWORD $INSTALL_KVASD SHCTX \\
|
|
'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${CPACK_PACKAGE_INSTALL_REGISTRY_KEY}' 'InstallKvasd'
|
|
|
|
; conditionally un-install the kvasd executable
|
|
\${If} $INSTALL_KVASD = \${BST_CHECKED}
|
|
Delete '$INSTDIR\\@WSJT_BIN_DESTINATION@\\kvasd@CMAKE_EXECUTABLE_SUFFIX@'
|
|
\${EndIf}"
|
|
)
|
|
endif ()
|
|
|
|
if ("${CPACK_GENERATOR}" STREQUAL "PackageMaker")
|
|
set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-pkg")
|
|
set (CPACK_PACKAGE_DEFAULT_LOCATION "/Applications")
|
|
set (CPACK_PACKAGING_INSTALL_PREFIX "/")
|
|
endif ()
|
|
|
|
if ("${CPACK_GENERATOR}" STREQUAL "DragNDrop")
|
|
set (CPACK_DMG_VOLUME_NAME "@PROJECT_NAME@")
|
|
set (CPACK_DMG_BACKGROUND_IMAGE "@PROJECT_SOURCE_DIR@/icons/Darwin/DragNDrop Background.png")
|
|
set (CPACK_DMG_DS_STORE "@PROJECT_SOURCE_DIR@/Darwin/wsjtx_DMG.DS_Store")
|
|
set (CPACK_BUNDLE_NAME "@WSJTX_BUNDLE_NAME@")
|
|
set (CPACK_PACKAGE_ICON "@PROJECT_BINARY_DIR@/wsjtx.icns")
|
|
set (CPACK_BUNDLE_ICON "@PROJECT_BINARY_DIR@/wsjtx.icns")
|
|
set (CPACK_BUNDLE_STARTUP_COMMAND "@PROJECT_SOURCE_DIR@/Mac-wsjtx-startup.sh")
|
|
endif ()
|
|
|
|
if ("${CPACK_GENERATOR}" STREQUAL "WIX")
|
|
# Reset CPACK_PACKAGE_VERSION to deal with WiX restriction.
|
|
# But the file names still use the full CMake_VERSION value:
|
|
set (CPACK_PACKAGE_FILE_NAME
|
|
"${CPACK_PACKAGE_NAME}-@wsjtx_VERSION@-${CPACK_SYSTEM_NAME}")
|
|
set (CPACK_SOURCE_PACKAGE_FILE_NAME
|
|
"${CPACK_PACKAGE_NAME}-@wsjtx_VERSION@-Source")
|
|
|
|
if (NOT CPACK_WIX_SIZEOF_VOID_P)
|
|
set (CPACK_WIX_SIZEOF_VOID_P "@CMAKE_SIZEOF_VOID_P@")
|
|
endif ()
|
|
endif ()
|
|
|
|
if ("${CPACK_GENERATOR}" STREQUAL "DEB")
|
|
set (CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE})
|
|
set (CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} Debian)
|
|
endif ("${CPACK_GENERATOR}" STREQUAL "DEB")
|
|
|
|
if ("${CPACK_GENERATOR}" STREQUAL "RPM")
|
|
set (CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.${CPACK_RPM_PACKAGE_ARCHITECTURE})
|
|
endif ("${CPACK_GENERATOR}" STREQUAL "RPM")
|
|
|
|
message (STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
|