+++ /dev/null
-#!/bin/bash -e
-CURDIR="`pwd`"
-MINGW=i386-mingw32msvc
-CROSS_DIR=/opt/cross/$MINGW
-EXTRA_CROSS_DIR=
-INSTALL_DESTDIR="$CURDIR/mono-win32"
-PROFILES="default net_2_0 net_3_5 net_4_0 net_4_5 moonlight"
-TEMPORARY_PKG_CONFIG_DIR=/tmp/$RANDOM-pkg-config-$RANDOM
-ORIGINAL_PATH="$PATH"
-
-export CPPFLAGS_FOR_EGLIB CFLAGS_FOR_EGLIB CPPFLAGS_FOR_LIBGC CFLAGS_FOR_LIBGC
-
-function cleanup ()
-{
- if [ -d "$TEMPORARY_PKG_CONFIG_DIR" ]; then
- rm -rf "$TEMPORARY_PKG_CONFIG_DIR"
- fi
-}
-
-function check_pkg_config_dir ()
-{
- local DIR="$1"
- local DIR_PREFIX="$2"
-
- if [ ! -d "$DIR" ]; then
- return
- fi
-
- install -d -m 755 "$TEMPORARY_PKG_CONFIG_DIR"
- for pc in "$DIR"/*.pc; do
- if [ -f $pc ]; then
- pcname="`basename $pc`"
- sed -e "s;^prefix=.*;prefix=$DIR_PREFIX;g" < $pc > "$TEMPORARY_PKG_CONFIG_DIR"/$pcname
- fi;
- done
-
- if [ -z "$CROSS_PKG_CONFIG_DIR" ]; then
- CROSS_PKG_CONFIG_DIR="$TEMPORARY_PKG_CONFIG_DIR"
- fi
-}
-
-function show_build_info ()
-{
- cat <<EOF
-Installation prefix: $MONO_PREFIX
- CPPFLAGS: ${CPPFLAGS:=not set}
- LDFLAGS: ${LDFLAGS:=not set}
- MONO_PATH: ${MONO_PATH:=not set}
-EOF
-}
-
-function setup ()
-{
- local pcname
-
- CROSS_BIN_DIR="$CROSS_DIR/bin"
- CROSS_DLL_DIR="$CROSS_DIR/bin"
- PATH=$CROSS_BIN_DIR:$PATH
-
- MONO_VERSION=`grep AC_INIT configure.ac | cut -d ',' -f 2|tr -d '\[ \]'`
-
- if [ -d ./.git ]; then
- MONO_GIT_COMMIT="`git log -1 --format=format:%t`"
- MONO_GIT_BRANCH="`git branch|grep '\*'|cut -d ' ' -f 2|tr -d '\)'|tr -d '\('`"
- MONO_RELEASE="$MONO_VERSION-$MONO_GIT_BRANCH-$MONO_GIT_COMMIT"
- else
- MONO_RELEASE="$MONO_VERSION"
- fi
-
- MONO_PREFIX="$MONO_PREFIX/mono-$MONO_RELEASE"
-
- NOCONFIGURE=yes
- export NOCONFIGURE
-
- check_pkg_config_dir "$CROSS_DIR/lib/pkgconfig" "$CROSS_DIR"
-
- if [ -n "$EXTRA_CROSS_DIR" -a -d "$EXTRA_CROSS_DIR" ]; then
- if [ -d "$EXTRA_CROSS_DIR/bin" ]; then
- PATH="$EXTRA_CROSS_DIR/bin":$PATH
- fi
-
- check_pkg_config_dir "$EXTRA_CROSS_DIR/lib/pkgconfig" "$EXTRA_CROSS_DIR"
-
- if [ -d "$EXTRA_CROSS_DIR/include" ]; then
- if [ -z "$CPPFLAGS" ]; then
- CPPFLAGS="-I \"$EXTRA_CROSS_DIR/include\""
- else
- CPPFLAGS="-I \"$EXTRA_CROSS_DIR/include\" $CFLAGS"
- fi
- fi
-
- if [ -d "$EXTRA_CROSS_DIR/lib" ]; then
- if [ -z "$LDFLAGS" ]; then
- LDFLAGS="-I \"$EXTRA_CROSS_DIR/lib\""
- else
- LDFLAGS="-I \"$EXTRA_CROSS_DIR/lib\" $LDFLAGS"
- fi
- fi
-
- if [ -d "$EXTRA_CROSS_DIR/share/aclocal" ]; then
- if [ -z "$MONO_PATH" ]; then
- MONO_PATH="\"$EXTRA_CROSS_DIR\""
- else
- MONO_PATH="\"$EXTRA_CROSS_DIR\":$MONO_PATH"
- fi
- fi
- fi
-
- export PATH MONO_PATH CPPFLAGS
- show_build_info
-}
-
-function build ()
-{
- if [ -f ./Makefile ]; then
- make distclean
- fi
-
- if [ -d ./autom4te.cache ]; then
- rm -rf ./autom4te.cache
- fi
-
- if [ -f ./config.status ]; then
- for f in `find -name config.status -type f`; do
- rm $f
- done
- fi
-
- ./autogen.sh
-
- BUILD="`./config.guess`"
-
- 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 --build=$BUILD --target=$MINGW --host=$MINGW --enable-parallel-mark --program-transform-name="" --with-tls=none --disable-mcs-build --disable-embed-check --enable-win32-dllmain=yes --with-libgc-threads=win32 --with-profile4=yes
- make
- cd "$CURDIR"
-
- if [ ! -d "$CURDIR/build-cross-windows-mcs" ]; then
- mkdir "$CURDIR/build-cross-windows-mcs"
- fi
-
- rm -rf autom4te.cache
- unset PATH
- PATH="$ORIGINAL_PATH"
- export PATH
- 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
-
- if test -d $CURDIR/mcs; then
- mcsdir=$CURDIR/mcs
- else
- mcsdir=$CURDIR/../mcs
- fi
-
- cd "$mcsdir/mcs"
- for p in $PROFILES; do
- make DESTDIR="$INSTALL_DESTDIR" PROFILE=$p install || echo "mcs profile $p installation failed"
- done
-
- cd "$mcsdir/class"
- for p in $PROFILES; do
- make DESTDIR="$INSTALL_DESTDIR" PROFILE=$p install || echo "class library profile $p installation failed"
- done
-
- cd "$mcsdir/tools"
- for p in $PROFILES; do
- make DESTDIR="$INSTALL_DESTDIR" PROFILE=$p install || echo "tools profile $p installation failed"
- done
-
- cd "$CURDIR/mono-win32"
- rm -f "$CURDIR/mono-win32-$MONO_RELEASE".zip
- zip -9r "$CURDIR/mono-win32-$MONO_RELEASE".zip .
-
-}
-
-function usage ()
-{
- cat <<EOF
-Usage: build-mingw32.sh [OPTIONS]
-
-where OPTIONS are:
-
- -d DIR Sets the location of directory where MINGW is installed [$CROSS_DIR]
- -e DIR Sets the location of directory where additional cross develoment packages are installed [${EXTRA_CROSS_DIR:=none}]
- -m MINGW Sets the MINGW target name to be passed to configure [$MINGW]
- -p PREFIX Prefix at which Mono is to be installed. Build will append the 'mono-X.Y' string to that path
-EOF
-
- exit 1
-}
-
-trap cleanup 0
-
-pushd . > /dev/null
-
-while getopts "d:m:e:p:" opt; do
- case "$opt" in
- d) CROSS_DIR="$OPTARG" ;;
- m) MINGW="$OPTARG" ;;
- e) EXTRA_CROSS_DIR="$OPTARG" ;;
- p) MONO_PREFIX="$OPTARG" ;;
- *) usage ;;
- esac
-done
-
-setup
-build
-doinstall
-show_build_info
-
-popd > /dev/null