+; Compile with ./scripts/makensis ./scripts/naja.nsi .
+; You'll need to have previously run wine-py2exe
+
+ !include "MUI.nsh"
+
+; Application Details
+
+ !define WS_VERSION "0.0.0" ; set by makensis scripts
+ !define WS_UNPACK "naja-${WS_VERSION}"
+ !define DIST_FOLDER "../dist"
+
+ Name "Robolock"
+ OutFile "${DIST_FOLDER}\naja-${WS_VERSION}.exe"
+ InstallDir "$PROGRAMFILES\Robolock-${WS_VERSION}"
+
+; Interface Settings
+
+ !define MUI_ABORTWARNING
+
+ !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\arrow-install.ico"
+ !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\arrow-uninstall.ico"
+
+ !define MUI_HEADERIMAGE
+ !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\orange.bmp"
+ !define MUI_HEADERIMAGE_UNBITMAP "${NSISDIR}\Contrib\Graphics\Header\orange-uninstall.bmp"
+
+; Dependencies
+
+ !define COMBINED_LICENSE "../LICENSE.txt"
+ !define WS_PY2EXE_ZIP "naja-${WS_VERSION}.zip"
+ !define WS_ICON "../data/icons/robolock.ico"
+ !define WS_WINDOWS_ICON "data\icons\robolock.ico"
+ !define VCREDIST "vcredist_x86.exe"
+ !define VCREDIST_KEY "{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}"
+ !define UNINSTALLER "Uninstaller.exe"
+
+; Pages
+
+ !insertmacro MUI_PAGE_LICENSE "${COMBINED_LICENSE}"
+ !insertmacro MUI_PAGE_DIRECTORY
+ !insertmacro MUI_PAGE_INSTFILES
+
+ !insertmacro MUI_UNPAGE_CONFIRM
+ !insertmacro MUI_UNPAGE_INSTFILES
+
+; Languages
+
+ !insertmacro MUI_LANGUAGE "English"
+
+; Other Stuff
+
+ Icon "${WS_ICON}"
+ SetCompress off ; all the big stuff is already compressed
+
+; Installer Sections
+
+Section "vcredist"
+
+ SetOutPath "$INSTDIR"
+ File "${DIST_FOLDER}\${VCREDIST}"
+ ; Check if it's already installed by checking for the uninstall key
+ ; Idea and key value to check taken post and comments at:
+ ; http://blogs.msdn.com/b/astebner/archive/2009/01/29/9384143.aspx
+
+ ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${VCREDIST_KEY}" UninstallString
+ ; NSIS docs say if the key doesn't exist, we get an error and an empty string
+ IfErrors install done
+
+install:
+ ; Runs install with progress bar and no cancel button
+ ; Details taken from
+ ; http://blogs.msdn.com/b/astebner/archive/2010/10/18/9513328.aspx
+
+ DetailPrint "Installing required MS runtime libraries"
+ ExecWait "$INSTDIR/${VCREDIST} /qb!"
+
+done:
+
+ DetailPrint "MS runtime libraries already installed, skipping"
+
+SectionEnd
+
+Section "Robolock"
+ SetOutPath "$INSTDIR"
+
+ WriteUninstaller "$INSTDIR\${UNINSTALLER}"
+
+ File "${DIST_FOLDER}\${WS_PY2EXE_ZIP}"
+ File "${WS_ICON}"
+
+ ZipDLL::extractall "$INSTDIR\${WS_PY2EXE_ZIP}" "$INSTDIR"
+ Delete "$INSTDIR\${WS_PY2EXE_ZIP}"
+
+ CreateDirectory "$SMPROGRAMS\Robolock"
+
+ # link.lnk target.exe
+ # parameters icon.file icon_index_number start_options
+ # keyboard_shortcut description
+
+ CreateShortCut "$SMPROGRAMS\Robolock\Robolock ${WS_VERSION}.lnk" "$INSTDIR\${WS_UNPACK}\naja.exe" \
+ "" "$INSTDIR\${WS_UNPACK}\${WS_WINDOWS_ICON}" "" SW_SHOWNORMAL \
+ "" "Robolock"
+
+ CreateShortCut "$SMPROGRAMS\Robolock\Uninstall Robolock ${WS_VERSION}.lnk" "$INSTDIR\${UNINSTALLER}" \
+ "" "" "" SW_SHOWNORMAL \
+ "" "Uninstall Robolock"
+
+SectionEnd
+
+UninstallText "This will uninstall Robolock ${WS_VERSION}."
+UninstallIcon "${WS_ICON}"
+
+Section "Uninstall"
+ ; Delete files not deleted during install
+
+ Delete "$INSTDIR\${WS_ICON}"
+
+ ; Remove py2exe folder
+ RMDir /r /REBOOTOK "$INSTDIR\${WS_UNPACK}"
+
+ ; Remove shortcut links
+ Delete "$SMPROGRAMS\Robolock\Robolock ${WS_VERSION}.lnk"
+ Delete "$SMPROGRAMS\Robolock\Uninstall Robolock ${WS_VERSION}.lnk"
+
+ ; Remove shortcut folder if no links left
+ IfFileExists "$SMPROGRAMS\Robolock\*.lnk" shortcuts_exist 0
+ RMDir /REBOOTOK "$SMPROGRAMS\Robolock"
+ shortcuts_exist:
+
+ ; Final Clean up (no point doing this while the uninstall is incomplete)
+ RMDir /r /REBOOTOK $INSTDIR
+
+ ; Offer to reboot if needed
+ IfRebootFlag 0 noreboot
+ MessageBox MB_YESNO "A reboot is required to finish the uninstallation. Do you wish to reboot now?" IDNO noreboot
+ Reboot
+ noreboot:
+
+ ; TODO: We don't touch the vcredist stuff, since we can't tell a) if we were
+ ; the ones who installed it and b) if anything else needs it. This may cause
+ ; cruft on the users system, so should we tell the user?
+
+SectionEnd