--- /dev/null
+#!/bin/bash -e
+CURDIR="`pwd`"
+CROSS_DIR=${1:-/opt/cross/}
+MINGW=${1:-i386-mingw32msvc}
+CROSS_BIN_DIR="$CROSS_DIR/bin"
+CROSS_DLL_DIR="$CROSS_DIR/$MINGW/bin"
+CROSS_PKG_CONFIG_DIR=$CROSS_DIR/$MINGW/lib/pkgconfig
+COPY_DLLS="libgio*.dll libglib*.dll libgmodule*.dll libgthread*.dll libgobject*.dll"
+PATH=$CROSS_BIN_DIR:$PATH
+INSTALL_DESTDIR="$CURDIR/mono-win32"
+PROFILES="default net_2_0 net_2_1 net_3_5"
+
+export PATH
+
+function setup ()
+{
+ if [ -d ./.git/svn ]; then
+ SVN_INFO='git svn info'
+ elif [ -d ./.svn ]; then
+ SVN_INFO='svn info'
+ else
+ SVN_INFO=""
+ fi
+
+ if [ -n "$SVN_INFO" ]; then
+ MONO_SVN_REVISION=`$SVN_INFO | grep Revision | sed 's/.*: //'`
+ MONO_BRANCH=`$SVN_INFO | grep URL | sed -e 's;.*source/;;g' -e 's;/mono;;g'`
+ else
+ MONO_SVN_REVISION="rUNKNOWN"
+ MONO_BRANCH="tarball"
+ fi
+
+ MONO_VERSION=`grep AM_INIT_AUTOMAKE configure.in | cut -d ',' -f 2|tr -d '\)'`
+ MONO_RELEASE="$MONO_VERSION-$MONO_BRANCH-r$MONO_SVN_REVISION"
+ MONO_PREFIX="/mono-$MONO_RELEASE"
+
+ NOCONFIGURE=yes
+ export NOCONFIGURE
+
+ echo Mono Win32 installation prefix: $MONO_PREFIX
+}
+
+function build ()
+{
+ ./autogen.sh
+
+ if [ -f ./Makefile ]; then
+ make distclean
+ fi
+
+ if [ ! -d "$CURDIR/build-cross-windows" ]; then
+ mkdir "$CURDIR/build-cross-windows"
+ fi
+
+ cd "$CURDIR/build-cross-windows"
+ rm -rf *
+ ../configure --prefix=$MONO_PREFIX --with-crosspkgdir=$CROSS_PKG_CONFIG_DIR --target=$MINGW --host=$MINGW --enable-parallel-mark --program-transform-name=""
+ make
+ cd "$CURDIR"
+
+ if [ ! -d "$CURDIR/build-cross-windows-mcs" ]; then
+ mkdir "$CURDIR/build-cross-windows-mcs"
+ fi
+ cd "$CURDIR/build-cross-windows-mcs"
+ rm -rf *
+ ../configure --prefix=$MONO_PREFIX --enable-parallel-mark
+ make
+}
+
+function doinstall ()
+{
+ if [ -d "$INSTALL_DIR" ]; then
+ rm -rf "$INSTALL_DIR"
+ fi
+ cd "$CURDIR/build-cross-windows"
+ make DESTDIR="$INSTALL_DESTDIR" USE_BATCH_FILES=yes install
+
+ cd "$CURDIR/../mcs/mcs"
+
+ for p in $PROFILES; do
+ make DESTDIR="$INSTALL_DESTDIR" PROFILE=$p install || echo "mcs profile $p installation failed"
+ done
+
+ cd "$CURDIR/../mcs/class"
+ for p in $PROFILES; do
+ make DESTDIR="$INSTALL_DESTDIR" PROFILE=$p install || echo "class library profile $p installation failed"
+ done
+
+ cd "$CURDIR/../mcs/tools"
+ for p in $PROFILES; do
+ make DESTDIR="$INSTALL_DESTDIR" PROFILE=$p install || echo "tools profile $p installation failed"
+ done
+
+ cd "$CURDIR/mono-win32"
+ for dll in $COPY_DLLS; do
+ cp -ap "$CROSS_DLL_DIR"/$dll "$INSTALL_DESTDIR/$MONO_PREFIX/bin"
+ done
+
+ rm -f "$CURDIR/mono-win32-$MONO_RELEASE".zip
+ zip -9r "$CURDIR/mono-win32-$MONO_RELEASE".zip .
+
+}
+
+pushd . > /dev/null
+
+setup
+build
+doinstall
+
+popd > /dev/null
# To preserve compatibility with old Makefiles and tools we keep the
# command names that had the suffix 2 (like wsdl2)
#
+if USE_BATCH_FILES
+SCRIPT_IN=script.bat.in
+SMCS_IN=smcs.bat.in
+FILTER=sed -e 's,\.bat\.exe,\.exe,g' -e 's,/,\\,g'
+SCRIPT_SUFFIX=.bat
+else
+SCRIPT_IN=script.in
+SMCS_IN=smcs.in
+FILTER=cat
+SCRIPT_SUFFIX=
+endif
+
+COMPAT_1_0_SUFFIX=1$(SCRIPT_SUFFIX)
+COMPAT_2_0_SUFFIX=2$(SCRIPT_SUFFIX)
+
bin_SCRIPTS = \
$(scripts_1_0) \
$(scripts_1_0_umask) \
mono-test-install
scripts_1_0_compat = \
- al1 \
- genxs1 \
- ilasm1 \
- mcs1 \
- mkbundle1 \
- mono-api-info1 \
- monop1 \
- resgen1 \
- wsdl1
+ al1$(SCRIPT_SUFFIX) \
+ genxs1$(SCRIPT_SUFFIX) \
+ ilasm1$(SCRIPT_SUFFIX) \
+ mcs1$(SCRIPT_SUFFIX) \
+ mkbundle1$(SCRIPT_SUFFIX) \
+ mono-api-info1$(SCRIPT_SUFFIX) \
+ monop1$(SCRIPT_SUFFIX) \
+ resgen1$(SCRIPT_SUFFIX) \
+ wsdl1$(SCRIPT_SUFFIX)
scripts_1_0 = \
- caspol \
- cert2spc \
- certmgr \
- chktrust \
- cilc \
- disco \
- dtd2xsd \
- dtd2rng \
- gacutil \
- installvst \
- macpack \
- mcs \
- mjs \
- monolinker \
- mono-api-diff \
- mono-shlib-cop \
- mono-xmltool \
- mozroots \
- permview \
- prj2make \
- secutil \
- setreg \
- signcode \
- soapsuds \
- sqlsharp \
- xsd
+ caspol$(SCRIPT_SUFFIX) \
+ cert2spc$(SCRIPT_SUFFIX) \
+ certmgr$(SCRIPT_SUFFIX) \
+ chktrust$(SCRIPT_SUFFIX) \
+ cilc$(SCRIPT_SUFFIX) \
+ disco$(SCRIPT_SUFFIX) \
+ dtd2xsd$(SCRIPT_SUFFIX) \
+ dtd2rng$(SCRIPT_SUFFIX) \
+ gacutil$(SCRIPT_SUFFIX) \
+ installvst$(SCRIPT_SUFFIX) \
+ macpack$(SCRIPT_SUFFIX) \
+ mcs$(SCRIPT_SUFFIX) \
+ mjs$(SCRIPT_SUFFIX) \
+ monolinker$(SCRIPT_SUFFIX) \
+ mono-api-diff$(SCRIPT_SUFFIX) \
+ mono-shlib-cop$(SCRIPT_SUFFIX) \
+ mono-xmltool$(SCRIPT_SUFFIX) \
+ mozroots$(SCRIPT_SUFFIX) \
+ permview$(SCRIPT_SUFFIX) \
+ prj2make$(SCRIPT_SUFFIX) \
+ secutil$(SCRIPT_SUFFIX) \
+ setreg$(SCRIPT_SUFFIX) \
+ signcode$(SCRIPT_SUFFIX) \
+ soapsuds$(SCRIPT_SUFFIX) \
+ sqlsharp$(SCRIPT_SUFFIX) \
+ xsd$(SCRIPT_SUFFIX)
scripts_1_0_umask = \
- makecert \
- sn
+ makecert$(SCRIPT_SUFFIX) \
+ sn$(SCRIPT_SUFFIX)
scripts_2_0 = \
- al2 \
- genxs2 \
- gmcs \
- httpcfg \
- ilasm2 \
- mconfig \
- mkbundle2 \
- mono-api-info2 \
- monop2 \
- resgen2 \
- wsdl2 \
- xsd2 \
- sgen \
- xbuild
+ al2$(SCRIPT_SUFFIX) \
+ genxs2$(SCRIPT_SUFFIX) \
+ gmcs$(SCRIPT_SUFFIX) \
+ httpcfg$(SCRIPT_SUFFIX) \
+ ilasm2$(SCRIPT_SUFFIX) \
+ mconfig$(SCRIPT_SUFFIX) \
+ mkbundle2$(SCRIPT_SUFFIX) \
+ mono-api-info2$(SCRIPT_SUFFIX) \
+ monop2$(SCRIPT_SUFFIX) \
+ resgen2$(SCRIPT_SUFFIX) \
+ wsdl2$(SCRIPT_SUFFIX) \
+ xsd2$(SCRIPT_SUFFIX) \
+ sgen$(SCRIPT_SUFFIX) \
+ xbuild$(SCRIPT_SUFFIX)
#
# these are the new defaults, 2.0 profile-based commands
# the scripts_1_0_compat list
#
scripts_defaults = \
- al \
- genxs \
- ilasm \
- mkbundle \
- mono-api-info \
- monop \
- resgen \
- wsdl
-
-scripts_2_1 = smcs
+ al$(SCRIPT_SUFFIX) \
+ genxs$(SCRIPT_SUFFIX) \
+ ilasm$(SCRIPT_SUFFIX) \
+ mkbundle$(SCRIPT_SUFFIX) \
+ mono-api-info$(SCRIPT_SUFFIX) \
+ monop$(SCRIPT_SUFFIX) \
+ resgen$(SCRIPT_SUFFIX) \
+ wsdl$(SCRIPT_SUFFIX)
+
+scripts_2_1 = smcs$(SCRIPT_SUFFIX)
scripts_service = mono-service mono-service2
-scripts_nunit = nunit-console nunit-console2
+scripts_nunit = nunit-console$(SCRIPT_SUFFIX) nunit-console2$(SCRIPT_SUFFIX)
scripts_rpmhelpers = mono-find-provides mono-find-requires
pkgconfigdir = $(libdir)/pkgconfig
CLEANFILES = $(scripts_1_0) $(scripts_1_0_umask) $(scripts_2_0) $(scripts_2_1) $(scripts_defaults) $(scripts_1_0_compat) mono-service mono-service2 nunit-console nunit-console2 mono-find-provides mono-find-requires
DISTCLEANFILES = $(pkgconfig_DATA) $(scripts_rpmhelpers)
-EXTRA_DIST = \
- script.in \
- script_umask.in \
+EXTRA_DIST = \
+ script.in \
+ script.bat.in \
+ script_umask.in \
+ script_umask.bat.in \
smcs.in \
- mono-service.in \
- mono-nunit.pc.in \
- mono-find-provides.in \
+ smcs.bat.in \
+ mono-service.in \
+ mono-nunit.pc.in \
+ mono-find-provides.in \
mono-find-requires.in \
mono-test-install
endif
if PLATFORM_WIN32
+if CROSS_COMPILING
+plat_bindir = $(bindir)
+mono_instdir = $(prefix)/lib/mono
+else
plat_bindir = $(shell cygpath -m $(libdir))
mono_instdir = $(shell cygpath -m $(libdir))/mono
+endif
else
plat_bindir = $(bindir)
mono_instdir = $(prefix)/lib/mono
endif
+
REWRITE_COMMON = sed \
-e 's,@''bindir@,$(bindir),g' \
-e 's,@''plat_bindir@,$(plat_bindir),g' \
REWRITE1_DEBUG = $(REWRITE_DEBUG) -e 's,@''framework_version@,1.0,g'
REWRITE2_DEBUG = $(REWRITE_DEBUG) -e 's,@''framework_version@,2.0,g'
+
mono-service: mono-service.in Makefile
$(REWRITE1) -e 's,@''exe_name@,$@,g' $(srcdir)/mono-service.in > $@.tmp
mv $@.tmp $@
$(REWRITE2) -e 's,@''exe_name@,$@,g' $(srcdir)/mono-service.in > $@.tmp
mv $@.tmp $@
-nunit-console: script.in Makefile
- $(REWRITE1_DEBUG) -e 's,@''exe_name@,nunit-console,g' $(srcdir)/script.in > $@.tmp
+nunit-console$(SCRIPT_SUFFIX): $(SCRIPT_IN) Makefile
+ $(REWRITE1_DEBUG) -e 's,@''exe_name@,nunit-console,g' $(srcdir)/$(SCRIPT_IN) | $(FILTER) > $@.tmp
mv $@.tmp $@
-nunit-console2: script.in Makefile
- $(REWRITE2_DEBUG) -e 's,@''exe_name@,nunit-console,g' $(srcdir)/script.in > $@.tmp
+nunit-console2$(SCRIPT_SUFFIX): $(SCRIPT_IN) Makefile
+ $(REWRITE2_DEBUG) -e 's,@''exe_name@,nunit-console,g' $(srcdir)/$(SCRIPT_IN) | $(FILTER) > $@.tmp
mv $@.tmp $@
-smcs: smcs.in Makefile
- $(REWRITE2_1) -e "s,@""exe_name@,smcs,g" $(srcdir)/smcs.in > $@.tmp
+smcs$(SCRIPT_SUFFIX): $(SMCS_IN) Makefile
+ $(REWRITE2_1) -e "s,@""exe_name@,smcs,g" $(srcdir)/$(SMCS_IN) | $(FILTER) > $@.tmp
mv $@.tmp $@
-$(scripts_1_0): script.in Makefile
- $(REWRITE1) -e 's,@''exe_name@,$@,g' $(srcdir)/script.in > $@.tmp
+$(scripts_1_0): $(SCRIPT_IN) Makefile
+ $(REWRITE1) -e 's,@''exe_name@,$@,g' $(srcdir)/$(SCRIPT_IN) | $(FILTER) > $@.tmp
mv $@.tmp $@
$(scripts_1_0_umask): script_umask.in Makefile
$(REWRITE1) -e 's,@''exe_name@,$@,g' $(srcdir)/script_umask.in > $@.tmp
mv $@.tmp $@
-$(scripts_1_0_compat): script.in Makefile
- t=`basename $@ 1`; $(REWRITE1) -e "s,@exe_name@,$$t,g" $(srcdir)/script.in > $@.tmp
+$(scripts_1_0_compat): $(SCRIPT_IN) Makefile
+ t=`basename $@ $(COMPAT_1_0_SUFFIX)`; $(REWRITE1) -e "s,@exe_name@,$$t,g" $(srcdir)/$(SCRIPT_IN) | $(FILTER) > $@.tmp
mv $@.tmp $@
-$(scripts_defaults): script.in Makefile
- $(REWRITE2) -e "s,@exe_name@,$@,g" $(srcdir)/script.in > $@.tmp
+$(scripts_defaults): $(SCRIPT_IN) Makefile
+ $(REWRITE2) -e "s,@exe_name@,$@,g" $(srcdir)/$(SCRIPT_IN) | $(FILTER) > $@.tmp
mv $@.tmp $@
-$(scripts_2_0): script.in Makefile
- n=`echo $@ | sed 's,2$$,,'`; \
- $(REWRITE2) -e "s,@""exe_name@,$$n,g" $(srcdir)/script.in > $@.tmp
+$(scripts_2_0): $(SCRIPT_IN) Makefile
+ n=`echo $@ | sed 's,$(COMPAT_2_0_SUFFIX)$$,,'`; \
+ $(REWRITE2) -e "s,@""exe_name@,$$n,g" $(srcdir)/$(SCRIPT_IN) | $(FILTER) > $@.tmp
mv $@.tmp $@
-