No longer include glib binaries in build-mingw32.sh builds.
[mono.git] / build-mingw32.sh
1 #!/bin/bash -e
2 CURDIR="`pwd`"
3 MINGW=i386-mingw32msvc
4 CROSS_DIR=/opt/cross/$MINGW
5 INSTALL_DESTDIR="$CURDIR/mono-win32"
6 PROFILES="default net_2_0 net_3_5 net_4_0 moonlight"
7 TEMPORARY_PKG_CONFIG_DIR=/tmp/$RANDOM-pkg-config-$RANDOM
8 ORIGINAL_PATH="$PATH"
9
10 export CPPFLAGS_FOR_EGLIB CFLAGS_FOR_EGLIB CPPFLAGS_FOR_LIBGC CFLAGS_FOR_LIBGC
11
12 function cleanup ()
13 {
14     if [ -d "$TEMPORARY_PKG_CONFIG_DIR" ]; then
15         rm -rf "$TEMPORARY_PKG_CONFIG_DIR"
16     fi
17 }
18
19 function setup ()
20 {
21     local pcname
22
23     CROSS_BIN_DIR="$CROSS_DIR/bin"
24     CROSS_DLL_DIR="$CROSS_DIR/bin"
25     CROSS_PKG_CONFIG_DIR=$CROSS_DIR/lib/pkgconfig
26     PATH=$CROSS_BIN_DIR:$PATH
27
28     MONO_VERSION=`grep AM_INIT_AUTOMAKE configure.in | cut -d ',' -f 2|tr -d '\)'`
29     export PATH
30     if [ -d ./.git/svn ]; then
31         SVN_INFO='git svn info'
32     elif [ -d ./.svn ]; then
33         SVN_INFO='svn info'
34     else
35         SVN_INFO=""
36     fi
37
38     if [ -n "$SVN_INFO" ]; then
39         MONO_SVN_REVISION=`$SVN_INFO | grep Revision | sed 's/.*: //'`
40         MONO_BRANCH=`$SVN_INFO | grep URL | sed -e 's;.*source/;;g' -e 's;/mono;;g'`
41         MONO_RELEASE="$MONO_VERSION-$MONO_BRANCH-r$MONO_SVN_REVISION"
42     else
43         MONO_RELEASE="$MONO_VERSION"
44     fi
45
46     MONO_PREFIX="/mono-$MONO_RELEASE"
47
48     NOCONFIGURE=yes
49     export NOCONFIGURE
50
51     if [ -d "$CROSS_PKG_CONFIG_DIR" ]; then
52         install -d -m 755 "$TEMPORARY_PKG_CONFIG_DIR"
53         for pc in "$CROSS_PKG_CONFIG_DIR"/*.pc; do
54             pcname="`basename $pc`"
55             sed -e "s;^prefix=.*;prefix=$CROSS_DIR;g" < $pc > "$TEMPORARY_PKG_CONFIG_DIR"/$pcname
56         done
57         CROSS_PKG_CONFIG_DIR="$TEMPORARY_PKG_CONFIG_DIR"
58     fi
59
60     echo Mono Win32 installation prefix: $MONO_PREFIX
61 }
62
63 function build ()
64 {
65     ./autogen.sh 
66
67     BUILD="`./config.guess`"
68
69     if [ -f ./Makefile ]; then
70         make distclean
71         rm -rf autom4te.cache
72     fi
73
74     if [ ! -d "$CURDIR/build-cross-windows" ]; then
75         mkdir "$CURDIR/build-cross-windows"
76     fi
77
78     cd "$CURDIR/build-cross-windows"
79     rm -rf *
80     ../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
81     make
82     cd "$CURDIR"
83
84     if [ ! -d "$CURDIR/build-cross-windows-mcs" ]; then
85         mkdir "$CURDIR/build-cross-windows-mcs"
86     fi
87
88     rm -rf autom4te.cache
89     unset PATH
90     PATH="$ORIGINAL_PATH"
91     export PATH
92     cd "$CURDIR/build-cross-windows-mcs"
93     rm -rf *
94     ../configure --prefix=$MONO_PREFIX --enable-parallel-mark
95     make
96 }
97
98 function doinstall ()
99 {
100     if [ -d "$INSTALL_DIR" ]; then
101         rm -rf "$INSTALL_DIR"
102     fi
103     cd "$CURDIR/build-cross-windows"
104     make DESTDIR="$INSTALL_DESTDIR" USE_BATCH_FILES=yes install
105
106     if test -d $CURDIR/mcs; then
107       mcsdir=$CURDIR/mcs
108     else
109       mcsdir=$CURDIR/../mcs
110     fi
111
112     cd "$mcsdir/mcs"
113     for p in $PROFILES; do
114         make DESTDIR="$INSTALL_DESTDIR" PROFILE=$p install || echo "mcs profile $p installation failed"
115     done
116
117     cd "$mcsdir/class"
118     for p in $PROFILES; do
119         make DESTDIR="$INSTALL_DESTDIR" PROFILE=$p install || echo "class library profile $p installation failed"
120     done
121
122     cd "$mcsdir/tools"
123     for p in $PROFILES; do
124         make DESTDIR="$INSTALL_DESTDIR" PROFILE=$p install || echo "tools profile $p installation failed"
125     done
126
127     cd "$CURDIR/mono-win32"
128     rm -f "$CURDIR/mono-win32-$MONO_RELEASE".zip
129     zip -9r "$CURDIR/mono-win32-$MONO_RELEASE".zip .
130
131 }
132
133 function usage ()
134 {
135     cat <<EOF
136 Usage: build-mingw32.sh [OPTIONS]
137
138 where OPTIONS are:
139
140  -d DIR     Sets the location of directory where MINGW is installed [$CROSS_DIR]
141  -m MINGW   Sets the MINGW target name to be passed to configure [$MINGW]
142 EOF
143
144     exit 1
145 }
146
147 trap cleanup 0
148
149 pushd . > /dev/null
150
151 while getopts "d:m:h" opt; do
152     case "$opt" in
153         d) CROSS_DIR="$OPTARG" ;;
154         m) MINGW="$OPTARG" ;;
155         *) usage ;;
156     esac
157 done
158
159 setup
160 build
161 doinstall
162
163 popd > /dev/null