@@ -0,0 +1,264 @@
1+; Elm Platform Installer
2+
3+;--------------------------------
4+;Includes
5+
6+ !Include "FileFunc.nsh"
7+ !Include "LogicLib.nsh"
8+ !Include "MUI2.nsh"
9+ !Include "WordFunc.nsh"
10+ !Include "CreateInternetShortcut.nsh"
11+
12+;--------------------------------
13+;Defines
14+
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"
19+
20+;--------------------------------
21+;Variables
22+
23+ Var START_MENU_FOLDER
24+
25+;--------------------------------
26+;General settings
27+
28+ ;Name and file
29+ Name "Elm Platform ${PLATFORM_VERSION}"
30+ OutFile "ElmPlatform-${PLATFORM_VERSION}-setup.exe"
31+
32+ ;Default install dir
33+ InstallDir "$PROGRAMFILES\Elm Platform\${PLATFORM_VERSION}"
34+ InstallDirRegKey HKLM "${PRODUCT_DIR_REG_KEY}" ""
35+
36+ ;Icon
37+ !Define MUI_ICON "logo.ico"
38+ !Define MUI_UNICON "logo.ico"
39+
40+ ;Request application privileges for Windows Vista
41+ RequestExecutionLevel highest
42+
43+ ;Best available compression
44+ SetCompressor /SOLID lzma
45+
46+ ;Install types
47+ InstType "Standard"
48+ InstType "Portable (just unpack the files)"
49+
50+;--------------------------------
51+;Macros
52+
53+!macro CheckAdmin thing
54+UserInfo::GetAccountType
55+pop $0
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
59+ Quit
60+${EndIf}
61+CheckAdminDone:
62+!macroend
63+
64+;--------------------------------
65+;Callbacks
66+
67+Function .onInit
68+ !insertmacro CheckAdmin "installer"
69+ SetShellVarContext all
70+FunctionEnd
71+
72+Function un.onInit
73+ !insertmacro CheckAdmin "uninstaller"
74+ SetShellVarContext all
75+FunctionEnd
76+
77+Function LaunchLink
78+ ExecShell "open" "http://elm-lang.org/get-started"
79+FunctionEnd
80+
81+;--------------------------------
82+;Interface Settings
83+
84+ !define MUI_ABORTWARNING
85+
86+;--------------------------------
87+;Pages
88+
89+ !Define MUI_WELCOMEFINISHPAGE_BITMAP "welcome.bmp"
90+ !insertmacro MUI_PAGE_WELCOME
91+ ;!insertmacro MUI_PAGE_LICENSE "LICENSE"
92+ !insertmacro MUI_PAGE_DIRECTORY
93+
94+ !Define MUI_COMPONENTSPAGE_NODESC
95+ !insertmacro MUI_PAGE_COMPONENTS
96+
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
112+
113+ !insertmacro MUI_UNPAGE_WELCOME
114+ !insertmacro MUI_UNPAGE_CONFIRM
115+ !insertmacro MUI_UNPAGE_INSTFILES
116+ !insertmacro MUI_UNPAGE_FINISH
117+
118+;--------------------------------
119+;Languages
120+
121+ !insertmacro MUI_LANGUAGE "English"
122+
123+;--------------------------------
124+;Installer Sections
125+
126+Section "Base components" SecMain
127+
128+ SectionIn 1 2
129+ ; Make this section mandatory
130+ SectionIn RO
131+
132+ !Include ${INST_DAT}
133+
134+SectionEnd
135+
136+SectionGroup "Update system settings" SecGr
137+
138+Section "Associate with .elm files" SecAssoc
139+
140+ SectionIn 1
141+
142+ ; File associations
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"'
147+
148+ ;Remember that we registered associations
149+ WriteRegDWORD HKLM "${PRODUCT_DIR_REG_KEY}" Assocs 0x1
150+
151+SectionEnd
152+
153+Section "Update the PATH environment variable" SecPath
154+
155+ SectionIn 1
156+
157+ ; Update PATH
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
163+
164+ ; Update environment variables
165+ SendMessage ${HWND_BROADCAST} ${WM_SETTINGCHANGE} 0 "STR:Environment" /TIMEOUT=5000
166+
167+SectionEnd
168+
169+Section "Store Elm's location in registry" SecElmLoc
170+
171+ SectionIn 1
172+
173+ ; (copied from the GHC installer).
174+ ;WriteRegStr HKCU "Software\Elm\ghc-${GHC_VERSION}" "InstallDir" "$INSTDIR"
175+ WriteRegStr HKCU "Software\Elm" "InstallDir" "$INSTDIR"
176+
177+SectionEnd
178+
179+Section "Create uninstaller" SecAddRem
180+
181+ SectionIn 1
182+ SectionIn RO
183+
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"
193+
194+ ;Create uninstaller
195+ WriteUninstaller "$INSTDIR\Uninstall.exe"
196+
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"
200+
201+SectionEnd
202+
203+SectionGroupEnd
204+
205+;Section "-StartMenu" StartMenu
206+; SectionIn 1 2
207+;
208+; ; Add start menu shortcuts
209+;
210+; !insertmacro MUI_STARTMENU_WRITE_BEGIN StartMenuPage
211+;
212+; ;Create shortcuts
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
219+;
220+;SectionEnd
221+
222+;--------------------------------
223+;Uninstaller Section
224+
225+Section "Uninstall"
226+
227+ ; Update PATH
228+ ExecWait '"$SYSDIR\wscript.exe" //E:vbscript "$INSTDIR\removefrompath.vbs" "$PROGRAMFILES\Elm Platform"'
229+ SetShellVarContext current
230+
231+ !Include ${UNINST_DAT}
232+
233+ Delete "$INSTDIR\Uninstall.exe"
234+ RMDir $INSTDIR
235+
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
239+ RMDir $R0
240+
241+ ; Delete start menu shortcuts
242+ ;!insertmacro MUI_STARTMENU_GETFOLDER StartMenuPage $START_MENU_FOLDER
243+
244+ ;Delete "$SMPROGRAMS\$START_MENU_FOLDER\${HACKAGE_SHORTCUT_TEXT}.url"
245+ ;RMDir "$SMPROGRAMS\$START_MENU_FOLDER\"
246+
247+ ; Delete registry keys
248+
249+ ReadRegDWORD $0 HKLM "${PRODUCT_DIR_REG_KEY}" Assocs
250+
251+ ${If} $0 = 0x1
252+ DeleteRegValue HKCR ".elm" ""
253+ DeleteRegKey HKCR "elm\DefaultIcon"
254+ ${EndIf}
255+
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}"
260+
261+ ; Update environment variables
262+ SendMessage ${HWND_BROADCAST} ${WM_SETTINGCHANGE} 0 "STR:Environment" /TIMEOUT=5000
263+
264+SectionEnd