Windows installer: use LZMA compression and set execution level.
[neverball] / scripts / neverball.nsi
1 #------------------------------------------------------------------------------
2
3 !include "LogicLib.nsh"
4
5 #------------------------------------------------------------------------------
6
7 !ifndef VERSION
8 !define VERSION "unknown"
9 !endif
10
11 !ifndef OUTFILE
12 !define OUTFILE "../neverball-${VERSION}-setup.exe"
13 !endif
14
15 !define UNINSTALL_REG_ROOT \
16     "Software\Microsoft\Windows\CurrentVersion\Uninstall\Neverball"
17
18 #------------------------------------------------------------------------------
19
20 OutFile ${OUTFILE}
21 Name "Neverball ${VERSION}"
22 LicenseData "COPYING.txt"
23 InstallDir "$PROGRAMFILES\Neverball"
24
25 XPStyle on
26 SetCompressor /solid lzma
27 RequestExecutionLevel user
28
29 #------------------------------------------------------------------------------
30
31 Page license
32 Page components
33 Page directory
34 Page instfiles
35
36 Function .onInit
37     Call IsUserAdmin
38     Pop $R0
39
40     ${If} $R0 == "true"
41         SetShellVarContext all
42     ${EndIf}
43 FunctionEnd
44
45 Section "Neverball/Neverputt"
46     SectionIn RO
47
48     SetOutPath "$INSTDIR"
49
50     File *.txt doc\*.txt
51     File /r /x .svn /x *.map /x obj data
52     File /r locale
53
54     File neverball.exe neverputt.exe *.dll
55
56     File /oname=data\icon\neverball.ico dist\ico\neverball_basic_sizes.ico
57     File /oname=data\icon\neverputt.ico dist\ico\neverputt_basic_sizes.ico
58
59     CreateDirectory "$INSTDIR\bin"
60
61     SetOutPath "$INSTDIR\bin"
62
63     File scripts\neverball.bat
64     File scripts\neverputt.bat
65     File tools\democonv.exe
66     File tools\convert-replays.bat
67
68     # http://nsis.sourceforge.net/\
69     # Add_uninstall_information_to_Add/Remove_Programs
70
71     WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
72         "DisplayName" "Neverball ${VERSION}"
73     WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
74         "DisplayVersion" "${VERSION}"
75     WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
76         "DisplayIcon" "$INSTDIR\data\icon\neverball.ico"
77     WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
78         "UninstallString" "$INSTDIR\uninstall.exe"
79     WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
80         "URLInfoAbout" "http://www.neverball.org/"
81     WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
82         "URLUpdateInfo" "http://www.neverball.org/"
83     WriteRegStr SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
84         "HelpLink" "http://www.nevercorner.net/"
85     WriteRegDWORD SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
86         "NoModify" 1
87     WriteRegDWORD SHELL_CONTEXT ${UNINSTALL_REG_ROOT} \
88         "NoRepair" 1
89
90     WriteUninstaller "$INSTDIR\uninstall.exe"
91 SectionEnd
92
93 Section "Mapping tools (compiler, maps, ...)"
94     SetOutPath "$INSTDIR"
95
96     File mapc.exe
97     File /oname=bin\mapc.bat scripts\mapc.bat
98
99     SetOutPath "$INSTDIR\data"
100
101     File /r /x ".svn" data\*.map
102     File /r /x ".svn" data\obj
103 SectionEnd
104
105 SectionGroup "Shortcuts"
106     Section "In Start menu"
107         # Reset to get a proper working directory
108         SetOutPath "$INSTDIR"
109     
110         CreateDirectory "$SMPROGRAMS\Neverball"
111     
112         CreateShortcut \
113             "$SMPROGRAMS\Neverball\Neverball.lnk" \
114             "$INSTDIR\neverball.exe" ""       \
115             "$INSTDIR\data\icon\neverball.ico"
116     
117         CreateShortcut \
118             "$SMPROGRAMS\Neverball\Neverputt.lnk" \
119             "$INSTDIR\neverputt.exe" ""       \
120             "$INSTDIR\data\icon\neverputt.ico"
121     SectionEnd
122
123     Section "On desktop"
124         # Reset to get a proper working directory
125         SetOutPath "$INSTDIR"
126     
127         CreateShortcut \
128             "$DESKTOP\Neverball.lnk"          \
129             "$INSTDIR\neverball.exe" ""       \
130             "$INSTDIR\data\icon\neverball.ico"
131     
132         CreateShortcut \
133             "$DESKTOP\Neverputt.lnk"          \
134             "$INSTDIR\neverputt.exe" ""       \
135             "$INSTDIR\data\icon\neverputt.ico"
136     SectionEnd
137 SectionGroupEnd
138
139 #------------------------------------------------------------------------------
140
141 UninstPage uninstConfirm
142 UninstPage instfiles
143
144 Function un.onInit
145     Call un.IsUserAdmin
146     Pop $R0
147
148     ${If} $R0 == "true"
149         SetShellVarContext all
150     ${EndIf}
151 FunctionEnd
152
153 Section "Uninstall"
154     Delete "$SMPROGRAMS\Neverball\Neverball.lnk"
155     Delete "$SMPROGRAMS\Neverball\Neverputt.lnk"
156     RMDir  "$SMPROGRAMS\Neverball"
157     Delete "$DESKTOP\Neverball.lnk"
158     Delete "$DESKTOP\Neverputt.lnk"
159
160     DeleteRegKey SHELL_CONTEXT ${UNINSTALL_REG_ROOT}
161
162     # FIXME:  unsafe if the directory contains other-than-installed stuff
163     RMDir /r $INSTDIR
164 SectionEnd
165
166 #------------------------------------------------------------------------------
167
168 # URL:    http://nsis.sourceforge.net/IsUserAdmin
169 # Author: Lilla (lilla@earthlink.net) 2003-06-13
170
171 !macro IsUserAdmin un
172 Function ${un}IsUserAdmin
173     Push $R0
174     Push $R1
175     Push $R2
176  
177     ClearErrors
178     UserInfo::GetName
179     IfErrors Win9x
180     Pop $R1
181     UserInfo::GetAccountType
182     Pop $R2
183  
184     StrCmp $R2 "Admin" 0 Continue
185     StrCpy $R0 "true"
186     Goto Done
187  
188     Continue:
189         StrCmp $R2 "" Win9x
190         StrCpy $R0 "false"
191         Goto Done
192  
193     Win9x:
194         StrCpy $R0 "true"
195  
196     Done:
197
198     Pop $R2
199     Pop $R1
200     Exch $R0
201 FunctionEnd
202 !macroend
203
204 !insertmacro IsUserAdmin ""
205 !insertmacro IsUserAdmin "un."
206
207 #------------------------------------------------------------------------------
208
209 # vim:sts=4:sw=4:et: