diff options
author | Jo Shields <directhex@apebox.org> | 2011-02-16 22:45:03 +0000 |
---|---|---|
committer | Jo Shields <directhex@apebox.org> | 2011-02-16 22:45:03 +0000 |
commit | 24a880a3d798d10c6f40c91fcf8343e030e4c43d (patch) | |
tree | 899f6655fb0e493dc70dcdf3894aa2f0ccb361ee /build-mingw32.sh | |
parent | 98cb87c3c08e317dbff60033741b7b6749f1bdcf (diff) | |
download | mono-24a880a3d798d10c6f40c91fcf8343e030e4c43d.tar.gz |
Imported Upstream version 2.10upstream/2.10
Diffstat (limited to 'build-mingw32.sh')
-rwxr-xr-x | build-mingw32.sh | 145 |
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 |