Merge branch 'master' of http://github.com/mono/mono
[mono.git] / mcs / tools / mono-win32-setup.nsi
1 ; =====================================================\r
2 ; mono.nsi - Mono Setup wizard for windows\r
3 ; =====================================================\r
4 ;\r
5 ; (C) Copyright 2003 by Johannes Roith\r
6 ; (C) Copyright 2003 by Daniel Morgan\r
7 ;\r
8 ; Authors: \r
9 ;       Johannes Roith <johannes@jroith.de>\r
10 ;       Daniel Morgan <danmorg@sc.rr.com>\r
11 ;\r
12 ; This .nsi includes code from the NSIS Archives:\r
13 ; function StrReplace and VersionCheck \r
14 ; by Hendri Adriaens\r
15 ; HendriAdriaens@hotmail.com\r
16\r
17 ; =====================================================\r
18 ;\r
19 ; This script can build a binary setup wizard of mono.\r
20 ; It is released under the GNU GPL.\r
21 ;\r
22 ; =====================================================\r
23 ; SET MILESTONE & SOURCE DIR\r
24 ; =====================================================\r
25 ;\r
26 ;\r
27   !define MILESTONE "0.24" ;\r
28   !define SOURCE_INSTALL_DIR "c:\mono-0.23-setup\install\\*" ;\r
29 \r
30 ; =====================================================\r
31 ; SET LOGO\r
32 ; =====================================================\r
33 ;\r
34 ;  Beautification:\r
35 ;\r
36 ;  This adds a Mono-specific Image on the left\r
37 ;  You can choose between the light or dark one.\r
38 ;  \r
39 ;  If you wish no mono-specifi logo, please outcomment\r
40 ;  the lines.\r
41 ;  \r
42 ;  "light" is enabled.\r
43 ;\r
44 ;  !define MUI_SPECIALBITMAP "mono-win32-setup-dark.bmp"\r
45    !define MUI_SPECIALBITMAP "mono-win32-setup-light.bmp"\r
46 \r
47 ; =====================================================\r
48 ; BUILDING\r
49 ; =====================================================\r
50 ;\r
51 ; 1. Build mono. The install directory must not contain\r
52 ;    anything else - everything gets packed in!!!\r
53 ;\r
54 ; 2. In your install directory, delete the *.a files.\r
55 ;     Most people won't need them and it saves ~ 4 MB.\r
56 ;\r
57 ; 3. Get latest nsis from cvs or a development snapshot\r
58 ;    from http://nsis.sf.net\r
59 ;\r
60 ; 4. Adapt the MILESTONE\r
61 ;\r
62 ; 5. Adapt the SOURCE_INSTALL_DIR above to match your \r
63 ;     install directory. Do not remove \\* at the end!!\r
64 ;\r
65 ; 6. Open this script in makensisw.exe\r
66 ;\r
67 ; 7. The output file is mono-[MILESTONE]-win32-1.exe\r
68 ;\r
69 ;\r
70 ;\r
71 ;\r
72 ;\r
73 ; =====================================================\r
74 ; MONO & REGISTRY / DETECTING MONO\r
75 ; =====================================================\r
76 ;\r
77 ;\r
78 ; This setup creates several Registry Keys:\r
79 ;\r
80 ; HKEY_LOCAL_MACHINE SOFTWARE\Mono DefaultCLR\r
81 ; HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} SdkInstallRoot\r
82 ; HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} FrameworkAssemblyDirectory\r
83 ; HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} MonoConfigDir\r
84 ;\r
85 ; =====================================================\r
86 ;\r
87 ; To get the current Mono Install Directory:\r
88 ;\r
89 ; 1. Get DefaultCLR\r
90 ; 2. Get HKEY_LOCAL_MACHINE SOFTWARE\Mono\$THE_DEFAULT_CLR_VALUE SdkInstallRoot\r
91 ;\r
92 ; =====================================================\r
93 ;\r
94 ; To get the current Mono assembly Directory:\r
95 ;\r
96 ; 1. Get DefaultCLR\r
97 ; 2. Get HKEY_LOCAL_MACHINE SOFTWARE\Mono\$THE_DEFAULT_CLR_VALUE FrameworkAssemblyDirectory\r
98\r
99 ; =====================================================\r
100 ; Do not edit below\r
101 ; =====================================================\r
102 ;\r
103 ;\r
104 ; =====================================================\r
105 ; GENERAL SETTING - NEED NOT TO BE CHANGED\r
106 ; =====================================================\r
107 \r
108  !define NAME "Mono" ;\r
109  !define TARGET_INSTALL_DIR "$PROGRAMFILES\Mono-${MILESTONE}" ;\r
110  !define OUTFILE "mono-${MILESTONE}-win32-1.exe" ;\r
111 \r
112 ; =====================================================\r
113 ; SCRIPT\r
114 ; =====================================================\r
115 \r
116  !define MUI_PRODUCT "${NAME}"\r
117  !define MUI_VERSION "${MILESTONE}"\r
118  !define FULLNAME "${MUI_PRODUCT} ${MUI_VERSION}"\r
119  !define MUI_UI "${NSISDIR}\Contrib\UIs\modern2.exe"\r
120  !define MUI_ICON "${NSISDIR}\Contrib\Icons\setup.ico"\r
121  !define MUI_UNICON "${NSISDIR}\Contrib\Icons\normal-uninstall.ico"\r
122  !define MUI_WELCOMEPAGE\r
123  !define MUI_DIRECTORYPAGE\r
124  !define MUI_DIRECTORYSELECTIONPAGE\r
125  !include "${NSISDIR}\Contrib\Modern UI\System.nsh"\r
126  !insertmacro MUI_SYSTEM\r
127  !insertmacro MUI_LANGUAGE "ENGLISH"\r
128 \r
129 \r
130  OutFile "${OUTFILE}"\r
131  InstallDir "${TARGET_INSTALL_DIR}"\r
132 \r
133 \r
134 ;========================\r
135 ; Uninstaller\r
136 ;========================\r
137 \r
138 Section "Uninstall"\r
139 \r
140   MessageBox MB_YESNO "Are you sure you want to uninstall Mono from your system?" IDNO NoUnInstall\r
141 \r
142   Delete $INSTDIR\Uninst.exe ; delete Uninstaller\r
143   DeleteRegKey HKLM SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Mono-${MILESTONE} ; Remove Entry in Software List\r
144 \r
145   MessageBox MB_YESNO "Mono was installed into $INSTDIR. Should this directory be removed completly?" IDNO GoNext1\r
146   RMDir /r $INSTDIR\r
147   GoNext1:\r
148 \r
149   DeleteRegKey HKLM SOFTWARE\Mono\${MILESTONE}\r
150 \r
151   ; If the Default-Key is the current Milestone, we just remove the wrappers\r
152 \r
153   ReadRegStr $0 HKEY_LOCAL_MACHINE SOFTWARE\Mono\ DefaultCLR\r
154   StrCmp $0 ${MILESTONE} DeleteWrappers\r
155 \r
156   MessageBox MB_YESNO "Mono ${MILESTONE} has been removed, but the default installation of Mono differs form this version. Should the wrappers and the Mono registry key be still be removed? This could disable other Mono installations." IDNO GoNext2\r
157 \r
158   DeleteWrappers:\r
159 \r
160   ; Complete Uninstall\r
161 \r
162   DeleteRegKey HKLM SOFTWARE\Mono\r
163   Delete $WINDIR\monobasepath.bat\r
164   Delete $WINDIR\mcs.bat\r
165   Delete $WINDIR\mbas.bat\r
166   Delete $WINDIR\mint.bat\r
167   Delete $WINDIR\mono.bat\r
168   Delete $WINDIR\monodis.bat\r
169   Delete $WINDIR\monoilasm.bat\r
170   Delete $WINDIR\sqlsharp.bat\r
171   Delete $WINDIR\secutil.bat\r
172   Delete $WINDIR\cert2spc.bat\r
173   Delete $WINDIR\monoresgen.bat\r
174   Delete $WINDIR\monosn.bat\r
175   Delete $WINDIR\cilc.bat\r
176 \r
177   GoNext2:\r
178   NoUnInstall:\r
179 \r
180 SectionEnd\r
181 \r
182 \r
183  Section\r
184 \r
185  ; Warn people if a newer Mono is already installed\r
186 \r
187  ReadRegStr $0 HKEY_LOCAL_MACHINE SOFTWARE\Mono\ DefaultCLR\r
188  Push $0\r
189  Push ${MILESTONE} \r
190  Call VersionCheck\r
191  Pop $0\r
192  StrCmp $0 0 NoAskInstall\r
193  StrCmp $0 2 NoAskInstall\r
194  MessageBox MB_YESNO "A newer Mono version is already installed. Still continue?" IDNO NoInstall\r
195 \r
196  NoAskInstall:\r
197 \r
198  SetOutPath $INSTDIR\r
199  File /r "${SOURCE_INSTALL_DIR}"\r
200  WriteUninstaller Uninst.exe\r
201 \r
202  WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} SdkInstallRoot $INSTDIR\r
203  WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} FrameworkAssemblyDirectory $INSTDIR\lib\r
204  WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} MonoConfigDir $INSTDIR\etc\mono\r
205  ;WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} GtkSharpLibPath $INSTDIR\lib\r
206  WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono DefaultCLR ${MILESTONE}\r
207 \r
208  ; Mono Uninstall Entry in Windows Software List in the Control panel\r
209  WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Mono-${MILESTONE} DisplayName "Mono ${MILESTONE}"\r
210  WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Mono-${MILESTONE} UninstallString $INSTDIR\uninst.exe\r
211 \r
212  ;original string is like C:\mono-0.20\install\r
213  StrCpy $5 $INSTDIR \r
214  Push $5\r
215  Push "\" ;search for this string\r
216  Push "/" ;replace with this string\r
217  Call StrReplace\r
218  ;resulting string which is like C:/mono-0.20/install\r
219  Pop $6\r
220 \r
221 ;========================\r
222 ; Write the wrapper files\r
223 ;========================\r
224 \r
225 ; create bin/mono wrapper to be used if the user has cygwin\r
226 FileOpen $0 "$INSTDIR\bin\mono.exe.sh" "w"\r
227 FileWrite $0 "#!/bin/sh$\r$\n"\r
228 FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"\r
229 FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"\r
230 FileWrite $0 '$6/bin/mono.exe "$$@"'\r
231 FileClose $0\r
232 \r
233 ; create bin/mint wrapper to be used if the user has cygwin\r
234 FileOpen $0 "$INSTDIR\bin\mint.exe.sh" "w"\r
235 FileWrite $0 "#!/bin/sh$\r$\n"\r
236 FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"\r
237 FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"\r
238 FileWrite $0 '$6/bin/mint.exe "$$@"'\r
239 FileClose $0\r
240 \r
241 ; create bin/mcs wrapper to be used if the user has cygwin\r
242 FileOpen $0 "$INSTDIR\bin\mcs.exe.sh" "w"\r
243 FileWrite $0 "#!/bin/sh$\r$\n"\r
244 FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"\r
245 FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"\r
246 FileWrite $0 '$6/bin/mono.exe $6/bin/mcs.exe "$$@"'\r
247 FileClose $0\r
248 \r
249 ; create bin/mbas wrapper to be used if the user has cygwin\r
250 FileOpen $0 "$INSTDIR\bin\mbas.exe.sh" "w"\r
251 FileWrite $0 "#!/bin/sh$\r$\n"\r
252 FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"\r
253 FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"\r
254 FileWrite $0 '$6/bin/mono.exe $6/bin/mbas.exe "$$@"'\r
255 FileClose $0\r
256 \r
257 ; create bin/sqlsharp wrapper to be used if the user has cygwin\r
258 FileOpen $0 "$INSTDIR\bin\sqlsharp.exe.sh" "w"\r
259 FileWrite $0 "#!/bin/sh$\r$\n"\r
260 FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"\r
261 FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"\r
262 FileWrite $0 '$6/bin/mono.exe $6/bin/sqlsharp.exe "$$@"'\r
263 FileClose $0\r
264 \r
265 ; create bin/monodis wrapper to be used if the user has cygwin\r
266 FileOpen $0 "$INSTDIR\bin\monodis.exe.sh" "w"\r
267 FileWrite $0 "#!/bin/sh$\r$\n"\r
268 FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"\r
269 FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"\r
270 FileWrite $0 '$6/bin/mono.exe $6/bin/monodis.exe "$$@"'\r
271 FileClose $0\r
272 \r
273 ; create bin/monoresgen wrapper to be used if the user has cygwin\r
274 FileOpen $0 "$INSTDIR\bin\monoresgen.exe.sh" "w"\r
275 FileWrite $0 "#!/bin/sh$\r$\n"\r
276 FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"\r
277 FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"\r
278 FileWrite $0 '$6/bin/mono.exe $6/bin/monoresgen.exe "$$@"'\r
279 FileClose $0\r
280 \r
281 ; create bin/monoilasm wrapper to be used if the user has cygwin\r
282 FileOpen $0 "$INSTDIR\bin\monoilasm.exe.sh" "w"\r
283 FileWrite $0 "#!/bin/sh$\r$\n"\r
284 FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"\r
285 FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"\r
286 FileWrite $0 '$6/bin/mono.exe $6/bin/monoilasm.exe "$$@"'\r
287 FileClose $0\r
288 \r
289 ; create bin/monosn wrapper to be used if the user has cygwin\r
290 FileOpen $0 "$INSTDIR\bin\monosn.exe.sh" "w"\r
291 FileWrite $0 "#!/bin/sh$\r$\n"\r
292 FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"\r
293 FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"\r
294 FileWrite $0 '$6/bin/mono.exe $6/bin/monosn.exe "$$@"'\r
295 FileClose $0\r
296 \r
297 ; create bin/secutil wrapper to be used if the user has cygwin\r
298 FileOpen $0 "$INSTDIR\bin\secutil.exe.sh" "w"\r
299 FileWrite $0 "#!/bin/sh$\r$\n"\r
300 FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"\r
301 FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"\r
302 FileWrite $0 '$6/bin/mono.exe $6/bin/secutil.exe "$$@"'\r
303 FileClose $0\r
304 \r
305 ; create bin/cert2spc wrapper to be used if the user has cygwin\r
306 FileOpen $0 "$INSTDIR\bin\cert2spc.exe.sh" "w"\r
307 FileWrite $0 "#!/bin/sh$\r$\n"\r
308 FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"\r
309 FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"\r
310 FileWrite $0 '$6/bin/mono.exe $6/bin/cert2spc.exe "$$@"'\r
311 FileClose $0\r
312 \r
313 ; create bin/cilc wrapper to be used if the user has cygwin\r
314 FileOpen $0 "$INSTDIR\bin\cilc.exe.sh" "w"\r
315 FileWrite $0 "#!/bin/sh$\r$\n"\r
316 FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"\r
317 FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"\r
318 FileWrite $0 '$6/bin/mono.exe $6/bin/cilc.exe "$$@"'\r
319 FileClose $0\r
320 \r
321 ;\r
322 ; These wrappers are copied to the windows directory.\r
323 ;\r
324 \r
325 ;========================\r
326 ; Write the path file\r
327 ;========================\r
328 \r
329 FileOpen $0 "$WINDIR\monobasepath.bat" "w"\r
330 FileWrite $0 'set MONO_BASEPATH="$INSTDIR"$\r$\n'\r
331 FileWrite $0 'set MONO_PATH=$INSTDIR\lib$\r$\n'\r
332 FileWrite $0 'set MONO_CFG_DIR="$INSTDIR\etc\mono"'\r
333 FileClose $0\r
334 \r
335 \r
336 ;========================\r
337 ; Write the mcs file\r
338 ;========================\r
339 \r
340 FileOpen $0 "$WINDIR\mcs.bat" "w"\r
341 \r
342 FileWrite $0 "@echo off$\r$\n"\r
343 FileWrite $0 "call monobasepath.bat$\r$\n"\r
344 FileWrite $0 "set MONOARGS=$\r$\n"\r
345 FileWrite $0 ":loop$\r$\n"\r
346 FileWrite $0 "if x%1 == x goto :done$\r$\n"\r
347 FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"\r
348 FileWrite $0 "shift$\r$\n"\r
349 FileWrite $0 "goto loop$\r$\n"\r
350 FileWrite $0 ":done$\r$\n"\r
351 FileWrite $0 "setlocal$\r$\n"\r
352 FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'\r
353 FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\mcs.exe" %MONOARGS%$\r$\n'\r
354 FileWrite $0 "endlocal$\r$\n"\r
355 \r
356 FileClose $0\r
357 \r
358 ;========================\r
359 ; Write the mbas file\r
360 ;========================\r
361 \r
362 FileOpen $0 "$WINDIR\mbas.bat" "w"\r
363 \r
364 FileWrite $0 "@echo off$\r$\n"\r
365 FileWrite $0 "call monobasepath.bat$\r$\n"\r
366 FileWrite $0 "set MONOARGS=$\r$\n"\r
367 FileWrite $0 ":loop$\r$\n"\r
368 FileWrite $0 "if x%1 == x goto :done$\r$\n"\r
369 FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"\r
370 FileWrite $0 "shift$\r$\n"\r
371 FileWrite $0 "goto loop$\r$\n"\r
372 FileWrite $0 ":done$\r$\n"\r
373 FileWrite $0 "setlocal$\r$\n"\r
374 FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'\r
375 FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\mbas.exe" %MONOARGS%$\r$\n'\r
376 FileWrite $0 "endlocal$\r$\n"\r
377 \r
378 FileClose $0\r
379 \r
380 ;========================\r
381 ; Write the mint file\r
382 ;========================\r
383 \r
384 FileOpen $0 "$WINDIR\mint.bat" "w"\r
385 \r
386 FileWrite $0 "@echo off$\r$\n"\r
387 FileWrite $0 "call monobasepath.bat$\r$\n"\r
388 FileWrite $0 "set MONOARGS=$\r$\n"\r
389 FileWrite $0 ":loop$\r$\n"\r
390 FileWrite $0 "if x%1 == x goto :done$\r$\n"\r
391 FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"\r
392 FileWrite $0 "shift$\r$\n"\r
393 FileWrite $0 "goto loop$\r$\n"\r
394 FileWrite $0 ":done$\r$\n"\r
395 FileWrite $0 "setlocal$\r$\n"\r
396 FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'\r
397 FileWrite $0 '"$INSTDIR\bin\mint.exe" %MONOARGS%$\r$\n'\r
398 FileWrite $0 "endlocal$\r$\n"\r
399 \r
400 FileClose $0\r
401 \r
402 ;========================\r
403 ; Write the mono file\r
404 ;========================\r
405 \r
406 FileOpen $0 "$WINDIR\mono.bat" "w"\r
407 \r
408 FileWrite $0 "@echo off$\r$\n"\r
409 FileWrite $0 "call monobasepath.bat$\r$\n"\r
410 FileWrite $0 "set MONOARGS=$\r$\n"\r
411 FileWrite $0 ":loop$\r$\n"\r
412 FileWrite $0 "if x%1 == x goto :done$\r$\n"\r
413 FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"\r
414 FileWrite $0 "shift$\r$\n"\r
415 FileWrite $0 "goto loop$\r$\n"\r
416 FileWrite $0 ":done$\r$\n"\r
417 FileWrite $0 "setlocal$\r$\n"\r
418 FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'\r
419 FileWrite $0 '"$INSTDIR\bin\mono.exe" %MONOARGS%$\r$\n'\r
420 FileWrite $0 "endlocal$\r$\n"\r
421 FileClose $0\r
422 \r
423 ;========================\r
424 ; Write monodis\r
425 ;========================\r
426 \r
427 FileOpen $0 "$WINDIR\monodis.bat" "w"\r
428 \r
429 FileWrite $0 "@echo off$\r$\n"\r
430 FileWrite $0 "call monobasepath.bat$\r$\n"\r
431 FileWrite $0 "set MONOARGS=$\r$\n"\r
432 FileWrite $0 ":loop$\r$\n"\r
433 FileWrite $0 "if x%1 == x goto :done$\r$\n"\r
434 FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"\r
435 FileWrite $0 "shift$\r$\n"\r
436 FileWrite $0 "goto loop$\r$\n"\r
437 FileWrite $0 ":done$\r$\n"\r
438 FileWrite $0 "setlocal$\r$\n"\r
439 FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'\r
440 FileWrite $0 '"$INSTDIR\bin\monodis.exe" %MONOARGS%$\r$\n'\r
441 FileWrite $0 "endlocal$\r$\n"\r
442 \r
443 FileClose $0\r
444 \r
445 ;========================\r
446 ; Write monoilasm\r
447 ;========================\r
448 \r
449 FileOpen $0 "$WINDIR\monoilasm.bat" "w"\r
450 \r
451 FileWrite $0 "@echo off$\r$\n"\r
452 FileWrite $0 "call monobasepath.bat$\r$\n"\r
453 FileWrite $0 "set MONOARGS=$\r$\n"\r
454 FileWrite $0 ":loop$\r$\n"\r
455 FileWrite $0 "if x%1 == x goto :done$\r$\n"\r
456 FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"\r
457 FileWrite $0 "shift$\r$\n"\r
458 FileWrite $0 "goto loop$\r$\n"\r
459 FileWrite $0 ":done$\r$\n"\r
460 FileWrite $0 "setlocal$\r$\n"\r
461 FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'\r
462 FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\monoilasm.exe" %MONOARGS%$\r$\n'\r
463 FileWrite $0 "endlocal$\r$\n"\r
464 \r
465 FileClose $0\r
466 \r
467 \r
468 ;========================\r
469 ; Write the sqlsharp file\r
470 ;========================\r
471 \r
472 FileOpen $0 "$WINDIR\sqlsharp.bat" "w"\r
473 \r
474 FileWrite $0 "@echo off$\r$\n"\r
475 FileWrite $0 "call monobasepath.bat$\r$\n"\r
476 FileWrite $0 "set MONOARGS=$\r$\n"\r
477 FileWrite $0 ":loop$\r$\n"\r
478 FileWrite $0 "if x%1 == x goto :done$\r$\n"\r
479 FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"\r
480 FileWrite $0 "shift$\r$\n"\r
481 FileWrite $0 "goto loop$\r$\n"\r
482 FileWrite $0 ":done$\r$\n"\r
483 FileWrite $0 "setlocal$\r$\n"\r
484 FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'\r
485 FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\sqlsharp.exe" %MONOARGS%$\r$\n'\r
486 FileWrite $0 "endlocal$\r$\n"\r
487 \r
488 FileClose $0\r
489 \r
490 ;========================\r
491 ; Write the secutil file\r
492 ;========================\r
493 \r
494 FileOpen $0 "$WINDIR\secutil.bat" "w"\r
495 \r
496 FileWrite $0 "@echo off$\r$\n"\r
497 FileWrite $0 "call monobasepath.bat$\r$\n"\r
498 FileWrite $0 "set MONOARGS=$\r$\n"\r
499 FileWrite $0 ":loop$\r$\n"\r
500 FileWrite $0 "if x%1 == x goto :done$\r$\n"\r
501 FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"\r
502 FileWrite $0 "shift$\r$\n"\r
503 FileWrite $0 "goto loop$\r$\n"\r
504 FileWrite $0 ":done$\r$\n"\r
505 FileWrite $0 "setlocal$\r$\n"\r
506 FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'\r
507 FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\secutil.exe" %MONOARGS%$\r$\n'\r
508 FileWrite $0 "endlocal$\r$\n"\r
509 \r
510 FileClose $0\r
511 \r
512 ;========================\r
513 ; Write the cert2spc file\r
514 ;========================\r
515 \r
516 FileOpen $0 "$WINDIR\cert2spc.bat" "w"\r
517 \r
518 FileWrite $0 "@echo off$\r$\n"\r
519 FileWrite $0 "call monobasepath.bat$\r$\n"\r
520 FileWrite $0 "set MONOARGS=$\r$\n"\r
521 FileWrite $0 ":loop$\r$\n"\r
522 FileWrite $0 "if x%1 == x goto :done$\r$\n"\r
523 FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"\r
524 FileWrite $0 "shift$\r$\n"\r
525 FileWrite $0 "goto loop$\r$\n"\r
526 FileWrite $0 ":done$\r$\n"\r
527 FileWrite $0 "setlocal$\r$\n"\r
528 FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'\r
529 FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\cert2spec.exe" %MONOARGS%$\r$\n'\r
530 FileWrite $0 "endlocal$\r$\n"\r
531 \r
532 FileClose $0\r
533 \r
534 \r
535 ;========================\r
536 ; Write the monoresgen file\r
537 ;========================\r
538 \r
539 FileOpen $0 "$WINDIR\monoresgen.bat" "w"\r
540 \r
541 FileWrite $0 "@echo off$\r$\n"\r
542 FileWrite $0 "call monobasepath.bat$\r$\n"\r
543 FileWrite $0 "set MONOARGS=$\r$\n"\r
544 FileWrite $0 ":loop$\r$\n"\r
545 FileWrite $0 "if x%1 == x goto :done$\r$\n"\r
546 FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"\r
547 FileWrite $0 "shift$\r$\n"\r
548 FileWrite $0 "goto loop$\r$\n"\r
549 FileWrite $0 ":done$\r$\n"\r
550 FileWrite $0 "setlocal$\r$\n"\r
551 FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'\r
552 FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\monoresgen.exe" %MONOARGS%$\r$\n'\r
553 FileWrite $0 "endlocal$\r$\n"\r
554 \r
555 FileClose $0\r
556 \r
557 ;========================\r
558 ; Write the monosn file\r
559 ;========================\r
560 \r
561 FileOpen $0 "$WINDIR\monosn.bat" "w"\r
562 \r
563 FileWrite $0 "@echo off$\r$\n"\r
564 FileWrite $0 "call monobasepath.bat$\r$\n"\r
565 FileWrite $0 "set MONOARGS=$\r$\n"\r
566 FileWrite $0 ":loop$\r$\n"\r
567 FileWrite $0 "if x%1 == x goto :done$\r$\n"\r
568 FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"\r
569 FileWrite $0 "shift$\r$\n"\r
570 FileWrite $0 "goto loop$\r$\n"\r
571 FileWrite $0 ":done$\r$\n"\r
572 FileWrite $0 "setlocal$\r$\n"\r
573 FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'\r
574 FileWrite $0 '"$INSTDIR\bin\monosn.exe" %MONOARGS%$\r$\n'\r
575 FileWrite $0 "endlocal$\r$\n"\r
576 \r
577 FileClose $0\r
578 \r
579 ;========================\r
580 ; Write the cilc file\r
581 ;========================\r
582 \r
583 FileOpen $0 "$WINDIR\cilc.bat" "w"\r
584 \r
585 \r
586 FileWrite $0 "@echo off$\r$\n"\r
587 FileWrite $0 "call monobasepath.bat$\r$\n"\r
588 FileWrite $0 "set MONOARGS=$\r$\n"\r
589 FileWrite $0 ":loop$\r$\n"\r
590 FileWrite $0 "if x%1 == x goto :done$\r$\n"\r
591 FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"\r
592 FileWrite $0 "shift$\r$\n"\r
593 FileWrite $0 "goto loop$\r$\n"\r
594 FileWrite $0 ":done$\r$\n"\r
595 FileWrite $0 "setlocal$\r$\n"\r
596 FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'\r
597 FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\cilc.exe" %MONOARGS%$\r$\n'\r
598 FileWrite $0 "endlocal$\r$\n"\r
599 \r
600 FileClose $0\r
601 \r
602 NoInstall:\r
603 SectionEnd\r
604 \r
605 ; function StrReplace\r
606 ; by Hendri Adriaens\r
607 ; HendriAdriaens@hotmail.com\r
608 ; found in the NSIS Archives\r
609 function StrReplace\r
610   Exch $0 ;this will replace wrong characters\r
611   Exch\r
612   Exch $1 ;needs to be replaced\r
613   Exch\r
614   Exch 2\r
615   Exch $2 ;the orginal string\r
616   Push $3 ;counter\r
617   Push $4 ;temp character\r
618   Push $5 ;temp string\r
619   Push $6 ;length of string that need to be replaced\r
620   Push $7 ;length of string that will replace\r
621   Push $R0 ;tempstring\r
622   Push $R1 ;tempstring\r
623   Push $R2 ;tempstring\r
624   StrCpy $3 "-1"\r
625   StrCpy $5 ""\r
626   StrLen $6 $1\r
627   StrLen $7 $0\r
628   Loop:\r
629   IntOp $3 $3 + 1\r
630   StrCpy $4 $2 $6 $3\r
631   StrCmp $4 "" ExitLoop\r
632   StrCmp $4 $1 Replace\r
633   Goto Loop\r
634   Replace:\r
635   StrCpy $R0 $2 $3\r
636   IntOp $R2 $3 + $6\r
637   StrCpy $R1 $2 "" $R2\r
638   StrCpy $2 $R0$0$R1\r
639   IntOp $3 $3 + $7\r
640   Goto Loop\r
641   ExitLoop:\r
642   StrCpy $0 $2\r
643   Pop $R2\r
644   Pop $R1\r
645   Pop $R0\r
646   Pop $7\r
647   Pop $6\r
648   Pop $5\r
649   Pop $4\r
650   Pop $3\r
651   Pop $2\r
652   Pop $1\r
653   Exch $0\r
654 FunctionEnd\r
655 \r
656 Function VersionCheck\r
657   Exch $0 ;second versionnumber\r
658   Exch\r
659   Exch $1 ;first versionnumber\r
660   Push $R0 ;counter for $0\r
661   Push $R1 ;counter for $1\r
662   Push $3 ;temp char\r
663   Push $4 ;temp string for $0\r
664   Push $5 ;temp string for $1\r
665   StrCpy $R0 "-1"\r
666   StrCpy $R1 "-1"\r
667   Start:\r
668   StrCpy $4 ""\r
669   DotLoop0:\r
670   IntOp $R0 $R0 + 1\r
671   StrCpy $3 $0 1 $R0\r
672   StrCmp $3 "" DotFound0\r
673   StrCmp $3 "." DotFound0\r
674   StrCpy $4 $4$3\r
675   Goto DotLoop0\r
676   DotFound0:\r
677   StrCpy $5 ""\r
678   DotLoop1:\r
679   IntOp $R1 $R1 + 1\r
680   StrCpy $3 $1 1 $R1\r
681   StrCmp $3 "" DotFound1\r
682   StrCmp $3 "." DotFound1\r
683   StrCpy $5 $5$3\r
684   Goto DotLoop1\r
685   DotFound1:\r
686   Strcmp $4 "" 0 Not4\r
687     StrCmp $5 "" Equal\r
688     Goto Ver2Less\r
689   Not4:\r
690   StrCmp $5 "" Ver2More\r
691   IntCmp $4 $5 Start Ver2Less Ver2More\r
692   Equal:\r
693   StrCpy $0 "0"\r
694   Goto Finish\r
695   Ver2Less:\r
696   StrCpy $0 "1"\r
697   Goto Finish\r
698   Ver2More:\r
699   StrCpy $0 "2"\r
700   Finish:\r
701   Pop $5\r
702   Pop $4\r
703   Pop $3\r
704   Pop $R1\r
705   Pop $R0\r
706   Pop $1\r
707   Exch $0\r
708 FunctionEnd