[xbuild] Evaluate Import with MSBuildThisFile* properties set.
[mono.git] / monowiz.win32.nsi
index bd016197618461712a918097d0e52003c9a59cb4..fba80ef2e3a794c58dec259fc56bb4dba6c17ca3 100644 (file)
@@ -11,6 +11,8 @@
 ; Authors: 
 ;       Johannes Roith <johannes@jroith.de>
 ;       Daniel Morgan <danielmorgan@verizon.net>
+;      Urs C Muff <umuff@quark.com>
+;      Gonzalo Paniagua Javier <gonzalo@ximian.com>
 ;
 ; This .nsi includes code from the NSIS Archives:
 ; function StrReplace and VersionCheck 
 ;
 ; This script can build a binary setup wizard of mono.
 ; It is released under the GNU GPL.
+
+!include "MUI.nsh"
+!include "Sections.nsh"
+
 ;
 ; =====================================================
 ; SET MILESTONE & SOURCE DIR
 ; =====================================================
 ; set by makefile!!
 
-!define MILESTONE 0.29 
-!define SOURCE_INSTALL_DIR E:\cygwin\home\danmorg\mono029\*.*
+;!define MILESTONE 0.91.99
+;!define BUILDNUM 2
+;!define SOURCE_INSTALL_DIR ..\install\*.* 
+
+; Used to install mcs.exe
+!define PROFILE_VERSION 1.0
 
 ; =====================================================
 ; SET LOGO
@@ -58,7 +68,7 @@
 ;
 ; 3. Type "make win32setup"
 ;
-; 4. The output file is mono-[MILESTONE]-win32-1.exe
+; 4. The output file is mono-[MILESTONE]-win32-[BUILDNUM].exe
 ;
 ;
 ; =====================================================
 
 !define NAME "Mono" 
 !define TARGET_INSTALL_DIR "$PROGRAMFILES\Mono-${MILESTONE}" 
-!define OUTFILE mono-${MILESTONE}-win32-1.exe
-
-Name ${NAME}\r
-Caption "Mono ${MILESTONE} Setup"\r
-
-!include "MUI.nsh"\r
-!include "Sections.nsh"\r
-
-SetCompressor lzma\r
-SilentInstall normal\r
-ShowInstDetails show\r
-SetDateSave on\r
-SetDatablockOptimize on\r
-CRCCheck on\r
-BGGradient 000000 800000 FFFFFF\r
-InstallColors FF8080 000030\r
-XPStyle on\r
+!define OUTFILE mono-${MILESTONE}-win32-${BUILDNUM}.exe
+
+Name ${NAME}
+Caption "Mono ${MILESTONE} Build ${BUILDNUM} Setup"
+
+SetCompressor bzip2
+SilentInstall normal
+ShowInstDetails show
+SetDateSave on
+SetDatablockOptimize on
+CRCCheck on
+BGGradient 000000 800000 FFFFFF
+InstallColors FF8080 000030
+XPStyle on
 AutoCloseWindow false
 
 ; =====================================================
@@ -125,26 +132,25 @@ AutoCloseWindow false
 #!define MUI_DIRECTORYPAGE
 #!define MUI_DIRECTORYSELECTIONPAGE
  
-!define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of Mono for Windows.\r\n\r\n\r\n$_CLICK"\r
-\r
-!insertmacro MUI_PAGE_WELCOME\r
-!insertmacro MUI_PAGE_LICENSE "E:\cygwin\home\danmorg\mono029\license.txt"\r
-!insertmacro MUI_PAGE_DIRECTORY\r
-!insertmacro MUI_PAGE_INSTFILES\r
-\r
-!define MUI_FINISHPAGE_LINK "Visit Mono's website for the latest news"\r
-!define MUI_FINISHPAGE_LINK_LOCATION "http://www.go-mono.com/"\r
-\r
-!define MUI_FINISHPAGE_NOREBOOTSUPPORT\r
-\r
-!insertmacro MUI_PAGE_FINISH\r
-\r
-!insertmacro MUI_UNPAGE_CONFIRM\r
-!insertmacro MUI_UNPAGE_INSTFILES\r
+!define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of Mono for Windows.\r\n\r\n\r\n$_CLICK"
+
+!insertmacro MUI_PAGE_WELCOME
+!insertmacro MUI_PAGE_DIRECTORY
+!insertmacro MUI_PAGE_INSTFILES
+
+!define MUI_FINISHPAGE_LINK "Visit Mono's website for the latest news"
+!define MUI_FINISHPAGE_LINK_LOCATION "http://www.go-mono.com/"
+
+!define MUI_FINISHPAGE_NOREBOOTSUPPORT
+
+!insertmacro MUI_PAGE_FINISH
+
+!insertmacro MUI_UNPAGE_CONFIRM
+!insertmacro MUI_UNPAGE_INSTFILES
  
 !insertmacro MUI_LANGUAGE "ENGLISH"
 
-AutoCloseWindow false\r
+AutoCloseWindow false
 ShowInstDetails show
 
 OutFile ${OUTFILE}
@@ -158,7 +164,7 @@ Section "Uninstall"
 
   MessageBox MB_YESNO "Are you sure you want to uninstall Mono from your system?" IDNO NoUnInstall
 
-  Delete $INSTDIR\Uninst.exe ; delete Uninstaller
+  Delete "$INSTDIR\Uninst.exe" ; delete Uninstaller
   DeleteRegKey HKLM SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Mono-${MILESTONE} ; Remove Entry in Software List
 
   MessageBox MB_YESNO "Mono was installed into $INSTDIR. Should this directory be removed completly?" IDNO GoNext1
@@ -169,30 +175,15 @@ Section "Uninstall"
 
   ; If the Default-Key is the current Milestone, we just remove the wrappers
 
-  ReadRegStr $0 HKEY_LOCAL_MACHINE SOFTWARE\Mono\ DefaultCLR
+  ReadRegStr $0 HKEY_LOCAL_MACHINE SOFTWARE\Mono DefaultCLR
   StrCmp $0 ${MILESTONE} DeleteWrappers
 
-  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
+  MessageBox MB_YESNO "Mono ${MILESTONE} Build ${BUILDNUM} 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
 
   DeleteWrappers:
 
   ; Complete Uninstall
 
-  DeleteRegKey HKLM SOFTWARE\Mono
-  Delete $WINDIR\monobasepath.bat
-  Delete $WINDIR\mcs.bat
-  Delete $WINDIR\mbas.bat
-  Delete $WINDIR\mint.bat
-  Delete $WINDIR\mono.bat
-  Delete $WINDIR\monodis.bat
-  Delete $WINDIR\monoilasm.bat
-  Delete $WINDIR\sqlsharp.bat
-  Delete $WINDIR\secutil.bat
-  Delete $WINDIR\cert2spc.bat
-  Delete $WINDIR\monoresgen.bat
-  Delete $WINDIR\monosn.bat
-  Delete $WINDIR\cilc.bat
-
   GoNext2:
   NoUnInstall:
 
@@ -203,7 +194,7 @@ SectionEnd
 
  ; Warn people if a newer Mono is already installed
 
- ReadRegStr $0 HKEY_LOCAL_MACHINE SOFTWARE\Mono\ DefaultCLR
+ ReadRegStr $0 HKEY_LOCAL_MACHINE SOFTWARE\Mono DefaultCLR
  Push $0
  Push ${MILESTONE} 
  Call VersionCheck
@@ -223,7 +214,7 @@ SectionEnd
 
  WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} SdkInstallRoot $INSTDIR
  WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} FrameworkAssemblyDirectory $INSTDIR\lib
- WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} MonoConfigDir $INSTDIR\etc\mono
+ WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} MonoConfigDir $INSTDIR\etc
  ;WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} GtkSharpLibPath $INSTDIR\lib
  WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono DefaultCLR ${MILESTONE}
 
@@ -240,106 +231,6 @@ SectionEnd
  ;resulting string which is like C:/mono-0.20/install
  Pop $6
 
-;========================
-; Write the wrapper files
-;========================
-
-; create bin/mono wrapper to be used if the user has cygwin
-FileOpen $0 "$INSTDIR\bin\mono.exe.sh" "w"
-FileWrite $0 "#!/bin/sh$\r$\n"
-FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"
-FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"
-FileWrite $0 '$6/bin/mono.exe "$$@"'
-FileClose $0
-
-; create bin/mint wrapper to be used if the user has cygwin
-FileOpen $0 "$INSTDIR\bin\mint.exe.sh" "w"
-FileWrite $0 "#!/bin/sh$\r$\n"
-FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"
-FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"
-FileWrite $0 '$6/bin/mint.exe "$$@"'
-FileClose $0
-
-; create bin/mcs wrapper to be used if the user has cygwin
-FileOpen $0 "$INSTDIR\bin\mcs.exe.sh" "w"
-FileWrite $0 "#!/bin/sh$\r$\n"
-FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"
-FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"
-FileWrite $0 '$6/bin/mono.exe $6/bin/mcs.exe "$$@"'
-FileClose $0
-
-; create bin/mbas wrapper to be used if the user has cygwin
-FileOpen $0 "$INSTDIR\bin\mbas.exe.sh" "w"
-FileWrite $0 "#!/bin/sh$\r$\n"
-FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"
-FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"
-FileWrite $0 '$6/bin/mono.exe $6/bin/mbas.exe "$$@"'
-FileClose $0
-
-; create bin/sqlsharp wrapper to be used if the user has cygwin
-FileOpen $0 "$INSTDIR\bin\sqlsharp.exe.sh" "w"
-FileWrite $0 "#!/bin/sh$\r$\n"
-FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"
-FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"
-FileWrite $0 '$6/bin/mono.exe $6/bin/sqlsharp.exe "$$@"'
-FileClose $0
-
-; create bin/monodis wrapper to be used if the user has cygwin
-FileOpen $0 "$INSTDIR\bin\monodis.exe.sh" "w"
-FileWrite $0 "#!/bin/sh$\r$\n"
-FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"
-FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"
-FileWrite $0 '$6/bin/mono.exe $6/bin/monodis.exe "$$@"'
-FileClose $0
-
-; create bin/monoresgen wrapper to be used if the user has cygwin
-FileOpen $0 "$INSTDIR\bin\monoresgen.exe.sh" "w"
-FileWrite $0 "#!/bin/sh$\r$\n"
-FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"
-FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"
-FileWrite $0 '$6/bin/mono.exe $6/bin/monoresgen.exe "$$@"'
-FileClose $0
-
-; create bin/monoilasm wrapper to be used if the user has cygwin
-FileOpen $0 "$INSTDIR\bin\monoilasm.exe.sh" "w"
-FileWrite $0 "#!/bin/sh$\r$\n"
-FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"
-FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"
-FileWrite $0 '$6/bin/mono.exe $6/bin/monoilasm.exe "$$@"'
-FileClose $0
-
-; create bin/monosn wrapper to be used if the user has cygwin
-FileOpen $0 "$INSTDIR\bin\monosn.exe.sh" "w"
-FileWrite $0 "#!/bin/sh$\r$\n"
-FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"
-FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"
-FileWrite $0 '$6/bin/mono.exe $6/bin/monosn.exe "$$@"'
-FileClose $0
-
-; create bin/secutil wrapper to be used if the user has cygwin
-FileOpen $0 "$INSTDIR\bin\secutil.exe.sh" "w"
-FileWrite $0 "#!/bin/sh$\r$\n"
-FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"
-FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"
-FileWrite $0 '$6/bin/mono.exe $6/bin/secutil.exe "$$@"'
-FileClose $0
-
-; create bin/cert2spc wrapper to be used if the user has cygwin
-FileOpen $0 "$INSTDIR\bin\cert2spc.exe.sh" "w"
-FileWrite $0 "#!/bin/sh$\r$\n"
-FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"
-FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"
-FileWrite $0 '$6/bin/mono.exe $6/bin/cert2spc.exe "$$@"'
-FileClose $0
-
-; create bin/cilc wrapper to be used if the user has cygwin
-FileOpen $0 "$INSTDIR\bin\cilc.exe.sh" "w"
-FileWrite $0 "#!/bin/sh$\r$\n"
-FileWrite $0 "export MONO_PATH=$6/lib$\r$\n"
-FileWrite $0 "export MONO_CFG_DIR=$6/etc/mono$\r$\n"
-FileWrite $0 '$6/bin/mono.exe $6/bin/cilc.exe "$$@"'
-FileClose $0
-
 ;
 ; These wrappers are copied to the windows directory.
 ;
@@ -348,359 +239,310 @@ FileClose $0
 ; Write the path file
 ;========================
 
-FileOpen $0 "$WINDIR\monobasepath.bat" "w"
-FileWrite $0 'set MONO_BASEPATH="$INSTDIR"$\r$\n'
-FileWrite $0 'set MONO_PATH=$INSTDIR\lib$\r$\n'
-FileWrite $0 'set MONO_CFG_DIR=$INSTDIR\etc'
-FileClose $0
-
-
-;========================
-; Write the mcs file
-;========================
-
-FileOpen $0 "$WINDIR\mcs.bat" "w"
-
-FileWrite $0 "@echo off$\r$\n"
-FileWrite $0 "call monobasepath.bat$\r$\n"
-FileWrite $0 "set MONOARGS=$\r$\n"
-FileWrite $0 ":loop$\r$\n"
-FileWrite $0 "if x%1 == x goto :done$\r$\n"
-FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"
-FileWrite $0 "shift$\r$\n"
-FileWrite $0 "goto loop$\r$\n"
-FileWrite $0 ":done$\r$\n"
-FileWrite $0 "setlocal$\r$\n"
-FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'
-FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\mcs.exe" %MONOARGS%$\r$\n'
-FileWrite $0 "endlocal$\r$\n"
-
-FileClose $0
-
-;========================
-; Write the mbas file
-;========================
-
-FileOpen $0 "$WINDIR\mbas.bat" "w"
-
-FileWrite $0 "@echo off$\r$\n"
-FileWrite $0 "call monobasepath.bat$\r$\n"
-FileWrite $0 "set MONOARGS=$\r$\n"
-FileWrite $0 ":loop$\r$\n"
-FileWrite $0 "if x%1 == x goto :done$\r$\n"
-FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"
-FileWrite $0 "shift$\r$\n"
-FileWrite $0 "goto loop$\r$\n"
-FileWrite $0 ":done$\r$\n"
-FileWrite $0 "setlocal$\r$\n"
-FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'
-FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\mbas.exe" %MONOARGS%$\r$\n'
-FileWrite $0 "endlocal$\r$\n"
-
-FileClose $0
-
-;========================
-; Write the mint file
-;========================
-
-FileOpen $0 "$WINDIR\mint.bat" "w"
-
-FileWrite $0 "@echo off$\r$\n"
-FileWrite $0 "call monobasepath.bat$\r$\n"
-FileWrite $0 "set MONOARGS=$\r$\n"
-FileWrite $0 ":loop$\r$\n"
-FileWrite $0 "if x%1 == x goto :done$\r$\n"
-FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"
-FileWrite $0 "shift$\r$\n"
-FileWrite $0 "goto loop$\r$\n"
-FileWrite $0 ":done$\r$\n"
-FileWrite $0 "setlocal$\r$\n"
-FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'
-FileWrite $0 '"$INSTDIR\bin\mint.exe" %MONOARGS%$\r$\n'
-FileWrite $0 "endlocal$\r$\n"
-
-FileClose $0
-
-;========================
-; Write the mono file
-;========================
-
-FileOpen $0 "$WINDIR\mono.bat" "w"
-
-FileWrite $0 "@echo off$\r$\n"
-FileWrite $0 "call monobasepath.bat$\r$\n"
-FileWrite $0 "set MONOARGS=$\r$\n"
-FileWrite $0 ":loop$\r$\n"
-FileWrite $0 "if x%1 == x goto :done$\r$\n"
-FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"
-FileWrite $0 "shift$\r$\n"
-FileWrite $0 "goto loop$\r$\n"
-FileWrite $0 ":done$\r$\n"
-FileWrite $0 "setlocal$\r$\n"
-FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'
-FileWrite $0 '"$INSTDIR\bin\mono.exe" %MONOARGS%$\r$\n'
-FileWrite $0 "endlocal$\r$\n"
+Push "mint"
+Call windowsBatCore
+
+Push "mono"
+Call windowsBatCore
+
+Push "monodis"
+Call windowsBatCore
+
+Push "monograph"
+Call windowsBatCore
+
+Push "pedump"
+Call windowsBatCore
+
+Push "mcs"
+Call windowsBatProfile
+
+Push "mbas"
+Call windowsBatProfile
+
+Push $0
+Call PushBatFiles
+Call createWindowsBatFiles
+Pop $0
+
+; ============= glib-2.0.pc ===============
+FileOpen $0 "$INSTDIR\lib\pkgconfig\glib-2.0.pc" "w"
+FileWrite $0 "prefix=$6$\r$\n"
+FileWrite $0 "exec_prefix=$${prefix}$\r$\n"
+FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"
+FileWrite $0 "includedir=$${prefix}/include$\r$\n"
+FileWrite $0 "$\r$\n"
+FileWrite $0 "glib_genmarshal=glib-genmarshal$\r$\n"
+FileWrite $0 "gobject_query=gobject-query$\r$\n"
+FileWrite $0 "glib_mkenums=glib-mkenums$\r$\n"
+FileWrite $0 "$\r$\n"
+FileWrite $0 "Name: GLib$\r$\n"
+FileWrite $0 "Description: C Utility Library$\r$\n"
+FileWrite $0 "Version: 2.0.4$\r$\n"
+FileWrite $0 "Libs: -L$${libdir} -lglib-2.0 -lintl -liconv $\r$\n"
+FileWrite $0 "Cflags: -I$${includedir}/glib-2.0 -I$${libdir}/glib-2.0/include $\r$\n"
 FileClose $0
 
-;========================
-; Write monodis
-;========================
-
-FileOpen $0 "$WINDIR\monodis.bat" "w"
-
-FileWrite $0 "@echo off$\r$\n"
-FileWrite $0 "call monobasepath.bat$\r$\n"
-FileWrite $0 "set MONOARGS=$\r$\n"
-FileWrite $0 ":loop$\r$\n"
-FileWrite $0 "if x%1 == x goto :done$\r$\n"
-FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"
-FileWrite $0 "shift$\r$\n"
-FileWrite $0 "goto loop$\r$\n"
-FileWrite $0 ":done$\r$\n"
-FileWrite $0 "setlocal$\r$\n"
-FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'
-FileWrite $0 '"$INSTDIR\bin\monodis.exe" %MONOARGS%$\r$\n'
-FileWrite $0 "endlocal$\r$\n"
-
+; ============= gmodule-2.0.pc ===============
+FileOpen $0 "$INSTDIR\lib\pkgconfig\gmodule-2.0.pc" "w"
+FileWrite $0 "prefix=$6$\r$\n"
+FileWrite $0 "exec_prefix=$${prefix}$\r$\n"
+FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"
+FileWrite $0 "includedir=$${prefix}/include$\r$\n"
+FileWrite $0 "$\r$\n"
+FileWrite $0 "gmodule_supported=true$\r$\n"
+FileWrite $0 "$\r$\n"
+FileWrite $0 "Name: GModule$\r$\n"
+FileWrite $0 "Description: Dynamic module loader for GLib$\r$\n"
+FileWrite $0 "Requires: glib-2.0$\r$\n"
+FileWrite $0 "Version: 2.0.4$\r$\n"
+FileWrite $0 "Libs: -L$${libdir} -lgmodule-2.0 $\r$\n"
+FileWrite $0 "Cflags:$\r$\n"
 FileClose $0
 
-;========================
-; Write monoilasm
-;========================
-
-FileOpen $0 "$WINDIR\monoilasm.bat" "w"
-
-FileWrite $0 "@echo off$\r$\n"
-FileWrite $0 "call monobasepath.bat$\r$\n"
-FileWrite $0 "set MONOARGS=$\r$\n"
-FileWrite $0 ":loop$\r$\n"
-FileWrite $0 "if x%1 == x goto :done$\r$\n"
-FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"
-FileWrite $0 "shift$\r$\n"
-FileWrite $0 "goto loop$\r$\n"
-FileWrite $0 ":done$\r$\n"
-FileWrite $0 "setlocal$\r$\n"
-FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'
-FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\monoilasm.exe" %MONOARGS%$\r$\n'
-FileWrite $0 "endlocal$\r$\n"
-
+; ============= gobject-2.0.pc ===============
+FileOpen $0 "$INSTDIR\lib\pkgconfig\gobject-2.0.pc" "w"
+FileWrite $0 "prefix=$6$\r$\n"
+FileWrite $0 "exec_prefix=$${prefix}$\r$\n"
+FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"
+FileWrite $0 "includedir=$${prefix}/include$\r$\n"
+FileWrite $0 "$\r$\n"
+FileWrite $0 "Name: GObject$\r$\n"
+FileWrite $0 "Description: GLib Type, Object, Parameter and Signal Library$\r$\n"
+FileWrite $0 "Requires: glib-2.0$\r$\n"
+FileWrite $0 "Version: 2.0.4$\r$\n"
+FileWrite $0 "Libs: -L$${libdir} -lgobject-2.0$\r$\n"
+FileWrite $0 "Cflags:$\r$\n"
 FileClose $0
 
-
-;========================
-; Write the sqlsharp file
-;========================
-
-FileOpen $0 "$WINDIR\sqlsharp.bat" "w"
-
-FileWrite $0 "@echo off$\r$\n"
-FileWrite $0 "call monobasepath.bat$\r$\n"
-FileWrite $0 "set MONOARGS=$\r$\n"
-FileWrite $0 ":loop$\r$\n"
-FileWrite $0 "if x%1 == x goto :done$\r$\n"
-FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"
-FileWrite $0 "shift$\r$\n"
-FileWrite $0 "goto loop$\r$\n"
-FileWrite $0 ":done$\r$\n"
-FileWrite $0 "setlocal$\r$\n"
-FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'
-FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\sqlsharp.exe" %MONOARGS%$\r$\n'
-FileWrite $0 "endlocal$\r$\n"
-
+; ============= gthread-2.0.pc ===============
+FileOpen $0 "$INSTDIR\lib\pkgconfig\gthread-2.0.pc" "w"
+FileWrite $0 "prefix=$6$\r$\n"
+FileWrite $0 "exec_prefix=$${prefix}$\r$\n"
+FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"
+FileWrite $0 "includedir=$${prefix}/include$\r$\n"
+FileWrite $0 "$\r$\n"
+FileWrite $0 "Name: GThread$\r$\n"
+FileWrite $0 "Description: Thread support for GLib$\r$\n"
+FileWrite $0 "Requires: glib-2.0$\r$\n"
+FileWrite $0 "Version: 2.0.4$\r$\n"
+FileWrite $0 "Libs: -L$${libdir} -lgthread-2.0 $\r$\n"
+FileWrite $0 "Cflags: -D_REENTRANT$\r$\n"
 FileClose $0
 
-;========================
-; Write the secutil file
-;========================
-
-FileOpen $0 "$WINDIR\secutil.bat" "w"
-
-FileWrite $0 "@echo off$\r$\n"
-FileWrite $0 "call monobasepath.bat$\r$\n"
-FileWrite $0 "set MONOARGS=$\r$\n"
-FileWrite $0 ":loop$\r$\n"
-FileWrite $0 "if x%1 == x goto :done$\r$\n"
-FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"
-FileWrite $0 "shift$\r$\n"
-FileWrite $0 "goto loop$\r$\n"
-FileWrite $0 ":done$\r$\n"
-FileWrite $0 "setlocal$\r$\n"
-FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'
-FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\secutil.exe" %MONOARGS%$\r$\n'
-FileWrite $0 "endlocal$\r$\n"
-
+; ============= libintl.pc ===============
+FileOpen $0 "$INSTDIR\lib\pkgconfig\libintl.pc" "w"
+FileWrite $0 "prefix=$6$\r$\n"
+FileWrite $0 "exec_prefix=$${prefix}$\r$\n"
+FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"
+FileWrite $0 "includedir=$${prefix}/include$\r$\n"
+FileWrite $0 "$\r$\n"
+FileWrite $0 "Name: libintl$\r$\n"
+FileWrite $0 "Description: The intl library from GNU gettext$\r$\n"
+FileWrite $0 "Version: 0.10.40-tml$\r$\n"
+FileWrite $0 "Libs: -L$${libdir} -lintl$\r$\n"
+FileWrite $0 "Cflags: -I$${includedir}$\r$\n"
 FileClose $0
 
-;========================
-; Write the cert2spc file
-;========================
+Call CreateSetMonoPath
+Call RunGacutil
 
-FileOpen $0 "$WINDIR\cert2spc.bat" "w"
-
-FileWrite $0 "@echo off$\r$\n"
-FileWrite $0 "call monobasepath.bat$\r$\n"
-FileWrite $0 "set MONOARGS=$\r$\n"
-FileWrite $0 ":loop$\r$\n"
-FileWrite $0 "if x%1 == x goto :done$\r$\n"
-FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"
-FileWrite $0 "shift$\r$\n"
-FileWrite $0 "goto loop$\r$\n"
-FileWrite $0 ":done$\r$\n"
-FileWrite $0 "setlocal$\r$\n"
-FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'
-FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\cert2spec.exe" %MONOARGS%$\r$\n'
-FileWrite $0 "endlocal$\r$\n"
-
-FileClose $0
-
-
-;========================
-; Write the monoresgen file
-;========================
-
-FileOpen $0 "$WINDIR\monoresgen.bat" "w"
-
-FileWrite $0 "@echo off$\r$\n"
-FileWrite $0 "call monobasepath.bat$\r$\n"
-FileWrite $0 "set MONOARGS=$\r$\n"
-FileWrite $0 ":loop$\r$\n"
-FileWrite $0 "if x%1 == x goto :done$\r$\n"
-FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"
-FileWrite $0 "shift$\r$\n"
-FileWrite $0 "goto loop$\r$\n"
-FileWrite $0 ":done$\r$\n"
-FileWrite $0 "setlocal$\r$\n"
-FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'
-FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\monoresgen.exe" %MONOARGS%$\r$\n'
-FileWrite $0 "endlocal$\r$\n"
+MessageBox MB_ICONINFORMATION "Don't forget to prepend $INSTDIR\bin to your PATH when using Mono ${MILESTONE} Build ${BUILDNUM}.$\r$\nYou can use $INSTDIR\bin\setmonopath.bat to do it."
+NoInstall:
 
-FileClose $0
+SectionEnd
 
-;========================
-; Write the monosn file
-;========================
+Function PushBatFiles
+       Push ""
+       Push "al"
+       Push "cert2spc"
+       Push "certmgr"
+       Push "chktrust"
+       Push "cilc"
+       Push "disco"
+       Push "gacutil"
+       Push "genxs"
+       Push "ilasm"
+       Push "ilasm"
+       Push "monop"
+       Push "monoresgen"
+       Push "secutil"
+       Push "sqlsharp"
+       Push "makecert"
+       Push "setreg"
+       Push "signcode"
+       Push "sn"
+       Push "soapsuds"
+       Push "wsdl"
+       Push "xsd"
+FunctionEnd
 
-FileOpen $0 "$WINDIR\monosn.bat" "w"
-
-FileWrite $0 "@echo off$\r$\n"
-FileWrite $0 "call monobasepath.bat$\r$\n"
-FileWrite $0 "set MONOARGS=$\r$\n"
-FileWrite $0 ":loop$\r$\n"
-FileWrite $0 "if x%1 == x goto :done$\r$\n"
-FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"
-FileWrite $0 "shift$\r$\n"
-FileWrite $0 "goto loop$\r$\n"
-FileWrite $0 ":done$\r$\n"
-FileWrite $0 "setlocal$\r$\n"
-FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'
-FileWrite $0 '"$INSTDIR\bin\monosn.exe" %MONOARGS%$\r$\n'
-FileWrite $0 "endlocal$\r$\n"
+Function createWindowsBatFiles
+createloop:
+       Pop $0
+       StrCmp "$0" "" endcreateloop
+       Push $0
+       Call windowsBat
+       Goto createloop
+endcreateloop:
+FunctionEnd
 
-FileClose $0
+Function CreateCreategac
+       Push $1
+       FileOpen $1 "$INSTDIR\creategac.bat" "w"
+       FileWrite $1 "@echo off$\r$\n"
+       FileWrite $1 "echo Mono version ${MILESTONE} Build ${BUILDNUM}$\r$\n"
+       FileWrite $1 "echo Running gacutil to install system assemblies into the GAC$\r$\n"
+       FileWrite $1 "SETLOCAL$\r$\n"
+       FileWrite $1 "PATH=$INSTDIR\bin;%PATH%$\r$\n"
+       FileWrite $1 '"$INSTDIR\bin\gacutil.bat" -il "$INSTDIR\lib\mono\${PROFILE_VERSION}\full-path-assemblies.lst"$\r$\n'
+       FileWrite $1 "ENDLOCAL$\r$\n"
+       FileClose $1
+       Pop $1
+FunctionEnd
 
-;========================
-; Write the cilc file
-;========================
+Function CreateSetMonoPath
+       Push $1
+       FileOpen $1 "$INSTDIR\bin\setmonopath.bat" "w"
+       FileWrite $1 "@echo off$\r$\n"
+       FileWrite $1 "echo Mono version ${MILESTONE} Build ${BUILDNUM}$\r$\n"
+       FileWrite $1 "echo Prepending '$INSTDIR\bin' to PATH$\r$\n"
+       FileWrite $1 "PATH=$INSTDIR\bin;%PATH%$\r$\n"
+       FileClose $1
+       Pop $1
+FunctionEnd
 
-FileOpen $0 "$WINDIR\cilc.bat" "w"
-
-FileWrite $0 "@echo off$\r$\n"
-FileWrite $0 "call monobasepath.bat$\r$\n"
-FileWrite $0 "set MONOARGS=$\r$\n"
-FileWrite $0 ":loop$\r$\n"
-FileWrite $0 "if x%1 == x goto :done$\r$\n"
-FileWrite $0 "set MONOARGS=%MONOARGS% %1$\r$\n"
-FileWrite $0 "shift$\r$\n"
-FileWrite $0 "goto loop$\r$\n"
-FileWrite $0 ":done$\r$\n"
-FileWrite $0 "setlocal$\r$\n"
-FileWrite $0 'set path="$INSTDIR\bin\;$INSTDIR\lib\;%path%"$\r$\n'
-FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\bin\cilc.exe" %MONOARGS%$\r$\n'
-FileWrite $0 "endlocal$\r$\n"
+Function RunGacutil
+       Push $1
+       Push $2
+       Push $3
+       FileOpen $1 "$INSTDIR\lib\mono\${PROFILE_VERSION}\assemblies.lst" "r"
+       FileOpen $2 "$INSTDIR\lib\mono\${PROFILE_VERSION}\full-path-assemblies.lst" "w"
+nextline:      
+       FileRead $1 $3
+       StrCmp "$3" "" giveup
+       FileWrite $2 "$INSTDIR\lib\mono\${PROFILE_VERSION}\$3"
+       goto nextline 
+giveup:
+       FileClose $1
+       FileClose $2
+       ExecWait '"$INSTDIR\bin\gacutil.bat" -il "$INSTDIR\lib\mono\${PROFILE_VERSION}\full-path-assemblies.lst"'
+       IfErrors errrun noerr
+errrun:
+       MessageBox MB_ICONEXCLAMATION 'Error running gacutil!$\r$\nRun "$INSTDIR\creategac.bat" after finishing setup program.'
+       Call CreateCreategac
+       ;Delete "$INSTDIR\lib\mono\${PROFILE_VERSION}\assemblies.lst"
+       ;Delete "$INSTDIR\lib\mono\${PROFILE_VERSION}\full-path-assemblies.lst"
+noerr:
+       Pop $3
+       Pop $2
+       Pop $1
+FunctionEnd
 
-FileClose $0
+Function windowsBatCore
+       Exch $1 ;core exe name
+
+       FileOpen $0 "$INSTDIR\bin\$1.bat" "w"
+       FileWrite $0 "@ECHO OFF$\r$\n"
+       FileWrite $0 "SET MONOARGS=$\r$\n"
+       FileWrite $0 ":loop$\r$\n"
+       FileWrite $0 "IF x%1 == x goto :done$\r$\n"
+       FileWrite $0 'SET MONOARGS=%MONOARGS% %1$\r$\n'
+       FileWrite $0 "SHIFT$\r$\n"
+       FileWrite $0 "GOTO loop$\r$\n"
+       FileWrite $0 ":done$\r$\n"
+       FileWrite $0 "SETLOCAL$\r$\n"
+       FileWrite $0 'SET PATH=$INSTDIR\bin;%PATH%$\r$\n'
+       FileWrite $0 'SET MONO_PATH=$INSTDIR\lib$\r$\n'
+       FileWrite $0 'SET MONO_CFG_DIR=$INSTDIR\etc$\r$\n'
+       FileWrite $0 '"$INSTDIR\lib\$1.exe" %MONOARGS%$\r$\n'
+       FileWrite $0 "ENDLOCAL$\r$\n"
+       FileClose $0
+
+       FileOpen $0 "$INSTDIR\bin\$1" "w"
+       FileWrite $0 "#!/bin/sh$\n"
+       FileWrite $0 'IDIRUNIX="`cygpath -u '
+       FileWrite $0 "'$INSTDIR'`"
+       FileWrite $0 '"$\n'
+       FileWrite $0 'PATH="$${IDIRUNIX}/bin:$$PATH"$\n'
+       FileWrite $0 "MONO_PATH='$INSTDIR\lib'$\n"
+       FileWrite $0 "MONO_CFG_DIR='$INSTDIR\etc'$\n"
+       FileWrite $0 "export PATH MONO_PATH MONO_CFG_DIR$\n"
+       FileWrite $0 'exec "$6/lib/$1.exe" "$$@"$\n'
+       FileClose $0
+
+       Pop $1
+FunctionEnd
 
-; ============= glib-2.0.pc ===============\r
-FileOpen $0 "$INSTDIR\lib\pkgconfig\glib-2.0.pc" "w"\r
-FileWrite $0 "prefix=$6$\r$\n"\r
-FileWrite $0 "exec_prefix=$${prefix}$\r$\n"\r
-FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"\r
-FileWrite $0 "includedir=$${prefix}/include$\r$\n"\r
-FileWrite $0 "$\r$\n"\r
-FileWrite $0 "glib_genmarshal=glib-genmarshal$\r$\n"\r
-FileWrite $0 "gobject_query=gobject-query$\r$\n"\r
-FileWrite $0 "glib_mkenums=glib-mkenums$\r$\n"\r
-FileWrite $0 "$\r$\n"\r
-FileWrite $0 "Name: GLib$\r$\n"\r
-FileWrite $0 "Description: C Utility Library$\r$\n"\r
-FileWrite $0 "Version: 2.0.4$\r$\n"\r
-FileWrite $0 "Libs: -L$${libdir} -lglib-2.0 -lintl -liconv $\r$\n"\r
-FileWrite $0 "Cflags: -I$${includedir}/glib-2.0 -I$${libdir}/glib-2.0/include $\r$\n"\r
-FileClose $0
-\r
-; ============= gmodule-2.0.pc ===============\r
-FileOpen $0 "$INSTDIR\lib\pkgconfig\gmodule-2.0.pc" "w"\r
-FileWrite $0 "prefix=$6$\r$\n"\r
-FileWrite $0 "exec_prefix=$${prefix}$\r$\n"\r
-FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"\r
-FileWrite $0 "includedir=$${prefix}/include$\r$\n"\r
-FileWrite $0 "$\r$\n"\r
-FileWrite $0 "gmodule_supported=true$\r$\n"\r
-FileWrite $0 "$\r$\n"\r
-FileWrite $0 "Name: GModule$\r$\n"\r
-FileWrite $0 "Description: Dynamic module loader for GLib$\r$\n"\r
-FileWrite $0 "Requires: glib-2.0$\r$\n"\r
-FileWrite $0 "Version: 2.0.4$\r$\n"\r
-FileWrite $0 "Libs: -L$${libdir} -lgmodule-2.0 $\r$\n"\r
-FileWrite $0 "Cflags:$\r$\n"\r
-FileClose $0\r
-\r
-; ============= gobject-2.0.pc ===============\r
-FileOpen $0 "$INSTDIR\lib\pkgconfig\gobject-2.0.pc" "w"\r
-FileWrite $0 "prefix=$6$\r$\n"\r
-FileWrite $0 "exec_prefix=$${prefix}$\r$\n"\r
-FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"\r
-FileWrite $0 "includedir=$${prefix}/include$\r$\n"\r
-FileWrite $0 "$\r$\n"\r
-FileWrite $0 "Name: GObject$\r$\n"\r
-FileWrite $0 "Description: GLib Type, Object, Parameter and Signal Library$\r$\n"\r
-FileWrite $0 "Requires: glib-2.0$\r$\n"\r
-FileWrite $0 "Version: 2.0.4$\r$\n"\r
-FileWrite $0 "Libs: -L$${libdir} -lgobject-2.0$\r$\n"\r
-FileWrite $0 "Cflags:$\r$\n"\r
-FileClose $0\r
-\r
-; ============= gthread-2.0.pc ===============\r
-FileOpen $0 "$INSTDIR\lib\pkgconfig\gthread-2.0.pc" "w"\r
-FileWrite $0 "prefix=$6$\r$\n"\r
-FileWrite $0 "exec_prefix=$${prefix}$\r$\n"\r
-FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"\r
-FileWrite $0 "includedir=$${prefix}/include$\r$\n"\r
-FileWrite $0 "$\r$\n"\r
-FileWrite $0 "Name: GThread$\r$\n"\r
-FileWrite $0 "Description: Thread support for GLib$\r$\n"\r
-FileWrite $0 "Requires: glib-2.0$\r$\n"\r
-FileWrite $0 "Version: 2.0.4$\r$\n"\r
-FileWrite $0 "Libs: -L$${libdir} -lgthread-2.0 $\r$\n"\r
-FileWrite $0 "Cflags: -D_REENTRANT$\r$\n"\r
-FileClose $0\r
-
-; ============= libintl.pc ===============\r
-FileOpen $0 "$INSTDIR\lib\pkgconfig\libintl.pc" "w"\r
-FileWrite $0 "prefix=$6$\r$\n"\r
-FileWrite $0 "exec_prefix=$${prefix}$\r$\n"\r
-FileWrite $0 "libdir=$${exec_prefix}/lib$\r$\n"\r
-FileWrite $0 "includedir=$${prefix}/include$\r$\n"\r
-FileWrite $0 "$\r$\n"\r
-FileWrite $0 "Name: libintl$\r$\n"\r
-FileWrite $0 "Description: The intl library from GNU gettext$\r$\n"\r
-FileWrite $0 "Version: 0.10.40-tml$\r$\n"\r
-FileWrite $0 "Libs: -L$${libdir} -lintl$\r$\n"\r
-FileWrite $0 "Cflags: -I$${includedir}$\r$\n"\r
-FileClose $0\r
+Function windowsBat
+       Exch $1 ;tool name
+
+       FileOpen $0 "$INSTDIR\bin\$1.bat" "w"
+       FileWrite $0 "@ECHO OFF$\r$\n"
+       FileWrite $0 "SET MONOARGS=$\r$\n"
+       FileWrite $0 ":loop$\r$\n"
+       FileWrite $0 "IF x%1 == x GOTO :done$\r$\n"
+       FileWrite $0 'SET MONOARGS=%MONOARGS% %1$\r$\n'
+       FileWrite $0 "SHIFT$\r$\n"
+       FileWrite $0 "GOTO loop$\r$\n"
+       FileWrite $0 ":done$\r$\n"
+       FileWrite $0 "SETLOCAL$\r$\n"
+       FileWrite $0 'SET PATH=$INSTDIR\bin;%PATH%$\r$\n'
+       FileWrite $0 'SET MONO_PATH=$INSTDIR\lib$\r$\n'
+       FileWrite $0 'SET MONO_CFG_DIR=$INSTDIR\etc$\r$\n'
+       FileWrite $0 '"$INSTDIR\lib\mono.exe" "$INSTDIR\lib\$1.exe" %MONOARGS%$\r$\n'
+       FileWrite $0 "ENDLOCAL$\r$\n"
+       FileClose $0
+
+       FileOpen $0 "$INSTDIR\bin\$1" "w"
+       FileWrite $0 "#!/bin/sh$\n"
+       FileWrite $0 'IDIRUNIX="`cygpath -u '
+       FileWrite $0 "'$INSTDIR'`"
+       FileWrite $0 '"$\n'
+       FileWrite $0 'PATH="$${IDIRUNIX}/bin:$$PATH"$\n'
+       FileWrite $0 "MONO_PATH='$INSTDIR\lib'$\n"
+       FileWrite $0 "MONO_CFG_DIR='$INSTDIR\etc'$\n"
+       FileWrite $0 "export PATH MONO_PATH MONO_CFG_DIR$\n"
+       FileWrite $0 'exec "$6/lib/mono.exe" "$6/lib/$1.exe" "$$@"$\n'
+       FileClose $0
+
+       Pop $1
+FunctionEnd
 
-NoInstall:
-SectionEnd
+Function windowsBatProfile
+       Exch $1 ;tool name
+
+       FileOpen $0 "$INSTDIR\bin\$1.bat" "w"
+       FileWrite $0 "@ECHO OFF$\r$\n"
+       FileWrite $0 "SET MONOARGS=$\r$\n"
+       FileWrite $0 ":loop$\r$\n"
+       FileWrite $0 "IF x%1 == x GOTO :done$\r$\n"
+       FileWrite $0 'SET MONOARGS=%MONOARGS% %1$\r$\n'
+       FileWrite $0 "SHIFT$\r$\n"
+       FileWrite $0 "GOTO loop$\r$\n"
+       FileWrite $0 ":done$\r$\n"
+       FileWrite $0 "SETLOCAL$\r$\n"
+       FileWrite $0 'SET PATH=$INSTDIR\bin;%PATH%$\r$\n'
+       FileWrite $0 'SET MONO_PATH=$INSTDIR\lib$\r$\n'
+       FileWrite $0 'SET MONO_CFG_DIR=$INSTDIR\etc$\r$\n'
+       FileWrite $0 '"$INSTDIR\lib\mono.exe" "$INSTDIR\lib\mono\${PROFILE_VERSION}\$1.exe" %MONOARGS%$\r$\n'
+       FileWrite $0 "ENDLOCAL$\r$\n"
+       FileClose $0
+
+       FileOpen $0 "$INSTDIR\bin\$1" "w"
+       FileWrite $0 "#!/bin/sh$\n"
+       FileWrite $0 'IDIRUNIX="`cygpath -u '
+       FileWrite $0 "'$INSTDIR'`"
+       FileWrite $0 '"$\n'
+       FileWrite $0 'PATH="$$IDIRUNIX/bin:$$PATH"$\n'
+       FileWrite $0 "MONO_PATH='$INSTDIR\lib'$\n"
+       FileWrite $0 "MONO_CFG_DIR='$INSTDIR\etc'$\n"
+       FileWrite $0 "export PATH MONO_PATH MONO_CFG_DIR$\n"
+       FileWrite $0 'exec "$6/lib/mono.exe" "$6/lib/mono/${PROFILE_VERSION}/$1.exe" "$$@"$\n'
+       FileClose $0
+
+       Pop $1
+FunctionEnd
 
 ; function StrReplace
 ; by Hendri Adriaens