[geany/geany] 02e668: travis: Enable Windows cross-compilation

Colomban Wendling git-noreply at xxxxx
Fri Jul 10 21:32:56 UTC 2015


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Fri, 10 Jul 2015 21:32:56 UTC
Commit:      02e6682ea65ad0094d2cee0b14a2c8c4afa738b6
             https://github.com/geany/geany/commit/02e6682ea65ad0094d2cee0b14a2c8c4afa738b6

Log Message:
-----------
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.


Modified Paths:
--------------
    .travis.yml
    scripts/cross-build-mingw.sh

Modified: .travis.yml
24 lines changed, 17 insertions(+), 7 deletions(-)
===================================================================
@@ -5,20 +5,30 @@ compiler:
 env:
   - GTK3=no
   - GTK3=yes
+  - GTK3=no MINGW=yes
+  - GTK3=yes MINGW=yes
 before_install:
   - sudo apt-get update -qq
 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
   # 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
 before_script:
   - export CFLAGS="-g -O2 -Werror=pointer-arith -Werror=aggregate-return -Werror=implicit-function-declaration"
 script:
+  - NOCONFIGURE=1 ./autogen.sh
   - >
-    NOCONFIGURE=1 ./autogen.sh          &&
-    mkdir _build                        &&
-    cd _build                           &&
-    ../configure --enable-gtk3=$GTK3    &&
-    make -j2                            &&
-    make -j2 check
+    if [ -n "$MINGW" ]; then
+      arg=-2; [ "$GTK3" = yes ] && arg=-3;
+      unset CC CXX;
+      sh ./scripts/cross-build-mingw.sh $arg;
+    else
+      mkdir _build                        &&
+      cd _build                           &&
+      ../configure --enable-gtk3=$GTK3    &&
+      make -j2                            &&
+      make -j2 check;
+    fi


Modified: scripts/cross-build-mingw.sh
102 lines changed, 102 insertions(+), 0 deletions(-)
===================================================================
@@ -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



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list