@@ -0,0 +1,264 @@
1+; Elm Platform Installer
3+;--------------------------------
6+ !Include "FileFunc.nsh"
7+ !Include "LogicLib.nsh"
9+ !Include "WordFunc.nsh"
10+ !Include "CreateInternetShortcut.nsh"
12+;--------------------------------
15+ !Define PRODUCT_DIR_REG_KEY "Software\Elm\Elm Platform\${PLATFORM_VERSION}"
16+ !Define FILES_SOURCE_PATH "files"
17+ !Define INST_DAT "inst.dat"
18+ !Define UNINST_DAT "uninst.dat"
20+;--------------------------------
23+ Var START_MENU_FOLDER
25+;--------------------------------
29+ Name "Elm Platform ${PLATFORM_VERSION}"
30+ OutFile "ElmPlatform-${PLATFORM_VERSION}-setup.exe"
33+ InstallDir "$PROGRAMFILES\Elm Platform\${PLATFORM_VERSION}"
34+ InstallDirRegKey HKLM "${PRODUCT_DIR_REG_KEY}" ""
37+ !Define MUI_ICON "logo.ico"
38+ !Define MUI_UNICON "logo.ico"
40+ ;Request application privileges for Windows Vista
41+ RequestExecutionLevel highest
43+ ;Best available compression
44+ SetCompressor /SOLID lzma
48+ InstType "Portable (just unpack the files)"
50+;--------------------------------
53+!macro CheckAdmin thing
54+UserInfo::GetAccountType
56+${If} $0 != "admin" ;Require admin rights on NT4+
57+ MessageBox MB_YESNO "It is recommended to run this ${thing} as administrator. Do you want to quit and restart the ${thing} manually with elevated privileges?" IDNO CheckAdminDone
58+ SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
64+;--------------------------------
68+ !insertmacro CheckAdmin "installer"
69+ SetShellVarContext all
73+ !insertmacro CheckAdmin "uninstaller"
74+ SetShellVarContext all
78+ ExecShell "open" "http://elm-lang.org/get-started"
81+;--------------------------------
84+ !define MUI_ABORTWARNING
86+;--------------------------------
89+ !Define MUI_WELCOMEFINISHPAGE_BITMAP "welcome.bmp"
90+ !insertmacro MUI_PAGE_WELCOME
91+ ;!insertmacro MUI_PAGE_LICENSE "LICENSE"
92+ !insertmacro MUI_PAGE_DIRECTORY
94+ !Define MUI_COMPONENTSPAGE_NODESC
95+ !insertmacro MUI_PAGE_COMPONENTS
97+ ;Start Menu Folder Page Configuration
98+ !Define MUI_PAGE_HEADER_SUBTEXT \
99+ "Choose a Start Menu folder for the Elm Platform ${PLATFORM_VERSION} shortcuts."
100+ !Define MUI_STARTMENUPAGE_TEXT_TOP \
101+ "Select the Start Menu folder in which you would like to create Elm Platform shortcuts. You can also enter a name to create a new folder."
102+ !Define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM"
103+ !Define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_DIR_REG_KEY}"
104+ !Define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
105+ !Define MUI_STARTMENUPAGE_DEFAULTFOLDER "Elm Platform ${PLATFORM_VERSION}"
106+ !insertmacro MUI_PAGE_STARTMENU StartMenuPage $START_MENU_FOLDER
107+ !insertmacro MUI_PAGE_INSTFILES
108+ !define MUI_FINISHPAGE_RUN
109+ !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink"
110+ !define MUI_FINISHPAGE_RUN_TEXT "Open tutorial on how to use Elm Platform"
111+ !insertmacro MUI_PAGE_FINISH
113+ !insertmacro MUI_UNPAGE_WELCOME
114+ !insertmacro MUI_UNPAGE_CONFIRM
115+ !insertmacro MUI_UNPAGE_INSTFILES
116+ !insertmacro MUI_UNPAGE_FINISH
118+;--------------------------------
121+ !insertmacro MUI_LANGUAGE "English"
123+;--------------------------------
126+Section "Base components" SecMain
129+ ; Make this section mandatory
132+ !Include ${INST_DAT}
136+SectionGroup "Update system settings" SecGr
138+Section "Associate with .elm files" SecAssoc
143+ WriteRegStr HKCR ".elm" "" "elm"
144+ WriteRegStr HKCR "elm" "" "Elm Source File"
145+ WriteRegStr HKCR "elm\DefaultIcon" "" "$INSTDIR\file.ico"
146+ ;WriteRegStr HKCR "elm\shell\open\command" "" '"$INSTDIR\bin\elm.exe" "%1"'
148+ ;Remember that we registered associations
149+ WriteRegDWORD HKLM "${PRODUCT_DIR_REG_KEY}" Assocs 0x1
153+Section "Update the PATH environment variable" SecPath
158+ ; First, remove any older version
159+ ExecWait '"$SYSDIR\wscript.exe" //E:vbscript "$INSTDIR\removefrompath.vbs" "$PROGRAMFILES\Elm Platform"'
160+ ; Then add to the PATH
161+ ExecWait '"$SYSDIR\wscript.exe" //E:vbscript "$INSTDIR\updatepath.vbs" "$INSTDIR\bin"'
162+ SetShellVarContext current
164+ ; Update environment variables
165+ SendMessage ${HWND_BROADCAST} ${WM_SETTINGCHANGE} 0 "STR:Environment" /TIMEOUT=5000
169+Section "Store Elm's location in registry" SecElmLoc
173+ ; (copied from the GHC installer).
174+ ;WriteRegStr HKCU "Software\Elm\ghc-${GHC_VERSION}" "InstallDir" "$INSTDIR"
175+ WriteRegStr HKCU "Software\Elm" "InstallDir" "$INSTDIR"
179+Section "Create uninstaller" SecAddRem
184+ ; Add uninstall information to Add/Remove Programs
185+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ElmPlatform-${PLATFORM_VERSION}" \
186+ "DisplayName" "Elm Platform ${PLATFORM_VERSION}"
187+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ElmPlatform-${PLATFORM_VERSION}" \
188+ "UninstallString" "$\"$INSTDIR\Uninstall.exe$\""
189+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ElmPlatform-${PLATFORM_VERSION}" \
190+ "DisplayIcon" "$INSTDIR\logo.ico"
191+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ElmPlatform-${PLATFORM_VERSION}" \
192+ "Publisher" "elm-lang.org"
195+ WriteUninstaller "$INSTDIR\Uninstall.exe"
197+ ; This is needed for uninstaller to work
198+ WriteRegStr HKLM "${PRODUCT_DIR_REG_KEY}" "" "$INSTDIR\Uninstall.exe"
199+ WriteRegStr HKLM "${PRODUCT_DIR_REG_KEY}" "InstallDir" "$INSTDIR"
205+;Section "-StartMenu" StartMenu
208+; ; Add start menu shortcuts
210+; !insertmacro MUI_STARTMENU_WRITE_BEGIN StartMenuPage
213+; CreateDirectory "$SMPROGRAMS\$START_MENU_FOLDER"
214+; !insertmacro CreateInternetShortcut \
215+; "$SMPROGRAMS\$START_MENU_FOLDER\${HACKAGE_SHORTCUT_TEXT}" \
216+; "http://hackage.haskell.org" \
217+; "$INSTDIR\icons\hackage.ico" "0"
218+; !insertmacro MUI_STARTMENU_WRITE_END
222+;--------------------------------
228+ ExecWait '"$SYSDIR\wscript.exe" //E:vbscript "$INSTDIR\removefrompath.vbs" "$PROGRAMFILES\Elm Platform"'
229+ SetShellVarContext current
231+ !Include ${UNINST_DAT}
233+ Delete "$INSTDIR\Uninstall.exe"
236+ ;Since we install to '$PF\Elm Platform\$PLATFORM_VERSION', we
237+ ;should also try to delete '$PF\Elm Platform' if it is empty.
238+ ${GetParent} $INSTDIR $R0
241+ ; Delete start menu shortcuts
242+ ;!insertmacro MUI_STARTMENU_GETFOLDER StartMenuPage $START_MENU_FOLDER
244+ ;Delete "$SMPROGRAMS\$START_MENU_FOLDER\${HACKAGE_SHORTCUT_TEXT}.url"
245+ ;RMDir "$SMPROGRAMS\$START_MENU_FOLDER\"
247+ ; Delete registry keys
249+ ReadRegDWORD $0 HKLM "${PRODUCT_DIR_REG_KEY}" Assocs
252+ DeleteRegValue HKCR ".elm" ""
253+ DeleteRegKey HKCR "elm\DefaultIcon"
256+ DeleteRegKey HKCU "Software\Elm"
257+ DeleteRegKey HKLM "${PRODUCT_DIR_REG_KEY}"
258+ DeleteRegKey /IfEmpty HKCU Software\Elm
259+ DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ElmPlatform-${PLATFORM_VERSION}"
261+ ; Update environment variables
262+ SendMessage ${HWND_BROADCAST} ${WM_SETTINGCHANGE} 0 "STR:Environment" /TIMEOUT=5000