1 ; =================================================================
2 ; mono.nsi - This NSIS script creates Mono Setup wizard for Windows
4 ; Requires NSIS 2.0 (Nullsoft Scriptable Install System)
5 ; From http://nsis.sourceforge.net/site/index.php
6 ; =================================================================
8 ; (C) Copyright 2003 by Johannes Roith
9 ; (C) Copyright 2003, 2004 by Daniel Morgan
12 ; Johannes Roith <johannes@jroith.de>
13 ; Daniel Morgan <danielmorgan@verizon.net>
14 ; Urs C Muff <umuff@quark.com>
16 ; This .nsi includes code from the NSIS Archives:
17 ; function StrReplace and VersionCheck
19 ; HendriAdriaens@hotmail.com
21 ; =====================================================
23 ; This script can build a binary setup wizard of mono.
24 ; It is released under the GNU GPL.
26 ; =====================================================
27 ; SET MILESTONE & SOURCE DIR
28 ; =====================================================
31 ;!define MILESTONE 0.91
32 ;!define SOURCE_INSTALL_DIR ..\install\*.*
33 !define PROFILE_VERSION 1.0
35 ; =====================================================
37 ; =====================================================
41 ; This adds a Mono-specific Image on the left
42 ; You can choose between the light or dark one.
44 ; If you wish no mono-specifi logo, please outcomment
49 ; !define MUI_SPECIALBITMAP "mono-win32-setup-dark.bmp"
50 !define MUI_SPECIALBITMAP "mono-win32-setup-light.bmp"
52 ; =====================================================
54 ; =====================================================
56 ; 1. Build mono to a clean directory prefix.
58 ; 2. In your install directory, delete the *.a files.
59 ; Most people won't need them and it saves ~ 4 MB.
61 ; 3. Type "make win32setup"
63 ; 4. The output file is mono-[MILESTONE]-win32-1.exe
66 ; =====================================================
67 ; MONO & REGISTRY / DETECTING MONO
68 ; =====================================================
71 ; This setup creates several Registry Keys:
73 ; HKEY_LOCAL_MACHINE SOFTWARE\Mono DefaultCLR
74 ; HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} SdkInstallRoot
75 ; HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} FrameworkAssemblyDirectory
76 ; HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} MonoConfigDir
78 ; =====================================================
80 ; To get the current Mono Install Directory:
83 ; 2. Get HKEY_LOCAL_MACHINE SOFTWARE\Mono\$THE_DEFAULT_CLR_VALUE SdkInstallRoot
85 ; =====================================================
87 ; To get the current Mono assembly Directory:
90 ; 2. Get HKEY_LOCAL_MACHINE SOFTWARE\Mono\$THE_DEFAULT_CLR_VALUE FrameworkAssemblyDirectory
92 ; =====================================================
94 ; =====================================================
97 ; =====================================================
98 ; GENERAL SETTING - NEED NOT TO BE CHANGED
99 ; =====================================================
102 !define TARGET_INSTALL_DIR "$PROGRAMFILES\Mono-${MILESTONE}"
103 !define OUTFILE mono-${MILESTONE}-win32-1.exe
106 Caption "Mono ${MILESTONE} Setup"
\r
109 !include "Sections.nsh"
\r
111 SetCompressor bzip2
\r
112 SilentInstall normal
\r
113 ShowInstDetails show
\r
115 SetDatablockOptimize on
\r
117 BGGradient 000000 800000 FFFFFF
\r
118 InstallColors FF8080 000030
\r
120 AutoCloseWindow false
122 ; =====================================================
124 ; =====================================================
126 #!define MUI_WELCOMEPAGE
127 #!define MUI_DIRECTORYPAGE
128 #!define MUI_DIRECTORYSELECTIONPAGE
130 !define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of Mono for Windows.\r\n\r\n\r\n$_CLICK"
\r
132 !insertmacro MUI_PAGE_WELCOME
\r
133 !insertmacro MUI_PAGE_DIRECTORY
\r
134 !insertmacro MUI_PAGE_INSTFILES
\r
136 !define MUI_FINISHPAGE_LINK "Visit Mono's website for the latest news"
\r
137 !define MUI_FINISHPAGE_LINK_LOCATION "http://www.go-mono.com/"
\r
139 !define MUI_FINISHPAGE_NOREBOOTSUPPORT
\r
141 !insertmacro MUI_PAGE_FINISH
\r
143 !insertmacro MUI_UNPAGE_CONFIRM
\r
144 !insertmacro MUI_UNPAGE_INSTFILES
\r
146 !insertmacro MUI_LANGUAGE "ENGLISH"
148 AutoCloseWindow false
\r
152 InstallDir "${TARGET_INSTALL_DIR}"
154 ;========================
156 ;========================
160 MessageBox MB_YESNO "Are you sure you want to uninstall Mono from your system?" IDNO NoUnInstall
162 Delete $INSTDIR\Uninst.exe ; delete Uninstaller
163 DeleteRegKey HKLM SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Mono-${MILESTONE} ; Remove Entry in Software List
165 MessageBox MB_YESNO "Mono was installed into $INSTDIR. Should this directory be removed completly?" IDNO GoNext1
169 DeleteRegKey HKLM SOFTWARE\Mono\${MILESTONE}
171 ; If the Default-Key is the current Milestone, we just remove the wrappers
173 ReadRegStr $0 HKEY_LOCAL_MACHINE SOFTWARE\Mono\ DefaultCLR
174 StrCmp $0 ${MILESTONE} DeleteWrappers
176 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
182 DeleteRegKey HKLM SOFTWARE\Mono
183 Delete $WINDIR\monobasepath.bat
184 Delete $WINDIR\mcs.bat
185 Delete $WINDIR\mbas.bat
186 Delete $WINDIR\mint.bat
187 Delete $WINDIR\mono.bat
188 Delete $WINDIR\monodis.bat
189 Delete $WINDIR\monoilasm.bat
190 Delete $WINDIR\sqlsharp.bat
191 Delete $WINDIR\secutil.bat
192 Delete $WINDIR\cert2spc.bat
193 Delete $WINDIR\monoresgen.bat
194 Delete $WINDIR\monosn.bat
195 Delete $WINDIR\cilc.bat
196 Delete $WINDIR\monop.bat
197 Delete $WINDIR\xsp.bat
207 ; Warn people if a newer Mono is already installed
209 ReadRegStr $0 HKEY_LOCAL_MACHINE SOFTWARE\Mono\ DefaultCLR
214 StrCmp $0 0 NoAskInstall
215 StrCmp $0 2 NoAskInstall
216 MessageBox MB_YESNO "A newer Mono version is already installed. Still continue?" IDNO NoInstall
220 DetailPrint "Installing Mono Files..."
223 File /r ${SOURCE_INSTALL_DIR}
225 WriteUninstaller Uninst.exe
227 WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} SdkInstallRoot $INSTDIR
228 WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} FrameworkAssemblyDirectory $INSTDIR\lib
229 WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} MonoConfigDir $INSTDIR\etc\mono
230 ;WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} GtkSharpLibPath $INSTDIR\lib
231 WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono DefaultCLR ${MILESTONE}
233 ; Mono Uninstall Entry in Windows Software List in the Control panel
234 WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Mono-${MILESTONE} DisplayName "Mono ${MILESTONE}"
235 WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Mono-${MILESTONE} UninstallString $INSTDIR\uninst.exe
237 ;original string is like C:\mono-0.20\install
240 Push "\" ;search for this string
241 Push "/" ;replace with this string
243 ;resulting string which is like C:/mono-0.20/install
247 ; These wrappers are copied to the windows directory.
250 ;========================
251 ; Write the path file
252 ;========================
261 Call windowsBatProfile
296 ; ============= glib-2.0.pc ===============
\r
297 FileOpen $0 "$INSTDIR\lib\pkgconfig\glib-2.0.pc" "w"
\r
298 FileWrite $0 "prefix=$6$\r$\n"
\r
299 FileWrite $0 "exec_prefix=$${prefix}$\r$\n"
\r
300 FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"
\r
301 FileWrite $0 "includedir=$${prefix}/include$\r$\n"
\r
302 FileWrite $0 "$\r$\n"
\r
303 FileWrite $0 "glib_genmarshal=glib-genmarshal$\r$\n"
\r
304 FileWrite $0 "gobject_query=gobject-query$\r$\n"
\r
305 FileWrite $0 "glib_mkenums=glib-mkenums$\r$\n"
\r
306 FileWrite $0 "$\r$\n"
\r
307 FileWrite $0 "Name: GLib$\r$\n"
\r
308 FileWrite $0 "Description: C Utility Library$\r$\n"
\r
309 FileWrite $0 "Version: 2.0.4$\r$\n"
\r
310 FileWrite $0 "Libs: -L$${libdir} -lglib-2.0 -lintl -liconv $\r$\n"
\r
311 FileWrite $0 "Cflags: -I$${includedir}/glib-2.0 -I$${libdir}/glib-2.0/include $\r$\n"
\r
314 ; ============= gmodule-2.0.pc ===============
\r
315 FileOpen $0 "$INSTDIR\lib\pkgconfig\gmodule-2.0.pc" "w"
\r
316 FileWrite $0 "prefix=$6$\r$\n"
\r
317 FileWrite $0 "exec_prefix=$${prefix}$\r$\n"
\r
318 FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"
\r
319 FileWrite $0 "includedir=$${prefix}/include$\r$\n"
\r
320 FileWrite $0 "$\r$\n"
\r
321 FileWrite $0 "gmodule_supported=true$\r$\n"
\r
322 FileWrite $0 "$\r$\n"
\r
323 FileWrite $0 "Name: GModule$\r$\n"
\r
324 FileWrite $0 "Description: Dynamic module loader for GLib$\r$\n"
\r
325 FileWrite $0 "Requires: glib-2.0$\r$\n"
\r
326 FileWrite $0 "Version: 2.0.4$\r$\n"
\r
327 FileWrite $0 "Libs: -L$${libdir} -lgmodule-2.0 $\r$\n"
\r
328 FileWrite $0 "Cflags:$\r$\n"
\r
331 ; ============= gobject-2.0.pc ===============
\r
332 FileOpen $0 "$INSTDIR\lib\pkgconfig\gobject-2.0.pc" "w"
\r
333 FileWrite $0 "prefix=$6$\r$\n"
\r
334 FileWrite $0 "exec_prefix=$${prefix}$\r$\n"
\r
335 FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"
\r
336 FileWrite $0 "includedir=$${prefix}/include$\r$\n"
\r
337 FileWrite $0 "$\r$\n"
\r
338 FileWrite $0 "Name: GObject$\r$\n"
\r
339 FileWrite $0 "Description: GLib Type, Object, Parameter and Signal Library$\r$\n"
\r
340 FileWrite $0 "Requires: glib-2.0$\r$\n"
\r
341 FileWrite $0 "Version: 2.0.4$\r$\n"
\r
342 FileWrite $0 "Libs: -L$${libdir} -lgobject-2.0$\r$\n"
\r
343 FileWrite $0 "Cflags:$\r$\n"
\r
346 ; ============= gthread-2.0.pc ===============
\r
347 FileOpen $0 "$INSTDIR\lib\pkgconfig\gthread-2.0.pc" "w"
\r
348 FileWrite $0 "prefix=$6$\r$\n"
\r
349 FileWrite $0 "exec_prefix=$${prefix}$\r$\n"
\r
350 FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"
\r
351 FileWrite $0 "includedir=$${prefix}/include$\r$\n"
\r
352 FileWrite $0 "$\r$\n"
\r
353 FileWrite $0 "Name: GThread$\r$\n"
\r
354 FileWrite $0 "Description: Thread support for GLib$\r$\n"
\r
355 FileWrite $0 "Requires: glib-2.0$\r$\n"
\r
356 FileWrite $0 "Version: 2.0.4$\r$\n"
\r
357 FileWrite $0 "Libs: -L$${libdir} -lgthread-2.0 $\r$\n"
\r
358 FileWrite $0 "Cflags: -D_REENTRANT$\r$\n"
\r
361 ; ============= libintl.pc ===============
\r
362 FileOpen $0 "$INSTDIR\lib\pkgconfig\libintl.pc" "w"
\r
363 FileWrite $0 "prefix=$6$\r$\n"
\r
364 FileWrite $0 "exec_prefix=$${prefix}$\r$\n"
\r
365 FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"
\r
366 FileWrite $0 "includedir=$${prefix}/include$\r$\n"
\r
367 FileWrite $0 "$\r$\n"
\r
368 FileWrite $0 "Name: libintl$\r$\n"
\r
369 FileWrite $0 "Description: The intl library from GNU gettext$\r$\n"
\r
370 FileWrite $0 "Version: 0.10.40-tml$\r$\n"
\r
371 FileWrite $0 "Libs: -L$${libdir} -lintl$\r$\n"
\r
372 FileWrite $0 "Cflags: -I$${includedir}$\r$\n"
\r
378 Function windowsBatCore
379 Exch $1 ;core exe name
381 FileOpen $0 "$WINDIR\$1.bat" "w"
382 FileWrite $0 "@ECHO OFF$\r$\n"
383 FileWrite $0 "SET MONOARGS=$\r$\n"
384 FileWrite $0 ":loop$\r$\n"
385 FileWrite $0 "IF x%1 == x goto :done$\r$\n"
386 FileWrite $0 "SET MONOARGS=%MONOARGS% %1$\r$\n"
387 FileWrite $0 "SHIFT$\r$\n"
388 FileWrite $0 "GOTO loop$\r$\n"
389 FileWrite $0 ":done$\r$\n"
390 FileWrite $0 "SETLOCAL$\r$\n"
391 FileWrite $0 'SET PATH="$INSTDIR\bin;$INSTDIR\lib;%PATH%"$\r$\n'
392 FileWrite $0 '"$INSTDIR\bin\$1.exe" %MONOARGS%$\r$\n'
393 FileWrite $0 "EXIT /B %ERRORLEVEL%$\r$\n"
394 FileWrite $0 "ENDLOCAL$\r$\n"
397 FileOpen $0 "$INSTDIR\bin\$1" "w"
398 FileWrite $0 "#!/bin/sh$\r$\n"
399 FileWrite $0 'exec $6/bin/$1.exe "$$@"$\r$\n'
408 FileOpen $0 "$WINDIR\$1.bat" "w"
409 FileWrite $0 "@ECHO OFF$\r$\n"
410 FileWrite $0 "SET MONOARGS=$\r$\n"
411 FileWrite $0 ":loop$\r$\n"
412 FileWrite $0 "IF x%1 == x GOTO :done$\r$\n"
413 FileWrite $0 "SET MONOARGS=%MONOARGS% %1$\r$\n"
414 FileWrite $0 "SHIFT$\r$\n"
415 FileWrite $0 "GOTO loop$\r$\n"
416 FileWrite $0 ":done$\r$\n"
417 FileWrite $0 "SETLOCAL$\r$\n"
418 FileWrite $0 'SET PATH="$INSTDIR\bin;$INSTDIR\lib;%PATH%"$\r$\n'
419 FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\lib\$1.exe" %MONOARGS%$\r$\n'
420 FileWrite $0 "EXIT /B %ERRORLEVEL%$\r$\n"
421 FileWrite $0 "ENDLOCAL$\r$\n"
424 FileOpen $0 "$INSTDIR\bin\$1" "w"
425 FileWrite $0 "#!/bin/sh$\r$\n"
426 FileWrite $0 'exec $6/bin/mono.exe $6/lib/$1.exe "$$@"$\r$\n'
432 Function windowsBatProfile
435 FileOpen $0 "$WINDIR\$1.bat" "w"
436 FileWrite $0 "@ECHO OFF$\r$\n"
437 FileWrite $0 "SET MONOARGS=$\r$\n"
438 FileWrite $0 ":loop$\r$\n"
439 FileWrite $0 "IF x%1 == x GOTO :done$\r$\n"
440 FileWrite $0 "SET MONOARGS=%MONOARGS% %1$\r$\n"
441 FileWrite $0 "SHIFT$\r$\n"
442 FileWrite $0 "GOTO loop$\r$\n"
443 FileWrite $0 ":done$\r$\n"
444 FileWrite $0 "SETLOCAL$\r$\n"
445 FileWrite $0 'SET PATH="$INSTDIR\bin;$INSTDIR\lib;%PATH%"$\r$\n'
446 FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\lib\mono\${PROFILE_VERSION}\$1.exe" %MONOARGS%$\r$\n'
447 FileWrite $0 "EXIT /B %ERRORLEVEL%$\r$\n"
448 FileWrite $0 "ENDLOCAL$\r$\n"
451 FileOpen $0 "$INSTDIR\bin\$1" "w"
452 FileWrite $0 "#!/bin/sh$\r$\n"
453 FileWrite $0 'exec $6/bin/mono.exe $6/lib/mono/${PROFILE_VERSION}/$1.exe "$$@"$\r$\n'
459 ; function StrReplace
461 ; HendriAdriaens@hotmail.com
462 ; found in the NSIS Archives
464 Exch $0 ;this will replace wrong characters
466 Exch $1 ;needs to be replaced
469 Exch $2 ;the orginal string
471 Push $4 ;temp character
473 Push $6 ;length of string that need to be replaced
474 Push $7 ;length of string that will replace
485 StrCmp $4 "" ExitLoop
510 Function VersionCheck
511 Exch $0 ;second versionnumber
513 Exch $1 ;first versionnumber
514 Push $R0 ;counter for $0
515 Push $R1 ;counter for $1
517 Push $4 ;temp string for $0
518 Push $5 ;temp string for $1
526 StrCmp $3 "" DotFound0
527 StrCmp $3 "." DotFound0
535 StrCmp $3 "" DotFound1
536 StrCmp $3 "." DotFound1
544 StrCmp $5 "" Ver2More
545 IntCmp $4 $5 Start Ver2Less Ver2More