2015-07-03 15:33:09 +02:00
|
|
|
#!/bin/sh
|
|
|
|
# A script to automate setup and build for Windows cross-compilation
|
|
|
|
#
|
|
|
|
# What it does:
|
|
|
|
# 1) prepare a build directory
|
|
|
|
# 2) download and unpacked the dependencies
|
|
|
|
# (see http://www.gtk.org/download/win32.php)
|
|
|
|
# 2.1) fixup the unpacked pkg-config file paths
|
|
|
|
# 3) setup the few required paths
|
|
|
|
# 4) configure with sensible options for this
|
|
|
|
# 5) build
|
|
|
|
# 6) install in a local directory
|
|
|
|
# 7) pack the installation in a ZIP file, ready to be used
|
|
|
|
# (but does not pack the dependencies)
|
|
|
|
|
|
|
|
# You may change those
|
|
|
|
HOST=i686-w64-mingw32
|
2015-07-10 23:45:48 +02:00
|
|
|
GTK2_BUNDLE_ZIP="http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.24/gtk+-bundle_2.24.10-20120208_win32.zip"
|
|
|
|
GTK3_BUNDLE_ZIP="http://win32builder.gnome.org/gtk+-bundle_3.8.2-20131001_win32.zip"
|
2015-07-03 15:33:09 +02:00
|
|
|
BUILDDIR=_build-cross-mingw
|
|
|
|
GTK3=no
|
|
|
|
CONFIGUREFLAGS="--enable-nls"
|
|
|
|
MAKEFLAGS="${MAKEFLAGS:--j2}"
|
|
|
|
|
|
|
|
while getopts '32h' o; do
|
|
|
|
case "$o" in
|
|
|
|
3) GTK3=yes;;
|
|
|
|
2) GTK3=no;;
|
|
|
|
h)
|
|
|
|
cat <<EOF
|
|
|
|
USAGE: $0 [-2|-3] [-h]
|
|
|
|
|
|
|
|
-2 Build against GTK2
|
|
|
|
-3 Build against GTK3
|
|
|
|
-h Show this help and exit
|
|
|
|
EOF
|
|
|
|
exit 0;;
|
|
|
|
*) echo "Invalid option $o (see -h)">&2; exit 1;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
shift $((OPTIND - 1))
|
|
|
|
|
|
|
|
CONFIGUREFLAGS="$CONFIGUREFLAGS --enable-gtk3=$GTK3"
|
|
|
|
if [ "$GTK3" = yes ]; then
|
2015-07-10 23:45:48 +02:00
|
|
|
BUNDLE_ZIP="$GTK3_BUNDLE_ZIP"
|
2015-07-03 15:33:09 +02:00
|
|
|
else
|
2015-07-10 23:45:48 +02:00
|
|
|
BUNDLE_ZIP="$GTK2_BUNDLE_ZIP"
|
2015-07-03 15:33:09 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
# USAGE: fetch_and_unzip URL DEST_PREFIX
|
|
|
|
fetch_and_unzip()
|
|
|
|
{
|
|
|
|
local basename=${1##*/}
|
|
|
|
curl -L -# "$1" > "$basename"
|
|
|
|
unzip -q "$basename" -d "$2"
|
|
|
|
rm -f "$basename"
|
|
|
|
}
|
|
|
|
|
|
|
|
if test -d "$BUILDDIR"; then
|
|
|
|
cat >&2 <<EOF
|
|
|
|
** Directory "$BUILDDIR/" already exists.
|
|
|
|
If it was created by this tool and just want to build, simply run make:
|
|
|
|
$ make -C "$BUILDDIR/_build/"
|
|
|
|
|
|
|
|
If however you want to recreate it, please remove it first:
|
|
|
|
$ rm -rf "$BUILDDIR/"
|
|
|
|
EOF
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
set -e
|
|
|
|
set -x
|
|
|
|
|
|
|
|
|
|
|
|
test -f configure
|
|
|
|
# check if the host tools are available, because configure falls back
|
|
|
|
# on default non-prefixed tools if they are missing, and it can spit
|
|
|
|
# quite a lot of subtle errors. also avoids going further if something
|
|
|
|
# is obviously missing.
|
|
|
|
type "$HOST-gcc"
|
|
|
|
|
|
|
|
SRCDIR="$PWD"
|
|
|
|
|
|
|
|
mkdir "$BUILDDIR"
|
|
|
|
cd "$BUILDDIR"
|
|
|
|
|
|
|
|
mkdir _deps
|
|
|
|
fetch_and_unzip "$BUNDLE_ZIP" _deps
|
|
|
|
# fixup the prefix= in the pkg-config files
|
|
|
|
sed -i "s%^\(prefix=\).*$%\1$PWD/_deps%" _deps/lib/pkgconfig/*.pc
|
|
|
|
|
|
|
|
export PKG_CONFIG_PATH="$PWD/_deps/lib/pkgconfig/"
|
|
|
|
export CPPFLAGS="-I$PWD/_deps/include"
|
|
|
|
export LDFLAGS="-L$PWD/_deps/lib"
|
|
|
|
|
|
|
|
mkdir _build
|
|
|
|
cd _build
|
|
|
|
"$SRCDIR/configure" \
|
|
|
|
--host=$HOST \
|
|
|
|
--disable-silent-rules \
|
|
|
|
--prefix="$PWD/../_install" \
|
|
|
|
$CONFIGUREFLAGS
|
|
|
|
make $MAKEFLAGS
|
|
|
|
make $MAKEFLAGS install
|