2010-04-02 Marek Habersack <mhabersack@novell.com>
authorMarek Habersack <grendel@twistedcode.net>
Fri, 2 Apr 2010 01:59:00 +0000 (01:59 -0000)
committerMarek Habersack <grendel@twistedcode.net>
Fri, 2 Apr 2010 01:59:00 +0000 (01:59 -0000)
* configure.in: include -lkernel32 in LDFLAGS when cross-compiling
with MINGW or compiling on Cygwin.

* build-mingw32.sh: some changes to make the compilation work
better on non-SuSE systems.

svn path=/trunk/mono/; revision=154683

ChangeLog
build-mingw32.sh
configure.in

index cf896d081039f6c30e31bc81e4cc46f2973c30c2..3ab966210a0f7a2f0844a0516ef62ba85ebb1f86 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2010-04-02  Marek Habersack  <mhabersack@novell.com>
+
+       * configure.in: include -lkernel32 in LDFLAGS when cross-compiling
+       with MINGW or compiling on Cygwin.
+
+       * build-mingw32.sh: some changes to make the compilation work
+       better on non-SuSE systems.
+
 2010-04-01  Mark Probst  <mark.probst@gmail.com>
 
        * scripts/mono-heapviz: Process and output detailed pinning
index 3b0538e6fc13909c136f168cb964b917d84912f2..b35d10072fe3a8c6eac47e87089f14caf42f5ccd 100755 (executable)
@@ -1,19 +1,31 @@
 #!/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
+MINGW=i386-mingw32msvc
+CROSS_DIR=/opt/cross/$MINGW
 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 moonlight net_3_5"
+TEMPORARY_PKG_CONFIG_DIR=/tmp/$RANDOM-pkg-config-$RANDOM
 
-export 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 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
@@ -37,6 +49,15 @@ function setup ()
     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"
+    fi
+
     echo Mono Win32 installation prefix: $MONO_PREFIX
 }
 
@@ -44,6 +65,8 @@ function build ()
 {
     ./autogen.sh 
 
+    BUILD="`./config.guess`"
+
     if [ -f ./Makefile ]; then
        make distclean
     fi
@@ -54,7 +77,7 @@ function build ()
 
     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=""
+    ../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
     make
     cd "$CURDIR"
 
@@ -101,8 +124,32 @@ function doinstall ()
 
 }
 
+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]
+ -m MINGW   Sets the MINGW target name to be passed to configure [$MINGW]
+EOF
+
+    exit 1
+}
+
+trap cleanup 0
+
 pushd . > /dev/null
 
+while getopts "d:m:h" opt; do
+    case "$opt" in
+       d) CROSS_DIR="$OPTARG" ;;
+       m) MINGW="$OPTARG" ;;
+       *) usage ;;
+    esac
+done
+
 setup
 build
 doinstall
index fd6d1e5d5bd7d6cde8f65900402738d028a13b79..fcf2bd4d632901a2d83f95d1c2cf08c9bb708598 100644 (file)
@@ -96,7 +96,7 @@ case "$host" in
                HOST_CC="gcc"
                # Windows 2000 is required that includes Internet Explorer 5.01
                CPPFLAGS="$CPPFLAGS -DWINVER=0x0500 -D_WIN32_WINNT=0x0500 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
-               LDFLAGS="$LDFLAGS -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm"
+               LDFLAGS="$LDFLAGS -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32"
                libmono_cflags="-mno-cygwin -mms-bitfields -mwindows"
                libmono_ldflags="-mno-cygwin -mms-bitfields -mwindows"
                libdl=
@@ -548,16 +548,10 @@ embedded)
   eglib_dir=eglib
   ;;
 system)
-  if test "x$cross_compiling" = "xyes"; then
-    pkg_config_path="$PKG_CONFIG_PATH"
-    unset PKG_CONFIG_PATH
-  fi
+    echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH"
+    echo "cross_compiling=$cross_compiling"
   BUILD_GLIB_CFLAGS=`$PKG_CONFIG --cflags glib-2.0 gthread-2.0`
   BUILD_GLIB_LIBS=`$PKG_CONFIG --libs glib-2.0 gthread-2.0`
-  if test "x$cross_compiling" = "xyes"; then
-    PKG_CONFIG_PATH=$pkg_config_path
-    export PKG_CONFIG_PATH
-  fi
   
   ## Versions of dependencies
   GLIB_REQUIRED_VERSION=2.4.0