Removed useless [CLSCompliant(false)]
[mono.git] / monowiz.win32.nsi
index 81f0bbe964c6ccd35fdb82856b93db07fcc8c851..28229307aa8d1a27b44f24f019edae5615c11bb3 100644 (file)
@@ -1,13 +1,17 @@
-; =====================================================
-; mono.nsi - Mono Setup wizard for windows
-; =====================================================
+; =================================================================
+; mono.nsi - This NSIS script creates Mono Setup wizard for Windows
+;
+;            Requires NSIS 2.0 (Nullsoft Scriptable Install System)
+;            From http://nsis.sourceforge.net/site/index.php
+; =================================================================
 ;
 ; (C) Copyright 2003 by Johannes Roith
-; (C) Copyright 2003 by Daniel Morgan
+; (C) Copyright 2003, 2004 by Daniel Morgan
 ;
 ; Authors: 
 ;       Johannes Roith <johannes@jroith.de>
-;       Daniel Morgan <danmorg@sc.rr.com>
+;       Daniel Morgan <danielmorgan@verizon.net>
+;      Urs C Muff <umuff@quark.com>
 ;
 ; This .nsi includes code from the NSIS Archives:
 ; function StrReplace and VersionCheck 
 ; SET MILESTONE & SOURCE DIR
 ; =====================================================
 ; set by makefile!!
-;
-; !define MILESTONE "0.26" ;
-; !define SOURCE_INSTALL_DIR "/usr/monodist\\*" ;
+
+;!define MILESTONE 0.91
+;!define SOURCE_INSTALL_DIR ..\install\*.* 
+!define PROFILE_VERSION 1.0
 
 ; =====================================================
 ; SET LOGO
@@ -58,9 +63,6 @@
 ; 4. The output file is mono-[MILESTONE]-win32-1.exe
 ;
 ;
-;
-;
-;
 ; =====================================================
 ; MONO & REGISTRY / DETECTING MONO
 ; =====================================================
 ; GENERAL SETTING - NEED NOT TO BE CHANGED
 ; =====================================================
 
- !define NAME "Mono" ;
- !define TARGET_INSTALL_DIR "$PROGRAMFILES\Mono-${MILESTONE}" ;
- !define OUTFILE "mono-${MILESTONE}-win32-1.exe" ;
+!define NAME "Mono" 
+!define TARGET_INSTALL_DIR "$PROGRAMFILES\Mono-${MILESTONE}" 
+!define OUTFILE mono-${MILESTONE}-win32-1.exe
 
-; =====================================================
-; SCRIPT
-; =====================================================
+Name ${NAME}\r
+Caption "Mono ${MILESTONE} Setup"\r
 
- !define MUI_PRODUCT "${NAME}"
- !define MUI_VERSION "${MILESTONE}"
- !define FULLNAME "${MUI_PRODUCT} ${MUI_VERSION}"
- !define MUI_UI "${NSISDIR}\Contrib\UIs\modern2.exe"
- !define MUI_ICON "${NSISDIR}\Contrib\Icons\setup.ico"
- !define MUI_UNICON "${NSISDIR}\Contrib\Icons\normal-uninstall.ico"
- !define MUI_WELCOMEPAGE
- !define MUI_DIRECTORYPAGE
- !define MUI_DIRECTORYSELECTIONPAGE
- !include "${NSISDIR}\Contrib\Modern UI\System.nsh"
- !insertmacro MUI_SYSTEM
- !insertmacro MUI_LANGUAGE "ENGLISH"
+!include "MUI.nsh"\r
+!include "Sections.nsh"\r
 
+SetCompressor bzip2\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
+AutoCloseWindow false
 
- OutFile "${OUTFILE}"
- InstallDir "${TARGET_INSTALL_DIR}"
+; =====================================================
+; SCRIPT
+; =====================================================
 
+#!define MUI_WELCOMEPAGE
+#!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_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
+!insertmacro MUI_LANGUAGE "ENGLISH"
+
+AutoCloseWindow false\r
+ShowInstDetails show
+
+OutFile ${OUTFILE}
+InstallDir "${TARGET_INSTALL_DIR}"
 
 ;========================
 ; Uninstaller
@@ -164,6 +193,8 @@ Section "Uninstall"
   Delete $WINDIR\monoresgen.bat
   Delete $WINDIR\monosn.bat
   Delete $WINDIR\cilc.bat
+  Delete $WINDIR\monop.bat
+  Delete $WINDIR\xsp.bat
 
   GoNext2:
   NoUnInstall:
@@ -186,8 +217,11 @@ SectionEnd
 
  NoAskInstall:
 
+ DetailPrint "Installing Mono Files..."
+ SetOverwrite on
  SetOutPath $INSTDIR
- File /r "${SOURCE_INSTALL_DIR}"
+ File /r ${SOURCE_INSTALL_DIR}
+
  WriteUninstaller Uninst.exe
 
  WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\Mono\${MILESTONE} SdkInstallRoot $INSTDIR
@@ -209,106 +243,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.
 ;
@@ -317,281 +251,210 @@ 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\mono"'
-FileClose $0
+Push "mint"
+Call windowsBatCore
 
+Push "mono"
+Call windowsBatCore
 
-;========================
-; Write the mcs file
-;========================
+Push "mcs"
+Call windowsBatProfile
 
-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"
+Push "mbas"
+Call windowsBat
 
-FileClose $0
+Push "monodis"
+Call windowsBat
 
-;========================
-; Write the mbas file
-;========================
+Push "monoilasm"
+Call windowsBat
 
-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"
+Push "sqlsharp"
+Call windowsBat
 
-FileClose $0
+Push "secutil"
+Call windowsBat
 
-;========================
-; Write the mint file
-;========================
+Push "cert2spec"
+Call windowsBat
 
-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"
+Push "monoresgen"
+Call windowsBat
 
-FileClose $0
+Push "monosn"
+Call windowsBat
 
-;========================
-; Write the mono file
-;========================
+Push "cilc"
+Call windowsBat
 
-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"
-FileClose $0
+Push "monop"
+Call windowsBat
 
-;========================
-; 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"
-
-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"
-
-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"
-
-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"
-
-FileClose $0
-
-;========================
-; Write the cert2spc file
-;========================
-
-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"
-
-FileClose $0
-
-;========================
-; Write the monosn file
-;========================
-
-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"
+Push "xsp"
+Call windowsBat
 
+; ============= 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
 
-;========================
-; Write the cilc file
-;========================
-
-FileOpen $0 "$WINDIR\cilc.bat" "w"
-
+NoInstall:
+SectionEnd
 
-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 windowsBatCore
+       Exch $1 ;core exe name
+
+       FileOpen $0 "$WINDIR\$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;$INSTDIR\lib;%PATH%"$\r$\n'
+       FileWrite $0 '"$INSTDIR\bin\$1.exe" %MONOARGS%$\r$\n'
+       FileWrite $0 "EXIT /B %ERRORLEVEL%$\r$\n"
+       FileWrite $0 "ENDLOCAL$\r$\n"
+       FileClose $0
+
+       FileOpen $0 "$INSTDIR\bin\$1" "w"
+       FileWrite $0 "#!/bin/sh$\r$\n"
+       FileWrite $0 'exec $6/bin/$1.exe "$$@"$\r$\n'
+       FileClose $0
+
+       Pop $1
+FunctionEnd
 
-FileClose $0
+Function windowsBat
+       Exch $1 ;tool name
+
+       FileOpen $0 "$WINDIR\$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;$INSTDIR\lib;%PATH%"$\r$\n'
+       FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\lib\$1.exe" %MONOARGS%$\r$\n'
+       FileWrite $0 "EXIT /B %ERRORLEVEL%$\r$\n"
+       FileWrite $0 "ENDLOCAL$\r$\n"
+       FileClose $0
+
+       FileOpen $0 "$INSTDIR\bin\$1" "w"
+       FileWrite $0 "#!/bin/sh$\r$\n"
+       FileWrite $0 'exec $6/bin/mono.exe $6/lib/$1.exe "$$@"$\r$\n'
+       FileClose $0
+
+       Pop $1
+FunctionEnd
 
-NoInstall:
-SectionEnd
+Function windowsBatProfile
+       Exch $1 ;tool name
+
+       FileOpen $0 "$WINDIR\$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;$INSTDIR\lib;%PATH%"$\r$\n'
+       FileWrite $0 '"$INSTDIR\bin\mono.exe" "$INSTDIR\lib\mono\${PROFILE_VERSION}\$1.exe" %MONOARGS%$\r$\n'
+       FileWrite $0 "EXIT /B %ERRORLEVEL%$\r$\n"
+       FileWrite $0 "ENDLOCAL$\r$\n"
+       FileClose $0
+
+       FileOpen $0 "$INSTDIR\bin\$1" "w"
+       FileWrite $0 "#!/bin/sh$\r$\n"
+       FileWrite $0 'exec $6/bin/mono.exe $6/lib/mono/${PROFILE_VERSION}/$1.exe "$$@"$\r$\n'
+       FileClose $0
+
+       Pop $1
+FunctionEnd
 
 ; function StrReplace
 ; by Hendri Adriaens
@@ -696,4 +559,4 @@ Function VersionCheck
   Pop $R0
   Pop $1
   Exch $0
-FunctionEnd
\ No newline at end of file
+FunctionEnd