view scripts/mamba.nsi @ 468:2079f6f576e1

Add vcredist.
author Simon Cross <hodgestar@gmail.com>
date Sat, 17 Sep 2011 21:43:37 +0200
parents 59a29ec5da5d
children
line wrap: on
line source

; Compile with ./scripts/makensis ./scripts/mamba.nsi .
; You'll need to have previously run wine-py2exe

  !include "MUI.nsh"

; Application Details

  !define MM_VERSION "0.0.0" ; set by makensis scripts
  !define MM_UNPACK "mutable-mamba-${MM_VERSION}"
  !define DIST_FOLDER "../dist"

  Name "Mutable Mamba"
  OutFile "${DIST_FOLDER}\mutable-mamba-${MM_VERSION}.exe"
  InstallDir "$PROGRAMFILES\Mutable-Mamba-${MM_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 MM_ICON "../data/icons/program/icon.ico"
  !define MM_WINDOWS_ICON "data\icons\program\icon.ico"
  !define MM_PY2EXE_ZIP "mutable-mamba-${MM_VERSION}.zip"
  !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 "${MM_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 "Mutable Mamba"
  SetOutPath "$INSTDIR"

  WriteUninstaller "$INSTDIR\${UNINSTALLER}"

  File "${DIST_FOLDER}\${MM_PY2EXE_ZIP}"
  File "${MM_ICON}"

  ZipDLL::extractall "$INSTDIR\${MM_PY2EXE_ZIP}" "$INSTDIR"
  Delete "$INSTDIR\${MM_PY2EXE_ZIP}"

  CreateDirectory "$SMPROGRAMS\Mutable Mamba"

  # link.lnk target.exe
  #   parameters icon.file icon_index_number start_options
  #   keyboard_shortcut description

  CreateShortCut "$SMPROGRAMS\Mutable Mamba\Mutable Mamba ${MM_VERSION}.lnk" "$INSTDIR\${MM_UNPACK}\mamba.exe" \
     "" "$INSTDIR\${MM_UNPACK}\${MM_WINDOWS_ICON}" "" SW_SHOWNORMAL \
     "" "Mutable Mamba"

  CreateShortCut "$SMPROGRAMS\Mutable Mamba\Uninstall Mutable Mamba ${MM_VERSION}.lnk" "$INSTDIR\${UNINSTALLER}" \
     "" "" "" SW_SHOWNORMAL \
     "" "Uninstall Mutable Mamba"

SectionEnd

UninstallText "This will uninstall Mutable Mamba ${MM_VERSION}."
UninstallIcon "${MM_ICON}"

Section "Uninstall"
  ; Delete files not deleted during install
  Delete "$INSTDIR\${MM_ICON}"

  ; Remove py2exe folder
  RMDir /r /REBOOTOK "$INSTDIR\${MM_UNPACK}"

  ; Remove shortcut links
  Delete "$SMPROGRAMS\Mutable Mamba\Mutable Mamba ${MM_VERSION}.lnk"
  Delete "$SMPROGRAMS\Mutable Mamba\Uninstall Mutable Mamba ${MM_VERSION}.lnk"

  ; Remove shortcut folder if no links left
  IfFileExists "$SMPROGRAMS\Mutable Mamba\*.lnk" shortcuts_exist 0
    RMDir /REBOOTOK "$SMPROGRAMS\Mutable Mamba"
  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