summaryrefslogtreecommitdiff
path: root/build-mingw32.sh
diff options
context:
space:
mode:
authorJo Shields <directhex@apebox.org>2011-02-16 22:45:03 +0000
committerJo Shields <directhex@apebox.org>2011-02-16 22:45:03 +0000
commit24a880a3d798d10c6f40c91fcf8343e030e4c43d (patch)
tree899f6655fb0e493dc70dcdf3894aa2f0ccb361ee /build-mingw32.sh
parent98cb87c3c08e317dbff60033741b7b6749f1bdcf (diff)
downloadmono-24a880a3d798d10c6f40c91fcf8343e030e4c43d.tar.gz
Imported Upstream version 2.10upstream/2.10
Diffstat (limited to 'build-mingw32.sh')
-rwxr-xr-xbuild-mingw32.sh145
1 files changed, 104 insertions, 41 deletions
diff --git a/build-mingw32.sh b/build-mingw32.sh
index 16b91cefe6..d751b2e833 100755
--- a/build-mingw32.sh
+++ b/build-mingw32.sh
@@ -2,7 +2,7 @@
CURDIR="`pwd`"
MINGW=i386-mingw32msvc
CROSS_DIR=/opt/cross/$MINGW
-COPY_DLLS="libgio*.dll libglib*.dll libgmodule*.dll libgthread*.dll libgobject*.dll"
+EXTRA_CROSS_DIR=
INSTALL_DESTDIR="$CURDIR/mono-win32"
PROFILES="default net_2_0 net_3_5 net_4_0 moonlight"
TEMPORARY_PKG_CONFIG_DIR=/tmp/$RANDOM-pkg-config-$RANDOM
@@ -17,62 +17,119 @@ function cleanup ()
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"
- CROSS_PKG_CONFIG_DIR=$CROSS_DIR/lib/pkgconfig
PATH=$CROSS_BIN_DIR:$PATH
- export PATH
- 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'`
+ MONO_VERSION=`grep AM_INIT_AUTOMAKE configure.in | 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`"
+ MONO_RELEASE="$MONO_VERSION-$MONO_GIT_BRANCH-$MONO_GIT_COMMIT"
else
- MONO_SVN_REVISION="rUNKNOWN"
- MONO_BRANCH="tarball"
+ MONO_RELEASE="$MONO_VERSION"
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"
+ MONO_PREFIX="$MONO_PREFIX/mono-$MONO_RELEASE"
NOCONFIGURE=yes
export NOCONFIGURE
- if [ -d "$CROSS_PKG_CONFIG_DIR" ]; then
- install -d -m 755 "$TEMPORARY_PKG_CONFIG_DIR"
- for pc in "$CROSS_PKG_CONFIG_DIR"/*.pc; do
- pcname="`basename $pc`"
- sed -e "s;^prefix=.*;prefix=$CROSS_DIR;g" < $pc > "$TEMPORARY_PKG_CONFIG_DIR"/$pcname
- done
- CROSS_PKG_CONFIG_DIR="$TEMPORARY_PKG_CONFIG_DIR"
+ 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
-
- echo Mono Win32 installation prefix: $MONO_PREFIX
+
+ export PATH MONO_PATH CPPFLAGS
+ show_build_info
}
function build ()
{
- ./autogen.sh
-
- BUILD="`./config.guess`"
-
if [ -f ./Makefile ]; then
make distclean
- rm -rf autom4te.cache
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
@@ -105,27 +162,28 @@ function doinstall ()
cd "$CURDIR/build-cross-windows"
make DESTDIR="$INSTALL_DESTDIR" USE_BATCH_FILES=yes install
- cd "$CURDIR/../mcs/mcs"
+ 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 "$CURDIR/../mcs/class"
+ cd "$mcsdir/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"
+ 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"
- 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 .
@@ -139,7 +197,9 @@ 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
@@ -149,10 +209,12 @@ trap cleanup 0
pushd . > /dev/null
-while getopts "d:m:h" opt; do
+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
@@ -160,5 +222,6 @@ done
setup
build
doinstall
+show_build_info
popd > /dev/null