travis: Enable Windows cross-compilation

We unfortunately can't run tests as they require running the just build
(foreign) executable, but at least it tries and build the Windows code
paths.
This commit is contained in:
Colomban Wendling 2015-07-03 15:33:09 +02:00
parent e22f0ca054
commit 02e6682ea6
2 changed files with 119 additions and 7 deletions

View File

@ -5,20 +5,30 @@ compiler:
env: env:
- GTK3=no - GTK3=no
- GTK3=yes - GTK3=yes
- GTK3=no MINGW=yes
- GTK3=yes MINGW=yes
before_install: before_install:
- sudo apt-get update -qq - sudo apt-get update -qq
install: install:
- sudo apt-get install -y libgtk2.0-dev libgtk-3-dev intltool libtool - sudo apt-get install -y intltool libtool
- test -n "$MINGW" || sudo apt-get install -y libgtk2.0-dev libgtk-3-dev
- test -z "$MINGW" || sudo apt-get install -y mingw-w64-tools g++-mingw-w64-i686 gcc-mingw-w64-i686 binutils-mingw-w64-i686
- sudo apt-get install -y python-docutils rst2pdf - sudo apt-get install -y python-docutils rst2pdf
# try not to install doxygen-latex because we don't need it and it's huge # try not to install doxygen-latex because we don't need it and it's huge
- sudo apt-get install -y --no-install-recommends doxygen - sudo apt-get install -y --no-install-recommends doxygen
before_script: before_script:
- export CFLAGS="-g -O2 -Werror=pointer-arith -Werror=aggregate-return -Werror=implicit-function-declaration" - export CFLAGS="-g -O2 -Werror=pointer-arith -Werror=aggregate-return -Werror=implicit-function-declaration"
script: script:
- NOCONFIGURE=1 ./autogen.sh
- > - >
NOCONFIGURE=1 ./autogen.sh && if [ -n "$MINGW" ]; then
mkdir _build && arg=-2; [ "$GTK3" = yes ] && arg=-3;
cd _build && unset CC CXX;
../configure --enable-gtk3=$GTK3 && sh ./scripts/cross-build-mingw.sh $arg;
make -j2 && else
make -j2 check mkdir _build &&
cd _build &&
../configure --enable-gtk3=$GTK3 &&
make -j2 &&
make -j2 check;
fi

102
scripts/cross-build-mingw.sh Executable file
View File

@ -0,0 +1,102 @@
#!/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
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
BUNDLE_ZIP="http://win32builder.gnome.org/gtk+-bundle_3.8.2-20131001_win32.zip"
else
BUNDLE_ZIP="http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.24/gtk+-bundle_2.24.10-20120208_win32.zip"
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