;--------------------------------
;Configuration
;Needs to be 4 numbers: W.X.Y.Z
-!define VIKING_VERSION "1.5.0.0"
+!define VIKING_VERSION "1.6.1.0"
;The name var is set in .onInit
Name $name
+;Allow overiding location of binary components for the install
+!ifndef BINARIES
+ !define BINARIES ".\bin"
+!endif
+
OutFile "viking-${VIKING_VERSION}.exe"
-SetCompressor /SOLID lzma
+;NB Using /SOLID method on a mingw32 setup seems to generate an exe that fails the CRC check
+;So now don't set the compressor here - it can be set by the calling command/script if necessary.
+;SetCompressor /SOLID bzip2
ShowInstDetails show
ShowUninstDetails show
SetDateSave on
!include "Sections.nsh"
!include "WinVer.nsh"
!include "LogicLib.nsh"
+!include "x64.nsh"
;; http://nsis.sourceforge.net/File_Association
!include "FileAssociation.nsh"
;Pages
!insertmacro MUI_PAGE_WELCOME
- !insertmacro MUI_PAGE_LICENSE ".\bin\COPYING_GPL.txt"
+ !insertmacro MUI_PAGE_LICENSE "${BINARIES}\COPYING_GPL.txt"
!insertmacro MUI_PAGE_COMPONENTS
; Viking install dir page
;; Start Install Sections ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+LicenseData "${BINARIES}\COPYING_GPL.txt"
+LicenseForceSelection checkbox
+
;--------------------------------
;Uninstall any old version of Viking
done:
SectionEnd
+
;--------------------------------
;Viking Install Section
viking_hklm:
WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "" "$INSTDIR\viking.exe"
WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "Path" "$R1\bin"
- WriteRegStr HKLM ${VIKING_REG_KEY} "" "$INSTDIR"
- WriteRegStr HKLM ${VIKING_REG_KEY} "Version" "${VIKING_VERSION}"
- WriteRegStr HKLM "${VIKING_UNINSTALL_KEY}" "DisplayName" "Viking"
- WriteRegStr HKLM "${VIKING_UNINSTALL_KEY}" "DisplayVersion" "${VIKING_VERSION}"
- WriteRegStr HKLM "${VIKING_UNINSTALL_KEY}" "HelpLink" "http://sourceforge.net/apps/mediawiki/viking/"
- WriteRegDWORD HKLM "${VIKING_UNINSTALL_KEY}" "NoModify" 1
- WriteRegDWORD HKLM "${VIKING_UNINSTALL_KEY}" "NoRepair" 1
- WriteRegStr HKLM "${VIKING_UNINSTALL_KEY}" "UninstallString" "$INSTDIR\${VIKING_UNINST_EXE}"
; Sets scope of the desktop and Start Menu entries for all users.
SetShellVarContext "all"
Goto viking_install_files
;Install rights for Current User only
viking_hkcu:
- WriteRegStr HKCU ${VIKING_REG_KEY} "" "$INSTDIR"
- WriteRegStr HKCU ${VIKING_REG_KEY} "Version" "${VIKING_VERSION}"
- WriteRegStr HKCU "${VIKING_UNINSTALL_KEY}" "DisplayName" "Viking"
- WriteRegStr HKCU "${VIKING_UNINSTALL_KEY}" "DisplayVersion" "${VIKING_VERSION}"
- WriteRegStr HKCU "${VIKING_UNINSTALL_KEY}" "HelpLink" "http://sourceforge.net/apps/mediawiki/viking/"
- WriteRegDWORD HKCU "${VIKING_UNINSTALL_KEY}" "NoModify" 1
- WriteRegDWORD HKCU "${VIKING_UNINSTALL_KEY}" "NoRepair" 1
- WriteRegStr HKCU "${VIKING_UNINSTALL_KEY}" "UninstallString" "$INSTDIR\${VIKING_UNINST_EXE}"
Goto viking_install_files
;No install rights!
SetOutPath "$INSTDIR"
SetOverwrite on
- File /r .\bin\*.*
+ ; Common settings
+ WriteRegStr SHCTX ${VIKING_REG_KEY} "" "$INSTDIR"
+ WriteRegStr SHCTX ${VIKING_REG_KEY} "Version" "${VIKING_VERSION}"
+ ${If} ${RunningX64}
+ WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "DisplayName" "Viking (x86)"
+ ${Else}
+ WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "DisplayName" "Viking (x64)"
+ ${EndIf}
+ WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "DisplayVersion" "${VIKING_VERSION}"
+ WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "DisplayIcon" "$INSTDIR\viking_icon.ico"
+ WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "HelpLink" "http://sourceforge.net/p/viking/wikiallura"
+ WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "URLInfoAbout" "http://sourceforge.net/projects/viking/"
+ WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "Publisher" "The Viking developer community"
+ WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "Comments" "$(VIKING_UNINSTALL_COMMENTS)"
+ WriteRegDWORD SHCTX "${VIKING_UNINSTALL_KEY}" "NoModify" 1
+ WriteRegDWORD SHCTX "${VIKING_UNINSTALL_KEY}" "NoRepair" 1
+ WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "UninstallString" "$INSTDIR\${VIKING_UNINST_EXE}"
+
+ ; Copy only specific items as now some components (e.g. GPSBabel) are optional.
+ ; This is mostly to get a more accurate install size value (especially as saved into the registry)
+ File ${BINARIES}\viking*
+ File ${BINARIES}\g*.exe
+ File ${BINARIES}\*.dll
+ File ${BINARIES}\*.txt
+ File ${BINARIES}\magic.mgc
+ File /r ${BINARIES}\data
+ File /r ${BINARIES}\locale
+ File /r ${BINARIES}\share
+ File /r ${BINARIES}\lib
+
+ ; Estimate install size based on files in $INSTDIR
+ ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
+ IntFmt $0 "0x%08X" $0
+ WriteRegDWORD SHCTX "${VIKING_UNINSTALL_KEY}" "EstimatedSize" "$0"
; If we don't have install rights we're done
StrCmp $R0 "NONE" done
; GPSBabel Install Section
;
Section $(VIKING_GPSBABEL_SECTION_TITLE) SecGPSBabel
- File "bin\Optional\GPSBabel-1.5.1-Setup.exe"
- ExecWait '"$INSTDIR\GPSBabel-1.5.1-Setup.exe" /SILENT'
- Delete "$INSTDIR\GPSBabel-1.5.1-Setup.exe"
+ File "${BINARIES}\Optional\GPSBabel-1.5.2-Setup.exe"
+ ExecWait '"$INSTDIR\GPSBabel-1.5.2-Setup.exe" /SILENT'
+ Delete "$INSTDIR\GPSBabel-1.5.2-Setup.exe"
SectionEnd
;--------------------------------
cont_uninstall:
- ;Simply wipe the Viking install dir
- RMDir /r "$INSTDIR"
+ ; http://nsis.sourceforge.net/Docs/Chapter4.html
+ ; Don't use:
+ ;RMDir /r "$INSTDIR"
+ ; Warning: is not safe. Can delete entire Program Files directory!
+
+ ; TODO try this method instead:
+ ; http://nsis.sourceforge.net/Uninstall_only_installed_files
+
+ ; Specific remove files
+ ; Thus alsos leaves any files the user has saved (particularly .vik or .gpx) into the Viking directory
+ Delete "$INSTDIR\viking-cache.py"
+ Delete "$INSTDIR\viking.pdf"
+ Delete "$INSTDIR\viking_icon.ico"
+ Delete "$INSTDIR\*.exe"
+ Delete "$INSTDIR\*.dll"
+ Delete "$INSTDIR\*.txt"
+ Delete "$INSTDIR\magic.mgc"
+ Delete "$INSTDIR\data\*txt"
+ Delete "$INSTDIR\data\*xml"
+ RMDir "$INSTDIR\data"
+ RMDir /r "$INSTDIR\locale"
+ RMDir /r "$INSTDIR\lib"
+ RMDir /r "$INSTDIR\share"
+ RMDir "$INSTDIR"
; Shortcuts..
Delete "$DESKTOP\Viking.lnk"
FunctionEnd
!macroend
-!insertmacro RunCheckMacro ""
-!insertmacro RunCheckMacro "un."
+;!insertmacro RunCheckMacro ""
+;!insertmacro RunCheckMacro "un."
;Installer extra configuration at execution time: language, path, ...
Function .onInit
Push $R2
;Check if viking is running
- Call RunCheck
+ ;Call RunCheck
StrCpy $name "Viking ${VIKING_VERSION}"
ClearErrors
Pop $R0
StrCmp $R0 "HKLM" 0 user_dir
- StrCpy $INSTDIR "$PROGRAMFILES\Viking"
- Goto instdir_done
+ ${If} ${RunningX64}
+ StrCpy $INSTDIR "$PROGRAMFILES64\Viking"
+ ${Else}
+ StrCpy $INSTDIR "$PROGRAMFILES\Viking" ; $PROGRAMFILES32 also works
+ ${EndIf}
+ Goto instdir_done
user_dir:
Push $SMPROGRAMS
${GetParent} $SMPROGRAMS $R2
Function un.onInit
;Check if viking is running
- Call un.RunCheck
+ ;Call un.RunCheck
StrCpy $name "Viking ${VIKING_VERSION}"
; Get stored language preference