WSJT-X/CMakeCPackOptions.cmake.in
Bill Somerville 2d3bc88078 Ensure that KVASD can be executed from non-admin Windows accounts
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@5393 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
2015-05-17 16:42:36 +00:00

281 lines
10 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_SUMMARY "@PROJECT_SUMMARY_DESCRIPTION@")
set (CPACK_RESOURCE_FILE_LICENSE "@PROJECT_SOURCE_DIR@/COPYING")
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
md5dll::GetMD5File $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 and ensure it can be executed
\${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@'
AccessControl::ClearOnFile '$INSTDIR\\@WSJT_BIN_DESTINATION@\\kvasd@CMAKE_EXECUTABLE_SUFFIX@' '(BU)' 'GenericRead + GenericExecute'
Pop $R0
\${If} $R0 != ok
Pop $R0
MessageBox MB_OK 'Failed to set KVASD file permissions.\\n$R0'
Abort
\${EndIf}
\${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}")