dl-fldigi/data/win32/fldigi.nsi

262 wiersze
9.2 KiB
Plaintext

# -*- conf -*-
# NSIS installer script based on example2.nsi from the nsis-2.44 distribution.
# Copyright (c) 2009 Stelios Bounanos, M0GLD.
# License: GPLv3+: GNU GPL version 3 or later.
# Variables
!define FLDIGI_DESCRIPTION "${FLDIGI_NAME} ${FLDIGI_VERSION}"
!define FLDIGI_STRING "${FLDIGI_NAME}-${FLDIGI_VERSION}"
!define FLARQ_DESCRIPTION "${FLARQ_NAME} ${FLARQ_VERSION}"
!define FLARQ_STRING "${FLARQ_NAME}-${FLARQ_VERSION}"
!define HABMODE " HAB mode"
!ifdef HAVE_FLDIGI
!define PRODUCT_BINARY "${FLDIGI_BINARY}"
!define PRODUCT_NAME "${FLDIGI_NAME}"
!define PRODUCT_VERSION "${FLDIGI_VERSION}"
!define PRODUCT_STRING "${FLDIGI_STRING}"
!define PRODUCT_DESCRIPTION "${FLDIGI_DESCRIPTION}"
!else ifdef HAVE_FLARQ
!define PRODUCT_BINARY "${FLARQ_BINARY}"
!define PRODUCT_NAME "${FLARQ_NAME}"
!define PRODUCT_VERSION "${FLARQ_VERSION}"
!define PRODUCT_STRING "${FLARQ_STRING}"
!define PRODUCT_DESCRIPTION "${FLARQ_DESCRIPTION}"
!else
!error "Either HAVE_FLDIGI or HAVE_FLARQ must be defined"
!endif
# Compression options
SetCompressor /SOLID lzma
# This function is called before displaying the first installer page.
# It aborts the installation if the Windows version is too old.
!include WinVer.nsh
Function .onInit
${IfNot} ${AtLeastWin2000}
MessageBox MB_ICONSTOP "Sorry, your Windows version is too old.$\n${PRODUCT_NAME} requires Windows 2000 or later."
Abort
${EndIf}
FunctionEnd
# The name of the installer
Name "${PRODUCT_DESCRIPTION}"
# The file to write
OutFile ${INSTALLER_FILE}
# The default installation directory
InstallDir $PROGRAMFILES\${PRODUCT_STRING}
# Registry key to check for directory (so if you install again, it will
# overwrite the old one automatically)
!define INSTALL_DIR_REG_KEY SOFTWARE\${PRODUCT_STRING}
InstallDirRegKey HKLM "${INSTALL_DIR_REG_KEY}" "Install_Dir"
# Request application privileges for Windows Vista
RequestExecutionLevel admin
# License
LicenseText "${PRODUCT_NAME} is distributed under the GNU GPL as detailed \
below. You must abide by the terms of this license if you modify or \
redistribute the program." "Continue"
LicenseData "${LICENSE_FILE}"
SubCaption 0 ": License Information"
# Other options
BrandingText " "
InstProgressFlags smooth
VIAddVersionKey ProductName "${PRODUCT_NAME}"
VIAddVersionKey ProductVersion "${PRODUCT_VERSION}"
VIAddVersionKey FileVersion "${PRODUCT_VERSION}"
VIAddVersionKey FileDescription "${FLDIGI_DESCRIPTION} installer"
VIAddVersionKey LegalCopyright "Fldigi developers"
VIAddVersionKey OriginalFilename "${INSTALLER_FILE}"
VIProductVersion "3.0.0.0"
WindowIcon off
XPStyle on
# Installer pages
Page license
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles
# Registry uninstall path
!define REG_UNINSTALL_PATH Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_STRING}
# This is a hidden section and is always selected. It writes the uninstall
# registry keys and uninstaller binary.
Section -install
# Set output path to the installation directory.
SetOutPath $INSTDIR
# Write the installation paths into the registry
WriteRegStr HKLM "${INSTALL_DIR_REG_KEY}" "Install_Dir" "$INSTDIR"
# Write the uninstall keys for Windows
WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "DisplayName" "${PRODUCT_DESCRIPTION}"
WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "DisplayIcon" '"$INSTDIR\${PRODUCT_BINARY}"'
WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "HelpLink" "${SUPPORT_URL}"
WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "Publisher" "Fldigi developers"
WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "URLUpdateInfo" "${UPDATES_URL}"
WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "QuietUninstallString" '"$INSTDIR\uninstall.exe" /S'
WriteRegDWORD HKLM "${REG_UNINSTALL_PATH}" "NoModify" 1
WriteRegDWORD HKLM "${REG_UNINSTALL_PATH}" "NoRepair" 1
WriteUninstaller "uninstall.exe"
SectionEnd
!ifdef HAVE_FLDIGI
Var WANT_FLDIGI
!endif
!ifdef HAVE_FLARQ
Var WANT_FLARQ
!endif
# This section is present (and required) if the installer contains fldigi.
!ifdef HAVE_FLDIGI
Section "Fldigi"
SectionIn RO
SetOutPath $INSTDIR
File "${FLDIGI_BINARY}"
File /nonfatal "${MINGWM_DLL}" "${PTW32_DLL}"
!ifdef FLDIGI_LOCALE_DIR
File /r "${FLDIGI_LOCALE_PATH}/${FLDIGI_LOCALE_DIR}"
!endif
StrCpy $WANT_FLDIGI "true"
SectionEnd
!endif
# This section is present if the installer contains flarq. It is optional if
# the installer also contains fldigi.
!ifdef HAVE_FLARQ
Section "Flarq"
!ifndef HAVE_FLDIGI
SectionIn RO
!endif
SetOutPath $INSTDIR
File "${FLARQ_BINARY}"
!ifndef HAVE_FLDIGI
File /nonfatal "${MINGWM_DLL}" "${PTW32_DLL}"
!endif
StrCpy $WANT_FLARQ "true"
SectionEnd
!endif
# Start Menu path
!define SM_PATH_BASE $SMPROGRAMS\${PRODUCT_NAME}
!define SM_PATH ${SM_PATH_BASE}\${PRODUCT_STRING}
# The following sections are optional
Section "Start Menu Shortcuts"
CreateDirectory "${SM_PATH}"
!ifdef HAVE_FLDIGI
${If} $WANT_FLDIGI == 'true'
CreateShortCut "${SM_PATH}\${FLDIGI_NAME}.lnk" "$INSTDIR\${FLDIGI_BINARY}" "" "$INSTDIR\${FLDIGI_BINARY}" 0
CreateShortCut "${SM_PATH}\${FLDIGI_NAME} (HAB mode).lnk" "$INSTDIR\${FLDIGI_BINARY}" "--hab" "$INSTDIR\${FLDIGI_BINARY}" 0
CreateShortCut "${SM_PATH}\${FLDIGI_NAME} Beginners' Guide.lnk" "${GUIDE_URL}"
CreateShortCut "${SM_PATH}\${FLDIGI_NAME} Documentation.lnk" "${FLDIGI_DOCS_URL}"
${EndIf}
!endif
!ifdef HAVE_FLARQ
${If} $WANT_FLARQ == 'true'
CreateShortCut "${SM_PATH}\${FLARQ_NAME}.lnk" "$INSTDIR\${FLARQ_BINARY}" "" "$INSTDIR\${FLARQ_BINARY}" 0
CreateShortCut "${SM_PATH}\${FLARQ_NAME} Documentation.lnk" "${FLARQ_DOCS_URL}"
${EndIf}
!endif
CreateShortCut "${SM_PATH}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
SectionEnd
Section "Desktop Shortcuts"
!ifdef HAVE_FLDIGI
${If} $WANT_FLDIGI == 'true'
CreateShortCut "$DESKTOP\${FLDIGI_DESCRIPTION}.lnk" "$INSTDIR\${FLDIGI_BINARY}" "" \
"$INSTDIR\${FLDIGI_BINARY}" 0
CreateShortCut "$DESKTOP\${FLDIGI_DESCRIPTION}${HABMODE}.lnk" "$INSTDIR\${FLDIGI_BINARY}" "--hab" \
"$INSTDIR\${FLDIGI_BINARY}" 0
${EndIf}
!endif
!ifdef HAVE_FLARQ
${If} $WANT_FLARQ == 'true'
CreateShortCut "$DESKTOP\${FLARQ_DESCRIPTION}.lnk" "$INSTDIR\${FLARQ_BINARY}" "" \
"$INSTDIR\${FLARQ_BINARY}" 0
${EndIf}
!endif
SectionEnd
# This is unselected by default
Section /o "Quick Launch Shortcuts"
!ifdef HAVE_FLDIGI
${If} $WANT_FLDIGI == 'true'
CreateShortCut "$QUICKLAUNCH\${FLDIGI_DESCRIPTION}.lnk" "$INSTDIR\${FLDIGI_BINARY}" "" \
"$INSTDIR\${FLDIGI_BINARY}" 0
CreateShortCut "$QUICKLAUNCH\${FLDIGI_DESCRIPTION}${HABMODE}.lnk" "$INSTDIR\${FLDIGI_BINARY}" "--hab" \
"$INSTDIR\${FLDIGI_BINARY}" 0
${EndIf}
!endif
!ifdef HAVE_FLARQ
${If} $WANT_FLARQ == 'true'
CreateShortCut "$QUICKLAUNCH\${FLARQ_DESCRIPTION}.lnk" "$INSTDIR\${FLARQ_BINARY}" "" \
"$INSTDIR\${FLARQ_BINARY}" 0
${EndIf}
!endif
SectionEnd
# Uninstaller
Section "Uninstall"
# Remove registry keys
DeleteRegKey HKLM "${REG_UNINSTALL_PATH}"
DeleteRegKey HKLM "${INSTALL_DIR_REG_KEY}"
# Remove files and uninstaller
!ifdef HAVE_FLDIGI
Delete /REBOOTOK $INSTDIR\${FLDIGI_BINARY}
!ifdef FLDIGI_LOCALE_DIR
RMDir /r /REBOOTOK $INSTDIR\${FLDIGI_LOCALE_DIR}
!endif
!endif
!ifdef HAVE_FLARQ
Delete /REBOOTOK $INSTDIR\${FLARQ_BINARY}
!endif
Delete /REBOOTOK $INSTDIR\${MINGWM_DLL}
Delete /REBOOTOK $INSTDIR\${PTW32_DLL}
Delete /REBOOTOK $INSTDIR\uninstall.exe
# Remove shortcuts, if any
Delete "${SM_PATH}\*.*"
!ifdef HAVE_FLDIGI
Delete "$DESKTOP\${FLDIGI_DESCRIPTION}.lnk"
Delete "$QUICKLAUNCH\${FLDIGI_DESCRIPTION}.lnk"
Delete "$DESKTOP\${FLDIGI_DESCRIPTION}${HABMODE}.lnk"
Delete "$QUICKLAUNCH\${FLDIGI_DESCRIPTION}${HABMODE}.lnk"
!endif
!ifdef HAVE_FLARQ
Delete "$DESKTOP\${FLARQ_DESCRIPTION}.lnk"
Delete "$QUICKLAUNCH\${FLARQ_DESCRIPTION}.lnk"
!endif
# Remove directories used
RMDir "${SM_PATH}"
RMDir "${SM_PATH_BASE}"
RMDir "$INSTDIR"
SectionEnd
# Offer to reboot the machine if the reboot flag is nonzero. This flag is set by
# commands that specify the /REBOOTOK switch if the BINARY_* files were in use
# during uninstallation. Stupid Windows.
Function un.onGUIEnd
IfRebootFlag 0 noreboot
MessageBox MB_YESNO|MB_ICONQUESTION \
"A reboot is required to finish removing ${PRODUCT_NAME}. Do you wish to reboot now?" IDNO noreboot
Reboot
noreboot:
FunctionEnd
# Tell the user if we could not reboot for some reason.
Function un.onRebootFailed
MessageBox MB_OK|MB_ICONSTOP "Reboot failed. Please reboot manually." /SD IDOK
FunctionEnd