[evolution] Add Win32 build scripts into sources



commit 396e5e82c16d3d81e1e575e02fe05a77149ed0ea
Author: Milan Crha <mcrha redhat com>
Date:   Mon Aug 25 11:36:19 2014 +0200

    Add Win32 build     scripts into sources
    
    See win32/readme.txt for more information.

 win32/.gitignore                 |    2 +
 win32/Makefile                   |  736 ++++++++++++++++++++++++++++++
 win32/build                      |  130 ++++++
 win32/get-src                    |   83 ++++
 win32/patches/atk.patch          |   11 +
 win32/patches/bison.patch        |   18 +
 win32/patches/dbus.patch         |  202 ++++++++
 win32/patches/fontconfig.patch   |   35 ++
 win32/patches/freetype.patch     |   18 +
 win32/patches/gcr.patch          |  933 ++++++++++++++++++++++++++++++++++++++
 win32/patches/gettext.patch      |   97 ++++
 win32/patches/gnutls.patch       |   21 +
 win32/patches/gtk-doc.m4         |   88 ++++
 win32/patches/gtk-doc.make       |  315 +++++++++++++
 win32/patches/gtk.patch          |  116 +++++
 win32/patches/harfbuzz.patch     |   25 +
 win32/patches/jasper.patch       |   12 +
 win32/patches/libgdata.patch     |  158 +++++++
 win32/patches/libgpg-error.patch |   12 +
 win32/patches/libgweather.patch  |  191 ++++++++
 win32/patches/libical.patch      |  169 +++++++
 win32/patches/liboauth.patch     |   56 +++
 win32/patches/libpng.patch       |   86 ++++
 win32/patches/libsecret.patch    |  157 +++++++
 win32/patches/libtasn1.patch     |   42 ++
 win32/patches/libxslt.patch      |   24 +
 win32/patches/ncurses.patch      |   15 +
 win32/patches/nss.patch          |  464 +++++++++++++++++++
 win32/patches/openldap.patch     |   82 ++++
 win32/patches/p11-kit.patch      |   60 +++
 win32/patches/regex.patch        |   48 ++
 win32/patches/rss.patch          |  101 ++++
 win32/patches/tzdata.patch       |   42 ++
 win32/patches/webkitgtk.patch    |  727 +++++++++++++++++++++++++++++
 win32/patches/yelp.m4            |  194 ++++++++
 win32/readme.txt                 |   53 +++
 win32/session-local.conf.in      |    4 +
 win32/setup-env                  |   76 +++
 38 files changed, 5603 insertions(+), 0 deletions(-)
---
diff --git a/win32/.gitignore b/win32/.gitignore
new file mode 100644
index 0000000..4448af2
--- /dev/null
+++ b/win32/.gitignore
@@ -0,0 +1,2 @@
+/src
+/downloads
diff --git a/win32/Makefile b/win32/Makefile
new file mode 100644
index 0000000..0d325b8
--- /dev/null
+++ b/win32/Makefile
@@ -0,0 +1,736 @@
+all: help
+
+help:
+       @echo Creates evolution from sources
+       @echo usual call order is:
+       @echo "  - dependencies - builds dependencies, including evolution-data-server"
+       @echo "  - evolution - builds evolution itself"
+       @echo "  - addons - builds 3rd-party connectors, like ews and rss"
+
+env:
+       @if test "$(BUILD_ROOT_DEPS)" = "" -o "$(BUILD_ROOT_EVO)" = "" ; then \
+               echo "Run 'source setup-env' first" >&2; \
+               exit 1; \
+       fi
+       @if test ! -d src ; then \
+               mkdir src; \
+       fi
+       @if test ! -d downloads ; then \
+               mkdir downloads; \
+       fi
+
+# use `make V=1` to get verbose build
+VERBOSE="$(V)"
+DISABLE_GTK_DOC=--disable-gtk-doc --disable-gtk-doc-html --disable-gtk-doc-pdf
+
+# Shortcuts
+deps: dependencies
+eds: evolution-data-server
+evo: evolution
+ews: evolution-ews
+rss: evolution-rss
+
+dependencies: core-tools zlib fake-gtk-doc gnome-common dbus glib gtk librsvg2 icon-themes 
gsettings-desktop-schemas shared-mime-info libsoup nss liboauth libgdata libgweather openldap libical 
iso-codes enchant gtkspell gcr webkitgtk gtkhtml
+addons: evolution-ews evolution-rss
+evolution-data-server: dependencies evolution-data-server$(EVO_BUILD_SUFFIX)
+evolution: evolution$(EVO_BUILD_SUFFIX)
+evolution-ews: evolution-ews$(EVO_BUILD_SUFFIX)
+evolution-rss: evolution-rss$(EVO_BUILD_SUFFIX)
+
+
+# !!! TODO !!! FixMe !!! TODO !!!
+evolution-data-server-stable: evolution-data-server-master
+evolution-stable: evolution-master
+evolution-ews-stable: evolution-ews-master
+evolution-rss-stable: evolution-rss-master
+
+evolution-data-server-master: env dependencies $(BUILD_ROOT_EVO)/lib/pkgconfig/libedataserver-1.2.pc
+
+$(BUILD_ROOT_EVO)/lib/pkgconfig/libedataserver-1.2.pc:
+       @if test ! -d "../../evolution-data-server" ; then \
+               cd ../.. && \
+               git clone git://git.gnome.org/evolution-data-server; \
+       fi
+       @if test ! -f "../../evolution-data-server/gtk-doc.make" ; then \
+               cp "patches/gtk-doc.make" "../../evolution-data-server/"; \
+       fi
+       @./build acmmi "$(BUILD_ROOT_EVO)" ../../../evolution-data-server "" "--enable-weather --disable-goa 
--disable-uoa --disable-examples --without-libdb --with-openldap=$(BUILD_ROOT_DEPS) $(DISABLE_GTK_DOC)" 
$(VERBOSE)
+
+evolution-master: env evolution-data-server-master $(BUILD_ROOT_EVO)/lib/pkgconfig/evolution-shell-3.0.pc
+
+$(BUILD_ROOT_EVO)/lib/pkgconfig/evolution-shell-3.0.pc:
+       @if test ! -d "../../evolution" ; then \
+               cd ../.. && \
+               git clone git://git.gnome.org/evolution; \
+       fi
+       @if test ! -f "../../evolution/gtk-doc.make" ; then \
+               cp "patches/gtk-doc.make" "../../evolution/"; \
+       fi
+       @./build acmmi "$(BUILD_ROOT_EVO)" ../../../evolution "" "--enable-plugins=all --enable-weather 
--disable-canberra --disable-contact-maps --disable-goa --disable-libcryptui --disable-bogofilter 
--disable-spamassassin --disable-text-highlight --disable-pst-import --disable-gnome-desktop 
--without-clutter --without-help $(DISABLE_GTK_DOC)" $(VERBOSE)
+
+evolution-ews-master: env evolution-master $(BUILD_ROOT_EVO)/lib/evolution-data-server/libeews-1.2.dll.a
+
+$(BUILD_ROOT_EVO)/lib/evolution-data-server/libeews-1.2.dll.a:
+       @if test ! -d "../../evolution-ews" ; then \
+               cd ../.. && \
+               git clone git://git.gnome.org/evolution-ews; \
+       fi
+       @if test ! -f "../../evolution-ews/gtk-doc.make" ; then \
+               cp "patches/gtk-doc.make" "../../evolution-ews/"; \
+       fi
+       @./build acmmi "$(BUILD_ROOT_EVO)" ../../../evolution-ews "" "--with-internal-lzx" $(VERBOSE)
+       @mv $(BUILD_ROOT_EVO)/lib/bin/* $(BUILD_ROOT_EVO)/bin/
+
+evolution-rss-master: env evolution-master 
$(BUILD_ROOT_EVO)/share/glib-2.0/schemas/org.gnome.evolution.plugin.evolution-rss.gschema.xml
+
+$(BUILD_ROOT_EVO)/share/glib-2.0/schemas/org.gnome.evolution.plugin.evolution-rss.gschema.xml:
+       @if test ! -d "../../evolution-rss" ; then \
+               cd ../.. && \
+               git clone git://git.gnome.org/evolution-rss; \
+       fi
+       @if test ! -f "../../evolution-rss/gtk-doc.make" ; then \
+               cp "patches/gtk-doc.make" "../../evolution-rss/"; \
+       fi
+       @./build acmmi "$(BUILD_ROOT_EVO)" ../../../evolution-rss "rss.patch" "" $(VERBOSE)
+
+gcr: env gtk dbus $(BUILD_ROOT_DEPS)/lib/pkgconfig/gcr-3.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/gcr-3.pc:
+       @./get-src https://download.gnome.org/sources/gcr/3.10 gcr-3.10.1.tar.xz
+       @./build acmmi "$(BUILD_ROOT_DEPS)" gcr-3.10.1 "gcr.patch" "$(DISABLE_GTK_DOC)" $(VERBOSE)
+
+shared-mime-info: env $(BUILD_ROOT_DEPS)/share/pkgconfig/shared-mime-info.pc
+
+$(BUILD_ROOT_DEPS)/share/pkgconfig/shared-mime-info.pc:
+       @./get-src http://freedesktop.org/~hadess shared-mime-info-1.2.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" shared-mime-info-1.2 "" "" $(VERBOSE)
+
+glib: env zlib libxml2 libffi fake-gtk-doc $(BUILD_ROOT_DEPS)/lib/pkgconfig/glib-2.0.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/glib-2.0.pc:
+       @./get-src https://download.gnome.org/sources/glib/2.40 glib-2.40.0.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" glib-2.40.0 "" "--disable-static" $(VERBOSE)
+
+glib-networking: env glib gnutls $(BUILD_ROOT_DEPS)/lib/gio/modules/libgiognutls.la
+
+$(BUILD_ROOT_DEPS)/lib/gio/modules/libgiognutls.la:
+       @./get-src https://download.gnome.org/sources/glib-networking/2.40 glib-networking-2.40.1.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" glib-networking-2.40.1 "" "--without-ca-certificates" $(VERBOSE)
+
+libmspack: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/libmspack.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libmspack.pc:
+       @./get-src http://www.cabextract.org.uk/libmspack libmspack-0.4alpha.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libmspack-0.4alpha "" "" $(VERBOSE)
+
+libsoup: env glib-networking sqlite $(BUILD_ROOT_DEPS)/lib/pkgconfig/libsoup-2.4.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libsoup-2.4.pc:
+       @./get-src https://download.gnome.org/sources/libsoup/2.44 libsoup-2.44.2.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libsoup-2.44.2 "" "--disable-tls-check $(DISABLE_GTK_DOC)" 
$(VERBOSE)
+
+libical: env tzdata cmake $(BUILD_ROOT_DEPS)/lib/pkgconfig/libical.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libical.pc:
+       @./get-src 
"http://downloads.sourceforge.net/project/freeassociation/libical/libical-1.0/libical-1.0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Ffreeassociation%2Ffiles%2Flibical%2Flibical-1.0%2F&ts=1395872482&use_mirror=cznic";
 "0" libical-1.0.tar.gz
+       @cd src/libical-1.0 && \
+       cmake -G "MSYS Makefiles" -DCMAKE_PREFIX_PATH=$(BUILD_ROOT_DEPS) 
-DCMAKE_INSTALL_PREFIX=$(BUILD_ROOT_DEPS) .
+       @./build mmi "$(BUILD_ROOT_DEPS)" libical-1.0 "libical.patch" "" $(VERBOSE)
+
+libgweather: env libsoup tzdata $(BUILD_ROOT_DEPS)/lib/pkgconfig/gweather-3.0.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/gweather-3.0.pc:
+       @./get-src https://download.gnome.org/sources/libgweather/3.10 libgweather-3.10.2.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libgweather-3.10.2 "libgweather.patch" 
"--with-zoneinfo-dir=$(BUILD_ROOT_DEPS)/share/zoneinfo $(DISABLE_GTK_DOC)" $(VERBOSE)
+
+tzdata: env $(BUILD_ROOT_DEPS)/share/zoneinfo/zone.tab
+
+$(BUILD_ROOT_DEPS)/share/zoneinfo/zone.tab:
+       @./get-src https://www.iana.org/time-zones/repository/releases tzdata2014b.tar.gz "" src/tzdata2014b
+       @./get-src https://www.iana.org/time-zones/repository/releases tzcode2014b.tar.gz "" src/tzcode2014b
+       @cp src/tzcode2014b/* src/tzdata2014b/
+       @./build mmi "$(BUILD_ROOT_DEPS)" tzdata2014b "tzdata.patch" "TOPDIR=$(BUILD_ROOT_DEPS) CC=gcc" 
$(VERBOSE)
+
+iso-codes: env $(BUILD_ROOT_DEPS)/share/pkgconfig/iso-codes.pc
+
+$(BUILD_ROOT_DEPS)/share/pkgconfig/iso-codes.pc:
+       @./get-src https://pkg-isocodes.alioth.debian.org/downloads iso-codes-3.51.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" iso-codes-3.51 "" "" $(VERBOSE)
+
+enchant: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/enchant.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/enchant.pc:
+       @./get-src http://www.abisource.com/downloads/enchant/1.6.0 enchant-1.6.0.tar.gz
+       @export CFLAGS="$(CFLAGS) -DNO_STRICT=1" && ./build cmmi "$(BUILD_ROOT_DEPS)" enchant-1.6.0 "" "" 
$(VERBOSE)
+
+nss: env moztools $(BUILD_ROOT_DEPS)/lib/pkgconfig/nss.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/nss.pcAAA:
+       @./get-src ftp://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_15_4_RTM/src 
nss-3.15.4-with-nspr-4.10.2.tar.gz "" "" "nss-3.15.4"
+       @cd src/nss-3.15.4/ && \
+       (patch -p1 -f <../../patches/nss.patch || echo a > /dev/null) && \
+       export BUILD_OPT=1 && \
+       export OS_TARGET=WINNT && \
+       export NS_USE_GCC=1 && \
+       export NSPR_USE_GCC=1 && \
+       export NSPR_PREFIX=`pwd`/dist/WINNT6.1_gcc_OPT.OBJ && \
+       ../../build cmmi "$(BUILD_ROOT_DEPS)" nspr "" "--host=i586-pc-mingw32 --prefix=$(BUILD_ROOT_DEPS) 
--with-dist-prefix=`pwd`/dist/WINNT6.1_gcc_OPT.OBJ 
--with-dist-includedir=`pwd`/dist/WINNT6.1_gcc_OPT.OBJ/include --enable-win32-target=WINNT" $(VERBOSE) "nspr" 
&& \
+       mv $(BUILD_ROOT_DEPS)/lib/libnspr4.dll $(BUILD_ROOT_DEPS)/bin/ && \
+       mv $(BUILD_ROOT_DEPS)/lib/libplc4.dll $(BUILD_ROOT_DEPS)/bin/ && \
+       mv $(BUILD_ROOT_DEPS)/lib/libplds4.dll $(BUILD_ROOT_DEPS)/bin/ && \
+       ../../build m "$(BUILD_ROOT_DEPS)" nss "" "all" $(VERBOSE) "nss" && \
+       cp -rf dist/public/* "$(BUILD_ROOT_DEPS)/include/" && \
+       mv dist/WINNT6.1_gcc_OPT.OBJ/lib/*.dll "$(BUILD_ROOT_DEPS)/bin/" && \
+       mv dist/WINNT6.1_gcc_OPT.OBJ/lib/* "$(BUILD_ROOT_DEPS)/lib/" && \
+       echo "prefix=$(BUILD_ROOT_DEPS)" >$(BUILD_ROOT_DEPS)/lib/pkgconfig/nss.pc && \
+       cat nss/nss.pc >>$(BUILD_ROOT_DEPS)/lib/pkgconfig/nss.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/nss.pc:
+       @./get-src ftp://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_15_4_RTM/src 
nss-3.15.4-with-nspr-4.10.2.tar.gz "" "" "nss-3.15.4"
+       @cd src/nss-3.15.4/ && \
+       (patch -p1 -f <../../patches/nss.patch || echo a > /dev/null) && \
+       export NSPR_USE_GCC=1 && \
+       export NSPR_PREFIX=`pwd`/dist/WIN954.0_gcc_OPT.OBJ && \
+       export BUILD_OPT=1 && \
+       export NS_USE_GCC=1 && \
+       ../../build cmmi "$(BUILD_ROOT_DEPS)" nspr "" "--prefix=$(BUILD_ROOT_DEPS) 
--enable-win32-target=WIN95 --enable-debug=no --with-dist-prefix=`pwd`/dist/WIN954.0_gcc_OPT.OBJ 
--with-dist-includedir=`pwd`/dist/WIN954.0_gcc_OPT.OBJ/include " "$(VERBOSE)" "nspr" 
"'-DRELEASE_OBJDIR_NAME=WIN954.0_gcc_OPT.OBJ'" && \
+       ../../build m "$(BUILD_ROOT_DEPS)" nss "" "all" "$(VERBOSE)" "nss" && \
+       cp -rf dist/public/* "$(BUILD_ROOT_DEPS)/include/" && \
+       mv $(BUILD_ROOT_DEPS)/lib/nspr4.dll $(BUILD_ROOT_DEPS)/bin/libnspr4.dll && \
+       mv $(BUILD_ROOT_DEPS)/lib/plc4.dll $(BUILD_ROOT_DEPS)/bin/libplc4.dll && \
+       mv $(BUILD_ROOT_DEPS)/lib/plds4.dll $(BUILD_ROOT_DEPS)/bin/libplds4.dll && \
+       mv dist/WIN954.0_gcc_OPT.OBJ/lib/*.dll "$(BUILD_ROOT_DEPS)/bin/" && \
+       mv dist/WIN954.0_gcc_OPT.OBJ/lib/* "$(BUILD_ROOT_DEPS)/lib/" && \
+       echo "prefix=$(BUILD_ROOT_DEPS)" >$(BUILD_ROOT_DEPS)/lib/pkgconfig/nss.pc && \
+       cat nss/nss.pc >>$(BUILD_ROOT_DEPS)/lib/pkgconfig/nss.pc
+
+moztools: env $(BUILD_ROOT_DEPS)/bin/nsinstall.exe
+
+$(BUILD_ROOT_DEPS)/bin/nsinstall.exe:
+       @./get-src http://ftp.mozilla.org/pub/mozilla.org/mozilla/libraries/win32 moztools-static.zip "" "" 
"moztools"
+       @cp src/moztools/bin/nsinstall.exe $(BUILD_ROOT_DEPS)/bin/
+
+gnutls: env zlib gmp nettle p11-kit $(BUILD_ROOT_DEPS)/lib/pkgconfig/gnutls.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/gnutls.pc:
+       @./get-src ftp://ftp.gnutls.org/gcrypt/gnutls/v3.2 gnutls-3.2.12.1.tar.xz "" "" "gnutls-3.2.12"
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gnutls-3.2.12 "@gnutls.patch" "--disable-guile --disable-doc 
--disable-libdane --disable-crywrap" $(VERBOSE)
+
+gnupg: env gnutls pth libassuan libksba $(BUILD_ROOT_DEPS)/bin/gpg2.exe
+
+$(BUILD_ROOT_DEPS)/bin/gpg2.exe:
+       @./get-src ftp://ftp.gnupg.org/gcrypt/gnupg gnupg-2.0.22.tar.bz2
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gnupg-2.0.22 "" "" $(VERBOSE)
+
+pth: env $(BUILD_ROOT_DEPS)/lib/libw32pth.dll.a
+
+$(BUILD_ROOT_DEPS)/lib/libw32pth.dll.a:
+       @./get-src ftp://ftp.g10code.com/g10code/w32pth w32pth-2.0.5.tar.bz2
+       @cd src/w32pth-2.0.5 && \
+       mv libw32pth.def libw32pth.def.orig && \
+       echo EXPORTS >libw32pth.def && \
+       cat libw32pth.def.orig | grep -v EXPORTS >>libw32pth.def
+       @./build cmmi "$(BUILD_ROOT_DEPS)" w32pth-2.0.5 "" "" $(VERBOSE)
+
+libassuan: env $(BUILD_ROOT_DEPS)/lib/libassuan.dll.a
+
+$(BUILD_ROOT_DEPS)/lib/libassuan.dll.a:
+       @./get-src ftp://ftp.gnupg.org/gcrypt/libassuan libassuan-2.1.1.tar.bz2
+       @cd src/libassuan-2.1.1/src && \
+       mv libassuan.def libassuan.def.orig && \
+       echo EXPORTS >libassuan.def && \
+       cat libassuan.def.orig | grep -v EXPORTS >>libassuan.def
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libassuan-2.1.1 "" "" $(VERBOSE)
+
+libksba: env $(BUILD_ROOT_DEPS)/lib/libksba.dll.a
+
+$(BUILD_ROOT_DEPS)/lib/libksba.dll.a:
+       @./get-src ftp://ftp.gnupg.org/gcrypt/libksba libksba-1.3.0.tar.bz2
+       @cd src/libksba-1.3.0/src && \
+       mv libksba.def libksba.def.orig && \
+       echo EXPORTS >libksba.def.def && \
+       cat libksba.def.orig | grep -v EXPORTS >>libksba.def
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libksba-1.3.0 "" "" $(VERBOSE)
+
+sqlite: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/sqlite3.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/sqlite3.pc:
+       @./get-src http://sqlite.org/2014 sqlite-autoconf-3080300.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" sqlite-autoconf-3080300 "" "" $(VERBOSE)
+
+nettle: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/nettle.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/nettle.pc:
+       @./get-src http://www.lysator.liu.se/~nisse/archive nettle-2.7.1.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" nettle-2.7.1 "" "" $(VERBOSE)
+
+gmp: env $(BUILD_ROOT_DEPS)/lib/libgmp.la
+
+$(BUILD_ROOT_DEPS)/lib/libgmp.la:
+       @./get-src https://gmplib.org/download/gmp gmp-4.3.2.tar.bz2
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gmp-4.3.2 "" "--disable-assembly --disable-fft --without-readline 
--enable-shared --disable-static --disable-rpath" $(VERBOSE)
+
+p11-kit: env libtasn1 $(BUILD_ROOT_DEPS)/lib/pkgconfig/p11-kit-1.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/p11-kit-1.pc:
+       @./get-src http://cgit.freedesktop.org/p11-glue/p11-kit/snapshot p11-kit-98292d6bbc.tar.gz
+       @./build acmmi "$(BUILD_ROOT_DEPS)" p11-kit-98292d6bbc "p11-kit.patch" "--disable-rpath 
--disable-trust-module --without-trust-paths" $(VERBOSE)
+
+trousers: env openssl $(BUILD_ROOT_DEPS)/lib/pkgconfig/trousers.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/trousers.pc:
+       @./get-src 
"http://downloads.sourceforge.net/project/trousers/trousers/0.3.11/trousers-0.3.11.2.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Ftrousers%2Ffiles%2Ftrousers%2F0.3.11%2F&ts=1390773464&use_mirror=skylink";
 "0" trousers-0.3.11.2.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" trousers-0.3.11.2 "" "" $(VERBOSE)
+
+libunbound: env openssl ldns $(BUILD_ROOT_DEPS)/lib/pkgconfig/libunbound.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libunbound.pc:
+       @./get-src http://unbound.net/downloads unbound-1.4.21.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" unbound-1.4.21 "" "--with-ssl=$(BUILD_ROOT_DEPS) 
--with-libexpat=$(BUILD_ROOT_DEPS) --with-libunbound-only --disable-ecdsa" $(VERBOSE)
+
+ldns: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/ldns.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/ldns.pc:
+       @./get-src http://www.nlnetlabs.nl/downloads/ldns ldns-1.6.16.tar.gz
+       @mkdir src/ldns-1.6.16/lib
+       @mkdir src/ldns-1.6.16/lib/.libs
+       @./build cmmi "$(BUILD_ROOT_DEPS)" ldns-1.6.16 "" "--with-ssl=$(BUILD_ROOT_DEPS) " $(VERBOSE)
+
+liboauth: env nss $(BUILD_ROOT_DEPS)/lib/pkgconfig/oauth.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/oauth.pc:
+       @./get-src 
"http://downloads.sourceforge.net/project/liboauth/liboauth-1.0.1.tar.gz?r=http%3A%2F%2Fliboauth.sourceforge.net%2F&ts=1394912907&use_mirror=heanet";
 "0" liboauth-1.0.1.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" liboauth-1.0.1 "@liboauth.patch" "--enable-nss" $(VERBOSE)
+       @rm $(BUILD_ROOT_DEPS)/lib/liboauth.la
+
+curl: env nss openldap $(BUILD_ROOT_DEPS)/lib/pkgconfig/curl.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/curl.pc:
+       @./get-src http://curl.haxx.se/download curl-7.35.0.tar.bz2
+       @./build cmmi "$(BUILD_ROOT_DEPS)" curl-7.35.0 "" "--with-nss" $(VERBOSE)
+
+heimdal: env nss ncurses openssl openldap $(BUILD_ROOT_DEPS)/lib/pkgconfig/heimdal.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/heimdal.pc:
+       @./get-src http://www.h5l.org/dist/src heimdal-1.5.2.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" heimdal-1.5.2 "" "" $(VERBOSE)
+
+ncurses: env $(BUILD_ROOT_DEPS)/lib/libncurses.a
+
+$(BUILD_ROOT_DEPS)/lib/libncurses.a:
+       @./get-src ftp://invisible-island.net/ncurses ncurses-5.9.tgz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" ncurses-5.9 "ncurses.patch" "--without-ada --without-manpages 
--without-progs --without-tests" $(VERBOSE)
+
+openldap: env regex gnutls libgpg-error libgcrypt $(BUILD_ROOT_DEPS)/lib/libldap.la
+
+$(BUILD_ROOT_DEPS)/lib/libldap.la:
+       @./get-src ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release openldap-2.4.9.tgz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" openldap-2.4.9 "@openldap.patch" "--disable-backends 
--disable-overlays --disable-slapd --disable-debug --enable-dynamic --without-threads --with-tls=gnutls" 
$(VERBOSE)
+
+libgpg-error: env gnutls $(BUILD_ROOT_DEPS)/lib/libgpg-error.la
+
+$(BUILD_ROOT_DEPS)/lib/libgpg-error.la:
+       @./get-src ftp://ftp.gnutls.org/gcrypt/libgpg-error libgpg-error-1.12.tar.bz2
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libgpg-error-1.12 "libgpg-error.patch" "" $(VERBOSE)
+
+libgcrypt: env libgpg-error $(BUILD_ROOT_DEPS)/lib/libgcrypt.la
+
+$(BUILD_ROOT_DEPS)/lib/libgcrypt.la:
+       @./get-src ftp://ftp.gnutls.org/gcrypt/libgcrypt libgcrypt-1.6.1.tar.bz2
+       @export w32root=$(BUILD_ROOT_DEPS) && \
+       ./build acmmi "$(BUILD_ROOT_DEPS)" libgcrypt-1.6.1 "" "--build-w32^" $(VERBOSE)
+
+regex: env $(BUILD_ROOT_DEPS)/include/regex.h
+
+$(BUILD_ROOT_DEPS)/include/regex.h:
+       @./get-src 
"http://downloads.sourceforge.net/project/mingw/MSYS/Base/regex/regex-1.20090805-2/regex-1.20090805-2-msys-1.0.13-src.tar.lzma?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fmingw%2Ffiles%2FMSYS%2FBase%2Fregex%2Fregex-1.20090805-2%2Fregex-1.20090805-2-msys-1.0.13-src.tar.lzma%2Fdownload&ts=1395255273&use_mirror=cznic";
 "0" regex-1.20090805-2-msys-1.0.13-src.tar.lzma
+       @tar -xf src/regex-20090805.tar.xz --directory=src
+       @./build cmmi "$(BUILD_ROOT_DEPS)" regex-20090805 "regex.patch" "" $(VERBOSE)
+
+catgets: env $(BUILD_ROOT_DEPS)/include/langinfo.h
+
+$(BUILD_ROOT_DEPS)/include/langinfo.h:
+       @./get-src 
"http://downloads.sourceforge.net/project/mingw/MinGW/Extension/catgets/mingw-catgets-1.0.1/mingw-catgets-1.0.1-src.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fmingw%2Ffiles%2FMinGW%2FExtension%2Fcatgets%2Fmingw-catgets-1.0.1%2F&ts=1396202721&use_mirror=freefr";
 "0" mingw-catgets-1.0.1-src.tar.gz "mingw-catgets-1.0.1"
+       @./build cmmi "$(BUILD_ROOT_DEPS)" mingw-catgets-1.0.1 "" "" $(VERBOSE)
+
+libdb: env $(BUILD_ROOT_DEPS)/lib/libdb.a
+
+$(BUILD_ROOT_DEPS)/lib/libdb.a:
+       @./get-src http://download.oracle.com/berkeley-db db-5.1.29.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" db-5.1.29/build_unix "@libdb.patch" "../dist/configure 
--enable-smallbuild --disable-cxx --disable-java --disable-replication --enable-mingw" $(VERBOSE)
+
+libgdata: env glib libsoup liboauth json-glib $(BUILD_ROOT_DEPS)/lib/pkgconfig/libgdata.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libgdata.pc:
+       @./get-src https://download.gnome.org/sources/libgdata/0.15 libgdata-0.15.1.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libgdata-0.15.1 "libgdata.patch" "--disable-gnome --disable-goa 
$(DISABLE_GTK_DOC)" $(VERBOSE)
+
+gsettings-desktop-schemas: env gtk $(BUILD_ROOT_DEPS)/share/pkgconfig/gsettings-desktop-schemas.pc
+
+$(BUILD_ROOT_DEPS)/share/pkgconfig/gsettings-desktop-schemas.pc:
+       @./get-src https://download.gnome.org/sources/gsettings-desktop-schemas/3.10 
gsettings-desktop-schemas-3.10.1.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gsettings-desktop-schemas-3.10.1 "" "" $(VERBOSE)
+
+gtkspell: env gtk enchant $(BUILD_ROOT_DEPS)/lib/pkgconfig/gtkspell3-3.0.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/gtkspell3-3.0.pc:
+       @./get-src 
"http://downloads.sourceforge.net/project/gtkspell/3.0.4/gtkspell3-3.0.4.tar.gz?r=http%3A%2F%2Fgtkspell.sourceforge.net%2F&ts=1395867752&use_mirror=skylink";
 "0" gtkspell3-3.0.4.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gtkspell3-3.0.4 "" "$(DISABLE_GTK_DOC)" $(VERBOSE)
+
+gtkhtml: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/libgtkhtml-4.0.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libgtkhtml-4.0.pc:
+       @./get-src https://download.gnome.org/sources/gtkhtml/4.8 gtkhtml-4.8.0.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gtkhtml-4.8.0 "" "$(DISABLE_GTK_DOC)" $(VERBOSE)
+
+gnome-common: env $(BUILD_ROOT_DEPS)/share/aclocal/gnome-common.m4
+
+$(BUILD_ROOT_DEPS)/share/aclocal/gnome-common.m4:
+       @./get-src https://download.gnome.org/sources/gnome-common/3.10 gnome-common-3.10.0.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gnome-common-3.10.0 "" "" $(VERBOSE)
+
+webkitgtk: env gtk enchant libsoup ruby gperf libwebp icu libsecret libxslt 
$(BUILD_ROOT_DEPS)/lib/pkgconfig/webkitgtk-3.0.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/webkitgtk-3.0.pc:
+       @./get-src http://webkitgtk.org/releases webkitgtk-2.4.4.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" webkitgtk-2.4.4 "webkitgtk.patch" "--enable-win32-target 
--enable-spellcheck --enable-jit --disable-geolocation --disable-video --disable-web-audio --disable-webgl 
--disable-accelerated-compositing --disable-glx --disable-egl --disable-gles2 --disable-webkit2 
$(DISABLE_GTK_DOC)" $(VERBOSE)
+
+ruby: env 7zip $(BUILD_ROOT_DEPS)/bin/ruby.exe
+
+$(BUILD_ROOT_DEPS)/bin/ruby.exe:
+       @./get-src http://dl.bintray.com/oneclick/rubyinstaller ruby-1.9.3-p545-i386-mingw32.7z
+       @cp -r src/ruby-1.9.3-p545-i386-mingw32/bin/* $(BUILD_ROOT_DEPS)/bin/
+       @cp -r src/ruby-1.9.3-p545-i386-mingw32/include/* $(BUILD_ROOT_DEPS)/include/
+       @cp -r src/ruby-1.9.3-p545-i386-mingw32/lib/* $(BUILD_ROOT_DEPS)/lib/
+
+gperf: env $(BUILD_ROOT_DEPS)/bin/gperf.exe
+
+$(BUILD_ROOT_DEPS)/bin/gperf.exe:
+       @./get-src http://ftp.gnu.org/pub/gnu/gperf gperf-3.0.4.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gperf-3.0.4 "" "" $(VERBOSE)
+
+libwebp: env giflib $(BUILD_ROOT_DEPS)/lib/pkgconfig/libwebp.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libwebp.pc:
+       @./get-src https://webp.googlecode.com/files libwebp-0.4.0.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libwebp-0.4.0 "" "" $(VERBOSE)
+
+icu: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-uc.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-uc.pc:
+       @./get-src http://download.icu-project.org/files/icu4c/53.1 icu4c-53_1-src.tgz "" "" icu
+       @./build cmmi "$(BUILD_ROOT_DEPS)" icu/source "" "--disable-rpath" $(VERBOSE)
+       @mv $(BUILD_ROOT_DEPS)/lib/icu*.dll $(BUILD_ROOT_DEPS)/bin/
+       @mv $(BUILD_ROOT_DEPS)/lib/icudt.dll.a $(BUILD_ROOT_DEPS)/lib/libicudt.dll.a
+       @mv $(BUILD_ROOT_DEPS)/lib/icuin.dll.a $(BUILD_ROOT_DEPS)/lib/libicuin.dll.a
+       @mv $(BUILD_ROOT_DEPS)/lib/icuio.dll.a $(BUILD_ROOT_DEPS)/lib/libicuio.dll.a
+       @mv $(BUILD_ROOT_DEPS)/lib/icule.dll.a $(BUILD_ROOT_DEPS)/lib/libicule.dll.a
+       @mv $(BUILD_ROOT_DEPS)/lib/iculx.dll.a $(BUILD_ROOT_DEPS)/lib/libiculx.dll.a
+       @mv $(BUILD_ROOT_DEPS)/lib/icutest.dll.a $(BUILD_ROOT_DEPS)/lib/libicutest.dll.a
+       @mv $(BUILD_ROOT_DEPS)/lib/icutu.dll.a $(BUILD_ROOT_DEPS)/lib/libicutu.dll.a
+       @mv $(BUILD_ROOT_DEPS)/lib/icuuc.dll.a $(BUILD_ROOT_DEPS)/lib/libicuuc.dll.a
+       @mv $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-i18n.pc $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-i18n.pc.bak && \
+       cat $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-i18n.pc.bak | grep -v "Libs: -licuin53" 
$(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-i18n.pc && \
+       echo "Libs: -licuin" >>$(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-i18n.pc && \
+       rm $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-i18n.pc.bak
+       @mv $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-io.pc $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-io.pc.bak && \
+       cat $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-io.pc.bak | grep -v "Libs: -licuio53" 
$(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-io.pc && \
+       echo "Libs: -licuio" >>$(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-io.pc && \
+       rm $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-io.pc.bak
+       @mv $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-le.pc $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-le.pc.bak && \
+       cat $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-le.pc.bak | grep -v "Libs: -licule53" 
$(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-le.pc && \
+       echo "Libs: -licule" >>$(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-le.pc && \
+       rm $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-le.pc.bak
+       @mv $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-lx.pc $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-lx.pc.bak && \
+       cat $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-lx.pc.bak | grep -v "Libs: -liculx53" 
$(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-lx.pc && \
+       echo "Libs: -liculx" >>$(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-lx.pc && \
+       rm $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-lx.pc.bak
+       @mv $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-uc.pc $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-uc.pc.bak && \
+       cat $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-uc.pc.bak | grep -v "} -licuuc53 -licudt53" 
$(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-uc.pc && \
+       echo "Libs: -L$(BUILD_ROOT_DEPS)/lib/ -licuuc -licudt" >>$(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-uc.pc 
&& \
+       rm $(BUILD_ROOT_DEPS)/lib/pkgconfig/icu-uc.pc.bak
+
+libsecret: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/libsecret-1.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libsecret-1.pc:
+       @./get-src https://download.gnome.org/sources/libsecret/0.16 libsecret-0.16.tar.xz
+       @./build acmmi "$(BUILD_ROOT_DEPS)" libsecret-0.16 "libsecret.patch" "--disable-manpages" $(VERBOSE)
+
+libxslt: env libxml2 $(BUILD_ROOT_DEPS)/lib/pkgconfig/libxslt.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libxslt.pc:
+       @./get-src https://git.gnome.org/browse/libxslt/snapshot libxslt-1.1.28.tar.gz
+       @./build acmmi "$(BUILD_ROOT_DEPS)" libxslt-1.1.28 "libxslt.patch" "" $(VERBOSE)
+
+json-glib: env glib $(BUILD_ROOT_DEPS)/lib/pkgconfig/json-glib-1.0.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/json-glib-1.0.pc:
+       @./get-src https://download.gnome.org/sources/json-glib/0.99 json-glib-0.99.2.tar.xz
+       @mv $(BUILD_ROOT_DEPS)/bin/msgmerge.exe $(BUILD_ROOT_DEPS)/bin/msgmerge.ex && \
+       ./build cmmi "$(BUILD_ROOT_DEPS)" json-glib-0.99.2 "" "$(DISABLE_GTK_DOC)" $(VERBOSE) && \
+       mv $(BUILD_ROOT_DEPS)/bin/msgmerge.ex $(BUILD_ROOT_DEPS)/bin/msgmerge.exe
+
+libunistring: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/libunistring.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libunistring.pc:
+       @./get-src ftp://ftp.gnu.org/pub/gnu/libunistring libunistring-0.9.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libunistring-0.9 "" "" $(VERBOSE)
+
+libtasn1: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/libtasn1.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libtasn1.pc:
+       @./get-src http://ftp.gnu.org/gnu/libtasn1 libtasn1-3.4.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libtasn1-3.4 "@libtasn1.patch" "" $(VERBOSE)
+
+openssl: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/openssl.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/openssl.pc:
+       @./get-src http://www.openssl.org/source openssl-1.0.1g.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" openssl-1.0.1g "" "mingw" $(VERBOSE)
+
+gtk: env glib intltool atk gdk-pixbuf cairo pango $(BUILD_ROOT_DEPS)/lib/pkgconfig/gtk+-3.0.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/gtk+-3.0.pc:
+       @./get-src https://download.gnome.org/sources/gtk+/3.10 gtk+-3.10.6.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gtk+-3.10.6 "gtk.patch" "--disable-static $(DISABLE_GTK_DOC) 
--disable-man" $(VERBOSE)
+
+atk: env glib $(BUILD_ROOT_DEPS)/lib/pkgconfig/atk.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/atk.pc:
+       @./get-src https://download.gnome.org/sources/atk/2.10 atk-2.10.0.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" atk-2.10.0 "atk.patch" "--disable-static" $(VERBOSE)
+
+cairo: env glib pixman libpng freetype fontconfig $(BUILD_ROOT_DEPS)/lib/pkgconfig/cairo.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/cairo.pc:
+       @./get-src http://cairographics.org/releases cairo-1.12.16.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" cairo-1.12.16 "" "--disable-static $(DISABLE_GTK_DOC)" $(VERBOSE)
+
+pixman: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/pixman-1.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/pixman-1.pc:
+       @./get-src http://cairographics.org/releases pixman-0.32.4.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" pixman-0.32.4 "" "--disable-static" $(VERBOSE)
+
+libpng: env zlib $(BUILD_ROOT_DEPS)/lib/pkgconfig/libpng.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libpng.pc:
+       @./get-src http://download.sourceforge.net/libpng libpng-1.6.7.tar.xz
+       @./build mmi "$(BUILD_ROOT_DEPS)" libpng-1.6.7 "libpng.patch" "-f scripts/makefile.msys 
prefix=$(BUILD_ROOT_DEPS)" $(VERBOSE)
+       @cp $(BUILD_ROOT_DEPS)/lib/libpng16.dll.a $(BUILD_ROOT_DEPS)/lib/libpng.dll.a
+
+fontconfig: env freetype expat $(BUILD_ROOT_DEPS)/lib/pkgconfig/fontconfig.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/fontconfig.pc:
+       @./get-src http://www.freedesktop.org/software/fontconfig/release fontconfig-2.11.0.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" fontconfig-2.11.0 "@fontconfig.patch" "--disable-docs" $(VERBOSE)
+
+freetype: env zlib giflib libpng libjpeg libtiff jasper $(BUILD_ROOT_DEPS)/lib/pkgconfig/freetype2.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/freetype2.pc:
+       @./get-src http://download.savannah.gnu.org/releases/freetype freetype-2.5.2.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" freetype-2.5.2 "freetype.patch" "" $(VERBOSE)
+
+harfbuzz: env cairo freetype glib icu $(BUILD_ROOT_DEPS)/lib/pkgconfig/harfbuzz.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/harfbuzz.pc:
+       @./get-src http://www.freedesktop.org/software/harfbuzz/release harfbuzz-0.9.27.tar.bz2 || test -d 
src/harfbuzz-0.9.27
+       @./build cmmi "$(BUILD_ROOT_DEPS)" harfbuzz-0.9.27 "harfbuzz.patch" "--with-icu=yes --disable-static" 
$(VERBOSE)
+
+librsvg2: env zlib cairo gdk-pixbuf libcroco $(BUILD_ROOT_DEPS)/lib/pkgconfig/librsvg-2.0.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/librsvg-2.0.pc:
+       @./get-src http://ftp.acc.umu.se/pub/gnome/sources/librsvg/2.36 librsvg-2.36.4.tar.xz
+       @export PATH="$(PATH):`pwd`/src/librsvg-2.36.4/.libs" && \
+       ./build cmmi "$(BUILD_ROOT_DEPS)" librsvg-2.36.4 "" "--disable-gtk-theme --enable-pixbuf-loader 
--enable-introspection=no $(DISABLE_GTK_DOC)" $(VERBOSE)
+
+pango: env glib cairo fontconfig freetype harfbuzz $(BUILD_ROOT_DEPS)/lib/pkgconfig/pango.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/pango.pc:
+       @./get-src http://ftp.gnome.org/pub/GNOME/sources/pango/1.36 pango-1.36.1.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" pango-1.36.1 "" "" $(VERBOSE)
+
+icon-themes: hicolor-icon-theme icon-naming-utils gnome-icon-theme gnome-icon-theme-symbolic
+
+hicolor-icon-theme: env $(BUILD_ROOT_DEPS)/share/icons/hicolor/index.theme
+
+$(BUILD_ROOT_DEPS)/share/icons/hicolor/index.theme:
+       @./get-src http://icon-theme.freedesktop.org/releases hicolor-icon-theme-0.13.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" hicolor-icon-theme-0.13 "" "" $(VERBOSE)
+
+perl-xml-simple: /lib/perl5/5.8/XML
+
+/lib/perl5/5.8/XML:
+       @./get-src 
http://pkgs.fedoraproject.org/repo/pkgs/perl-XML-Simple/XML-Simple-2.18.tar.gz/593aa8001e5c301cdcdb4bb3b63abc33
 XML-Simple-2.18.tar.gz
+       @cp -r src/XML-Simple-2.18/lib/XML /lib/perl5/5.8/
+
+icon-naming-utils: env perl-xml-simple $(BUILD_ROOT_DEPS)/share/pkgconfig/icon-naming-utils.pc
+
+$(BUILD_ROOT_DEPS)/share/pkgconfig/icon-naming-utils.pc:
+       @./get-src http://tango.freedesktop.org/releases icon-naming-utils-0.8.90.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" icon-naming-utils-0.8.90 "" "" $(VERBOSE)
+
+gnome-icon-theme: env icon-naming-utils gtk $(BUILD_ROOT_DEPS)/share/pkgconfig/gnome-icon-theme.pc
+
+$(BUILD_ROOT_DEPS)/share/pkgconfig/gnome-icon-theme.pc:
+       @./get-src https://download.gnome.org/sources/gnome-icon-theme/3.10 gnome-icon-theme-3.10.0.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gnome-icon-theme-3.10.0 "" "" $(VERBOSE)
+
+gnome-icon-theme-symbolic: env gnome-icon-theme 
$(BUILD_ROOT_DEPS)/share/pkgconfig/gnome-icon-theme-symbolic.pc
+
+$(BUILD_ROOT_DEPS)/share/pkgconfig/gnome-icon-theme-symbolic.pc:
+       @./get-src https://download.gnome.org/sources/gnome-icon-theme-symbolic/3.10 
gnome-icon-theme-symbolic-3.10.1.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gnome-icon-theme-symbolic-3.10.1 "" "" $(VERBOSE)
+
+gdk-pixbuf: env giflib libpng libjpeg libtiff jasper glib $(BUILD_ROOT_DEPS)/lib/pkgconfig/gdk-pixbuf-2.0.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/gdk-pixbuf-2.0.pc:
+       @./get-src https://download.gnome.org/sources/gdk-pixbuf/2.30 gdk-pixbuf-2.30.2.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gdk-pixbuf-2.30.2 "" "--disable-static --with-libjasper" $(VERBOSE)
+
+libcroco: env glib $(BUILD_ROOT_DEPS)/lib/pkgconfig/libcroco-0.6.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libcroco-0.6.pc:
+       @./get-src http://ftp.acc.umu.se/pub/gnome/sources/libcroco/0.6 libcroco-0.6.8.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libcroco-0.6.8 "" "$(DISABLE_GTK_DOC)" $(VERBOSE)
+
+giflib: env $(BUILD_ROOT_DEPS)/include/gif_lib.h
+
+$(BUILD_ROOT_DEPS)/include/gif_lib.h:
+       @./get-src 
"http://downloads.sourceforge.net/project/giflib/giflib-5.0.6.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fgiflib%2F&ts=1398011957&use_mirror=kent";
 "0" giflib-5.0.6.tar.bz2
+       @./build cmmi "$(BUILD_ROOT_DEPS)" giflib-5.0.6 "" "" $(VERBOSE)
+
+libjpeg: env zlib $(BUILD_ROOT_DEPS)/bin/libjpeg-9.dll
+
+$(BUILD_ROOT_DEPS)/bin/libjpeg-9.dll:
+       @./get-src http://www.ijg.org/files jpegsrc.v9.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" jpeg-9 "" "" $(VERBOSE)
+
+libtiff: env zlib $(BUILD_ROOT_DEPS)/lib/pkgconfig/libtiff-4.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libtiff-4.pc:
+       @./get-src ftp://ftp.remotesensing.org/pub/libtiff tiff-4.0.3.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" tiff-4.0.3 "" "" $(VERBOSE)
+
+jasper: env zlib $(BUILD_ROOT_DEPS)/include/jasper/jasper.h
+
+$(BUILD_ROOT_DEPS)/include/jasper/jasper.h:
+       @./get-src http://www.ece.uvic.ca/~frodo/jasper/software jasper-1.900.1.zip
+       @./build cmmi "$(BUILD_ROOT_DEPS)" jasper-1.900.1 "jasper.patch" "" $(VERBOSE)
+
+libffi: env $(BUILD_ROOT_DEPS)/lib/pkgconfig/libffi.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libffi.pc:
+       @./get-src ftp://sourceware.org/pub/libffi/ libffi-3.0.9.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libffi-3.0.9 "" "" $(VERBOSE)
+
+dbus: env expat $(BUILD_ROOT_DEPS)/lib/pkgconfig/dbus-1.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/dbus-1.pc:
+       @./get-src http://dbus.freedesktop.org/releases/dbus dbus-1.8.0.tar.gz
+       @./build rcmmi "$(BUILD_ROOT_DEPS)" dbus-1.8.0 "dbus.patch" "--build=mingw32" $(VERBOSE)
+
+expat: env libxml2 $(BUILD_ROOT_DEPS)/lib/pkgconfig/expat.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/expat.pc:
+       @./get-src 
"http://downloads.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fexpat%2Ffiles%2Fexpat%2F2.1.0%2F&ts=1388081569&use_mirror=heanet";
 "0" expat-2.1.0.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" expat-2.1.0 "" "" $(VERBOSE)
+
+krb5: env $(BUILD_ROOT_DEPS)/include/krb5.h
+
+$(BUILD_ROOT_DEPS)/include/krb5.h:
+       @./get-src http://web.mit.edu/kerberos/dist/krb5/1.12 krb5-1.12-signed.tar
+       @./build cmmi "$(BUILD_ROOT_DEPS)" krb5-1.12-signed "" "" $(VERBOSE)
+
+# to be able to call ./autogen.sh
+fake-gtk-doc: env $(BUILD_ROOT_DEPS)/bin/gtkdocize
+
+$(BUILD_ROOT_DEPS)/bin/gtkdocize:
+       @echo "#!/bin/bash" >$(BUILD_ROOT_DEPS)/bin/gtkdocize
+       @echo "echo fake gtkdocize binary >&2" >>$(BUILD_ROOT_DEPS)/bin/gtkdocize
+       @echo "#if [ x$-1 = x--version ] ; then" >>$(BUILD_ROOT_DEPS)/bin/gtkdocize
+       @echo " echo 1.20.1" >>$(BUILD_ROOT_DEPS)/bin/gtkdocize
+       @echo " exit 0" >>$(BUILD_ROOT_DEPS)/bin/gtkdocize
+       @echo "#fi" >>$(BUILD_ROOT_DEPS)/bin/gtkdocize
+       @echo "exit 1" >>$(BUILD_ROOT_DEPS)/bin/gtkdocize
+       @cp patches/gtk-doc.m4 $(BUILD_ROOT_DEPS)/share/aclocal/
+       @cp patches/yelp.m4 $(BUILD_ROOT_DEPS)/share/aclocal/
+
+libxml2: env libiconv $(BUILD_ROOT_DEPS)/lib/pkgconfig/libxml-2.0.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/libxml-2.0.pc:
+       @./get-src ftp://xmlsoft.org/libxml2 libxml2-2.8.0.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libxml2-2.8.0 "" "" $(VERBOSE)
+
+zlib: env pkg-config $(BUILD_ROOT_DEPS)/lib/pkgconfig/zlib.pc
+
+$(BUILD_ROOT_DEPS)/lib/pkgconfig/zlib.pc:
+       @./get-src http://zlib.net/ zlib-1.2.8.tar.xz
+       @./build mmi "$(BUILD_ROOT_DEPS)" zlib-1.2.8 "" "-f win32/Makefile.gcc NO_MSCVER_FILE64_FUNC=1" 
$(VERBOSE)
+       @cd src/zlib-1.2.8 && \
+       cp libz.dll.a $(BUILD_ROOT_DEPS)/lib/ && \
+       cp zlib1.dll $(BUILD_ROOT_DEPS)/bin/ && \
+       cd ../..
+
+cmake: env $(BUILD_ROOT_DEPS)/bin/cmake.exe
+
+$(BUILD_ROOT_DEPS)/bin/cmake.exe:
+       @./get-src http://www.cmake.org/files/v2.8 cmake-2.8.12.2-win32-x86.zip
+       @cp -r src/cmake-2.8.12.2-win32-x86/share/* $(BUILD_ROOT_DEPS)/share/
+       @cp -r src/cmake-2.8.12.2-win32-x86/bin/* $(BUILD_ROOT_DEPS)/bin/
+
+7zip: env $(BUILD_ROOT_DEPS)/bin/7za.exe
+
+$(BUILD_ROOT_DEPS)/bin/7za.exe:
+       @./get-src http://downloads.sourceforge.net/sevenzip 7za920.zip
+       @cp src/7za.exe $(BUILD_ROOT_DEPS)/bin/7za.exe
+
+intltool: env $(BUILD_ROOT_DEPS)/bin/intltoolize
+
+$(BUILD_ROOT_DEPS)/bin/intltoolize:
+       @./get-src https://launchpad.net/intltool/trunk/0.50.2/+download intltool-0.50.2.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" intltool-0.50.2 "" "" $(VERBOSE)
+
+core-tools: regex libtool autoconf automake pkg-config intltool libiconv gettext
+
+libtool: env $(BUILD_ROOT_DEPS)/bin/libtool
+
+$(BUILD_ROOT_DEPS)/bin/libtool:
+       @./get-src http://ftp.gnu.org/gnu/libtool libtool-2.4.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libtool-2.4 "" "" $(VERBOSE)
+
+autoconf: env $(BUILD_ROOT_DEPS)/bin/autoconf
+
+$(BUILD_ROOT_DEPS)/bin/autoconf:
+       @./get-src http://ftp.gnu.org/gnu/autoconf autoconf-2.69.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" autoconf-2.69 "" "" $(VERBOSE)
+
+automake: env $(BUILD_ROOT_DEPS)/bin/automake
+
+$(BUILD_ROOT_DEPS)/bin/automake:
+       @./get-src http://ftp.gnu.org/gnu/automake automake-1.14.tar.xz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" automake-1.14 "" "" $(VERBOSE)
+
+libiconv: env $(BUILD_ROOT_DEPS)/bin/iconv.exe
+
+$(BUILD_ROOT_DEPS)/bin/iconv.exe:
+       @./get-src http://ftp.gnu.org/gnu/libiconv libiconv-1.14.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" libiconv-1.14 "" "" $(VERBOSE)
+
+gettext: env $(BUILD_ROOT_DEPS)/bin/gettext.exe
+
+$(BUILD_ROOT_DEPS)/bin/gettext.exe:
+       @./get-src http://ftp.gnu.org/pub/gnu/gettext gettext-0.18.3.1.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" gettext-0.18.3.1 "@gettext.patch" "" $(VERBOSE)
+
+bison: env $(BUILD_ROOT_DEPS)/bin/bison.exe
+
+$(BUILD_ROOT_DEPS)/bin/bison.exe:
+       @./get-src http://ftp.gnu.org/gnu/bison bison-3.0.2.tar.xz
+       @./build acmmi "$(BUILD_ROOT_DEPS)" bison-3.0.2 "bison.patch" "" $(VERBOSE)
+
+pkg-config: env $(BUILD_ROOT_DEPS)/bin/pkg-config.exe
+
+$(BUILD_ROOT_DEPS)/bin/pkg-config.exe:
+       @./get-src 
"http://downloads.sourceforge.net/project/pkgconfiglite/0.28-1/pkg-config-lite-0.28-1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpkgconfiglite%2Ffiles%2F0.28-1%2F&ts=1391208353&use_mirror=garr";
 "0" pkg-config-lite-0.28-1.tar.gz
+       @./build cmmi "$(BUILD_ROOT_DEPS)" pkg-config-lite-0.28-1 "" "" $(VERBOSE)
diff --git a/win32/build b/win32/build
new file mode 100755
index 0000000..915e352
--- /dev/null
+++ b/win32/build
@@ -0,0 +1,130 @@
+#!/bin/bash
+
+HOW=$1
+PREFIX=$2
+WHAT=$3
+PATCHES=$4
+CFGPARAMS=$5
+VERBOSE=$6
+SRCDIR=$7
+MKPARAMS=
+PATCHAFTERCFG=0
+
+if test "$HOW" = "m" -o "$HOW" = "mmi" ; then
+       MKPARAMS=$CFGPARAMS
+fi
+
+PATCHAFTERCFG=0
+if test "${PATCHES:0:1}" = "@" ; then
+       PATCHAFTERCFG=1
+       PATCHES=${PATCHES:1}
+fi 
+
+if test "$SRCDIR" = "" ; then
+       SRCDIR=src/$WHAT
+fi
+
+cd $SRCDIR
+
+if test "$?" != "0" ; then
+       exit 1
+fi
+
+export BINARY_PATH=$PREFIX/bin
+export INCLUDE_PATH=$PREFIX/include
+export LIBRARY_PATH=$PREFIX/lib
+
+if test "$PATCHAFTERCFG" != "1" ; then
+       for p in $PATCHES; do patch -p1 -f --fuzz=0 <../../patches/$p; done
+fi
+
+if test "${HOW:0:1}" = "r" ; then
+       echo " * Running autoreconf for '$WHAT'..."
+
+       HOW=${HOW:1}
+       if test "$VERBOSE" != "1" ; then
+               autoreconf --force --install >/dev/null
+
+       else
+               autoreconf --force --install
+       fi
+
+       if test "$?" != "0" ; then
+               exit 1
+       fi
+fi
+
+if test "${HOW:0:1}" = "a" ; then
+       AUTOGENSH=
+       if test -f "./autogen.sh" ; then
+               AUTOGENSH="./autogen.sh"
+               AUTOGENPARAMS="$CFGPARAMS --prefix=$PREFIX"
+       else
+               AUTOGENSH="autoreconf -fi"
+               AUTOGENPARAMS=
+       fi
+
+       echo " * Running $AUTOGENSH for '$WHAT'..."
+
+       HOW=${HOW:1}
+       if test "$CFGPARAMS" != "" -a "${CFGPARAMS%%^}" != "" -a "${CFGPARAMS%%^}" != "$CFGPARAMS" ; then
+               AUTOGENPARAMS="${CFGPARAMS%%^}"
+               CFGPARAMS="${CFGPARAMS##*^}"
+       fi
+       if test "$VERBOSE" != "1" ; then
+               $AUTOGENSH $AUTOGENPARAMS >/dev/null
+       else
+               $AUTOGENSH $AUTOGENPARAMS 
+       fi
+
+       if test "$?" != "0" ; then
+               exit 1
+       fi
+fi
+
+if test "$HOW" = "cmmi" ; then
+       echo " * Configuring '$WHAT'..."
+
+       make clean &>/dev/null
+
+       FIRSTPARAM=${CFGPARAMS%% }
+       if test "$FIRSTPARAM" != "" -a "${FIRSTPARAM%%/}" != "" -a "${FIRSTPARAM%%/}" != "$FIRSTPARAM" ; then
+               if test "$VERBOSE" != "1" ; then
+                       $CFGPARAMS --prefix=$PREFIX  >/dev/null
+
+               else
+                       $CFGPARAMS --prefix=$PREFIX
+               fi
+       elif test "$VERBOSE" != "1" ; then
+               ./configure --prefix=$PREFIX $CFGPARAMS >/dev/null
+
+       else
+               ./configure --prefix=$PREFIX $CFGPARAMS
+       fi
+
+       if test "$?" != "0" ; then
+               exit 1
+       fi
+fi
+
+if test "$PATCHAFTERCFG" = "1" ; then
+       for p in $PATCHES; do patch -p1 -f --fuzz=0 <../../patches/$p; done
+fi
+
+if test "$VERBOSE" != "1" ; then
+       echo " * Building '$WHAT'..." && \
+       make $MKPARAMS >/dev/null && \
+       if test "$HOW" != "m" ; then
+               make install $MKPARAMS >/dev/null
+       fi
+else
+       echo " * Building '$WHAT'..." && \
+       make V=1 $MKPARAMS && \
+       if test "$HOW" != "m" ; then
+               make install V=1 $MKPARAMS
+       fi
+fi
+
+if test "$?" != "0" ; then
+       exit 1
+fi
diff --git a/win32/get-src b/win32/get-src
new file mode 100755
index 0000000..7332815
--- /dev/null
+++ b/win32/get-src
@@ -0,0 +1,83 @@
+#!/bin/bash
+
+OK=0
+MKPWD=$PWD
+URLLINK=$1
+DOWNLOADEDFILE=$2
+EXTRACTTO=$4
+EXTRACTEDDIR=$5
+
+if test "$DOWNLOADEDFILE" = "0" ; then
+       DOWNLOADEDFILE=$3 ;
+else
+       URLLINK="$URLLINK/$DOWNLOADEDFILE" ;
+fi
+
+if test ! -f "downloads/$DOWNLOADEDFILE" ; then
+       cd downloads && \
+       wget --no-check-certificate $URLLINK && \
+       cd .. && \
+       OK=1
+else
+       OK=1
+fi
+if test "$OK" = "0" ; then
+       exit 1;
+fi
+
+case "$DOWNLOADEDFILE" in
+   *.7z)
+       if test "$EXTRACTEDDIR" = "" ; then
+               EXTRACTEDDIR=${DOWNLOADEDFILE%%.7z}
+       fi
+       if test ! -d "src/${EXTRACTEDDIR}" ; then
+               echo " * Unpacking '$DOWNLOADEDFILE'..."
+               if test "$EXTRACTTO" != "" ; then
+                       cd $EXTRACTTO &&
+                       7za x -y $MKPWD/downloads/$DOWNLOADEDFILE >/dev/null &&
+                       cd $MKPWD
+               else
+                       cd src && \
+                       7za x -y ../downloads/$DOWNLOADEDFILE >/dev/null && \
+                       cd ..
+               fi
+       fi
+       ;;
+   *.zip)
+       if test "$EXTRACTEDDIR" = "" ; then
+               EXTRACTEDDIR=${DOWNLOADEDFILE%%.zip}
+       fi
+       if test ! -d "src/${EXTRACTEDDIR}" ; then
+               echo " * Unpacking '$DOWNLOADEDFILE'..."
+               if test "$EXTRACTTO" != "" ; then
+                       cd $EXTRACTTO &&
+                       unzip -o $MKPWD/downloads/$DOWNLOADEDFILE >/dev/null &&
+                       cd $MKPWD
+               else
+                       cd src && \
+                       unzip -o ../downloads/$DOWNLOADEDFILE >/dev/null && \
+                       cd ..
+               fi
+       fi
+       ;;
+   *.tar*|*.tgz)
+       if test "$EXTRACTEDDIR" = "" ; then
+               case "$DOWNLOADEDFILE" in
+                  *.tar*) EXTRACTEDDIR=${DOWNLOADEDFILE%%.tar*} ;;
+                  *.tgz)  EXTRACTEDDIR=${DOWNLOADEDFILE%%.tgz*} ;;
+                  *) echo "unknown archive type for tar case: '$DOWNLOADEDFILE'"; exit 1; ;;
+               esac
+       fi
+       if test ! -d "src/$EXTRACTEDDIR" ; then
+               echo " * Unpacking '$DOWNLOADEDFILE'..."
+               if test "$EXTRACTTO" = "" ; then
+                       EXTRACTTO=src
+               fi
+               if test ! -d "$EXTRACTTO" ; then
+                       mkdir -p "$EXTRACTTO"; 
+               fi
+               tar -xf downloads/$DOWNLOADEDFILE --directory=$EXTRACTTO
+       fi
+       ;;
+   *) echo "unknown archive type '$DOWNLOADEDFILE'"; exit 1; ;;
+esac
diff --git a/win32/patches/atk.patch b/win32/patches/atk.patch
new file mode 100644
index 0000000..7429516
--- /dev/null
+++ b/win32/patches/atk.patch
@@ -0,0 +1,11 @@
+diff -upr -x .deps -x .libs -x '*.la' atk-2.10.0.old/atk/atk.symbols atk-2.10.0/atk/atk.symbols
+--- atk-2.10.0.old/atk/atk.symbols     2013-09-13 15:00:44 +0000
++++ atk-2.10.0/atk/atk.symbols 2014-05-17 16:34:24 +0000
+@@ -107,6 +107,7 @@
+       atk_object_get_n_accessible_children
+       atk_object_get_name
+       atk_object_get_parent
++      atk_object_get_object_locale
+       atk_object_get_role
+       atk_object_get_type
+       atk_object_initialize
diff --git a/win32/patches/bison.patch b/win32/patches/bison.patch
new file mode 100644
index 0000000..ae77ae2
--- /dev/null
+++ b/win32/patches/bison.patch
@@ -0,0 +1,18 @@
+diff -upr bison-3.0.2.old/Makefile.am bison-3.0.2/Makefile.am
+--- bison-3.0.2.old/Makefile.am        2013-08-02 15:35:13 +0000
++++ bison-3.0.2/Makefile.am    2014-05-08 07:40:11 +0000
+@@ -54,12 +54,12 @@ noinst_LIBRARIES =
+ include build-aux/local.mk
+ include data/local.mk
+ include djgpp/local.mk
+-include doc/local.mk
++#include doc/local.mk
+ include etc/local.mk
+ include examples/local.mk
+ include lib/local.mk
+ include src/local.mk
+-include tests/local.mk
++#include tests/local.mk
+ 
+ # See comments in build-aux/git-version-gen.  However, we make .version depend
+ # on configure so that .version and VERSION/PACKAGE_VERSION stay in sync in the
diff --git a/win32/patches/dbus.patch b/win32/patches/dbus.patch
new file mode 100644
index 0000000..c876f2f
--- /dev/null
+++ b/win32/patches/dbus.patch
@@ -0,0 +1,202 @@
+diff -upr -x .deps -x .libs -x '*.la' dbus-1.8.0.old/dbus/Makefile.am dbus-1.8.0/dbus/Makefile.am
+--- dbus-1.8.0.old/dbus/Makefile.am    2014-01-20 13:40:21 +0000
++++ dbus-1.8.0/dbus/Makefile.am        2014-08-09 12:50:47 +0000
+@@ -304,8 +304,8 @@ if DBUS_WIN
+ # this code is used, we don't actually need libstdc++.
+ noinst_LTLIBRARIES += libdbus-init-win.la
+ libdbus_init_win_la_SOURCES = dbus-init-win.cpp
+-libdbus_1_la_LIBADD += libdbus-init-win.la
+-libdbus_internal_la_LIBADD += libdbus-init-win.la
++libdbus_1_la_LIBADD += libdbus-init-win.la -lole32
++libdbus_internal_la_LIBADD += libdbus-init-win.la -lole32
+ endif
+ 
+ noinst_PROGRAMS =
+diff -upr -x .deps -x .libs -x '*.la' dbus-1.8.0.old/dbus/dbus-sysdeps-win.c 
dbus-1.8.0/dbus/dbus-sysdeps-win.c
+--- dbus-1.8.0.old/dbus/dbus-sysdeps-win.c     2014-01-07 11:32:53 +0000
++++ dbus-1.8.0/dbus/dbus-sysdeps-win.c 2014-08-09 13:35:34 +0000
+@@ -55,6 +55,7 @@
+ #include <ws2tcpip.h>
+ #include <wincrypt.h>
+ #include <iphlpapi.h>
++#include <shlobj.h>
+ 
+ /* Declarations missing in mingw's and windows sdk 7.0 headers */
+ extern BOOL WINAPI ConvertStringSidToSidA (LPCSTR  StringSid, PSID *Sid);
+@@ -3379,6 +3380,139 @@ _dbus_lookup_session_address (dbus_bool_
+   return TRUE;
+ }
+ 
++static char *
++get_special_folder (int csidl)
++{
++  char path[MAX_PATH+1];
++  HRESULT hr;
++  LPITEMIDLIST pidl = NULL;
++  BOOL b;
++  char *retval = NULL;
++
++  hr = SHGetSpecialFolderLocation (NULL, csidl, &pidl);
++  if (hr == S_OK)
++    {
++      b = SHGetPathFromIDListA (pidl, path);
++      if (b)
++      retval = strdup (path);
++      CoTaskMemFree (pidl);
++    }
++  return retval;
++}
++
++static char *
++get_windows_directory_root (void)
++{
++  char windowsdir[MAX_PATH];
++
++  if (GetWindowsDirectory (windowsdir, MAX_PATH))
++    {
++      /* Usually X:\Windows, but in terminal server environments
++       * might be an UNC path, AFAIK.
++       */
++      int len;
++
++      if (!*windowsdir)
++      return strdup("C:\\");
++
++      len = strlen(windowsdir);
++      if (len < MAX_PATH - 1 && windowsdir[len - 1] != '\\' && windowsdir[len - 1] != '/') {
++        char sep[2] = {0, 0}, *p;
++
++        for (p = windowsdir; *p && !*sep; p++) {
++          if (*p == '/' || *p == '\\') {
++            sep[0] = *p;
++            break;
++          }
++        }
++      
++      strcat(windowsdir, sep);
++      }
++      return strdup(windowsdir);
++    }
++  else
++    return strdup("C:\\");
++}
++
++static dbus_bool_t
++_dbus_set_user_home (DBusString *homedir)
++{
++  const char *env;
++  char *tmp = NULL;
++
++  env = _dbus_getenv("HOME");
++
++  /* Only believe HOME if it is an absolute path and exists.
++   *
++   * We only do this check on Windows for a couple of reasons.
++   * Historically, we only did it there because we used to ignore $HOME
++   * on UNIX.  There are concerns about enabling it now on UNIX because
++   * of things like autofs.  In short, if the user has a bogus value in
++   * $HOME then they get what they pay for...
++   */
++  if (env)
++    {
++      /* In case HOME is Unix-style (it happens), convert it to
++       * Windows style.
++       */
++      char *p;
++      tmp = strdup(env);
++      while ((p = strchr(tmp, '/')) != NULL) {
++        *p = '\\';
++      }
++
++      if (!((tmp[0] == '\\' || (((tmp[0] >= 'a' && tmp[0] <= 'z') || (tmp[0] >= 'A' && tmp[0] <= 'Z')) && 
tmp[1] == ':')) &&
++           GetFileAttributesA (tmp) != INVALID_FILE_ATTRIBUTES &&
++           (GetFileAttributesA (tmp) & FILE_ATTRIBUTE_DIRECTORY) != 0))
++        {
++          env = NULL;
++          free(tmp);
++          tmp = NULL;
++        }
++    }
++
++  if (!tmp)
++    {
++      /* USERPROFILE is probably the closest equivalent to $HOME? */
++      env = _dbus_getenv("USERPROFILE");
++      if (env != NULL)
++        tmp = strdup(env);
++    }
++
++  if (!tmp)
++    tmp = get_special_folder(CSIDL_PROFILE);
++
++  if (!tmp)
++    tmp = get_windows_directory_root();
++
++  if (tmp) {
++    _dbus_string_append (homedir, tmp);
++    free(tmp);
++    return TRUE;
++  }
++
++  return FALSE;
++}
++
++static void
++_dbus_set_homedir_from_drive_and_path_env(DBusString *homedir)
++{
++  const char *homepath;
++  const char *homedrive;
++
++  homedrive = _dbus_getenv("HOMEDRIVE");
++  if (homedrive != NULL && *homedrive != '\0')
++    {
++      _dbus_string_append(homedir,homedrive);
++    }
++
++  homepath = _dbus_getenv("HOMEPATH");
++  if (homepath != NULL && *homepath != '\0')
++    {
++      _dbus_string_append(homedir,homepath);
++    }
++}
++
+ /**
+  * Appends the directory in which a keyring for the given credentials
+  * should be stored.  The credentials should have either a Windows or
+@@ -3398,8 +3532,6 @@ _dbus_append_keyring_directory_for_crede
+ {
+   DBusString homedir;
+   DBusString dotdir;
+-  const char *homepath;
+-  const char *homedrive;
+ 
+   _dbus_assert (credentials != NULL);
+   _dbus_assert (!_dbus_credentials_are_anonymous (credentials));
+@@ -3407,18 +3539,16 @@ _dbus_append_keyring_directory_for_crede
+   if (!_dbus_string_init (&homedir))
+     return FALSE;
+ 
+-  homedrive = _dbus_getenv("HOMEDRIVE");
+-  if (homedrive != NULL && *homedrive != '\0')
+-    {
+-      _dbus_string_append(&homedir,homedrive);
+-    }
++  _dbus_set_homedir_from_drive_and_path_env(&homedir);
++  /* It's a default folder, like X:\, try to use a better one, in user's home directory */
++  if (_dbus_string_get_length(&homedir) <= 3) {
++     _dbus_string_set_length(&homedir, 0);
++     if (!_dbus_set_user_home(&homedir)) {
++       _dbus_string_set_length(&homedir, 0);
++       _dbus_set_homedir_from_drive_and_path_env(&homedir);
++     }
++  }
+ 
+-  homepath = _dbus_getenv("HOMEPATH");
+-  if (homepath != NULL && *homepath != '\0')
+-    {
+-      _dbus_string_append(&homedir,homepath);
+-    }
+-  
+ #ifdef DBUS_ENABLE_EMBEDDED_TESTS
+   {
+     const char *override;
diff --git a/win32/patches/fontconfig.patch b/win32/patches/fontconfig.patch
new file mode 100644
index 0000000..6fcb888
--- /dev/null
+++ b/win32/patches/fontconfig.patch
@@ -0,0 +1,35 @@
+diff -upr fontconfig-2.11.0/src/fcatomic.h fontconfig-2.11.0.new/src/fcatomic.h
+--- fontconfig-2.11.0/src/fcatomic.h   2013-10-11 03:10:18 +0000
++++ fontconfig-2.11.0.new/src/fcatomic.h       2014-01-10 21:56:13 +0000
+@@ -51,6 +51,7 @@
+ /* mingw32 does not have MemoryBarrier.
+  * MemoryBarrier may be defined as a macro or a function.
+  * Just make a failsafe version for ourselves. */
++#undef MemoryBarrier
+ #ifdef MemoryBarrier
+ #define HBMemoryBarrier MemoryBarrier
+ #else
+diff -upr fontconfig-2.11.0/test/Makefile fontconfig-2.11.0.new/test/Makefile
+--- fontconfig-2.11.0/test/Makefile    2014-01-10 22:09:27 +0000
++++ fontconfig-2.11.0.new/test/Makefile        2014-01-10 22:00:23 +0000
+@@ -78,7 +78,7 @@ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = i686-pc-mingw32
+ host_triplet = i686-pc-mingw32
+-check_PROGRAMS = test-migration$(EXEEXT) $(am__EXEEXT_1)
++check_PROGRAMS =
+ #am__append_1 = test-pthread
+ subdir = test
+ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+diff -upr fontconfig-2.11.0/test/Makefile.in fontconfig-2.11.0.new/test/Makefile.in
+--- fontconfig-2.11.0/test/Makefile.in 2013-10-11 04:28:47 +0000
++++ fontconfig-2.11.0.new/test/Makefile.in     2014-01-10 21:59:55 +0000
+@@ -78,7 +78,7 @@ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+-check_PROGRAMS = test-migration$(EXEEXT) $(am__EXEEXT_1)
++check_PROGRAMS = 
+ @HAVE_PTHREAD_TRUE am__append_1 = test-pthread
+ subdir = test
+ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
diff --git a/win32/patches/freetype.patch b/win32/patches/freetype.patch
new file mode 100644
index 0000000..1593340
--- /dev/null
+++ b/win32/patches/freetype.patch
@@ -0,0 +1,18 @@
+diff -upr freetype-2.5.2/src/gzip/ftgzip.c freetype-2.5.2.new/src/gzip/ftgzip.c
+--- freetype-2.5.2/src/gzip/ftgzip.c   2013-08-29 15:53:13 +0000
++++ freetype-2.5.2.new/src/gzip/ftgzip.c       2014-01-10 20:14:37 +0000
+@@ -45,6 +44,14 @@
+ #error "gzip code does not support PIC yet"
+ #endif
+ 
++#ifndef __int64
++# define __int64 long long
++#endif
++typedef long _off_t;
++typedef _off_t        off_t;
++typedef __int64 _off64_t;
++typedef __int64 off64_t;
++
+ #ifdef FT_CONFIG_OPTION_SYSTEM_ZLIB
+ 
+ #include <zlib.h>
diff --git a/win32/patches/gcr.patch b/win32/patches/gcr.patch
new file mode 100644
index 0000000..1ba13b8
--- /dev/null
+++ b/win32/patches/gcr.patch
@@ -0,0 +1,933 @@
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/configure.ac gcr-3.10.1/configure.ac
+--- gcr-3.10.1.old/configure.ac        2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/configure.ac    2014-06-20 21:46:28 +0000
+@@ -62,20 +62,44 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GET
+ AC_SUBST(GETTEXT_PACKAGE)
+ AM_GLIB_GNU_GETTEXT
+ 
++dnl ******************************
++dnl Check for Win32
++dnl ******************************
++AC_MSG_CHECKING([for Win32])
++case "$host" in
++*-mingw*)
++      os_win32='yes'
++      AC_CACHE_VAL(ac_cv_have_addrinfo, [ac_cv_have_addrinfo=yes])
++      AC_DEFINE(_WIN32_WINNT, 0x501, [To get getaddrinfo etc declarations])
++      ;;
++*)
++      os_win32='no'
++      ;;
++esac
++AC_MSG_RESULT([$os_win32])
++AM_CONDITIONAL(OS_WIN32, [test $os_win32 = yes])
++
+ # -----------------------------------------------------------------------------
+ # GLib and GTK+ stuff
+ 
++GIO_PLAT=
++if test "$os_win32" = "yes" ; then
++      GIO_PLAT=gio-windows-2.0
++else
++      GIO_PLAT=gio-unix-2.0
++fi
++
+ PKG_CHECK_MODULES(GLIB,
+       glib-2.0 >= 2.32.0
+       gmodule-no-export-2.0
+       gthread-2.0
+       gobject-2.0
+-      gio-2.0 gio-unix-2.0)
++      gio-2.0 $GIO_PLAT)
+ AC_SUBST(GLIB_CFLAGS)
+ AC_SUBST(GLIB_LIBS)
+ 
+ GLIB_GSETTINGS
+-GOBJECT_INTROSPECTION_CHECK([1.34])
++dnl GOBJECT_INTROSPECTION_CHECK([1.34])
+ AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal)
+ AC_PATH_PROG(GLIB_MKENUMS, glib-mkenums)
+ 
+@@ -107,7 +131,7 @@ fi
+ 
+ VALA_REQUIRED=0.18.0.22
+ 
+-VAPIGEN_CHECK($VALA_REQUIRED)
++dnl VAPIGEN_CHECK($VALA_REQUIRED)
+ 
+ if test "$enable_vala" != "no"; then
+       AC_PATH_PROG([VALAC], [valac], [])
+@@ -120,6 +144,8 @@ AM_CONDITIONAL(HAVE_VALAC, test "x$VALAC
+ 
+ AC_CHECK_FUNCS(timegm, AC_DEFINE(HAVE_TIMEGM,1,[Have timegm]))
+ AC_CHECK_FUNCS(mlock)
++AC_CHECK_FUNCS(gmtime_r strptime memrchr)
++AC_CHECK_HEADERS([err.h pwd.h syslog.h sys/mman.h sys/wait.h])
+ 
+ # --------------------------------------------------------------------
+ # p11-kit
+@@ -370,6 +396,9 @@ else
+       valgrind_status="no"
+ fi
+ 
++AM_CONDITIONAL(HAVE_INTROSPECTION, test "yes" = "no")
++AM_CONDITIONAL(ENABLE_VAPIGEN, test "yes" = "no")
++
+ # ----------------------------------------------------------------------
+ 
+ GCK_LT_RELEASE=$GCK_CURRENT:$GCK_REVISION:$GCK_AGE
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/egg/egg-armor.c gcr-3.10.1/egg/egg-armor.c
+--- gcr-3.10.1.old/egg/egg-armor.c     2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/egg/egg-armor.c 2014-06-20 21:46:28 +0000
+@@ -60,6 +60,29 @@ EGG_SECURE_DECLARE (armor);
+ #define ARMOR_PREF_END      "-----END "
+ #define ARMOR_PREF_END_L    9
+ 
++#ifndef HAVE_MEMRCHR
++extern void* memrchr (const void *s, int c, size_t n);
++
++void*
++memrchr (const void *s, int c, size_t n)
++{
++      if (n > 0) {
++              const char*  p = (const char*) s;
++              const char*  q = p + n;
++
++              while (1) {
++                      q--; if (q < p || q[0] == (char) c) break;
++                      q--; if (q < p || q[0] == (char) c) break;
++                      q--; if (q < p || q[0] == (char) c) break;
++                      q--; if (q < p || q[0] == (char) c) break;
++              }
++              if (q >= p)
++                      return (void*)q;
++      }
++      return NULL;
++}
++#endif
++
+ static void
+ parse_header_lines (const gchar *hbeg,
+                     const gchar *hend,
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/egg/egg-asn1x.c gcr-3.10.1/egg/egg-asn1x.c
+--- gcr-3.10.1.old/egg/egg-asn1x.c     2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/egg/egg-asn1x.c 2014-06-20 21:46:28 +0000
+@@ -1929,7 +1929,7 @@ static int
+ two_to_four_digit_year (int year)
+ {
+       time_t now;
+-      struct tm tm;
++      GDate *date;
+       int century, current;
+ 
+       g_return_val_if_fail (year >= 0 && year <= 99, -1);
+@@ -1937,11 +1937,15 @@ two_to_four_digit_year (int year)
+       /* Get the current year */
+       now = time (NULL);
+       g_return_val_if_fail (now >= 0, -1);
+-      if (!gmtime_r (&now, &tm))
++      date = g_date_new ();
++      g_date_set_time_t (date, now);
++      if (!g_date_valid (date))
+               g_return_val_if_reached (-1);
+ 
+-      current = (tm.tm_year % 100);
+-      century = (tm.tm_year + 1900) - current;
++      century = (g_date_get_year (date) / 100) * 100;
++      current = g_date_get_year (date) - century;
++
++      g_date_free (date);
+ 
+       /*
+        * Check if it's within 40 years before the
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/egg/egg-secure-memory.c 
gcr-3.10.1/egg/egg-secure-memory.c
+--- gcr-3.10.1.old/egg/egg-secure-memory.c     2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/egg/egg-secure-memory.c 2014-06-20 21:46:28 +0000
+@@ -32,7 +32,9 @@
+ #include "egg-secure-memory.h"
+ 
+ #include <sys/types.h>
++#ifdef HAVE_SYS_MMAN_H
+ #include <sys/mman.h>
++#endif
+ #include <stddef.h>
+ #include <string.h>
+ #include <stdio.h>
+@@ -188,9 +190,11 @@ pool_alloc (void)
+ 
+       /* Create a new pool */
+       if (pool == NULL) {
++#if !defined(_WIN32)
+               len = getpagesize () * 2;
+               pages = mmap (0, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
+               if (pages == MAP_FAILED)
++#endif
+                       return NULL;
+ 
+               /* Fill in the block header, and inlude in block list */
+@@ -254,7 +258,9 @@ pool_free (void* item)
+               VALGRIND_DESTROY_MEMPOOL (pool);
+ #endif
+ 
++#if !defined(_WIN32)
+               munmap (pool, pool->length);
++#endif
+               return;
+       }
+ 
+@@ -860,11 +866,11 @@ sec_acquire_pages (size_t *sz,
+       ASSERT (*sz);
+       ASSERT (during_tag);
+ 
++#if defined(HAVE_MLOCK)
+       /* Make sure sz is a multiple of the page size */
+       pgsize = getpagesize ();
+       *sz = (*sz + pgsize -1) & ~(pgsize - 1);
+ 
+-#if defined(HAVE_MLOCK)
+       pages = mmap (0, *sz, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
+       if (pages == MAP_FAILED) {
+               if (show_warning && egg_secure_warnings)
+@@ -902,9 +908,9 @@ static void
+ sec_release_pages (void *pages, size_t sz)
+ {
+       ASSERT (pages);
+-      ASSERT (sz % getpagesize () == 0);
+ 
+ #if defined(HAVE_MLOCK)
++      ASSERT (sz % getpagesize () == 0);
+       if (munlock (pages, sz) < 0 && egg_secure_warnings)
+               fprintf (stderr, "couldn't unlock private memory: %s\n", strerror (errno));
+ 
+@@ -914,7 +920,7 @@ sec_release_pages (void *pages, size_t s
+       DEBUG_ALLOC ("gkr-secure-memory: freed block ", sz);
+ 
+ #else
+-      ASSERT (FALSE);
++      ASSERT (0);
+ #endif
+ }
+ 
+@@ -937,6 +943,11 @@ sec_block_create (size_t size,
+       if (getenv ("SECMEM_FORCE_FALLBACK"))
+               return NULL;
+ 
++#ifdef _WIN32
++      /* win32 does not have mlock(), so just fail in that case */
++      return NULL;
++#endif
++
+       block = pool_alloc ();
+       if (!block)
+               return NULL;
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/egg/tests/test-asn1x.c gcr-3.10.1/egg/tests/test-asn1x.c
+--- gcr-3.10.1.old/egg/tests/test-asn1x.c      2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/egg/tests/test-asn1x.c  2014-06-20 21:46:28 +0000
+@@ -27,7 +27,9 @@
+ #include "egg/egg-asn1-defs.h"
+ #include "egg/egg-testing.h"
+ 
++#ifdef HAVE_PWD_H
+ #include <pwd.h>
++#endif
+ #include <stdlib.h>
+ #include <unistd.h>
+ 
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gck/Makefile.am gcr-3.10.1/gck/Makefile.am
+--- gcr-3.10.1.old/gck/Makefile.am     2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gck/Makefile.am 2014-06-20 21:46:28 +0000
+@@ -1,6 +1,6 @@
+ include $(top_srcdir)/Makefile.decl
+ 
+-SUBDIRS = . tests
++SUBDIRS = .
+ 
+ incdir = $(includedir)/gck- GCK_MAJOR@/gck
+ 
+@@ -77,16 +77,6 @@ libgck_ GCK_MAJOR@_la_LIBADD = \
+       $(GIO_LIBS) \
+       $(GLIB_LIBS)
+ 
+-noinst_LTLIBRARIES = libgck-testable.la
+-libgck_testable_la_SOURCES = \
+-      gck-mock.c \
+-      gck-mock.h \
+-      gck-test.c \
+-      gck-test.h
+-libgck_testable_la_LIBADD = $(libgck_ GCK_MAJOR@_la_OBJECTS) \
+-      $(libgck_ GCK_MAJOR@_la_LIBADD)
+-libgck_testable_la_DEPENDENCIES = $(libgck_ GCK_MAJOR@_la_OBJECTS)
+-
+ gck-marshal.h: gck-marshal.list $(GLIB_GENMARSHAL)
+       $(GLIB_GENMARSHAL) $< --header --prefix=_gck_marshal > $@
+ 
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gck/gck-debug.c gcr-3.10.1/gck/gck-debug.c
+--- gcr-3.10.1.old/gck/gck-debug.c     2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gck/gck-debug.c 2014-06-20 21:46:28 +0000
+@@ -33,6 +33,11 @@
+ 
+ #include <unistd.h>
+ 
++#ifdef G_OS_WIN32
++
++#include <windows.h>
++#endif
++
+ #ifdef WITH_DEBUG
+ 
+ static gsize initialized_flags = 0;
+@@ -69,21 +74,30 @@ on_gck_log_debug (const gchar *log_domai
+ {
+       GString *gstring;
+       const gchar *progname;
++#ifdef G_OS_WIN32
++      DWORD pid = GetCurrentProcessId ();
++#else
++      pid_t pid = getpid ();
++#endif
+ 
+       gstring = g_string_new (NULL);
+ 
+       progname = g_get_prgname ();
+       g_string_append_printf (gstring, "(%s:%lu): %s-DEBUG: %s\n",
+                               progname ? progname : "process",
+-                              (gulong)getpid (), log_domain,
++                              (gulong) pid, log_domain,
+                               message ? message : "(NULL) message");
+ 
++
++#ifdef G_OS_WIN32
++      g_print ("%s", gstring->str);
++#else
+       /*
+        * Give up on debug messages if stdout got lost.
+        */
+       if (write (1, gstring->str, gstring->len) != gstring->len)
+               current_flags = 0;
+-
++#endif
+       g_string_free (gstring, TRUE);
+ }
+ 
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gck/gck-slot.c gcr-3.10.1/gck/gck-slot.c
+--- gcr-3.10.1.old/gck/gck-slot.c      2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gck/gck-slot.c  2014-06-20 21:46:28 +0000
+@@ -606,7 +606,7 @@ _gck_token_info_from_pkcs11 (CK_TOKEN_IN
+ {
+       GckTokenInfo *token_info;
+       gchar *string;
+-      struct tm tm;
++      GTimeVal tv;
+ 
+       token_info = g_new0 (GckTokenInfo, 1);
+       token_info->label = gck_string_from_chars (info->label, sizeof (info->label));
+@@ -634,10 +634,12 @@ _gck_token_info_from_pkcs11 (CK_TOKEN_IN
+       /* Parse the time into seconds since epoch */
+       if (info->flags & CKF_CLOCK_ON_TOKEN) {
+               string = g_strndup ((gchar*)info->utcTime, MIN (14, sizeof (info->utcTime)));
+-              if (!strptime (string, "%Y%m%d%H%M%S", &tm))
++                /* Transform into an ISO-8601 string */
++              string = g_strconcat (g_strndup (string,8), "T", g_strndup (string+8,6), "Z", NULL);
++              if (!g_time_val_from_iso8601 (string, &tv))
+                       token_info->utc_time = -1;
+               else
+-                      token_info->utc_time = timegm (&tm);
++                      token_info->utc_time = tv.tv_sec;
+               g_free (string);
+       } else {
+               token_info->utc_time = -1;
+@@ -649,8 +651,8 @@ _gck_token_info_from_pkcs11 (CK_TOKEN_IN
+ void
+ _gck_token_info_to_pkcs11 (GckTokenInfo *token_info, CK_TOKEN_INFO_PTR info)
+ {
+-      gchar buffer[64];
+-      struct tm tm;
++      gchar *buffer;
++      GDateTime *datetime = NULL;
+       time_t tim;
+       gsize len;
+ 
+@@ -690,9 +692,12 @@ _gck_token_info_to_pkcs11 (GckTokenInfo
+       /* Parse the time into seconds since epoch */
+       if (token_info->flags & CKF_CLOCK_ON_TOKEN) {
+               tim = token_info->utc_time;
+-              if (!gmtime_r (&tim, &tm))
++              datetime = g_date_time_new_from_unix_utc (tim);
++              if (datetime == NULL)
+                       g_return_if_reached ();
+-              len = strftime (buffer, sizeof (buffer), "%Y%m%d%H%M%S", &tm);
++              buffer = g_date_time_format (datetime, "%Y%m%d%H%M%S");
++              len = strlen (buffer);
++              g_date_time_unref (datetime);
+               g_return_if_fail (len == sizeof (info->utcTime));
+               memcpy (info->utcTime, buffer, sizeof (info->utcTime));
+       } else {
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gck/tests/test-gck-crypto.c 
gcr-3.10.1/gck/tests/test-gck-crypto.c
+--- gcr-3.10.1.old/gck/tests/test-gck-crypto.c 2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gck/tests/test-gck-crypto.c     2014-06-20 21:46:28 +0000
+@@ -57,7 +57,11 @@ setup (Test *test, gconstpointer unused)
+       GckSlot *slot;
+ 
+       /* Successful load */
++#ifdef G_OS_WIN32
++      test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.dll", NULL, &err);
++#else
+       test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.so", NULL, &err);
++#endif
+       g_assert_no_error (err);
+       g_assert (GCK_IS_MODULE (test->module));
+       g_object_add_weak_pointer (G_OBJECT (test->module), (gpointer *)&test->module);
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gck/tests/test-gck-enumerator.c 
gcr-3.10.1/gck/tests/test-gck-enumerator.c
+--- gcr-3.10.1.old/gck/tests/test-gck-enumerator.c     2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gck/tests/test-gck-enumerator.c 2014-06-20 21:46:28 +0000
+@@ -50,7 +50,11 @@ setup (Test *test, gconstpointer unused)
+       GError *err = NULL;
+ 
+       /* Successful load */
++#ifdef G_OS_WIN32
++      test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.dll", NULL, &err);
++#else
+       test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.so", NULL, &err);
++#endif
+       g_assert_no_error (err);
+       g_assert (GCK_IS_MODULE (test->module));
+       g_object_add_weak_pointer (G_OBJECT (test->module), (gpointer *)&test->module);
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gck/tests/test-gck-module.c 
gcr-3.10.1/gck/tests/test-gck-module.c
+--- gcr-3.10.1.old/gck/tests/test-gck-module.c 2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gck/tests/test-gck-module.c     2014-06-20 21:46:28 +0000
+@@ -42,7 +42,11 @@ setup (Test *test, gconstpointer unused)
+       GError *err = NULL;
+ 
+       /* Successful load */
++#ifdef G_OS_WIN32
++      test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.dll", NULL, &err);
++#else
+       test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.so", NULL, &err);
++#endif
+       g_assert_no_error (err);
+       g_assert (test->module);
+       g_object_add_weak_pointer (G_OBJECT (test->module), (gpointer *)&test->module);
+@@ -71,7 +75,11 @@ test_initialize_async (void)
+       GError *error = NULL;
+ 
+       /* Shouldn't be able to load modules */
++#ifdef G_OS_WIN32
++      gck_module_initialize_async (BUILDDIR "/.libs/libmock-test-module.dll",
++#else
+       gck_module_initialize_async (BUILDDIR "/.libs/libmock-test-module.so",
++#endif
+                                    NULL, fetch_async_result, &result);
+ 
+       egg_test_wait_until (500);
+@@ -101,7 +109,11 @@ test_invalid_modules (Test *test, gconst
+       g_clear_error (&error);
+ 
+       /* Shouldn't be able to load any file successfully */
++#ifdef G_OS_WIN32
++      invalid = gck_module_initialize ("c:\\windows\\system32\\shell32.dll", NULL, &error);
++#else
+       invalid = gck_module_initialize ("/usr/lib/libm.so", NULL, &error);
++#endif
+       g_assert_error (error, GCK_ERROR, (int)CKR_GCK_MODULE_PROBLEM);
+       g_assert (invalid == NULL);
+ 
+@@ -139,7 +151,11 @@ test_module_props (Test *test, gconstpoi
+ 
+       g_object_get (test->module, "path", &path, NULL);
+       g_assert (path != NULL && "no module-path");
++#ifdef G_OS_WIN32
++      g_assert (strcmp (BUILDDIR "/.libs/libmock-test-module.dll", path) == 0 && "module path wrong");
++#else
+       g_assert (strcmp (BUILDDIR "/.libs/libmock-test-module.so", path) == 0 && "module path wrong");
++#endif
+       g_free (path);
+ }
+ 
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gck/tests/test-gck-modules.c 
gcr-3.10.1/gck/tests/test-gck-modules.c
+--- gcr-3.10.1.old/gck/tests/test-gck-modules.c        2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gck/tests/test-gck-modules.c    2014-06-20 21:46:28 +0000
+@@ -48,7 +48,11 @@ setup (Test *test, gconstpointer unused)
+       GError *err = NULL;
+ 
+       /* Successful load */
++#ifdef G_OS_WIN32
++      module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.dll", NULL, &err);
++#else
+       module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.so", NULL, &err);
++#endif
+       g_assert_no_error (err);
+       g_assert (GCK_IS_MODULE (module));
+ 
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gck/tests/test-gck-object.c 
gcr-3.10.1/gck/tests/test-gck-object.c
+--- gcr-3.10.1.old/gck/tests/test-gck-object.c 2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gck/tests/test-gck-object.c     2014-06-20 21:46:28 +0000
+@@ -50,7 +50,11 @@ setup (Test *test, gconstpointer unused)
+       GList *slots;
+ 
+       /* Successful load */
++#ifdef G_OS_WIN32
++      test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.dll", NULL, &err);
++#else
+       test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.so", NULL, &err);
++#endif
+       g_assert_no_error (err);
+       g_assert (GCK_IS_MODULE (test->module));
+ 
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gck/tests/test-gck-session.c 
gcr-3.10.1/gck/tests/test-gck-session.c
+--- gcr-3.10.1.old/gck/tests/test-gck-session.c        2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gck/tests/test-gck-session.c    2014-06-20 21:46:28 +0000
+@@ -50,7 +50,11 @@ setup (Test *test, gconstpointer unused)
+       GList *slots;
+ 
+       /* Successful load */
++#ifdef G_OS_WIN32
++      test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.dll", NULL, &err);
++#else
+       test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.so", NULL, &err);
++#endif
+       g_assert_no_error (err);
+       g_assert (GCK_IS_MODULE (test->module));
+       g_object_add_weak_pointer (G_OBJECT (test->module), (gpointer *)&test->module);
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gck/tests/test-gck-slot.c 
gcr-3.10.1/gck/tests/test-gck-slot.c
+--- gcr-3.10.1.old/gck/tests/test-gck-slot.c   2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gck/tests/test-gck-slot.c       2014-06-20 21:46:28 +0000
+@@ -43,7 +43,11 @@ setup (Test *test, gconstpointer unused)
+       GList *slots;
+ 
+       /* Successful load */
++#ifdef G_OS_WIN32
++      test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.dll", NULL, &err);
++#else
+       test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.so", NULL, &err);
++#endif
+       g_assert_no_error (err);
+       g_assert (GCK_IS_MODULE (test->module));
+ 
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gcr/Makefile.am gcr-3.10.1/gcr/Makefile.am
+--- gcr-3.10.1.old/gcr/Makefile.am     2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gcr/Makefile.am 2014-06-20 21:46:28 +0000
+@@ -1,6 +1,6 @@
+ include $(top_srcdir)/Makefile.decl
+ 
+-SUBDIRS = . tests
++SUBDIRS = .
+ 
+ incdir = $(includedir)/gcr- GCR_MAJOR@/gcr
+ 
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gcr/gcr-gnupg-collection.c 
gcr-3.10.1/gcr/gcr-gnupg-collection.c
+--- gcr-3.10.1.old/gcr/gcr-gnupg-collection.c  2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gcr/gcr-gnupg-collection.c      2014-06-20 21:46:28 +0000
+@@ -36,7 +36,9 @@
+ #include "gcr-record.h"
+ #include "gcr-util.h"
+ 
++#ifdef HAVE_SYS_WAIT_H
+ #include <sys/wait.h>
++#endif
+ #include <string.h>
+ 
+ enum {
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gcr/gcr-gnupg-process.c 
gcr-3.10.1/gcr/gcr-gnupg-process.c
+--- gcr-3.10.1.old/gcr/gcr-gnupg-process.c     2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gcr/gcr-gnupg-process.c 2014-06-20 21:46:28 +0000
+@@ -31,7 +31,12 @@
+ 
+ #include <glib/gi18n-lib.h>
+ 
++#ifdef HAVE_SYS_WAIT_H
+ #include <sys/wait.h>
++#endif
++#ifdef G_OS_WIN32
++#include <windows.h>
++#endif
+ #include <fcntl.h>
+ #include <errno.h>
+ #include <string.h>
+@@ -854,12 +859,18 @@ on_gnupg_process_child_exited (GPid pid,
+       gint code;
+       guint i;
+ 
++#if defined (G_OS_UNIX)
+       _gcr_debug ("process exited: %d", (int)pid);
++#elif defined (G_OS_WIN32)
++      DWORD real_pid = GetProcessId (pid);
++      _gcr_debug ("process exited: %d", (int)real_pid);
++#endif
+ 
+       g_spawn_close_pid (gnupg_source->child_pid);
+       gnupg_source->child_pid = 0;
+       gnupg_source->child_sig = 0;
+ 
++#ifndef G_OS_WIN32
+       if (WIFEXITED (status)) {
+               code = WEXITSTATUS (status);
+               if (code != 0) {
+@@ -873,6 +884,7 @@ on_gnupg_process_child_exited (GPid pid,
+                       error = g_error_new (G_SPAWN_ERROR, G_SPAWN_ERROR_FAILED,
+                                            _("Gnupg process was terminated with signal: %d"), code);
+       }
++#endif
+ 
+       /* Take this as the async result error */
+       if (error && !self->pv->error) {
+@@ -891,11 +903,16 @@ on_gnupg_process_child_exited (GPid pid,
+       }
+ 
+       complete_source_is_done (gnupg_source);
++
++#ifdef G_OS_WIN32
++      g_spawn_close_pid (pid);
++#endif
+ }
+ 
+ static void
+ on_gnupg_process_child_setup (gpointer user_data)
+ {
++#ifdef G_OS_UNIX 
+       int *child_fds = user_data;
+       long val;
+       guint i;
+@@ -911,6 +928,7 @@ on_gnupg_process_child_setup (gpointer u
+                       fcntl (child_fds[i], F_SETFD, val & ~FD_CLOEXEC);
+               }
+       }
++#endif
+ }
+ 
+ static void
+@@ -929,9 +947,16 @@ on_cancellable_cancelled (GCancellable *
+ 
+       /* Try and kill the child process */
+       if (gnupg_source->child_pid) {
++#if defined(G_OS_UNIX)
+               _gcr_debug ("sending term signal to process: %d",
+                           (int)gnupg_source->child_pid);
+               kill (gnupg_source->child_pid, SIGTERM);
++#elif defined(G_OS_WIN32)
++              DWORD real_pid = GetProcessId (gnupg_source->child_pid);
++              _gcr_debug ("sending term signal to process: %d",
++                          (int)real_pid);
++              TerminateProcess (gnupg_source->child_pid, 0);
++#endif
+       }
+ }
+ 
+@@ -1000,14 +1025,22 @@ _gcr_gnupg_process_run_async (GcrGnupgPr
+       child_fds[FD_ERROR] = 2;
+ 
+       if (flags & GCR_GNUPG_PROCESS_WITH_STATUS) {
++#if defined(G_OS_UNIX)
+               if (pipe (status_fds) < 0)
++#elif defined(G_OS_WIN32)
++              if (_pipe (status_fds, 4096, _O_BINARY) < 0)
++#endif
+                       g_return_if_reached ();
+               child_fds[FD_STATUS] = status_fds[1];
+               g_ptr_array_add (args, g_strdup ("--status-fd"));
+               g_ptr_array_add (args, g_strdup_printf ("%d", child_fds[FD_STATUS]));
+       }
+       if (flags & GCR_GNUPG_PROCESS_WITH_ATTRIBUTES) {
++#if defined(G_OS_UNIX)
+               if (pipe (attribute_fds) < 0)
++#elif defined(G_OS_WIN32)
++              if (_pipe (attribute_fds, 4096, _O_BINARY) < 0)
++#endif
+                       g_return_if_reached ();
+               child_fds[FD_ATTRIBUTE] = attribute_fds[1];
+               g_ptr_array_add (args, g_strdup ("--attribute-fd"));
+@@ -1036,11 +1069,11 @@ _gcr_gnupg_process_run_async (GcrGnupgPr
+ 
+       if (_gcr_debugging) {
+               gchar *command = g_strjoinv (" ", (gchar**)args->pdata);
+-              gchar *environ = g_strjoinv (", ", (gchar**)envs->pdata);
++              gchar *environment = g_strjoinv (", ", (gchar**)envs->pdata);
+               _gcr_debug ("running command: %s", command);
+-              _gcr_debug ("process environment: %s", environ);
++              _gcr_debug ("process environment: %s", environment);
+               g_free (command);
+-              g_free (environ);
++              g_free (environment);
+       }
+ 
+       g_spawn_async_with_pipes (self->pv->directory, (gchar**)args->pdata,
+@@ -1068,7 +1101,12 @@ _gcr_gnupg_process_run_async (GcrGnupgPr
+               return;
+       }
+ 
++#if defined (G_OS_UNIX)
+       _gcr_debug ("process started: %d", (int)pid);
++#elif defined (G_OS_WIN32)
++      DWORD real_pid = GetProcessId (pid);
++      _gcr_debug ("process started: %d", (int)real_pid);
++#endif
+ 
+       source = g_source_new (&gnupg_source_funcs, sizeof (GnupgSource));
+ 
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/gcr/gcr-record.c gcr-3.10.1/gcr/gcr-record.c
+--- gcr-3.10.1.old/gcr/gcr-record.c    2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/gcr/gcr-record.c        2014-06-20 21:46:28 +0000
+@@ -597,7 +597,9 @@ _gcr_record_get_date (GcrRecord *record,
+       const gchar *raw;
+       gulong result;
+       gchar *end = NULL;
+-      struct tm tm;
++      gchar **string;
++      int year, month, day;
++      GDateTime *dt = NULL;
+ 
+       g_return_val_if_fail (record, NULL);
+ 
+@@ -615,14 +617,20 @@ _gcr_record_get_date (GcrRecord *record,
+       }
+ 
+       /* Try to parse as a date */
+-      memset (&tm, 0, sizeof (tm));
+-      end = strptime (raw, "%Y-%m-%d", &tm);
+-      if (!end || end[0]) {
++      string = g_strsplit (raw, "-", 3);
++      if ((string[0] != NULL) && (string[1] != NULL) && (string[2] != NULL)) {
++              year = strtol (string[0], NULL, 10);
++              month = strtol (string[1], NULL, 10);
++              day = strtol (string[2], NULL, 10);
++              dt = g_date_time_new_utc (year, month, day, 0, 0, 0);
++      }
++      g_strfreev (string);
++      if (dt == NULL) {
+               _gcr_debug ("invalid date value: %s", raw);
+               return NULL;
+       }
+ 
+-      return g_date_time_new_utc (tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, 0, 0, 0);
++      return dt;
+ }
+ 
+ /**
+@@ -860,4 +868,4 @@ _gcr_records_parse_colons (gconstpointer
+       g_free (lines);
+ 
+       return result;
+-}
++}
+\ No newline at end of file
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/ui/Makefile.am gcr-3.10.1/ui/Makefile.am
+--- gcr-3.10.1.old/ui/Makefile.am      2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/ui/Makefile.am  2014-06-20 21:46:28 +0000
+@@ -1,6 +1,6 @@
+ include $(top_srcdir)/Makefile.decl
+ 
+-SUBDIRS = . icons tests
++SUBDIRS = . icons
+ 
+ incdir = $(includedir)/gcr- GCR_MAJOR@/ui
+ 
+@@ -51,11 +51,13 @@ libgcr_ui_ GCR_MAJOR@_la_LIBADD = \
+       $(GTK_LIBS) \
+       $(NULL)
+ 
++if !OS_WIN32
+ # libgcr-3.so (and  friends) symlink to libgcr-ui-3.so for compatibility raisons
+ install-exec-hook:
+       $(LN_S) -f `readlink $(DESTDIR)$(libdir)/libgcr-ui- GCR_MAJOR@.so` $(DESTDIR)$(libdir)/libgcr- 
GCR_MAJOR@.so
+       $(LN_S) -f `readlink $(DESTDIR)$(libdir)/libgcr-ui- GCR_MAJOR@.so` $(DESTDIR)$(libdir)/libgcr- 
GCR_MAJOR@ so  GCR_CURRENT@
+       $(LN_S) -f `readlink $(DESTDIR)$(libdir)/libgcr-ui- GCR_MAJOR@.so` $(DESTDIR)$(libdir)/libgcr- 
GCR_MAJOR@ so  GCR_CURRENT@.0.0
++endif
+ 
+ uidir = $(datadir)/gcr- GCR_MAJOR@/ui/
+ 
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/ui/gcr-prompt-dialog.c gcr-3.10.1/ui/gcr-prompt-dialog.c
+--- gcr-3.10.1.old/ui/gcr-prompt-dialog.c      2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/ui/gcr-prompt-dialog.c  2014-06-20 21:46:28 +0000
+@@ -31,7 +31,13 @@
+ #include "gcr-secure-entry-buffer.h"
+ 
+ #include <gtk/gtk.h>
++#if defined(GDK_WINDOWING_X11)
+ #include <gdk/gdkx.h>
++#endif
++#if defined(GDK_WINDOWING_WIN32)
++#include <gdk/gdkwin32.h>
++#include <windows.h>
++#endif
+ #include <glib/gi18n.h>
+ 
+ /**
+@@ -152,12 +158,21 @@ update_transient_for (GcrPromptDialog *s
+       }
+ 
+       display = gtk_widget_get_display (GTK_WIDGET (self));
++#if defined(GDK_WINDOWING_X11)
+       transient_for = gdk_x11_window_foreign_new_for_display (display, (Window)handle);
++#elif defined(GDK_WINDOWING_WIN32)
++      transient_for = gdk_win32_window_foreign_new_for_display (display, (HWND)handle);
++#endif
+       if (transient_for == NULL) {
+               g_warning ("caller-window property doesn't represent a window on current display: %s",
+                          self->pv->caller_window);
+       } else {
++#if defined(GDK_WINDOWING_X11)
+               gdk_window_set_transient_for (window, transient_for);
++#elif defined(GDK_WINDOWING_WIN32)
++              HWND chandle = gdk_win32_window_get_handle (window);
++              SetWindowLongPtr (chandle, GWLP_HWNDPARENT, (LONG_PTR)handle);
++#endif
+               g_object_unref (transient_for);
+       }
+ 
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/ui/gcr-prompter-tool.c gcr-3.10.1/ui/gcr-prompter-tool.c
+--- gcr-3.10.1.old/ui/gcr-prompter-tool.c      2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/ui/gcr-prompter-tool.c  2014-06-20 21:46:28 +0000
+@@ -30,13 +30,17 @@
+ 
+ #include <glib/gi18n.h>
+ #include <gtk/gtk.h>
++#ifdef GDK_WINDOWING_X11
+ #include <gdk/gdkx.h>
++#endif
+ #include <pango/pango.h>
+ 
+ #include <locale.h>
+ #include <stdlib.h>
+ #include <string.h>
++#ifdef HAVE_SYSLOG_H
+ #include <syslog.h>
++#endif
+ 
+ #define QUIT_TIMEOUT 10
+ 
+@@ -138,6 +142,7 @@ log_handler (const gchar *log_domain,
+              const gchar *message,
+              gpointer user_data)
+ {
++#ifdef HAVE_SYSLOG_H
+       int level;
+ 
+       /* Note that crit and err are the other way around in syslog */
+@@ -171,6 +176,7 @@ log_handler (const gchar *log_domain,
+               syslog (level, "%s: %s", log_domain, message);
+       else
+               syslog (level, "%s", message);
++#endif
+ 
+       /* And then to default handler for aborting and stuff like that */
+       g_log_default_handler (log_domain, log_level, message, user_data);
+@@ -179,9 +185,11 @@ log_handler (const gchar *log_domain,
+ static void
+ printerr_handler (const gchar *string)
+ {
++#ifdef HAVE_SYSLOG_H
+       /* Print to syslog and stderr */
+       syslog (LOG_WARNING, "%s", string);
+       fprintf (stderr, "%s", string);
++#endif
+ }
+ 
+ static void
+@@ -191,7 +199,9 @@ prepare_logging ()
+                              G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING |
+                              G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO;
+ 
++#ifdef HAVE_SYSLOG_H
+       openlog ("gcr-prompter", LOG_PID, LOG_AUTH);
++#endif
+ 
+       g_log_set_handler (NULL, flags, log_handler, NULL);
+       g_log_set_handler ("Glib", flags, log_handler, NULL);
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/ui/gcr-ui.pc.in gcr-3.10.1/ui/gcr-ui.pc.in
+--- gcr-3.10.1.old/ui/gcr-ui.pc.in     2013-04-21 12:31:47 +0000
++++ gcr-3.10.1/ui/gcr-ui.pc.in 2014-06-20 22:22:58 +0000
+@@ -11,5 +11,5 @@ Description: GObject and GUI library for
+ Version: @VERSION@
+ Requires: glib-2.0 gobject-2.0 gio-2.0 gtk+-3.0 gcr-base- GCR_MAJOR@ gck- GCK_MAJOR@
+ Requires.private: p11-kit-1
+-Libs: -L${libdir} -lgcr- GCR_MAJOR@
++Libs: -L${libdir} -lgcr-ui- GCR_MAJOR@
+ Cflags: -I${includedir}/gcr- GCR_MAJOR@
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/ui/tests/frob-prompt.c gcr-3.10.1/ui/tests/frob-prompt.c
+--- gcr-3.10.1.old/ui/tests/frob-prompt.c      2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/ui/tests/frob-prompt.c  2014-06-20 21:46:28 +0000
+@@ -27,15 +27,45 @@
+ #include "gcr/gcr-base.h"
+ 
+ #include <gtk/gtk.h>
++#ifdef GDK_WINDOWING_X11
+ #include <gdk/gdkx.h>
++#endif
++#ifdef GDK_WINDOWING_WIN32
++#include <gdk/gdkwin32.h>
++#endif
+ 
++#ifdef HAVE_ERR_H
+ #include <err.h>
++#else
++#include <errno.h>
++#endif
++#include <stdlib.h>
+ 
+ static const gchar *file_name = NULL;
+ static gchar *prompt_type = NULL;
+ static gint prompt_delay = 0;
+ static gboolean prompt_window = FALSE;
+ 
++#ifndef HAVE_ERR_H
++extern void errx (int eval, char *format, ...);
++
++void errx (int eval, char *format, ...)
++{
++      gchar *err_s;
++
++      va_list ap;
++      va_start (ap, format);
++      vsprintf (err_s, format, ap);
++      va_end (ap);
++
++      err_s = g_strconcat (g_get_prgname (), ": ", g_strdup (err_s), "\n", NULL);
++      g_printerr (err_s);
++      g_free (err_s);
++
++      exit (eval);
++}
++#endif
++
+ static gboolean
+ on_delay_timeout (gpointer data)
+ {
+@@ -80,7 +110,11 @@ prompt_perform (GtkWidget *parent)
+               errx (1, "couldn't create prompt: %s", error->message);
+ 
+       if (parent) {
++#if defined(GDK_WINDOWING_X11)
+               caller_id = g_strdup_printf ("%lu", (gulong)GDK_WINDOW_XID (gtk_widget_get_window (parent)));
++#elif defined(GDK_WINDOWING_WIN32)
++              caller_id = g_strdup_printf ("%lu", (gulong)GDK_WINDOW_HWND (gtk_widget_get_window (parent)));
++#endif
+               gcr_prompt_set_caller_window (GCR_PROMPT (prompt), caller_id);
+               g_free (caller_id);
+       }
+diff -upr -x .deps -x .libs -x '*.la' gcr-3.10.1.old/ui/tests/frob-system-prompt.c 
gcr-3.10.1/ui/tests/frob-system-prompt.c
+--- gcr-3.10.1.old/ui/tests/frob-system-prompt.c       2014-06-20 22:20:25 +0000
++++ gcr-3.10.1/ui/tests/frob-system-prompt.c   2014-06-20 21:46:28 +0000
+@@ -28,7 +28,12 @@
+ #include "egg/egg-testing.h"
+ 
+ #include <gtk/gtk.h>
++#ifdef GDK_WINDOWING_X11
+ #include <gdk/gdkx.h>
++#endif
++#ifdef GDK_WINDOWING_WIN32
++#include <gdk/gdkwin32.h>
++#endif
+ 
+ #include <unistd.h>
+ #include <string.h>
+@@ -56,7 +61,11 @@ on_prompt_clicked (GtkToolButton *button
+       gcr_prompt_set_message (GCR_PROMPT (prompt), "This is the message");
+       gcr_prompt_set_description (GCR_PROMPT (prompt), "This is the description");
+ 
++#if defined(GDK_WINDOWING_X11)
+       caller_id = g_strdup_printf ("%lu", (gulong)GDK_WINDOW_XID (gtk_widget_get_window (parent)));
++#elif defined(GDK_WINDOWING_WIN32)
++      caller_id = g_strdup_printf ("%lu", (gulong)GDK_WINDOW_HWND (gtk_widget_get_window (parent)));
++#endif
+       gcr_prompt_set_caller_window (GCR_PROMPT (prompt), caller_id);
+       g_free (caller_id);
+ 
diff --git a/win32/patches/gettext.patch b/win32/patches/gettext.patch
new file mode 100644
index 0000000..a3b5385
--- /dev/null
+++ b/win32/patches/gettext.patch
@@ -0,0 +1,97 @@
+diff -upr gettext-0.18.3.1.old/gettext-tools/gnulib-lib/Makefile 
gettext-0.18.3.1/gettext-tools/gnulib-lib/Makefile
+--- gettext-0.18.3.1.old/gettext-tools/gnulib-lib/Makefile     2014-05-08 15:10:25 +0000
++++ gettext-0.18.3.1/gettext-tools/gnulib-lib/Makefile 2014-05-07 19:38:11 +0000
+@@ -129,7 +129,7 @@ am__append_12 = $(LTLIBCROCO) $(LTLIBGLI
+ #am__append_17 = libxml_rpl.la
+ #am__append_18 = libxml_rpl.la
+ #am__append_19 = term-styled-ostream.c
+-am__append_20 = ../woe32dll/c++term-styled-ostream.cc
++#am__append_20 = ../woe32dll/c++term-styled-ostream.cc
+ am__append_21 = uniconv/u8-conv-from-enc.c
+ am__append_22 = unilbrk/u8-possible-linebreaks.c
+ am__append_23 = unilbrk/u8-width-linebreaks.c
+@@ -475,7 +475,7 @@ am__libgettextlib_la_SOURCES_DIST = copy
+       findprog.h findprog.c fstrcmp.h fstrcmp.c full-write.h \
+       full-write.c fwriteerror.h fwriteerror.c gcd.h gcd.c gettext.h \
+       ../woe32dll/gettextlib-exports.c hash.h hash.c html-ostream.c \
+-      html-styled-ostream.c ../woe32dll/c++html-styled-ostream.cc \
++       \
+       javacomp.h javacomp.c javaexec.h javaexec.c javaversion.h \
+       javaversion.c gl_linkedhash_list.h gl_linkedhash_list.c \
+       gl_anyhash_list1.h gl_anyhash_list2.h gl_anylinked_list1.h \
+@@ -490,8 +490,8 @@ am__libgettextlib_la_SOURCES_DIST = copy
+       sig-handler.c size_max.h spawn-pipe.h spawn-pipe.c striconv.h \
+       striconv.c striconveh.h striconveh.c striconveha.h \
+       striconveha.c strnlen1.h strnlen1.c styled-ostream.c \
+-      tempname.c term-ostream.c term-styled-ostream.c \
+-      ../woe32dll/c++term-styled-ostream.cc glthread/threadlib.c \
++      tempname.c term-ostream.c \
++       glthread/threadlib.c \
+       glthread/tls.h glthread/tls.c tmpdir.h tmpdir.c trim.c \
+       uniconv/u8-conv-from-enc.c unilbrk/lbrktables.c \
+       unilbrk/u8-possible-linebreaks.c unilbrk/u8-width-linebreaks.c \
+@@ -509,9 +509,9 @@ am__libgettextlib_la_SOURCES_DIST = copy
+       xvasprintf.c xasprintf.c
+ am__objects_1 = ../woe32dll/gettextlib-exports.lo
+ #am__objects_2 = html-styled-ostream.lo
+-am__objects_3 = ../woe32dll/c++html-styled-ostream.lo
++#am__objects_3 = ../woe32dll/c++html-styled-ostream.lo
+ #am__objects_4 = term-styled-ostream.lo
+-am__objects_5 = ../woe32dll/c++term-styled-ostream.lo
++#am__objects_5 = ../woe32dll/c++term-styled-ostream.lo
+ am__objects_6 = uniconv/u8-conv-from-enc.lo
+ am__objects_7 = unilbrk/u8-possible-linebreaks.lo
+ am__objects_8 = unilbrk/u8-width-linebreaks.lo
+@@ -545,7 +545,7 @@ am_libgettextlib_la_OBJECTS = copy-acl.l
+       fd-hook.lo fd-ostream.lo fd-safer-flag.lo dup-safer-flag.lo \
+       file-ostream.lo findprog.lo fstrcmp.lo full-write.lo \
+       fwriteerror.lo gcd.lo $(am__objects_1) hash.lo html-ostream.lo \
+-      $(am__objects_2) $(am__objects_3) javacomp.lo javaexec.lo \
++      $(am__objects_2) javacomp.lo javaexec.lo \
+       javaversion.lo gl_linkedhash_list.lo gl_list.lo \
+       localcharset.lo localename.lo glthread/lock.lo malloca.lo \
+       mbchar.lo mbiter.lo mbslen.lo mbsstr.lo mbswidth.lo mbuiter.lo \
+@@ -555,7 +555,7 @@ am_libgettextlib_la_OBJECTS = copy-acl.l
+       safe-read.lo safe-write.lo sh-quote.lo sig-handler.lo \
+       spawn-pipe.lo striconv.lo striconveh.lo striconveha.lo \
+       strnlen1.lo styled-ostream.lo tempname.lo term-ostream.lo \
+-      $(am__objects_4) $(am__objects_5) glthread/threadlib.lo \
++      $(am__objects_4) glthread/threadlib.lo \
+       glthread/tls.lo tmpdir.lo trim.lo $(am__objects_6) \
+       unilbrk/lbrktables.lo $(am__objects_7) $(am__objects_8) \
+       unilbrk/ulc-common.lo $(am__objects_9) $(am__objects_10) \
+diff -upr gettext-0.18.3.1.old/gettext-tools/src/write-catalog.c 
gettext-0.18.3.1/gettext-tools/src/write-catalog.c
+--- gettext-0.18.3.1.old/gettext-tools/src/write-catalog.c     2012-12-10 01:59:06 +0000
++++ gettext-0.18.3.1/gettext-tools/src/write-catalog.c 2014-05-07 19:41:40 +0000
+@@ -240,7 +240,7 @@ message catalog has plural form translat
+         }
+ 
+       style_file_prepare ();
+-      stream = term_styled_ostream_create (fd, filename, style_file_name);
++      stream = NULL; /*term_styled_ostream_create (fd, filename, style_file_name);*/
+       if (stream == NULL)
+         stream = fd_ostream_create (fd, filename, true);
+       output_syntax->print (mdlp, stream, page_width, debug);
+@@ -286,11 +286,11 @@ message catalog has plural form translat
+       stream = file_ostream_create (fp);
+ 
+ #if ENABLE_COLOR
+-      if (output_syntax->supports_color && color_mode == color_html)
++      /*if (output_syntax->supports_color && color_mode == color_html)
+         {
+           html_styled_ostream_t html_stream;
+ 
+-          /* Convert mdlp to UTF-8 encoding.  */
++          /* Convert mdlp to UTF-8 encoding.  * /
+           if (mdlp->encoding != po_charset_utf8)
+             {
+               mdlp = msgdomain_list_copy (mdlp, 0);
+@@ -302,7 +302,7 @@ message catalog has plural form translat
+           output_syntax->print (mdlp, html_stream, page_width, debug);
+           ostream_free (html_stream);
+         }
+-      else
++      else*/
+ #endif
+         {
+           output_syntax->print (mdlp, stream, page_width, debug);
diff --git a/win32/patches/gnutls.patch b/win32/patches/gnutls.patch
new file mode 100644
index 0000000..6960842
--- /dev/null
+++ b/win32/patches/gnutls.patch
@@ -0,0 +1,21 @@
+diff -upr gnutls-3.2.12.old/lib/libgnutls.map gnutls-3.2.12/lib/libgnutls.map
+--- gnutls-3.2.12.old/lib/libgnutls.map        2014-03-24 22:56:11 +0000
++++ gnutls-3.2.12/lib/libgnutls.map    2014-03-23 20:24:12 +0000
+@@ -936,6 +936,7 @@ GNUTLS_PRIVATE {
+     _gnutls_read_uint24;
+     _gnutls_get_cred;
+     _gnutls_recv_int;
++    _gnutls_vasprintf;
+     # Internal symbols needed by libgnutls-openssl:
+     _gnutls_pkix1_asn;
+     _gnutls_x509_parse_dn_oid;
+diff -upr gnutls-3.2.12.old/lib/vasprintf.c gnutls-3.2.12/lib/vasprintf.c
+--- gnutls-3.2.12.old/lib/vasprintf.c  2014-03-24 22:56:11 +0000
++++ gnutls-3.2.12/lib/vasprintf.c      2014-03-23 20:24:12 +0000
+@@ -1,5 +1,6 @@
+ #include <config.h>
+ #include <stdio.h>
++#include <stdlib.h>
+ #include "vasprintf.h"
+ 
+ #ifndef HAVE_VASPRINTF
diff --git a/win32/patches/gtk-doc.m4 b/win32/patches/gtk-doc.m4
new file mode 100644
index 0000000..3675543
--- /dev/null
+++ b/win32/patches/gtk-doc.m4
@@ -0,0 +1,88 @@
+dnl -*- mode: autoconf -*-
+
+# serial 2
+
+dnl Usage:
+dnl   GTK_DOC_CHECK([minimum-gtk-doc-version])
+AC_DEFUN([GTK_DOC_CHECK],
+[
+  AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+  AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+  AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+
+  ifelse([$1],[],[gtk_doc_requires="gtk-doc"],[gtk_doc_requires="gtk-doc >= $1"])
+  AC_MSG_CHECKING([for gtk-doc])
+  PKG_CHECK_EXISTS([$gtk_doc_requires],[have_gtk_doc=yes],[have_gtk_doc=no])
+  AC_MSG_RESULT($have_gtk_doc)
+
+  if test "$have_gtk_doc" = "no"; then
+      AC_MSG_WARN([
+  You will not be able to create source packages with 'make dist'
+  because $gtk_doc_requires is not found.])
+  fi
+
+  dnl check for tools we added during development
+  dnl Use AC_CHECK_PROG to avoid the check target using an absolute path that
+  dnl may not be writable by the user. Currently, automake requires that the
+  dnl test name must end in '.test'.
+  dnl https://bugzilla.gnome.org/show_bug.cgi?id=701638
+  AC_CHECK_PROG([GTKDOC_CHECK],[gtkdoc-check],[gtkdoc-check.test])
+  AC_PATH_PROG([GTKDOC_CHECK_PATH],[gtkdoc-check])
+  AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true])
+  AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf])
+
+  dnl for overriding the documentation installation directory
+  AC_ARG_WITH([html-dir],
+    AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
+    [with_html_dir='${datadir}/gtk-doc/html'])
+  HTML_DIR="$with_html_dir"
+  AC_SUBST([HTML_DIR])
+
+  dnl enable/disable documentation building
+  AC_ARG_ENABLE([gtk-doc],
+    AS_HELP_STRING([--enable-gtk-doc],
+                   [use gtk-doc to build documentation [[default=no]]]),,
+    [enable_gtk_doc=no])
+
+  AC_MSG_CHECKING([whether to build gtk-doc documentation])
+  AC_MSG_RESULT($enable_gtk_doc)
+
+  if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then
+    AC_MSG_ERROR([
+  You must have $gtk_doc_requires installed to build documentation for
+  $PACKAGE_NAME. Please install gtk-doc or disable building the
+  documentation by adding '--disable-gtk-doc' to '[$]0'.])
+  fi
+
+  dnl don't check for glib if we build glib
+  if test "x$PACKAGE_NAME" != "xglib"; then
+    dnl don't fail if someone does not have glib
+    PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0  >= 2.10.0,,[:])
+  fi
+
+  dnl enable/disable output formats
+  AC_ARG_ENABLE([gtk-doc-html],
+    AS_HELP_STRING([--enable-gtk-doc-html],
+                   [build documentation in html format [[default=yes]]]),,
+    [enable_gtk_doc_html=yes])
+    AC_ARG_ENABLE([gtk-doc-pdf],
+      AS_HELP_STRING([--enable-gtk-doc-pdf],
+                     [build documentation in pdf format [[default=no]]]),,
+      [enable_gtk_doc_pdf=no])
+
+  if test -z "$GTKDOC_MKPDF"; then
+    enable_gtk_doc_pdf=no
+  fi
+
+  if test -z "$AM_DEFAULT_VERBOSITY"; then
+    AM_DEFAULT_VERBOSITY=1
+  fi
+  AC_SUBST([AM_DEFAULT_VERBOSITY])
+
+  AM_CONDITIONAL([HAVE_GTK_DOC], [test x$have_gtk_doc = xyes])
+  AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes])
+  AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes])
+  AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes])
+  AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"])
+  AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"])
+])
diff --git a/win32/patches/gtk-doc.make b/win32/patches/gtk-doc.make
new file mode 100644
index 0000000..dd31993
--- /dev/null
+++ b/win32/patches/gtk-doc.make
@@ -0,0 +1,315 @@
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+
+if GTK_DOC_USE_LIBTOOL
+GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) 
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) 
$(LDFLAGS)
+GTKDOC_RUN = $(LIBTOOL) --mode=execute
+else
+GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN =
+endif
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+
+TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
+
+SETUP_FILES = \
+       $(content_files)                \
+       $(DOC_MAIN_SGML_FILE)           \
+       $(DOC_MODULE)-sections.txt      \
+       $(DOC_MODULE)-overrides.txt
+
+EXTRA_DIST =                           \
+       $(HTML_IMAGES)                  \
+       $(SETUP_FILES)
+
+DOC_STAMPS=setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \
+       html-build.stamp pdf-build.stamp \
+       tmpl.stamp sgml.stamp html.stamp pdf.stamp
+
+SCANOBJ_FILES =                 \
+       $(DOC_MODULE).args       \
+       $(DOC_MODULE).hierarchy  \
+       $(DOC_MODULE).interfaces \
+       $(DOC_MODULE).prerequisites \
+       $(DOC_MODULE).signals
+
+REPORT_FILES = \
+       $(DOC_MODULE)-undocumented.txt \
+       $(DOC_MODULE)-undeclared.txt \
+       $(DOC_MODULE)-unused.txt
+
+gtkdoc-check.test: Makefile
+       $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \
+               echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \
+               chmod +x $@
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) gtkdoc-check.test
+
+if GTK_DOC_BUILD_HTML
+HTML_BUILD_STAMP=html-build.stamp
+else
+HTML_BUILD_STAMP=
+endif
+if GTK_DOC_BUILD_PDF
+PDF_BUILD_STAMP=pdf-build.stamp
+else
+PDF_BUILD_STAMP=
+endif
+
+all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+.PHONY: all-gtk-doc
+
+if ENABLE_GTK_DOC
+all-local: all-gtk-doc
+endif
+
+docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+
+$(REPORT_FILES): sgml-build.stamp
+
+#### setup ####
+
+GTK_DOC_V_SETUP=$(GTK_DOC_V_SETUP_$(V))
+GTK_DOC_V_SETUP_=$(GTK_DOC_V_SETUP_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SETUP_0= echo "  DOC   Preparing build";
+
+setup-build.stamp:
+       -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+           files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
+           if test "x$$files" != "x" ; then \
+               for file in $$files ; do \
+                   destdir=`dirname $(abs_builddir)/$$file` ;\
+                   test -d "$$destdir" || mkdir -p "$$destdir"; \
+                   test -f $(abs_srcdir)/$$file && \
+                       cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
+               done; \
+           fi; \
+           test -d $(abs_srcdir)/tmpl && \
+               { cp -pR $(abs_srcdir)/tmpl $(abs_builddir)/; \
+               chmod -R u+w $(abs_builddir)/tmpl; } \
+       fi
+       $(AM_V_at)touch setup-build.stamp
+
+#### scan ####
+
+GTK_DOC_V_SCAN=$(GTK_DOC_V_SCAN_$(V))
+GTK_DOC_V_SCAN_=$(GTK_DOC_V_SCAN_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SCAN_0= echo "  DOC   Scanning header files";
+
+GTK_DOC_V_INTROSPECT=$(GTK_DOC_V_INTROSPECT_$(V))
+GTK_DOC_V_INTROSPECT_=$(GTK_DOC_V_INTROSPECT_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_INTROSPECT_0= echo "  DOC   Introspecting gobjects";
+
+scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB)
+       $(GTK_DOC_V_SCAN)_source_dir='' ; \
+       for i in $(DOC_SOURCE_DIR) ; do \
+           _source_dir="$${_source_dir} --source-dir=$$i" ; \
+       done ; \
+       gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} 
$(SCAN_OPTIONS) $(EXTRA_HFILES)
+       $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
+           scanobj_options=""; \
+           gtkdoc-scangobj 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+           if test "$(?)" = "0"; then \
+               if test "x$(V)" = "x1"; then \
+                   scanobj_options="--verbose"; \
+               fi; \
+           fi; \
+           CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" 
LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \
+           gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \
+       else \
+           for i in $(SCANOBJ_FILES) ; do \
+               test -f $$i || touch $$i ; \
+           done \
+       fi
+       $(AM_V_at)touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: 
scan-build.stamp
+       @true
+
+#### templates ####
+
+GTK_DOC_V_TMPL=$(GTK_DOC_V_TMPL_$(V))
+GTK_DOC_V_TMPL_=$(GTK_DOC_V_TMPL_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_TMPL_0= echo "  DOC   Rebuilding template files";
+
+tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt 
$(DOC_MODULE)-overrides.txt
+       $(GTK_DOC_V_TMPL)gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+       $(AM_V_at)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+         if test -w $(abs_srcdir) ; then \
+           cp -pR $(abs_builddir)/tmpl $(abs_srcdir)/; \
+         fi \
+       fi
+       $(AM_V_at)touch tmpl-build.stamp
+
+tmpl.stamp: tmpl-build.stamp
+       @true
+
+$(srcdir)/tmpl/*.sgml:
+       @true
+
+#### xml ####
+
+GTK_DOC_V_XML=$(GTK_DOC_V_XML_$(V))
+GTK_DOC_V_XML_=$(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XML_0= echo "  DOC   Building XML";
+
+sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
+       -$(GTK_DOC_V_XML)chmod -R u+w $(srcdir) && _source_dir='' ; \
+       for i in $(DOC_SOURCE_DIR) ; do \
+           _source_dir="$${_source_dir} --source-dir=$$i" ; \
+       done ; \
+       gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml 
--expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} 
$(MKDB_OPTIONS)
+       $(AM_V_at)touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+       @true
+
+#### html ####
+
+GTK_DOC_V_HTML=$(GTK_DOC_V_HTML_$(V))
+GTK_DOC_V_HTML_=$(GTK_DOC_V_HTML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_HTML_0= echo "  DOC   Building HTML";
+
+GTK_DOC_V_XREF=$(GTK_DOC_V_XREF_$(V))
+GTK_DOC_V_XREF_=$(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XREF_0= echo "  DOC   Fixing cross-references";
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+       $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \
+       mkhtml_options=""; \
+       gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+       if test "$(?)" = "0"; then \
+         if test "x$(V)" = "x1"; then \
+           mkhtml_options="$$mkhtml_options --verbose"; \
+         fi; \
+       fi; \
+       gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-path"; \
+       if test "$(?)" = "0"; then \
+         mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \
+       fi; \
+       cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+       - test "x$(HTML_IMAGES)" = "x" || \
+       for file in $(HTML_IMAGES) ; do \
+         if test -f $(abs_srcdir)/$$file ; then \
+           cp $(abs_srcdir)/$$file $(abs_builddir)/html; \
+         fi; \
+         if test -f $(abs_builddir)/$$file ; then \
+           cp $(abs_builddir)/$$file $(abs_builddir)/html; \
+         fi; \
+       done;
+       $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) 
$(FIXXREF_OPTIONS)
+       $(AM_V_at)touch html-build.stamp
+
+#### pdf ####
+
+GTK_DOC_V_PDF=$(GTK_DOC_V_PDF_$(V))
+GTK_DOC_V_PDF_=$(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_PDF_0= echo "  DOC   Building PDF";
+
+pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+       $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \
+       mkpdf_options=""; \
+       gtkdoc-mkpdf 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+       if test "$(?)" = "0"; then \
+         if test "x$(V)" = "x1"; then \
+           mkpdf_options="$$mkpdf_options --verbose"; \
+         fi; \
+       fi; \
+       if test "x$(HTML_IMAGES)" != "x"; then \
+         for img in $(HTML_IMAGES); do \
+           part=`dirname $$img`; \
+           echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \
+           if test $$? != 0; then \
+             mkpdf_options="$$mkpdf_options --imgdir=$$part"; \
+           fi; \
+         done; \
+       fi; \
+       gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) 
$(MKPDF_OPTIONS)
+       $(AM_V_at)touch pdf-build.stamp
+
+##############
+
+clean-local:
+       @rm -f *~ *.bak
+       @rm -rf .libs
+       @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \
+         rm -f $(DOC_MODULE).types; \
+       fi
+
+distclean-local:
+       @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
+           $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+       @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+           rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
+           rm -rf tmpl; \
+       fi
+
+maintainer-clean-local:
+       @rm -rf xml html
+
+install-data-local:
+       @installfiles=`echo $(builddir)/html/*`; \
+       if test "$$installfiles" = '$(builddir)/html/*'; \
+       then echo 1>&2 'Nothing to install' ; \
+       else \
+         if test -n "$(DOC_MODULE_VERSION)"; then \
+           installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+         else \
+           installdir="$(DESTDIR)$(TARGET_DIR)"; \
+         fi; \
+         $(mkinstalldirs) $${installdir} ; \
+         for i in $$installfiles; do \
+           echo ' $(INSTALL_DATA) '$$i ; \
+           $(INSTALL_DATA) $$i $${installdir}; \
+         done; \
+         if test -n "$(DOC_MODULE_VERSION)"; then \
+           mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
+             $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
+         fi; \
+         $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \
+       fi
+
+uninstall-local:
+       @if test -n "$(DOC_MODULE_VERSION)"; then \
+         installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+       else \
+         installdir="$(DESTDIR)$(TARGET_DIR)"; \
+       fi; \
+       rm -rf $${installdir}
+
+#
+# Require gtk-doc when making dist
+#
+if HAVE_GTK_DOC
+dist-check-gtkdoc: docs
+else
+dist-check-gtkdoc:
+       @echo "*** gtk-doc is needed to run 'make dist'.         ***"
+       @echo "*** gtk-doc was not found when 'configure' ran.   ***"
+       @echo "*** please install gtk-doc and rerun 'configure'. ***"
+       @false
+endif
+
+dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local
+       @mkdir $(distdir)/tmpl
+       @mkdir $(distdir)/html
+       @-cp ./tmpl/*.sgml $(distdir)/tmpl
+       @cp ./html/* $(distdir)/html
+       @-cp ./$(DOC_MODULE).pdf $(distdir)/
+       @-cp ./$(DOC_MODULE).types $(distdir)/
+       @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/
+       @cd $(distdir) && rm -f $(DISTCLEANFILES)
+       @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
diff --git a/win32/patches/gtk.patch b/win32/patches/gtk.patch
new file mode 100644
index 0000000..595b405
--- /dev/null
+++ b/win32/patches/gtk.patch
@@ -0,0 +1,116 @@
+diff -upr gtk+-3.10.6/gdk/Makefile.in gtk+-3.10.6.new/gdk/Makefile.in
+--- gtk+-3.10.6/gdk/Makefile.in        2013-12-05 04:09:38 +0000
++++ gtk+-3.10.6.new/gdk/Makefile.in    2014-01-26 19:43:22 +0000
+@@ -94,7 +94,7 @@ DIST_COMMON = $(top_srcdir)/Makefile.dec
+ @USE_WIN32_FALSE@     $(am__append_1) $(am__append_3) \
+ @USE_WIN32_FALSE@     $(am__append_5) $(am__append_7) \
+ @USE_WIN32_FALSE@     $(am__append_8)
+- USE_WIN32_TRUE@am__append_6 = -Wl,win32/rc/gdk-win32-res.o -export-symbols $(srcdir)/gdk.def
++ USE_WIN32_TRUE@am__append_6 = -Wl,win32/rc/gdk-win32-res.o
+ @USE_BROADWAY_TRUE am__append_7 = broadway/libgdk-broadway.la
+ @USE_WAYLAND_TRUE am__append_8 = wayland/libgdk-wayland.la
+ @HAVE_INTROSPECTION_TRUE am__append_9 = Gdk-3.0.gir
+@@ -737,7 +737,7 @@ libgdk_3_la_CFLAGS = $(AM_CFLAGS) $(GDK_
+ libgdk_3_la_LIBADD = $(GDK_DEP_LIBS) $(am__append_1) $(am__append_3) \
+       $(am__append_5) $(am__append_7) $(am__append_8)
+ libgdk_3_la_LDFLAGS = $(LDADD) $(am__append_6)
+- USE_WIN32_TRUE@libgdk_3_la_DEPENDENCIES = win32/libgdk-win32.la win32/rc/gdk-win32-res.o gdk.def
++ USE_WIN32_TRUE@libgdk_3_la_DEPENDENCIES = win32/libgdk-win32.la win32/rc/gdk-win32-res.o
+ @HAVE_INTROSPECTION_TRUE introspection_files = \
+ @HAVE_INTROSPECTION_TRUE@     $(filter-out gdkkeysyms-compat.h, $(gdk_public_h_sources))      \
+ @HAVE_INTROSPECTION_TRUE@     $(gdk_c_sources)        \
+@@ -1625,16 +1625,8 @@ check-local: test-cwd
+ 
+ @HAVE_INTROSPECTION_TRUE@@USE_X11_TRUE GdkX11-3 0 gir: libgdk-3.la Gdk-3.0.gir Makefile
+ 
+- OS_WIN32_TRUE@install-def-file: gdk.def
+- OS_WIN32_TRUE@       mkdir -p $(DESTDIR)$(libdir)
+- OS_WIN32_TRUE@       $(INSTALL) $(srcdir)/gdk.def $(DESTDIR)$(libdir)/gdk-win32-3.0.def
+- OS_WIN32_TRUE@uninstall-def-file:
+- OS_WIN32_TRUE@       -rm $(DESTDIR)$(libdir)/gdk-win32-3.0.def
+- OS_WIN32_FALSE@install-def-file:
+- OS_WIN32_FALSE@uninstall-def-file:
+-
+- MS_LIB_AVAILABLE_TRUE@gdk-win32-$(GTK_API_VERSION).lib: libgdk-win32-$(GTK_API_VERSION).la gdk.def
+- MS_LIB_AVAILABLE_TRUE@       lib -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgdk-win32-$(GTK_API_VERSION)- 
LT_CURRENT_MINUS_AGE@.dll -def:gdk.def -out:$@
++ MS_LIB_AVAILABLE_TRUE@gdk-win32-$(GTK_API_VERSION).lib: libgdk-win32-$(GTK_API_VERSION).la
++ MS_LIB_AVAILABLE_TRUE@       lib -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgdk-win32-$(GTK_API_VERSION)- 
LT_CURRENT_MINUS_AGE@.dll -out:$@
+ 
+ @MS_LIB_AVAILABLE_TRUE install-ms-lib:
+ @MS_LIB_AVAILABLE_TRUE@       mkdir -p $(DESTDIR)$(libdir)
+@@ -1714,9 +1706,9 @@ dist-hook: ../build/win32/vs9/gdk.vcproj
+       $(CPP) -P - <$(top_srcdir)/build/win32/vs10/gdk.vcxproj.filtersin >$@
+       rm libgdk.vs10.sourcefiles.filters
+ 
+-install-data-local: install-ms-lib install-def-file
++install-data-local: install-ms-lib
+ 
+-uninstall-local: uninstall-ms-lib uninstall-def-file
++uninstall-local: uninstall-ms-lib
+       rm -f $(DESTDIR)$(configexecincludedir)/gdkconfig.h
+ 
+ # if srcdir!=builddir, clean out maintainer-clean files from builddir
+diff -upr gtk+-3.10.6/gtk/Makefile.in gtk+-3.10.6.new/gtk/Makefile.in
+--- gtk+-3.10.6/gtk/Makefile.in        2013-12-05 04:09:40 +0000
++++ gtk+-3.10.6.new/gtk/Makefile.in    2014-01-26 19:45:23 +0000
+@@ -111,7 +111,7 @@ DIST_COMMON = $(top_srcdir)/Makefile.dec
+ @USE_QUARTZ_FALSE@@USE_WIN32_FALSE@@USE_X11_FALSE am__append_13 = $(gtk_use_stub_c_sources)
+ @USE_WIN32_TRUE am__append_14 = -lole32 -lgdi32 -lcomdlg32 -lwinspool -lcomctl32
+ @USE_WIN32_TRUE am__append_15 = -Wl,-luuid
+- USE_WIN32_TRUE@am__append_16 = $(gtk_def) $(gtk_win32_res) $(deps)
++ USE_WIN32_TRUE@am__append_16 = $(gtk_win32_res) $(deps)
+ 
+ # And include the regular ones:
+ @HAVE_INTROSPECTION_TRUE@@USE_QUARTZ_TRUE am__append_17 = \
+@@ -1047,8 +1047,6 @@ AM_CPPFLAGS = \
+       $(INCLUDED_IMMODULE_DEFINE)
+ 
+ @PLATFORM_WIN32_TRUE no_undefined = -no-undefined
+- OS_WIN32_TRUE@gtk_def = gtk.def
+- OS_WIN32_TRUE@gtk_win32_symbols = -export-symbols $(srcdir)/gtk.def
+ @OS_WIN32_TRUE gtk_win32_res = gtk-win32-res.o
+ @OS_WIN32_TRUE gtk_win32_res_ldflag = -Wl,gtk-win32-res.o
+ @MS_LIB_AVAILABLE_TRUE noinst_DATA = gtk-win32-$(GTK_API_VERSION).lib
+@@ -1959,7 +1957,7 @@ libgtk_3_la_SOURCES = $(gtk_c_sources)
+ libgtk_3_la_LDFLAGS = $(libtool_opts) $(am__append_15)
+ libgtk_3_la_LIBADD = $(libadd) $(am__append_14)
+ libgtk_3_la_DEPENDENCIES = $(deps) $(am__append_16)
+- USE_WIN32_TRUE@libgtk_target_ldflags = $(gtk_win32_res_ldflag) $(gtk_win32_symbols)
++ USE_WIN32_TRUE@libgtk_target_ldflags = $(gtk_win32_res_ldflag)
+ DEPS = libgtk-3.la $(top_builddir)/gdk/libgdk-3.la
+ TEST_DEPS = $(DEPS) immodules.cache
+ LDADDS = \
+@@ -5912,15 +5910,8 @@ check-local: test-cwd
+ @OS_WIN32_TRUE gtk-win32-res o : gtk-win32.rc
+ @OS_WIN32_TRUE@       $(WINDRES) gtk-win32.rc $@
+ 
+- OS_WIN32_TRUE@install-def-file: gtk.def
+- OS_WIN32_TRUE@       $(INSTALL) $(srcdir)/gtk.def $(DESTDIR)$(libdir)/gtk-win32-3.0.def
+- OS_WIN32_TRUE@uninstall-def-file:
+- OS_WIN32_TRUE@       -rm $(DESTDIR)$(libdir)/gtk-win32-3.0.def
+- OS_WIN32_FALSE@install-def-file:
+- OS_WIN32_FALSE@uninstall-def-file:
+-
+- MS_LIB_AVAILABLE_TRUE@gtk-win32-$(GTK_API_VERSION).lib: libgtk-win32-$(GTK_API_VERSION).la gtk.def
+- MS_LIB_AVAILABLE_TRUE@       lib -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgtk-win32-$(GTK_API_VERSION)- 
LT_CURRENT_MINUS_AGE@.dll -def:gtk.def -out:$@
++ MS_LIB_AVAILABLE_TRUE@gtk-win32-$(GTK_API_VERSION).lib: libgtk-win32-$(GTK_API_VERSION).la
++ MS_LIB_AVAILABLE_TRUE@       lib -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgtk-win32-$(GTK_API_VERSION)- 
LT_CURRENT_MINUS_AGE@.dll -out:$@
+ 
+ @MS_LIB_AVAILABLE_TRUE install-ms-lib:
+ @MS_LIB_AVAILABLE_TRUE@       $(INSTALL) gtk-win32-$(GTK_API_VERSION).lib $(DESTDIR)$(libdir)
+@@ -6055,13 +6046,13 @@ dist-hook: ../build/win32/vs9/gtk.vcproj
+       rm libgtk.vs10.sourcefiles.filters
+ 
+ # Install a RC file for the default GTK+ theme, and key themes
+-install-data-local: install-ms-lib install-def-file install-mac-key-theme
++install-data-local: install-ms-lib install-mac-key-theme
+       $(MKDIR_P) $(DESTDIR)$(datadir)/themes/Default/gtk-3.0
+       $(INSTALL_DATA) $(srcdir)/gtk-keys.css.default 
$(DESTDIR)$(datadir)/themes/Default/gtk-3.0/gtk-keys.css
+       $(MKDIR_P) $(DESTDIR)$(datadir)/themes/Emacs/gtk-3.0
+       $(INSTALL_DATA) $(srcdir)/gtk-keys.css.emacs $(DESTDIR)$(datadir)/themes/Emacs/gtk-3.0/gtk-keys.css
+ 
+-uninstall-local: uninstall-ms-lib uninstall-def-file uninstall-mac-key-theme
++uninstall-local: uninstall-ms-lib uninstall-mac-key-theme
+       rm -f $(DESTDIR)$(datadir)/themes/Raleigh/gtk-3.0/gtk.css
+       rm -f $(DESTDIR)$(datadir)/themes/Default/gtk-3.0/gtk-keys.css
+       rm -f $(DESTDIR)$(datadir)/themes/Emacs/gtk-3.0/gtk-keys.css
diff --git a/win32/patches/harfbuzz.patch b/win32/patches/harfbuzz.patch
new file mode 100644
index 0000000..792feef
--- /dev/null
+++ b/win32/patches/harfbuzz.patch
@@ -0,0 +1,25 @@
+diff -upr harfbuzz-0.9.27.old//Makefile.in harfbuzz-0.9.27/Makefile.in
+--- harfbuzz-0.9.27.old//Makefile.in   2014-03-18 17:07:54 +0000
++++ harfbuzz-0.9.27/Makefile.in        2014-04-20 18:18:47 +0000
+@@ -365,7 +365,7 @@ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ NULL = 
+ ACLOCAL_AMFLAGS = -I m4
+-SUBDIRS = src util test docs
++SUBDIRS = src
+ EXTRA_DIST = \
+       autogen.sh \
+       harfbuzz.doap \
+diff -upr harfbuzz-0.9.27.old//src/hb-common.cc harfbuzz-0.9.27/src/hb-common.cc
+--- harfbuzz-0.9.27.old//src/hb-common.cc      2014-03-16 20:40:33 +0000
++++ harfbuzz-0.9.27/src/hb-common.cc   2014-04-20 18:16:17 +0000
+@@ -33,6 +33,9 @@
+ 
+ #include <locale.h>
+ 
++extern "C" {
++_CRTIMP char* __cdecl __MINGW_NOTHROW strdup (const char*) __MINGW_ATTRIB_MALLOC;
++}
+ 
+ /* hb_options_t */
+ 
diff --git a/win32/patches/jasper.patch b/win32/patches/jasper.patch
new file mode 100644
index 0000000..ee1e67f
--- /dev/null
+++ b/win32/patches/jasper.patch
@@ -0,0 +1,12 @@
+diff -upr jasper-1.900.1/src/appl/tmrdemo.c jasper-1.900.1.new/src/appl/tmrdemo.c
+--- jasper-1.900.1/src/appl/tmrdemo.c  2007-01-19 21:43:08 +0000
++++ jasper-1.900.1.new/src/appl/tmrdemo.c      2013-12-29 22:42:52 +0000
+@@ -43,7 +43,7 @@ int main(int argc, char **argv)
+       printf("zero time %.3f us\n", t * 1e6);
+ 
+       jas_tmr_start(&tmr);
+-      sleep(1);
++      //sleep(1);
+       jas_tmr_stop(&tmr);
+       t = jas_tmr_get(&tmr);
+       printf("time delay %.8f s\n", t);
diff --git a/win32/patches/libgdata.patch b/win32/patches/libgdata.patch
new file mode 100644
index 0000000..25bcd0d
--- /dev/null
+++ b/win32/patches/libgdata.patch
@@ -0,0 +1,158 @@
+diff -upr -x .deps -x .libs -x '*.la' libgdata-0.15.1.old/Makefile.am libgdata-0.15.1/Makefile.am
+--- libgdata-0.15.1.old/Makefile.am    2014-06-20 21:01:11 +0000
++++ libgdata-0.15.1/Makefile.am        2014-06-20 20:58:04 +0000
+@@ -1,4 +1,4 @@
+-SUBDIRS = . gdata/tests po docs
++SUBDIRS = . po docs
+ 
+ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+ 
+diff -upr -x .deps -x .libs -x '*.la' libgdata-0.15.1.old/Makefile.in libgdata-0.15.1/Makefile.in
+--- libgdata-0.15.1.old/Makefile.in    2014-06-20 21:01:11 +0000
++++ libgdata-0.15.1/Makefile.in        2014-06-20 20:58:04 +0000
+@@ -775,7 +775,7 @@ target_alias = @target_alias@
+ top_build_prefix = @top_build_prefix@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+-SUBDIRS = . gdata/tests po docs
++SUBDIRS = . po docs
+ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+ DISTCHECK_CONFIGURE_FLAGS = --enable-introspection --enable-gtk-doc
+ MAINTAINERCLEANFILES = $(GITIGNORE_MAINTAINERCLEANFILES_TOPLEVEL) \
+diff -upr -x .deps -x .libs -x '*.la' libgdata-0.15.1.old/configure libgdata-0.15.1/configure
+--- libgdata-0.15.1.old/configure      2014-06-20 21:01:11 +0000
++++ libgdata-0.15.1/configure  2014-06-20 20:58:04 +0000
+@@ -16239,96 +16239,6 @@ fi
+ 
+ 
+ 
+-pkg_failed=no
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for UHTTPMOCK" >&5
+-$as_echo_n "checking for UHTTPMOCK... " >&6; }
+-
+-if test -n "$UHTTPMOCK_CFLAGS"; then
+-    pkg_cv_UHTTPMOCK_CFLAGS="$UHTTPMOCK_CFLAGS"
+- elif test -n "$PKG_CONFIG"; then
+-    if test -n "$PKG_CONFIG" && \
+-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libuhttpmock-0.0\""; 
} >&5
+-  ($PKG_CONFIG --exists --print-errors "libuhttpmock-0.0") 2>&5
+-  ac_status=$?
+-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+-  test $ac_status = 0; }; then
+-  pkg_cv_UHTTPMOCK_CFLAGS=`$PKG_CONFIG --cflags "libuhttpmock-0.0" 2>/dev/null`
+-                    test "x$?" != "x0" && pkg_failed=yes
+-else
+-  pkg_failed=yes
+-fi
+- else
+-    pkg_failed=untried
+-fi
+-if test -n "$UHTTPMOCK_LIBS"; then
+-    pkg_cv_UHTTPMOCK_LIBS="$UHTTPMOCK_LIBS"
+- elif test -n "$PKG_CONFIG"; then
+-    if test -n "$PKG_CONFIG" && \
+-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libuhttpmock-0.0\""; 
} >&5
+-  ($PKG_CONFIG --exists --print-errors "libuhttpmock-0.0") 2>&5
+-  ac_status=$?
+-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+-  test $ac_status = 0; }; then
+-  pkg_cv_UHTTPMOCK_LIBS=`$PKG_CONFIG --libs "libuhttpmock-0.0" 2>/dev/null`
+-                    test "x$?" != "x0" && pkg_failed=yes
+-else
+-  pkg_failed=yes
+-fi
+- else
+-    pkg_failed=untried
+-fi
+-
+-
+-
+-if test $pkg_failed = yes; then
+-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-
+-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+-        _pkg_short_errors_supported=yes
+-else
+-        _pkg_short_errors_supported=no
+-fi
+-        if test $_pkg_short_errors_supported = yes; then
+-              UHTTPMOCK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs 
"libuhttpmock-0.0" 2>&1`
+-        else
+-              UHTTPMOCK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libuhttpmock-0.0" 2>&1`
+-        fi
+-      # Put the nasty error message in config.log where it belongs
+-      echo "$UHTTPMOCK_PKG_ERRORS" >&5
+-
+-      as_fn_error $? "Package requirements (libuhttpmock-0.0) were not met:
+-
+-$UHTTPMOCK_PKG_ERRORS
+-
+-Consider adjusting the PKG_CONFIG_PATH environment variable if you
+-installed software in a non-standard prefix.
+-
+-Alternatively, you may set the environment variables UHTTPMOCK_CFLAGS
+-and UHTTPMOCK_LIBS to avoid the need to call pkg-config.
+-See the pkg-config man page for more details." "$LINENO" 5
+-elif test $pkg_failed = untried; then
+-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-      { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
+-is in your PATH or set the PKG_CONFIG environment variable to the full
+-path to pkg-config.
+-
+-Alternatively, you may set the environment variables UHTTPMOCK_CFLAGS
+-and UHTTPMOCK_LIBS to avoid the need to call pkg-config.
+-See the pkg-config man page for more details.
+-
+-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+-See \`config.log' for more details" "$LINENO" 5; }
+-else
+-      UHTTPMOCK_CFLAGS=$pkg_cv_UHTTPMOCK_CFLAGS
+-      UHTTPMOCK_LIBS=$pkg_cv_UHTTPMOCK_LIBS
+-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+-$as_echo "yes" >&6; }
+-
+-fi
+ 
+ # Various necessary functions and headers
+ for ac_func in strchr
+diff -upr -x .deps -x .libs -x '*.la' libgdata-0.15.1.old/configure.ac libgdata-0.15.1/configure.ac
+--- libgdata-0.15.1.old/configure.ac   2014-06-20 21:01:11 +0000
++++ libgdata-0.15.1/configure.ac       2014-06-20 20:58:04 +0000
+@@ -123,11 +123,6 @@ AC_SUBST([GNOME_PACKAGES_PRIVATE])
+ AC_SUBST([GNOME_PACKAGES])
+ AC_SUBST([GOA_ENABLED])
+ 
+-dnl ****************************
+-dnl Check for uhttpmock
+-dnl ****************************
+-PKG_CHECK_MODULES(UHTTPMOCK, libuhttpmock-0.0)
+-
+ # Various necessary functions and headers
+ AC_CHECK_FUNCS([strchr])
+ AC_CHECK_FUNCS([strstr])
+diff -upr -x .deps -x .libs -x '*.la' libgdata-0.15.1.old/gdata/gdata.symbols 
libgdata-0.15.1/gdata/gdata.symbols
+--- libgdata-0.15.1.old/gdata/gdata.symbols    2014-06-20 21:01:11 +0000
++++ libgdata-0.15.1/gdata/gdata.symbols        2014-06-20 21:02:28 +0000
+@@ -965,9 +965,6 @@ gdata_documents_entry_get_quota_used
+ gdata_documents_service_copy_document
+ gdata_documents_service_copy_document_async
+ gdata_documents_service_copy_document_finish
+-gdata_goa_authorizer_get_type
+-gdata_goa_authorizer_new
+-gdata_goa_authorizer_get_goa_object
+ gdata_documents_document_get_thumbnail_uri
+ gdata_tasks_task_get_type
+ gdata_tasks_task_new
+@@ -1087,8 +1084,6 @@ gdata_freebase_topic_value_is_image
+ gdata_freebase_topic_result_get_type
+ gdata_freebase_topic_result_new
+ gdata_freebase_topic_result_dup_object
+-gdata_freebase_result_error_get_type
+-gdata_freebase_result_error_quark
+ gdata_freebase_result_get_type
+ gdata_freebase_result_new
+ gdata_freebase_result_dup_variant
diff --git a/win32/patches/libgpg-error.patch b/win32/patches/libgpg-error.patch
new file mode 100644
index 0000000..416f525
--- /dev/null
+++ b/win32/patches/libgpg-error.patch
@@ -0,0 +1,12 @@
+diff -upr libgpg-error-1.12.old/po/LINGUAS libgpg-error-1.12/po/LINGUAS
+--- libgpg-error-1.12.old/po/LINGUAS   2014-04-27 14:43:44 +0000
++++ libgpg-error-1.12/po/LINGUAS       2014-04-27 14:44:04 +0000
+@@ -7,8 +7,6 @@ fr
+ it
+ ja
+ nl
+-pl
+-ro
+ sv
+ uk
+ vi
diff --git a/win32/patches/libgweather.patch b/win32/patches/libgweather.patch
new file mode 100644
index 0000000..3a7eb3e
--- /dev/null
+++ b/win32/patches/libgweather.patch
@@ -0,0 +1,191 @@
+diff -upr libgweather-3.10.2.old//configure libgweather-3.10.2/configure
+--- libgweather-3.10.2.old//configure  2014-02-02 16:39:52 +0000
++++ libgweather-3.10.2/configure       2014-04-15 14:05:25 +0000
+@@ -15884,16 +15884,16 @@ case "$am__api_version" in
+     ;;
+ esac
+ 
+-INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.50.0 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
++INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.40.0 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+ INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
+ INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + 
$ 3; }'`
+-if test -n "0.50.0"; then
+-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.50.0" >&5
+-$as_echo_n "checking for intltool >= 0.50.0... " >&6; }
++if test -n "0.40.0"; then
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.40.0" >&5
++$as_echo_n "checking for intltool >= 0.40.0... " >&6; }
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5
+ $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; }
+     test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
+-      as_fn_error $? "Your intltool is too old.  You need intltool 0.50.0 or later." "$LINENO" 5
++      as_fn_error $? "Your intltool is too old.  You need intltool 0.40.0 or later." "$LINENO" 5
+ fi
+ 
+ # Extract the first word of "intltool-update", so it can be a program name with args.
+diff -upr libgweather-3.10.2.old//libgweather/weather-owm.c libgweather-3.10.2/libgweather/weather-owm.c
+--- libgweather-3.10.2.old//libgweather/weather-owm.c  2014-04-15 14:03:39 +0000
++++ libgweather-3.10.2/libgweather/weather-owm.c       2014-04-15 13:58:56 +0000
+@@ -29,7 +29,6 @@
+ #include <math.h>
+ #include <time.h>
+ #include <unistd.h>
+-#include <langinfo.h>
+ 
+ #include <libxml/parser.h>
+ #include <libxml/xpath.h>
+@@ -130,32 +129,20 @@ static time_t
+ date_to_time_t (const xmlChar *str, const char * tzid)
+ {
+     struct tm time = { 0 };
+-    GTimeZone *tz;
+     GDateTime *dt;
+     time_t rval;
++    GTimeVal tv;
+     char *after;
+ 
+-    after = strptime ((const char*) str, "%Y-%m-%dT%T", &time);
+-    if (after == NULL) {
++    if (!g_time_val_from_iso8601 ((const char*) str, &tv)) {
+       g_warning ("Cannot parse date string \"%s\"", str);
+       return 0;
+     }
+ 
+-    if (*after == 'Z')
+-      tzid = "UTC";
+-
+-    tz = g_time_zone_new (tzid);
+-    dt = g_date_time_new (tz,
+-                        time.tm_year + 1900,
+-                        time.tm_mon + 1,
+-                        time.tm_mday,
+-                        time.tm_hour,
+-                        time.tm_min,
+-                        time.tm_sec);
++    dt = g_date_time_new_from_timeval_local (&tv);
+ 
+     rval = g_date_time_to_unix (dt);
+ 
+-    g_time_zone_unref (tz);
+     g_date_time_unref (dt);
+ 
+     return rval;
+diff -upr libgweather-3.10.2.old//libgweather/weather-priv.h libgweather-3.10.2/libgweather/weather-priv.h
+--- libgweather-3.10.2.old//libgweather/weather-priv.h 2014-04-15 14:03:39 +0000
++++ libgweather-3.10.2/libgweather/weather-priv.h      2014-04-15 13:58:57 +0000
+@@ -32,7 +32,7 @@
+ #include "gweather-location.h"
+ 
+ #ifdef _WIN32
+-#include "gweather-win32.h"
++#define localtime_r(t,tmp) (localtime (t) ? ((*tmp) = *localtime (t), tmp) : NULL)
+ #endif
+ 
+ void        _gweather_gettext_init (void);
+diff -upr libgweather-3.10.2.old//libgweather/weather-yahoo.c libgweather-3.10.2/libgweather/weather-yahoo.c
+--- libgweather-3.10.2.old//libgweather/weather-yahoo.c        2014-04-15 14:03:39 +0000
++++ libgweather-3.10.2/libgweather/weather-yahoo.c     2014-04-15 13:58:57 +0000
+@@ -151,10 +151,35 @@ date_to_time_t (const xmlChar *str)
+ {
+     struct tm time = { 0 };
+ 
++    #ifdef G_OS_WIN32
++    char mnthname[10] = {0};
++    int day, month, year;
++    const gchar tm_months[][4] = {
++      "Jan", "Feb", "Mar", "Apr", "May", "Jun",
++      "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
++    };
++    if (sscanf ((const char*) str, "%d %3s %4d", &day, mnthname, &year) != 3) {
++      g_warning ("Cannot parse date string \"%s\"", str);
++      return 0;
++    }
++    for (month = 0; month < 12; month++) {
++      if (g_ascii_strcasecmp (tm_months[month], mnthname) == 0) {
++            break;
++        }
++    }
++    if (month == 12) {
++      g_warning ("Cannot parse date string \"%s\"", str);
++      return 0;
++    }
++    time.tm_mday = day;
++    time.tm_mon = month;
++    time.tm_year = year - 1900;
++    #else
+     if (!strptime ((const char*) str, "%d %b %Y", &time)) {
+       g_warning ("Cannot parse date string \"%s\"", str);
+       return 0;
+     }
++    #endif
+ 
+     return mktime(&time);
+ }
+diff -upr libgweather-3.10.2.old//libgweather/weather-yrno.c libgweather-3.10.2/libgweather/weather-yrno.c
+--- libgweather-3.10.2.old//libgweather/weather-yrno.c 2014-04-15 14:03:39 +0000
++++ libgweather-3.10.2/libgweather/weather-yrno.c      2014-04-15 13:58:57 +0000
+@@ -91,32 +91,20 @@ static time_t
+ date_to_time_t (const xmlChar *str, const char * tzid)
+ {
+     struct tm time = { 0 };
+-    GTimeZone *tz;
+     GDateTime *dt;
+     time_t rval;
++    GTimeVal tv;
+     char *after;
+ 
+-    after = strptime ((const char*) str, "%Y-%m-%dT%T", &time);
+-    if (after == NULL) {
++    if (!g_time_val_from_iso8601 ((const char*) str, &tv)) {
+       g_warning ("Cannot parse date string \"%s\"", str);
+       return 0;
+     }
+ 
+-    if (*after == 'Z')
+-      tzid = "UTC";
+-
+-    tz = g_time_zone_new (tzid);
+-    dt = g_date_time_new (tz,
+-                        time.tm_year + 1900,
+-                        time.tm_mon + 1,
+-                        time.tm_mday,
+-                        time.tm_hour,
+-                        time.tm_min,
+-                        time.tm_sec);
++    dt = g_date_time_new_from_timeval_local (&tv);
+ 
+     rval = g_date_time_to_unix (dt);
+ 
+-    g_time_zone_unref (tz);
+     g_date_time_unref (dt);
+ 
+     return rval;
+diff -upr libgweather-3.10.2.old//libgweather/weather.c libgweather-3.10.2/libgweather/weather.c
+--- libgweather-3.10.2.old//libgweather/weather.c      2014-04-15 14:03:39 +0000
++++ libgweather-3.10.2/libgweather/weather.c   2014-04-15 13:58:57 +0000
+@@ -28,7 +28,10 @@
+ #include <math.h>
+ #include <time.h>
+ #include <unistd.h>
++
++#ifdef HAVE_NL_LANGINFO
+ #include <langinfo.h>
++#endif
+ 
+ #include <gtk/gtk.h>
+ #include <gdk-pixbuf/gdk-pixbuf.h>
+@@ -701,12 +704,14 @@ gweather_info_get_conditions (GWeatherIn
+ static gboolean
+ is_locale_metric (void)
+ {
++#ifdef HAVE_NL_LANGINFO
+     const char *fmt;
+     fmt = nl_langinfo (_NL_MEASUREMENT_MEASUREMENT);
+ 
+     if (fmt && *fmt == 2)
+       return FALSE;
+     else
++#endif /* HAVE_NL_LANGINFO */
+       return TRUE;
+ }
+ 
diff --git a/win32/patches/libical.patch b/win32/patches/libical.patch
new file mode 100644
index 0000000..96a0c1e
--- /dev/null
+++ b/win32/patches/libical.patch
@@ -0,0 +1,169 @@
+diff -upr -x .deps -x .libs -x '*.la' libical-1.0.old/src/libical/icaltime.c 
libical-1.0/src/libical/icaltime.c
+--- libical-1.0.old/src/libical/icaltime.c     2013-04-14 17:24:42 +0000
++++ libical-1.0/src/libical/icaltime.c 2014-08-03 13:58:29 +0000
+@@ -61,7 +61,7 @@
+ #undef gmtime_r
+ 
+ /* The gmtime() in Microsoft's C library is MT-safe */
+-#define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):0)
++#define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):memset(tmp, 0, sizeof(*tmp)))
+ #endif
+ 
+ #ifdef HAVE_PTHREAD
+@@ -205,11 +205,7 @@ icaltime_from_timet_with_zone(const time
+ 
+     /* Convert the time_t to a struct tm in UTC time. We can trust gmtime
+        for this. */
+-#ifdef HAVE_PTHREAD
+     gmtime_r (&tm, &t);
+-#else
+-    t = *(gmtime (&tm));
+-#endif
+      
+     tt.year   = t.tm_year + 1900;
+     tt.month  = t.tm_mon + 1;
+diff -upr -x .deps -x .libs -x '*.la' libical-1.0.old/src/libical/icaltimezone.c 
libical-1.0/src/libical/icaltimezone.c
+--- libical-1.0.old/src/libical/icaltimezone.c 2013-04-14 17:24:42 +0000
++++ libical-1.0/src/libical/icaltimezone.c     2014-08-03 13:59:38 +0000
+@@ -61,12 +61,19 @@ static pthread_mutex_t builtin_mutex = P
+ #undef gmtime_r
+ 
+ /* The gmtime() in Microsoft's C library is MT-safe */
+-#define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):0)
++#define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):memset(tmp, 0, sizeof(*tmp)))
+ 
+ // MSVC lacks the POSIX macro S_ISDIR, however it's a trivial one:
+ #ifndef S_ISDIR
+ #define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR)
+ #endif
++
++#define DIR_SEPARATOR "\\"
++
++#else
++
++#define DIR_SEPARATOR "/"
++
+ #endif
+ 
+ #if defined(_MSC_VER)
+@@ -75,7 +82,7 @@ static pthread_mutex_t builtin_mutex = P
+ #endif
+ 
+ /** This is the toplevel directory where the timezone data is installed in. */
+-#define ZONEINFO_DIRECTORY    PACKAGE_DATA_DIR "/zoneinfo"
++#define ZONEINFO_DIRECTORY    PACKAGE_DATA_DIR DIR_SEPARATOR "zoneinfo"
+ 
+ /** The prefix we use to uniquely identify TZIDs.
+     It must begin and end with forward slashes.
+@@ -1702,10 +1709,10 @@ icaltimezone_parse_zone_tab            (void)
+       return;
+     }
+ #ifndef USE_BUILTIN_TZDATA
+-    snprintf (filename, filename_len, "%s/%s", icaltzutil_get_zone_directory (),
++    snprintf (filename, filename_len, "%s" DIR_SEPARATOR "%s", icaltzutil_get_zone_directory (),
+             ZONES_TAB_SYSTEM_FILENAME);
+ #else    
+-    snprintf (filename, filename_len, "%s/%s", get_zone_directory(),
++    snprintf (filename, filename_len, "%s" DIR_SEPARATOR "%s", get_zone_directory(),
+             ZONES_TAB_FILENAME);
+ #endif    
+ 
+@@ -1823,7 +1830,7 @@ icaltimezone_load_builtin_timezone       (ical
+       goto out;
+     }
+ 
+-    snprintf (filename, filename_len, "%s/%s.ics", get_zone_directory(),
++    snprintf (filename, filename_len, "%s " DIR_SEPARATOR " %s.ics", get_zone_directory(),
+             zone->location);
+ 
+     fp = fopen (filename, "r");
+diff -upr -x .deps -x .libs -x '*.la' libical-1.0.old/src/libical/icaltz-util.c 
libical-1.0/src/libical/icaltz-util.c
+--- libical-1.0.old/src/libical/icaltz-util.c  2013-04-14 17:24:42 +0000
++++ libical-1.0/src/libical/icaltz-util.c      2014-08-03 12:54:17 +0000
+@@ -50,7 +50,7 @@
+ # endif
+ #endif
+ 
+-#ifdef _MSC_VER
++#ifdef WIN32
+ #if !defined(HAVE_BYTESWAP_H) && !defined(HAVE_SYS_ENDIAN_H) && !defined(HAVE_ENDIAN_H)
+ #define bswap_16(x) (((x) << 8) & 0xff00) | (((x) >> 8 ) & 0xff)
+ #define bswap_32(x) (((x) << 24) & 0xff000000)  \
+@@ -67,6 +67,11 @@
+                     | (((x) & 0x00000000000000ffull) << 56))
+ #endif
+ #include <io.h>
++#include <sys/param.h> /* for BYTE_ORDER */
++#endif
++
++#ifdef WIN32
++#include <windows.h>
+ #endif
+ 
+ #if defined(__APPLE__)
+@@ -191,6 +196,7 @@ zname_from_stridx (char *str, long int i
+ static void
+ set_zonedir (void)
+ {
++      #ifndef WIN32
+       char file_path[PATH_MAX];
+       const char *fname = ZONES_TAB_SYSTEM_FILENAME;
+       int i;  
+@@ -202,6 +208,42 @@ set_zonedir (void)
+                       break;
+               }
+       }
++
++      #else
++      #define ZONEINFO_REL_PATH "..\\share\\zoneinfo"
++      if (!zdir) {
++              HMODULE lib = LoadLibrary("libical.dll");
++              if (lib) {
++                      static char win32_path[PATH_MAX * 2 + 32 + 1]; 
++                      DWORD read = GetModuleFileNameA (lib, win32_path, PATH_MAX * 2);
++                      FreeLibrary(lib);
++
++                      if (read > 0) {
++                              char *backslash;
++                              int cut_path_at;
++
++                              win32_path[read] = 0;
++
++                              backslash = strrchr(win32_path, '\\');
++                              if (backslash)
++                                      backslash[1] = 0;
++
++                              strcat (win32_path, ZONEINFO_REL_PATH);
++                              cut_path_at = strlen (win32_path);
++                              strcat (win32_path, "\\");
++                              strcat (win32_path, ZONES_TAB_SYSTEM_FILENAME);
++
++                              if (!access (win32_path, F_OK|R_OK)) {
++                                      win32_path[cut_path_at] = 0;
++                                      zdir = win32_path;
++                              } else {
++                                      fprintf (stderr, "libical: Failed to find '%s'\n", win32_path);
++                              }
++                      }
++              }
++      }
++      #undef ZONEINFO_REL_PATH
++      #endif
+ }
+ 
+ 
+@@ -256,6 +298,14 @@ icaltzutil_fetch_timezone (const char *l
+ 
+       full_path = (char *) malloc (strlen (basedir) + strlen (location) + 2);
+       sprintf (full_path,"%s/%s",basedir, location);
++      #ifdef WIN32
++      pos = strlen(basedir);
++      while(full_path[pos]) {
++              if (full_path[pos] == '/')
++                      full_path[pos] = '\\';
++              pos++;
++      }
++      #endif
+ 
+       if ((f = fopen (full_path, "rb")) == 0) {
+               icalerror_set_errno (ICAL_FILE_ERROR);
diff --git a/win32/patches/liboauth.patch b/win32/patches/liboauth.patch
new file mode 100644
index 0000000..9613332
--- /dev/null
+++ b/win32/patches/liboauth.patch
@@ -0,0 +1,56 @@
+diff -upr -x .deps -x .libs -x '*.la' liboauth-1.0.1.old/src/Makefile liboauth-1.0.1/src/Makefile
+--- liboauth-1.0.1.old/src/Makefile    2014-06-20 20:41:31 +0000
++++ liboauth-1.0.1/src/Makefile        2014-06-20 20:38:41 +0000
+@@ -249,7 +249,7 @@ ACLOCAL_AMFLAGS = -I m4
+ lib_LTLIBRARIES = liboauth.la
+ include_HEADERS = oauth.h 
+ liboauth_la_SOURCES = oauth.c config.h hash.c xmalloc.c xmalloc.h oauth_http.c
+-liboauth_la_LDFLAGS = -Wall -export-symbols-regex '^oauth_.*' -Wl,--as-needed -version-info 8:5:8
++liboauth_la_LDFLAGS = -Wall -export-symbols-regex '^oauth_.*' -Wl,--as-needed -version-info 8:5:8 
-no-undefined
+ liboauth_la_LIBADD = -LC:/MinGW/msys/1.0/build/local/deps/lib -lssl3 -lsmime3 -lnss3 -lnssutil3 -lplds4 
-lplc4 -lnspr4  
+ liboauth_la_CFLAGS = -Wall -IC:/MinGW/msys/1.0/build/local/deps/include/nss 
-IC:/MinGW/msys/1.0/build/local/deps/include/nspr  
+ all: config.h
+diff -upr -x .deps -x .libs -x '*.la' liboauth-1.0.1.old/src/oauth.c liboauth-1.0.1/src/oauth.c
+--- liboauth-1.0.1.old/src/oauth.c     2014-06-20 20:43:07 +0000
++++ liboauth-1.0.1/src/oauth.c 2014-05-17 20:27:28 +0000
+@@ -48,8 +48,10 @@
+ #include <unistd.h>
+ #else
+ #define snprintf _snprintf
++#ifndef strncasecmp
+ #define strncasecmp strnicmp
+ #endif
++#endif
+ 
+ /**
+  * Base64 encode one byte
+@@ -520,7 +522,7 @@ char *oauth_serialize_url_parameters (in
+  */
+ #if !defined HAVE_OPENSSL_HMAC_H && !defined USE_NSS
+ /* pre liboauth-0.7.2 and possible future versions that don't use OpenSSL or NSS */
+-char *oauth_gen_nonce() {
++char *oauth_gen_nonce(void) {
+   char *nc;
+   static int rndinit = 1;
+   const char *chars = "abcdefghijklmnopqrstuvwxyz"
+@@ -557,7 +559,7 @@ char *oauth_gen_nonce() {
+ #  define MY_RAND RAND_bytes
+ #  define MY_SRAND ;
+ #endif
+-char *oauth_gen_nonce() {
++char *oauth_gen_nonce(void) {
+   char *nc;
+   unsigned char buf;
+   const char *chars = "abcdefghijklmnopqrstuvwxyz"
+diff -upr -x .deps -x .libs -x '*.la' liboauth-1.0.1.old/src/oauth.h liboauth-1.0.1/src/oauth.h
+--- liboauth-1.0.1.old/src/oauth.h     2014-06-20 20:43:07 +0000
++++ liboauth-1.0.1/src/oauth.h 2014-05-17 20:27:28 +0000
+@@ -262,7 +262,7 @@ char *oauth_serialize_url_parameters (in
+  *
+  * @return zero terminated random string.
+  */
+-char *oauth_gen_nonce();
++char *oauth_gen_nonce(void);
+ 
+ /**
+  * string compare function for oauth parameters.
diff --git a/win32/patches/libpng.patch b/win32/patches/libpng.patch
new file mode 100644
index 0000000..951fea1
--- /dev/null
+++ b/win32/patches/libpng.patch
@@ -0,0 +1,86 @@
+diff -upr -x .deps -x .libs -x '*.la' libpng-1.6.7.old/scripts/makefile.msys 
libpng-1.6.7/scripts/makefile.msys
+--- libpng-1.6.7.old/scripts/makefile.msys     2014-05-17 04:40:44 +0000
++++ libpng-1.6.7/scripts/makefile.msys 2014-05-17 05:27:20 +0000
+@@ -12,7 +12,7 @@
+ # For conditions of distribution and use, see the disclaimer
+ # and license in png.h
+ # # # # # # # # # # # # # # # # #
+-prefix=/usr/local
++prefix?=/usr/local
+ exec_prefix=$(prefix)
+ 
+ # Library name:
+@@ -29,8 +29,8 @@ OLDSO=libpng.dll
+ # Where the zlib library and include files are located.
+ #ZLIBLIB=../zlib
+ #ZLIBINC=../zlib
+-ZLIBLIB=/usr/local/lib
+-ZLIBINC=/usr/local/include
++ZLIBLIB=$(prefix)/lib
++ZLIBINC=$(prefix)/include
+ 
+ # Compiler, linker, lib and other tools
+ CC = gcc
+@@ -97,15 +97,14 @@ pnglibconf.h: scripts/pnglibconf.h.prebu
+ 
+ static: libpng$(A) pngtest$(EXE)
+ 
+-shared: $(LIBSOMAJ)
+-      $(CC) -shared -Wl,-soname,$(LIBSOMAJ) -o $(LIBSO)
++shared: libpng$(A)
++      $(CC) -shared scripts/symbols.def $(LDFLAGS) -L$(ZLIBLIB) libpng$(A) $(LIBS) -o $(LIBSO) 
-Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker $(LIBSO)$(A)
++      cp $(LIBSO) $(LIBSOMAJ)
++      cp $(LIBSO)$(A) $(LIBSOMAJ)$(A)
+ 
+ $(LIBSO): $(LIBSOMAJ)
+       $(LN_SF) $(LIBSOMAJ) $(LIBSO)
+ 
+-$(LIBSOMAJ):
+-      $(CC) -shared -Wl,-soname,$(LIBSOMAJ) -o $(LIBSOMAJ)
+-
+ libpng$(A): $(OBJS)
+       $(AR_RC) $@ $(OBJS)
+       $(RANLIB) $@
+@@ -144,8 +143,10 @@ install-shared: install-headers $(LIBSOM
+       - if [ ! -d $(DL) ]; then $(MKDIR_P) $(DL); fi
+       - $(RM_F) $(DL)/$(LIBSO)
+       - $(RM_F) $(DL)/$(OLDSO)
+-      cp $(LIBSO) $(DL)/$(LIBSOREL)
+-      (cd $(DL); \
++      cp $(LIBSO).a $(DL)/$(LIBSO).a
++      cp $(LIBSOMAJ).a $(DL)/$(LIBSOMAJ).a
++      cp $(LIBSO) $(DB)/$(LIBSOREL)
++      (cd $(DB); \
+       $(LN_SF) $(LIBSOREL) $(LIBSO); \
+       $(LN_SF) $(LIBSO) $(OLDSO))
+ 
+diff -upr -x .deps -x .libs -x '*.la' libpng-1.6.7.old/scripts/symbols.def libpng-1.6.7/scripts/symbols.def
+--- libpng-1.6.7.old/scripts/symbols.def       2013-11-14 19:03:02 +0000
++++ libpng-1.6.7/scripts/symbols.def   2014-05-17 04:56:00 +0000
+@@ -1,10 +1,3 @@
+-;Version 1.6.7
+-;--------------------------------------------------------------
+-; LIBPNG symbol list as a Win32 DEF file
+-; Contains all the symbols that can be exported from libpng
+-;--------------------------------------------------------------
+-LIBRARY
+-
+ EXPORTS
+  png_access_version_number @1
+  png_set_sig_bytes @2
+@@ -109,7 +102,6 @@ EXPORTS
+  png_free_default @101
+  png_error @102
+  png_chunk_error @103
+- png_err @104
+  png_warning @105
+  png_chunk_warning @106
+  png_benign_error @107
+@@ -190,7 +182,6 @@ EXPORTS
+  png_get_header_version @182
+  png_get_libpng_ver @183
+  png_permit_mng_features @184
+- png_set_strip_error_numbers @185
+  png_set_user_limits @186
+  png_get_user_width_max @187
+  png_get_user_height_max @188
diff --git a/win32/patches/libsecret.patch b/win32/patches/libsecret.patch
new file mode 100644
index 0000000..5e6c70e
--- /dev/null
+++ b/win32/patches/libsecret.patch
@@ -0,0 +1,157 @@
+diff -upr libsecret-0.16.old/Makefile.am libsecret-0.16/Makefile.am
+--- libsecret-0.16.old/Makefile.am     2013-03-25 12:10:12 +0000
++++ libsecret-0.16/Makefile.am 2014-04-20 18:49:09 +0000
+@@ -3,7 +3,7 @@ include $(top_srcdir)/Makefile.decl
+ 
+ ACLOCAL_AMFLAGS = -I build/m4 ${ACLOCAL_FLAGS}
+ 
+-SUBDIRS = build egg libsecret tool po docs .
++SUBDIRS = build egg libsecret po docs .
+ 
+ DISTCHECK_CONFIGURE_FLAGS = \
+       --enable-debug=yes \
+diff -upr libsecret-0.16.old/configure.ac libsecret-0.16/configure.ac
+--- libsecret-0.16.old/configure.ac    2013-06-21 13:11:14 +0000
++++ libsecret-0.16/configure.ac        2014-04-20 18:42:09 +0000
+@@ -55,20 +55,48 @@ AM_GLIB_GNU_GETTEXT
+ # Checks for functions
+ 
+ AC_CHECK_FUNCS(mlock)
++AC_CHECK_FUNCS(gmtime_r strptime memrchr)
++AC_CHECK_HEADERS([err.h pwd.h syslog.h sys/mman.h sys/wait.h])
++
++dnl ******************************
++dnl Check for Win32
++dnl ******************************
++AC_MSG_CHECKING([for Win32])
++case "$host" in
++*-mingw*)
++      os_win32='yes'
++      AC_CACHE_VAL(ac_cv_have_addrinfo, [ac_cv_have_addrinfo=yes])
++      AC_DEFINE(_WIN32_WINNT, 0x501, [To get getaddrinfo etc declarations])
++      ;;
++*)
++      os_win32='no'
++      ;;
++esac
++AC_MSG_RESULT([$os_win32])
++AM_CONDITIONAL(OS_WIN32, [test $os_win32 = yes])
+ 
+ # --------------------------------------------------------------------
+ # GLib
+ 
++GIO_PLAT=
++if test "$os_win32" = "yes" ; then
++      GIO_PLAT=gio-windows-2.0
++else
++      GIO_PLAT=gio-unix-2.0
++fi
++
+ PKG_CHECK_MODULES(GLIB,
+       glib-2.0 >= 2.32.0
+       gio-2.0 >= 2.32.0
+-      gio-unix-2.0)
++      $GIO_PLAT)
+ LIBS="$LIBS $GLIB_LIBS"
+ CFLAGS="$CFLAGS $GLIB_CFLAGS"
+ 
+ GTK_DOC_CHECK(1.9)
+ 
+-GOBJECT_INTROSPECTION_CHECK([1.29])
++AM_CONDITIONAL(HAVE_INTROSPECTION, test "yes" = "no")
++
++dnl GOBJECT_INTROSPECTION_CHECK([1.29])
+ AC_PATH_PROG(GLIB_MKENUMS, glib-mkenums)
+ 
+ # --------------------------------------------------------------------
+diff -upr libsecret-0.16.old/egg/egg-secure-memory.c libsecret-0.16/egg/egg-secure-memory.c
+--- libsecret-0.16.old/egg/egg-secure-memory.c 2012-10-27 10:23:32 +0000
++++ libsecret-0.16/egg/egg-secure-memory.c     2014-04-20 18:43:03 +0000
+@@ -32,7 +32,9 @@
+ #include "egg-secure-memory.h"
+ 
+ #include <sys/types.h>
++#ifdef HAVE_SYS_MMAN_H
+ #include <sys/mman.h>
++#endif
+ #include <stddef.h>
+ #include <string.h>
+ #include <stdio.h>
+@@ -188,9 +190,11 @@ pool_alloc (void)
+ 
+       /* Create a new pool */
+       if (pool == NULL) {
++#if !defined(_WIN32)
+               len = getpagesize () * 2;
+               pages = mmap (0, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
+               if (pages == MAP_FAILED)
++#endif
+                       return NULL;
+ 
+               /* Fill in the block header, and inlude in block list */
+@@ -254,7 +258,9 @@ pool_free (void* item)
+               VALGRIND_DESTROY_MEMPOOL (pool);
+ #endif
+ 
++#if !defined(_WIN32)
+               munmap (pool, pool->length);
++#endif
+               return;
+       }
+ 
+@@ -860,11 +866,11 @@ sec_acquire_pages (size_t *sz,
+       ASSERT (*sz);
+       ASSERT (during_tag);
+ 
++#if defined(HAVE_MLOCK)
+       /* Make sure sz is a multiple of the page size */
+       pgsize = getpagesize ();
+       *sz = (*sz + pgsize -1) & ~(pgsize - 1);
+ 
+-#if defined(HAVE_MLOCK)
+       pages = mmap (0, *sz, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
+       if (pages == MAP_FAILED) {
+               if (show_warning && egg_secure_warnings)
+@@ -902,9 +908,9 @@ static void
+ sec_release_pages (void *pages, size_t sz)
+ {
+       ASSERT (pages);
+-      ASSERT (sz % getpagesize () == 0);
+ 
+ #if defined(HAVE_MLOCK)
++      ASSERT (sz % getpagesize () == 0);
+       if (munlock (pages, sz) < 0 && egg_secure_warnings)
+               fprintf (stderr, "couldn't unlock private memory: %s\n", strerror (errno));
+ 
+@@ -914,7 +920,7 @@ sec_release_pages (void *pages, size_t s
+       DEBUG_ALLOC ("gkr-secure-memory: freed block ", sz);
+ 
+ #else
+-      ASSERT (FALSE);
++      ASSERT (0);
+ #endif
+ }
+ 
+@@ -937,6 +943,11 @@ sec_block_create (size_t size,
+       if (getenv ("SECMEM_FORCE_FALLBACK"))
+               return NULL;
+ 
++#ifdef _WIN32
++      /* win32 does not have mlock(), so just fail in that case */
++      return NULL;
++#endif
++
+       block = pool_alloc ();
+       if (!block)
+               return NULL;
+diff -upr libsecret-0.16.old/libsecret/Makefile.am libsecret-0.16/libsecret/Makefile.am
+--- libsecret-0.16.old/libsecret/Makefile.am   2013-06-21 13:11:15 +0000
++++ libsecret-0.16/libsecret/Makefile.am       2014-04-20 18:45:31 +0000
+@@ -1,6 +1,6 @@
+ include $(top_srcdir)/Makefile.decl
+ 
+-SUBDIRS = . tests
++SUBDIRS = .
+ 
+ AM_CPPFLAGS = \
+       -I$(top_srcdir) \
diff --git a/win32/patches/libtasn1.patch b/win32/patches/libtasn1.patch
new file mode 100644
index 0000000..a9b87ce
--- /dev/null
+++ b/win32/patches/libtasn1.patch
@@ -0,0 +1,42 @@
+diff -upr libtasn1-3.4.old/config.h libtasn1-3.4/config.h
+--- libtasn1-3.4.old/config.h  2014-03-24 22:51:20 +0000
++++ libtasn1-3.4/config.h      2014-03-24 22:53:52 +0000
+@@ -558,7 +558,7 @@
+ #define HAVE_WINSOCK2_H 1
+ 
+ /* Define to 1 if you have the `_ftelli64' function. */
+-#define HAVE__FTELLI64 1
++#undef HAVE__FTELLI64
+ 
+ /* Define to 1 if you have the `_ftime' function. */
+ #define HAVE__FTIME 1
+diff -upr libtasn1-3.4.old/gl/msvc-inval.c libtasn1-3.4/gl/msvc-inval.c
+--- libtasn1-3.4.old/gl/msvc-inval.c   2014-03-24 22:52:55 +0000
++++ libtasn1-3.4/gl/msvc-inval.c       2014-03-24 22:50:23 +0000
+@@ -28,7 +28,7 @@
+ 
+ # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING
+ 
+-static void cdecl
++static void __cdecl
+ gl_msvc_invalid_parameter_handler (const wchar_t *expression,
+                                    const wchar_t *function,
+                                    const wchar_t *file,
+@@ -45,7 +45,7 @@ gl_msvc_invalid_parameter_handler (const
+ 
+ #  if defined _MSC_VER
+ 
+-static void cdecl
++static void __cdecl
+ gl_msvc_invalid_parameter_handler (const wchar_t *expression,
+                                    const wchar_t *function,
+                                    const wchar_t *file,
+@@ -94,7 +94,7 @@ gl_msvc_inval_current (void)
+     }
+ }
+ 
+-static void cdecl
++static void __cdecl
+ gl_msvc_invalid_parameter_handler (const wchar_t *expression,
+                                    const wchar_t *function,
+                                    const wchar_t *file,
diff --git a/win32/patches/libxslt.patch b/win32/patches/libxslt.patch
new file mode 100644
index 0000000..6605d4e
--- /dev/null
+++ b/win32/patches/libxslt.patch
@@ -0,0 +1,24 @@
+diff -upr -x .deps -x .libs -x '*.la' libxslt-1.1.28.old/Makefile.am libxslt-1.1.28/Makefile.am
+--- libxslt-1.1.28.old/Makefile.am     2014-05-18 08:43:11 +0000
++++ libxslt-1.1.28/Makefile.am 2014-05-18 08:29:50 +0000
+@@ -2,7 +2,6 @@ SUBDIRS = \
+       libxslt \
+       libexslt \
+       xsltproc \
+-      doc \
+       $(PYTHON_SUBDIR) \
+       tests
+ 
+diff -upr -x .deps -x .libs -x '*.la' libxslt-1.1.28.old/libxslt/security.c libxslt-1.1.28/libxslt/security.c
+--- libxslt-1.1.28.old/libxslt/security.c      2012-11-21 07:22:59 +0000
++++ libxslt-1.1.28/libxslt/security.c  2014-05-18 08:42:42 +0000
+@@ -40,6 +40,9 @@
+ #define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
+ #endif
+ #endif
++#if defined(WIN32)
++#include "win32config.h"
++#endif
+ 
+ #ifndef HAVE_STAT
+ #  ifdef HAVE__STAT
diff --git a/win32/patches/ncurses.patch b/win32/patches/ncurses.patch
new file mode 100644
index 0000000..eb357cf
--- /dev/null
+++ b/win32/patches/ncurses.patch
@@ -0,0 +1,15 @@
+diff -upr ncurses-5.9.old/include/curses.tail ncurses-5.9/include/curses.tail
+--- ncurses-5.9.old/include/curses.tail        2014-03-19 18:30:52 +0000
++++ ncurses-5.9/include/curses.tail    2014-03-19 18:31:25 +0000
+@@ -142,6 +142,11 @@ extern NCURSES_EXPORT(char *) _traceccha
+ #define _tracech_t            _tracechtype
+ #define _tracech_t2           _tracechtype2
+ #endif
++
++#if defined(__MINGW32__)
++#undef trace
++#endif
++
+ extern NCURSES_EXPORT(char *) _tracemouse (const MEVENT *);
+ extern NCURSES_EXPORT(void) trace (const unsigned int);
+ 
diff --git a/win32/patches/nss.patch b/win32/patches/nss.patch
new file mode 100644
index 0000000..7cbf8ef
--- /dev/null
+++ b/win32/patches/nss.patch
@@ -0,0 +1,464 @@
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/include/md/_win32_errors.h 
nss-3.15.4/nspr/pr/include/md/_win32_errors.h
+--- nss-3.15.4.old/nspr/pr/include/md/_win32_errors.h  2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/include/md/_win32_errors.h      2014-07-29 18:09:32 +0000
+@@ -6,8 +6,8 @@
+ #ifndef nspr_win32_errors_h___
+ #define nspr_win32_errors_h___
+ 
++#include <winsock2.h>
+ #include <windows.h>
+-#include <winsock.h>
+ #include <errno.h>
+ 
+ 
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/include/md/_win95.h 
nss-3.15.4/nspr/pr/include/md/_win95.h
+--- nss-3.15.4.old/nspr/pr/include/md/_win95.h 2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/include/md/_win95.h     2014-07-29 18:09:32 +0000
+@@ -8,8 +8,8 @@
+ 
+ #include "prio.h"
+ 
++#include <winsock2.h>
+ #include <windows.h>
+-#include <winsock.h>
+ #include <errno.h>
+ 
+ /*
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/include/md/_winnt.h 
nss-3.15.4/nspr/pr/include/md/_winnt.h
+--- nss-3.15.4.old/nspr/pr/include/md/_winnt.h 2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/include/md/_winnt.h     2014-07-29 18:09:32 +0000
+@@ -16,8 +16,8 @@
+     #define _WIN32_WINNT 0x0400
+ #endif /* _WIN32_WINNT */
+ 
++#include <winsock2.h>
+ #include <windows.h>
+-#include <winsock.h>
+ #ifdef __MINGW32__
+ #include <mswsock.h>
+ #endif
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/include/pratom.h 
nss-3.15.4/nspr/pr/include/pratom.h
+--- nss-3.15.4.old/nspr/pr/include/pratom.h    2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nspr/pr/include/pratom.h        2014-07-29 18:09:32 +0000
+@@ -14,6 +14,11 @@
+ #include "prtypes.h"
+ #include "prlock.h"
+ 
++#ifdef _WIN32
++#include <winsock2.h>
++#include <windows.h>
++#endif
++
+ PR_BEGIN_EXTERN_C
+ 
+ /*
+@@ -78,20 +83,20 @@ NSPR_API(PRInt32)  PR_AtomicAdd(PRInt32 *
+ **    the macros and functions won't be compatible and can't be used
+ **    interchangeably.
+ */
+-#if defined(_WIN32) && !defined(_WIN32_WCE) && \
+-    (!defined(_MSC_VER) || (_MSC_VER >= 1310))
++#if defined(_WIN32) && !defined(_WIN32_WCE)
+ 
++#if defined(_MSC_VER)
++#if (_MSC_VER >= 1310)
+ long __cdecl _InterlockedIncrement(long volatile *Addend);
+ long __cdecl _InterlockedDecrement(long volatile *Addend);
+ long __cdecl _InterlockedExchange(long volatile *Target, long Value);
+ long __cdecl _InterlockedExchangeAdd(long volatile *Addend, long Value);
++#endif
+ 
+-#ifdef _MSC_VER
+ #pragma intrinsic(_InterlockedIncrement)
+ #pragma intrinsic(_InterlockedDecrement)
+ #pragma intrinsic(_InterlockedExchange)
+ #pragma intrinsic(_InterlockedExchangeAdd)
+-#endif
+ 
+ #define PR_ATOMIC_INCREMENT(val) _InterlockedIncrement((long volatile *)(val))
+ #define PR_ATOMIC_DECREMENT(val) _InterlockedDecrement((long volatile *)(val))
+@@ -100,6 +105,15 @@ long __cdecl _InterlockedExchangeAdd(lon
+ #define PR_ATOMIC_ADD(ptr, val) \
+         (_InterlockedExchangeAdd((long volatile *)(ptr), (long)(val)) + (val))
+ 
++#elif defined(__MINGW32__)
++#define PR_ATOMIC_INCREMENT(val) InterlockedIncrement((long volatile *)(val))
++#define PR_ATOMIC_DECREMENT(val) InterlockedDecrement((long volatile *)(val))
++#define PR_ATOMIC_SET(val, newval) \
++        InterlockedExchange((long volatile *)(val), (long)(newval))
++#define PR_ATOMIC_ADD(ptr, val) \
++        (InterlockedExchangeAdd((long volatile *)(ptr), (long)(val)) + (val))
++#endif
++
+ #elif ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) && \
+       ((defined(__APPLE__) && \
+            (defined(__ppc__) || defined(__i386__) || defined(__x86_64__))) || \
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/src/md/prosdep.c 
nss-3.15.4/nspr/pr/src/md/prosdep.c
+--- nss-3.15.4.old/nspr/pr/src/md/prosdep.c    2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/src/md/prosdep.c        2014-07-29 18:09:32 +0000
+@@ -10,6 +10,7 @@
+ #include <unistd.h>
+ #endif
+ #ifdef _WIN32
++#include <winsock2.h>
+ #include <windows.h>
+ #endif 
+ #ifdef XP_BEOS
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/src/md/windows/ntdllmn.c 
nss-3.15.4/nspr/pr/src/md/windows/ntdllmn.c
+--- nss-3.15.4.old/nspr/pr/src/md/windows/ntdllmn.c    2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/src/md/windows/ntdllmn.c        2014-07-29 18:09:32 +0000
+@@ -16,6 +16,7 @@
+  * or not.
+  */
+ 
++#include <winsock2.h>
+ #include <windows.h>
+ #include <primpl.h>
+ 
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/src/md/windows/ntgc.c 
nss-3.15.4/nspr/pr/src/md/windows/ntgc.c
+--- nss-3.15.4.old/nspr/pr/src/md/windows/ntgc.c       2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/src/md/windows/ntgc.c   2014-07-29 18:09:32 +0000
+@@ -7,6 +7,7 @@
+  * GC related routines
+  *
+  */
++#include <winsock2.h>
+ #include <windows.h>
+ #include "primpl.h"
+ 
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/src/md/windows/ntio.c 
nss-3.15.4/nspr/pr/src/md/windows/ntio.c
+--- nss-3.15.4.old/nspr/pr/src/md/windows/ntio.c       2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/src/md/windows/ntio.c   2014-07-29 18:09:32 +0000
+@@ -2461,7 +2461,7 @@ _PR_MD_WRITE(PRFileDesc *fd, const void
+ PRInt32
+ _PR_MD_SOCKETAVAILABLE(PRFileDesc *fd)
+ {
+-    PRInt32 result;
++    u_long result;
+ 
+     if (ioctlsocket(fd->secret->md.osfd, FIONREAD, &result) < 0) {
+               PR_SetError(PR_BAD_DESCRIPTOR_ERROR, WSAGetLastError());
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/src/md/windows/ntmisc.c 
nss-3.15.4/nspr/pr/src/md/windows/ntmisc.c
+--- nss-3.15.4.old/nspr/pr/src/md/windows/ntmisc.c     2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/src/md/windows/ntmisc.c 2014-07-29 18:09:32 +0000
+@@ -10,6 +10,7 @@
+ 
+ #include "primpl.h"
+ #include <math.h>     /* for fabs() */
++#include <winsock2.h>
+ #include <windows.h>
+ 
+ char *_PR_MD_GET_ENV(const char *name)
+@@ -769,10 +770,14 @@ PRStatus _PR_WaitWindowsProcess(PRProces
+         return PR_FAILURE;
+     }
+     PR_ASSERT(dwRetVal == WAIT_OBJECT_0);
+-    if (exitCode != NULL &&
+-            GetExitCodeProcess(process->md.handle, exitCode) == FALSE) {
+-        PR_SetError(PR_UNKNOWN_ERROR, GetLastError());
+-        return PR_FAILURE;
++    if (exitCode != NULL) {
++          DWORD dwExitCode = 0;
++            if (GetExitCodeProcess(process->md.handle, &dwExitCode) == FALSE) {
++              *exitCode = dwExitCode;
++              PR_SetError(PR_UNKNOWN_ERROR, GetLastError());
++              return PR_FAILURE;
++      }
++      *exitCode = dwExitCode;
+     }
+     CloseHandle(process->md.handle);
+     PR_DELETE(process);
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/src/md/windows/w32rng.c 
nss-3.15.4/nspr/pr/src/md/windows/w32rng.c
+--- nss-3.15.4.old/nspr/pr/src/md/windows/w32rng.c     2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/src/md/windows/w32rng.c 2014-07-29 18:09:32 +0000
+@@ -3,6 +3,7 @@
+  * License, v. 2.0. If a copy of the MPL was not distributed with this
+  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ 
++#include <winsock2.h>
+ #include <windows.h>
+ #include <time.h>
+ #include <io.h>
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/src/md/windows/w95dllmain.c 
nss-3.15.4/nspr/pr/src/md/windows/w95dllmain.c
+--- nss-3.15.4.old/nspr/pr/src/md/windows/w95dllmain.c 2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/src/md/windows/w95dllmain.c     2014-07-29 18:09:32 +0000
+@@ -10,6 +10,7 @@
+  * nspr.
+  */
+ 
++#include <winsock2.h>
+ #include <windows.h>
+ #include <primpl.h>
+ 
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/src/md/windows/w95sock.c 
nss-3.15.4/nspr/pr/src/md/windows/w95sock.c
+--- nss-3.15.4.old/nspr/pr/src/md/windows/w95sock.c    2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/src/md/windows/w95sock.c        2014-07-29 18:09:32 +0000
+@@ -110,7 +110,7 @@ _MD_CloseSocket(PROsfd osfd)
+ PRInt32
+ _MD_SocketAvailable(PRFileDesc *fd)
+ {
+-    PRInt32 result;
++    u_long result;
+ 
+     if (ioctlsocket(fd->secret->md.osfd, FIONREAD, &result) < 0) {
+         PR_SetError(PR_BAD_DESCRIPTOR_ERROR, WSAGetLastError());
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/src/md/windows/win32_errors.c 
nss-3.15.4/nspr/pr/src/md/windows/win32_errors.c
+--- nss-3.15.4.old/nspr/pr/src/md/windows/win32_errors.c       2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/src/md/windows/win32_errors.c   2014-07-29 18:09:32 +0000
+@@ -6,6 +6,7 @@
+ #include "prerror.h"
+ #include "prlog.h"
+ #include <errno.h>
++#include <winsock2.h>
+ #include <windows.h>
+ 
+ /*
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nspr/pr/src/misc/prtpool.c 
nss-3.15.4/nspr/pr/src/misc/prtpool.c
+--- nss-3.15.4.old/nspr/pr/src/misc/prtpool.c  2013-11-09 09:49:40 +0000
++++ nss-3.15.4/nspr/pr/src/misc/prtpool.c      2014-07-29 18:09:32 +0000
+@@ -12,6 +12,7 @@
+  *
+  */
+ #ifdef OPT_WINNT
++#include <winsock2.h>
+ #include <windows.h>
+ #endif
+ 
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/cmd/crmftest/Makefile 
nss-3.15.4/nss/cmd/crmftest/Makefile
+--- nss-3.15.4.old/nss/cmd/crmftest/Makefile   2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/cmd/crmftest/Makefile       2014-07-29 18:09:32 +0000
+@@ -58,7 +58,7 @@ include $(CORE_DEPTH)/coreconf/rules.mk
+ LDDIST = $(DIST)/lib
+ 
+ ifeq (,$(filter-out WIN%,$(OS_TARGET)))
+-EXTRA_LIBS += $(LDDIST)/sectool.lib
++EXTRA_LIBS += $(LDDIST)/$(LIB_PREFIX)sectool.$(LIB_SUFFIX)
+ endif
+ 
+ include ../platrules.mk
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/cmd/manifest.mn nss-3.15.4/nss/cmd/manifest.mn
+--- nss-3.15.4.old/nss/cmd/manifest.mn 2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/cmd/manifest.mn     2014-07-29 18:09:32 +0000
+@@ -47,7 +47,6 @@ DIRS = lib  \
+  selfserv  \
+  signtool \
+  signver \
+- $(SHLIBSIGN_SRCDIR) \
+  smimetools  \
+  ssltap  \
+  strsclnt \
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/cmd/p7env/p7env.c nss-3.15.4/nss/cmd/p7env/p7env.c
+--- nss-3.15.4.old/nss/cmd/p7env/p7env.c       2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/cmd/p7env/p7env.c   2014-07-29 18:09:32 +0000
+@@ -14,6 +14,14 @@
+ #include "certdb.h"
+ #include "nss.h"
+ 
++#if defined(XP_WIN32)
++#include <winsock2.h>
++#include <windows.h>
++#ifdef EncryptFile
++#undef EncryptFile
++#endif
++#endif
++
+ #if defined(XP_UNIX)
+ #include <unistd.h>
+ #endif
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/cmd/platlibs.mk nss-3.15.4/nss/cmd/platlibs.mk
+--- nss-3.15.4.old/nss/cmd/platlibs.mk 2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/cmd/platlibs.mk     2014-07-29 18:09:32 +0000
+@@ -80,6 +80,7 @@ EXTRA_LIBS += \
+       $(DIST)/lib/$(LIB_PREFIX)cryptohi.$(LIB_SUFFIX) \
+       $(DIST)/lib/$(LIB_PREFIX)pk11wrap.$(LIB_SUFFIX) \
+       $(DIST)/lib/$(LIB_PREFIX)certdb.$(LIB_SUFFIX) \
++      $(DIST)/lib/$(LIB_PREFIX)certhi.$(LIB_SUFFIX) \
+       $(SOFTOKENLIB) \
+       $(CRYPTOLIB) \
+       $(DIST)/lib/$(LIB_PREFIX)nsspki.$(LIB_SUFFIX) \
+@@ -95,10 +96,19 @@ EXTRA_LIBS += \
+       $(NULL)
+ 
+ # $(PROGRAM) has NO explicit dependencies on $(OS_LIBS)
+-#OS_LIBS += \
++ifdef NS_USE_GCC
++    OS_LIBS += \
++      -lws2_32 \
++      -lwsock32 \
++      -lwinmm \
++      $(NULL)
++else
++    OS_LIBS += \
+       wsock32.lib \
+       winmm.lib \
+       $(NULL)
++endif
++
+ else
+ 
+ EXTRA_LIBS += \
+@@ -167,10 +177,19 @@ EXTRA_LIBS += \
+       $(NULL)
+ 
+ # $(PROGRAM) has NO explicit dependencies on $(OS_LIBS)
+-#OS_LIBS += \
++ifdef NS_USE_GCC
++    OS_LIBS += \
++      -lws2_32 \
++      -lwsock32 \
++      -lwinmm \
++      $(NULL)
++else
++    OS_LIBS += \
+       wsock32.lib \
+       winmm.lib \
+       $(NULL)
++endif
++
+ else
+ 
+ # $(PROGRAM) has explicit dependencies on $(EXTRA_LIBS)
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/cmd/shlibsign/shlibsign.c 
nss-3.15.4/nss/cmd/shlibsign/shlibsign.c
+--- nss-3.15.4.old/nss/cmd/shlibsign/shlibsign.c       2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/cmd/shlibsign/shlibsign.c   2014-07-29 18:09:32 +0000
+@@ -560,7 +560,7 @@ softokn_Init(CK_FUNCTION_LIST_PTR pFunct
+     CK_C_INITIALIZE_ARGS initArgs;
+     char *moduleSpec = NULL;
+ 
+-    initArgs.CreateMutex = NULL;
++    initArgs.GenerateMutex = NULL;
+     initArgs.DestroyMutex = NULL;
+     initArgs.LockMutex = NULL;
+     initArgs.UnlockMutex = NULL;
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/coreconf/WINNT.mk nss-3.15.4/nss/coreconf/WINNT.mk
+--- nss-3.15.4.old/nss/coreconf/WINNT.mk       2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/coreconf/WINNT.mk   2014-07-29 18:09:32 +0000
+@@ -12,9 +12,14 @@ include $(CORE_DEPTH)/coreconf/WIN32.mk
+ DEFINES += -DWINNT
+ 
+ #
+-# Win NT needs -GT so that fibers can work
++# MinGW needs IE 4.0 to have SHGetSpecialFolderPath functions
++# MSVC needs -GT so that fibers can work
+ #
+-OS_CFLAGS += -GT
++ifdef NS_USE_GCC
++    OS_CFLAGS += -D_WIN32_IE=0x0400
++else
++    OS_CFLAGS += -GT
++endif
+ 
+ # WINNT uses the lib prefix, Win95 doesn't
+ NSPR31_LIB_PREFIX = lib
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/lib/ckfw/wrap.c nss-3.15.4/nss/lib/ckfw/wrap.c
+--- nss-3.15.4.old/nss/lib/ckfw/wrap.c 2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/lib/ckfw/wrap.c     2014-07-29 18:09:32 +0000
+@@ -107,7 +107,7 @@ nssCKFW_GetThreadSafeState(CK_C_INITIALI
+     *pLocking_state = MultiThreaded;
+     return CKR_OK;
+   }
+-  if ((CK_CREATEMUTEX) NULL != pInitArgs->CreateMutex) functionCount++;
++  if ((CK_CREATEMUTEX) NULL != pInitArgs->GenerateMutex) functionCount++;
+   if ((CK_DESTROYMUTEX) NULL != pInitArgs->DestroyMutex) functionCount++;
+   if ((CK_LOCKMUTEX) NULL != pInitArgs->LockMutex) functionCount++;
+   if ((CK_UNLOCKMUTEX) NULL != pInitArgs->UnlockMutex) functionCount++;
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_object.c 
nss-3.15.4/nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_object.c
+--- nss-3.15.4.old/nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_object.c 2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_object.c     2014-07-29 18:09:32 +0000
+@@ -480,6 +480,8 @@ cleanup:
+  *  work as proxy function to a real objects.
+  *  
+  */
++#undef ERROR
++
+ PKIX_Error *
+ pkix_pl_Object_RegisterSelf(void *plContext)
+ {
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/lib/softoken/legacydb/manifest.mn 
nss-3.15.4/nss/lib/softoken/legacydb/manifest.mn
+--- nss-3.15.4.old/nss/lib/softoken/legacydb/manifest.mn       2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/lib/softoken/legacydb/manifest.mn   2014-07-29 18:09:32 +0000
+@@ -12,6 +12,8 @@ LIBRARY_NAME = nssdbm
+ LIBRARY_VERSION = 3
+ MAPFILE = $(OBJDIR)/nssdbm.def
+ 
++OS_CFLAGS += -I../../../../../dbm/include
++
+ DEFINES += -DSHLIB_SUFFIX=\"$(DLL_SUFFIX)\" -DSHLIB_PREFIX=\"$(DLL_PREFIX)\"
+ 
+ CSRCS = \
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/lib/softoken/pkcs11.c 
nss-3.15.4/nss/lib/softoken/pkcs11.c
+--- nss-3.15.4.old/nss/lib/softoken/pkcs11.c   2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/lib/softoken/pkcs11.c       2014-07-29 18:09:32 +0000
+@@ -2855,7 +2855,7 @@ CK_RV nsc_CommonInitialize(CK_VOID_PTR p
+ 
+    /* initialize the key and cert db's */
+     if (init_args && (!(init_args->flags & CKF_OS_LOCKING_OK))) {
+-        if (init_args->CreateMutex && init_args->DestroyMutex &&
++        if (init_args->GenerateMutex && init_args->DestroyMutex &&
+             init_args->LockMutex && init_args->UnlockMutex) {
+             /* softoken always uses NSPR (ie. OS locking), and doesn't know how
+              * to use the lock functions provided by the application.
+@@ -2863,7 +2863,7 @@ CK_RV nsc_CommonInitialize(CK_VOID_PTR p
+             crv = CKR_CANT_LOCK;
+             return crv;
+         }
+-        if (init_args->CreateMutex || init_args->DestroyMutex ||
++        if (init_args->GenerateMutex || init_args->DestroyMutex ||
+             init_args->LockMutex || init_args->UnlockMutex) {
+             /* only some of the lock functions were provided by the
+              * application. This is invalid per PKCS#11 spec.
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/lib/ssl/sslmutex.c nss-3.15.4/nss/lib/ssl/sslmutex.c
+--- nss-3.15.4.old/nss/lib/ssl/sslmutex.c      2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/lib/ssl/sslmutex.c  2014-07-29 18:09:32 +0000
+@@ -6,6 +6,11 @@
+ /* This ifdef should match the one in sslsnce.c */
+ #if defined(XP_UNIX) || defined(XP_WIN32) || defined (XP_OS2) || defined(XP_BEOS)
+ 
++#if defined(XP_WIN32)
++#include <winsock2.h>
++#include <windows.h>
++#endif
++
+ #include "sslmutex.h"
+ #include "prerr.h"
+ 
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/lib/util/pkcs11t.h nss-3.15.4/nss/lib/util/pkcs11t.h
+--- nss-3.15.4.old/nss/lib/util/pkcs11t.h      2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/lib/util/pkcs11t.h  2014-07-29 18:09:32 +0000
+@@ -1181,7 +1181,7 @@ typedef CK_CALLBACK_FUNCTION(CK_RV, CK_U
+ /* CK_C_INITIALIZE_ARGS provides the optional arguments to
+  * C_Initialize */
+ typedef struct CK_C_INITIALIZE_ARGS {
+-  CK_CREATEMUTEX CreateMutex;
++  CK_CREATEMUTEX GenerateMutex;
+   CK_DESTROYMUTEX DestroyMutex;
+   CK_LOCKMUTEX LockMutex;
+   CK_UNLOCKMUTEX UnlockMutex;
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/lib/util/secport.c nss-3.15.4/nss/lib/util/secport.c
+--- nss-3.15.4.old/nss/lib/util/secport.c      2014-07-29 17:38:22 +0000
++++ nss-3.15.4/nss/lib/util/secport.c  2014-07-29 18:09:32 +0000
+@@ -31,6 +31,10 @@
+ #if defined(XP_UNIX) || defined(XP_OS2) || defined(XP_BEOS)
+ #include <stdlib.h>
+ #else
++#if defined(XP_WIN32)
++#include <winsock2.h>
++#include <windows.h>
++#endif
+ #include "wtypes.h"
+ #endif
+ 
+diff -upr -x .deps -x .libs -x '*.la' nss-3.15.4.old/nss/nss.pc nss-3.15.4/nss/nss.pc
+--- nss-3.15.4.old/nss/nss.pc  2014-07-29 17:44:30 +0000
++++ nss-3.15.4/nss/nss.pc      2014-07-29 18:09:32 +0000
+@@ -0,0 +1,10 @@
++exec_prefix=${prefix}
++libdir=${exec_prefix}/lib
++includedir=${prefix}/include/nss
++
++Name: NSS
++Description: The Netscape Security Services
++Version: 3.15.4
++Requires: nspr
++Libs: -L${exec_prefix}/lib -lssl3 -lsmime3 -lnss3 -lnssutil3
++Cflags: -I${prefix}/include/nss
diff --git a/win32/patches/openldap.patch b/win32/patches/openldap.patch
new file mode 100644
index 0000000..3f737f0
--- /dev/null
+++ b/win32/patches/openldap.patch
@@ -0,0 +1,82 @@
+diff -upr openldap-2.4.9.old/Makefile openldap-2.4.9/Makefile
+--- openldap-2.4.9.old/Makefile        2014-03-26 05:17:05 +0000
++++ openldap-2.4.9/Makefile    2014-03-26 21:20:23 +0000
+@@ -264,7 +264,7 @@ FORCE:
+ ## top-level directory of the distribution or, alternatively, at
+ ## <http://www.OpenLDAP.org/license.html>.
+ 
+-SUBDIRS= include libraries clients servers tests doc
++SUBDIRS= include libraries clients servers
+ CLEANDIRS=
+ INSTALLDIRS= 
+ 
+diff -upr openldap-2.4.9.old/Makefile.in openldap-2.4.9/Makefile.in
+--- openldap-2.4.9.old/Makefile.in     2014-03-26 05:17:05 +0000
++++ openldap-2.4.9/Makefile.in 2014-03-26 21:20:00 +0000
+@@ -13,7 +13,7 @@
+ ## top-level directory of the distribution or, alternatively, at
+ ## <http://www.OpenLDAP.org/license.html>.
+ 
+-SUBDIRS= include libraries clients servers tests doc
++SUBDIRS= include libraries clients servers
+ CLEANDIRS=
+ INSTALLDIRS= 
+ 
+diff -upr openldap-2.4.9.old/include/ldap_pvt_thread.h openldap-2.4.9/include/ldap_pvt_thread.h
+--- openldap-2.4.9.old/include/ldap_pvt_thread.h       2014-03-26 05:17:20 +0000
++++ openldap-2.4.9/include/ldap_pvt_thread.h   2014-03-26 21:19:42 +0000
+@@ -61,7 +61,7 @@ ldap_pvt_thread_set_concurrency LDAP_P((
+ #define       LDAP_PVT_THREAD_SET_STACK_SIZE
+ #ifndef LDAP_PVT_THREAD_STACK_SIZE
+       /* LARGE stack. Will be twice as large on 64 bit machine. */
+-#define LDAP_PVT_THREAD_STACK_SIZE    ( 1 * 1024 * 1024 * sizeof(void *) )
++#define LDAP_PVT_THREAD_STACK_SIZE    ( 1 * 1024 * 1024 * 4 )
+ /* May be explicitly defined to zero to disable it */
+ #elif LDAP_PVT_THREAD_STACK_SIZE == 0
+ #undef LDAP_PVT_THREAD_SET_STACK_SIZE
+diff -upr openldap-2.4.9.old/include/portable.h openldap-2.4.9/include/portable.h
+--- openldap-2.4.9.old/include/portable.h      2014-03-26 05:17:20 +0000
++++ openldap-2.4.9/include/portable.h  2014-03-26 21:19:42 +0000
+@@ -1086,7 +1086,7 @@
+ #define snprintf _snprintf
+ 
+ /* Define like ber_socklen_t if <sys/socket.h> does not define. */
+-#define socklen_t int
++/*#define socklen_t int*/
+ 
+ /* Define to `signed int' if <sys/types.h> does not define. */
+ /* #undef ssize_t */
+diff -upr openldap-2.4.9.old/libraries/libldap_r/Makefile openldap-2.4.9/libraries/libldap_r/Makefile
+--- openldap-2.4.9.old/libraries/libldap_r/Makefile    2014-03-26 05:17:20 +0000
++++ openldap-2.4.9/libraries/libldap_r/Makefile        2014-03-26 21:19:42 +0000
+@@ -304,10 +304,10 @@ LIB_DEFS = -DLDAP_LIBRARY
+ 
+ XDEFS = -DLDAP_R_COMPILE -I$(XXDIR)
+ XLIBS = $(LIBRARY) $(LDAP_LIBLBER_LA) $(LDAP_LIBLUTIL_A)
+-XXLIBS = $(SECURITY_LIBS) $(LUTIL_LIBS)
++XXLIBS = $(SECURITY_LIBS) $(LUTIL_LIBS) -lgcrypt
+ XXXLIBS = $(LTHREAD_LIBS)
+-NT_LINK_LIBS = $(LDAP_LIBLBER_LA) $(AC_LIBS) $(SECURITY_LIBS)
+-UNIX_LINK_LIBS = $(LDAP_LIBLBER_LA) $(AC_LIBS) $(SECURITY_LIBS) $(LTHREAD_LIBS)
++NT_LINK_LIBS = $(LDAP_LIBLBER_LA) $(AC_LIBS) $(SECURITY_LIBS) -lgcrypt
++UNIX_LINK_LIBS = $(LDAP_LIBLBER_LA) $(AC_LIBS) $(SECURITY_LIBS) $(LTHREAD_LIBS) -lgcrypt
+ 
+ .links : Makefile
+       @for i in $(XXSRCS); do \
+diff -upr openldap-2.4.9.old/libraries/libldap_r/Makefile.in openldap-2.4.9/libraries/libldap_r/Makefile.in
+--- openldap-2.4.9.old/libraries/libldap_r/Makefile.in 2014-03-26 05:17:20 +0000
++++ openldap-2.4.9/libraries/libldap_r/Makefile.in     2014-03-26 21:19:42 +0000
+@@ -53,10 +53,10 @@ LIB_DEFS = -DLDAP_LIBRARY
+ 
+ XDEFS = -DLDAP_R_COMPILE -I$(XXDIR)
+ XLIBS = $(LIBRARY) $(LDAP_LIBLBER_LA) $(LDAP_LIBLUTIL_A)
+-XXLIBS = $(SECURITY_LIBS) $(LUTIL_LIBS)
++XXLIBS = $(SECURITY_LIBS) $(LUTIL_LIBS) -lgcrypt
+ XXXLIBS = $(LTHREAD_LIBS)
+-NT_LINK_LIBS = $(LDAP_LIBLBER_LA) $(AC_LIBS) $(SECURITY_LIBS)
+-UNIX_LINK_LIBS = $(LDAP_LIBLBER_LA) $(AC_LIBS) $(SECURITY_LIBS) $(LTHREAD_LIBS)
++NT_LINK_LIBS = $(LDAP_LIBLBER_LA) $(AC_LIBS) $(SECURITY_LIBS) -lgcrypt
++UNIX_LINK_LIBS = $(LDAP_LIBLBER_LA) $(AC_LIBS) $(SECURITY_LIBS) $(LTHREAD_LIBS) -lgcrypt
+ 
+ .links : Makefile
+       @for i in $(XXSRCS); do \
diff --git a/win32/patches/p11-kit.patch b/win32/patches/p11-kit.patch
new file mode 100644
index 0000000..00694bb
--- /dev/null
+++ b/win32/patches/p11-kit.patch
@@ -0,0 +1,60 @@
+diff -upr p11-kit-98292d6bbc.old/configure.ac p11-kit-98292d6bbc/configure.ac
+--- p11-kit-98292d6bbc.old/configure.ac        2014-03-24 21:44:56 +0000
++++ p11-kit-98292d6bbc/configure.ac    2014-03-24 20:45:41 +0000
+@@ -22,7 +22,7 @@ P11KIT_AGE=0
+ AC_CONFIG_HEADERS([config.h])
+ AC_CONFIG_MACRO_DIR([build/m4])
+ AC_CONFIG_AUX_DIR([build/litter])
+-AM_INIT_AUTOMAKE([1.10 foreign serial-tests])
++AM_INIT_AUTOMAKE([1.10 foreign])
+ AM_SANITY_CHECK
+ AM_MAINTAINER_MODE([enable])
+ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])],)
+diff -upr p11-kit-98292d6bbc.old/common/compat.c p11-kit-98292d6bbc/common/compat.c
+--- p11-kit-98292d6bbc.old/common/compat.c     2014-03-26 05:06:34 +0000
++++ p11-kit-98292d6bbc/common/compat.c 2014-03-26 05:04:47 +0000
+@@ -840,7 +840,17 @@ strerror_r (int errnum,
+             size_t buflen)
+ {
+ #ifdef OS_WIN32
++      #ifdef __MINGW32__
++      char *str = strerror (errnum);
++      if (!str) {
++              *buf = 0;
++              return EINVAL;
++      }
++      strncpy (buf, str, buflen);
++      return 0;
++      #else
+       return strerror_s (buf, buflen, errnum);
++      #endif
+ #else
+       #error no strerror_r implementation
+ #endif
+diff -upr p11-kit-98292d6bbc.old/p11-kit/Makefile.am p11-kit-98292d6bbc/p11-kit/Makefile.am
+--- p11-kit-98292d6bbc.old/p11-kit/Makefile.am 2014-03-26 05:06:05 +0000
++++ p11-kit-98292d6bbc/p11-kit/Makefile.am     2014-03-24 23:17:41 +0000
+@@ -98,6 +98,11 @@ libp11_kit_testable_la_CFLAGS = \
+       $(LIBFFI_CFLAGS) \
+       $(NULL)
+ 
++# Proxy module is actually same as library, so install a link
++install-exec-hook:
++      $(LN_S) -f `readlink $(DESTDIR)$(libdir)/libp11-kit.so` $(DESTDIR)$(libdir)/p11-kit-proxy.so
++      $(MKDIR_P) $(DESTDIR)$(p11_package_config_modules)
++
+ endif
+ 
+ pkgconfigdir = $(libdir)/pkgconfig
+@@ -112,11 +117,6 @@ EXTRA_DIST = \
+       docs.h \
+       $(NULL)
+ 
+-# Proxy module is actually same as library, so install a link
+-install-exec-hook:
+-      $(LN_S) -f `readlink $(DESTDIR)$(libdir)/libp11-kit.so` $(DESTDIR)$(libdir)/p11-kit-proxy.so
+-      $(MKDIR_P) $(DESTDIR)$(p11_package_config_modules)
+-
+ bin_PROGRAMS = \
+       p11-kit
+ 
diff --git a/win32/patches/regex.patch b/win32/patches/regex.patch
new file mode 100644
index 0000000..cb39919
--- /dev/null
+++ b/win32/patches/regex.patch
@@ -0,0 +1,48 @@
+diff -upr -x .deps -x .libs -x '*.la' regex-20090805.old/lib/gettext.h regex-20090805/lib/gettext.h
+--- regex-20090805.old/lib/gettext.h   2009-08-05 19:37:29 +0000
++++ regex-20090805/lib/gettext.h       2014-05-31 06:05:12 +0000
+@@ -178,7 +178,7 @@ npgettext_aux (const char *domain,
+ #include <string.h>
+ 
+ #define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
+-  (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \
++  (((__GNUC__ >= 3 || __GNUG__ >= 2) && (defined(__STRICT_ANSI__) && !__STRICT_ANSI__)) \
+    /* || __STDC_VERSION__ >= 199901L */ )
+ 
+ #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+diff -upr -x .deps -x .libs -x '*.la' regex-20090805.old/lib/regex.h regex-20090805/lib/regex.h
+--- regex-20090805.old/lib/regex.h     2009-08-05 19:37:32 +0000
++++ regex-20090805/lib/regex.h 2014-05-31 06:05:29 +0000
+@@ -630,7 +630,7 @@ extern int re_exec (const char *);
+    'configure' might #define 'restrict' to those words, so pick a
+    different name.  */
+ #ifndef _Restrict_
+-# if 199901L <= __STDC_VERSION__
++# if (defined(__STDC_VERSION__) && 199901L <= __STDC_VERSION__)
+ #  define _Restrict_ restrict
+ # elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)
+ #  define _Restrict_ __restrict
+@@ -642,9 +642,9 @@ extern int re_exec (const char *);
+    sys/cdefs.h's definition of __restrict_arr, though, as it
+    mishandles gcc -ansi -pedantic.  */
+ #ifndef _Restrict_arr_
+-# if ((199901L <= __STDC_VERSION__                                    \
++# if (((defined(__STDC_VERSION__) && 199901L <= __STDC_VERSION__)     \
+        || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__))   \
+-         && !__STRICT_ANSI__))                                        \
++         && (!defined(__STRICT_ANSI__) || !__STRICT_ANSI__)))                                 \
+       && !defined __GNUG__)
+ #  define _Restrict_arr_ _Restrict_
+ # else
+diff -upr -x .deps -x .libs -x '*.la' regex-20090805.old/lib/regex_internal.h 
regex-20090805/lib/regex_internal.h
+--- regex-20090805.old/lib/regex_internal.h    2009-08-05 19:37:33 +0000
++++ regex-20090805/lib/regex_internal.h        2014-05-31 06:05:50 +0000
+@@ -338,7 +338,7 @@ typedef struct
+     Idx idx;                  /* for BACK_REF */
+     re_context_type ctx_type; /* for ANCHOR */
+   } opr;
+-#if __GNUC__ >= 2 && !__STRICT_ANSI__
++#if __GNUC__ >= 2 && (defined(__STRICT_ANSI__) && !__STRICT_ANSI__)
+   re_token_type_t type : 8;
+ #else
+   re_token_type_t type;
diff --git a/win32/patches/rss.patch b/win32/patches/rss.patch
new file mode 100644
index 0000000..5fa6194
--- /dev/null
+++ b/win32/patches/rss.patch
@@ -0,0 +1,101 @@
+diff --git a/configure.ac b/configure.ac
+index 6679ab5..f7fdae5 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -104,6 +104,7 @@ PKG_CHECK_MODULES(EVOLUTION_RSS_EPLUGIN,
+    libsoup$SOUP >= $LIBSOUP_REQUIRED dnl
+    $EVOLUTION_PLUGIN_CHECK dnl
+    evolution-shell$EVOLUTION_BASE_VERSION_S >= $EVOLUTION_REQUIRED dnl
++   evolution-mail$EVOLUTION_BASE_VERSION_S >= $EVOLUTION_REQUIRED dnl
+    $EVOLUTION_ADDITIONAL dnl
+    libebook-1.2 dnl
+ ])
+@@ -316,12 +317,6 @@ AC_SUBST(RENDER_CFLAGS)
+ AC_SUBST(RENDER)
+ AC_SUBST(RENDER_N)
+ 
+-dnl ***********
+-dnl GConf stuff
+-dnl ***********
+-AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
+-AM_GCONF_SOURCE_2
+-
+ dnl ***************
+ dnl Gsettings stuff
+ dnl ***************
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 91f2671..c0c6ecd 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -130,8 +130,12 @@ evolution_module_rss_la_CPPFLAGS =                        \
+         $(AM_CPPFLAGS)                                        \
+         -I$(top_srcdir)                                       \
+         -DEVOLUTION_PRIVDATADIR=\""$(privdatadir)"\"  \
+-        -DG_LOG_DOMAIN=\"evolution-module-rss\"               \
+-        $(EVOLUTION_RSS_EPLUGIN_LIBS)
++        -DG_LOG_DOMAIN=\"evolution-module-rss\"
++
++evolution_module_rss_la_LIBADD =                      \
++        $(EVOLUTION_RSS_EPLUGIN_LIBS)                 \
++      $(DATASERVER_LIBS)
++
+ 
+ 
+ evolution_module_rss_la_LDFLAGS =             \
+diff --git a/src/e-mail-formatter-evolution-rss.c b/src/e-mail-formatter-evolution-rss.c
+index 6ae8d16..fd581d1 100644
+--- a/src/e-mail-formatter-evolution-rss.c
++++ b/src/e-mail-formatter-evolution-rss.c
+@@ -30,7 +30,6 @@
+ #include <libedataserver/libedataserver.h>
+ 
+ #include <glib/gi18n-lib.h>
+-#include <X11/Xlib.h>
+ #include <camel/camel.h>
+ 
+ #include "misc.h"
+diff --git a/src/rss-config-factory.c b/src/rss-config-factory.c
+index a4f22e8..3529a64 100644
+--- a/src/rss-config-factory.c
++++ b/src/rss-config-factory.c
+@@ -552,11 +552,18 @@ folder_cb (GtkWidget *widget, gpointer data)
+       model = em_folder_tree_model_get_default ();
+ #endif
+ #if EVOLUTION_VERSION >= 30303
++#if EVOLUTION_VERSION >= 31301
++      dialog = em_folder_selector_new (window, model);
++      em_folder_selector_set_can_create (EM_FOLDER_SELECTOR (dialog), TRUE);
++      em_folder_selector_set_caption (EM_FOLDER_SELECTOR (dialog), _("Move to Folder"));
++      em_folder_selector_set_default_button_label (EM_FOLDER_SELECTOR (dialog), _("M_ove"));
++#else
+       dialog = em_folder_selector_new (
+                       window,
+                       model,
+                       EM_FOLDER_SELECTOR_CAN_CREATE,
+                       _("Move to Folder"), NULL, _("M_ove"));
++#endif
+ #else
+       dialog = em_folder_selector_new (
+                       window,
+diff --git a/src/rss-evo-common.c b/src/rss-evo-common.c
+index 1a96862..269565b 100644
+--- a/src/rss-evo-common.c
++++ b/src/rss-evo-common.c
+@@ -55,6 +55,17 @@
+ #include <libsoup/soup-gnome-features.h>
+ #endif
+ 
++#ifdef G_OS_WIN32
++#include <winsock2.h>
++#include <ws2tcpip.h>
++#ifdef HAVE_WSPIAPI_H
++#include <wspiapi.h>
++#endif
++
++#define IN6_ARE_ADDR_EQUAL(a,b) IN6_ADDR_EQUAL(a,b)
++
++#endif
++
+ #define d(x)
+ 
+ #include "rss-evo-common.h"
diff --git a/win32/patches/tzdata.patch b/win32/patches/tzdata.patch
new file mode 100644
index 0000000..97963ce
--- /dev/null
+++ b/win32/patches/tzdata.patch
@@ -0,0 +1,42 @@
+diff -upr tzdata2014b.old/Makefile tzdata2014b/Makefile
+--- tzdata2014b.old/Makefile   2014-03-30 17:49:03 +0000
++++ tzdata2014b/Makefile       2014-03-30 20:19:53 +0000
+@@ -52,7 +52,7 @@ TOPDIR=              /usr/local
+ # Use an absolute path name for TZDIR unless you're just testing the software.
+ 
+ TZDIR_BASENAME=       zoneinfo
+-TZDIR=                $(TOPDIR)/etc/$(TZDIR_BASENAME)
++TZDIR=                $(TOPDIR)/share/$(TZDIR_BASENAME)
+ 
+ # Types to try, as an alternative to time_t.  int64_t should be first.
+ TIME_T_ALTERNATIVES= int64_t int32_t uint32_t uint64_t
+@@ -223,7 +223,7 @@ GCC_DEBUG_FLAGS = -Dlint -g3 -O3 -fno-co
+ # before the first Monday in January when a "%V" format is used and January 1
+ # falls on a Friday, Saturday, or Sunday.
+ 
+-CFLAGS=
++CFLAGS=-DHAVE_SYS_WAIT_H=0 -DHAVE_LINK=0 -DHAVE_SYMLINK=0 -DHAVE_STDINT_H=1
+ 
+ # Linker flags.  Default to $(LFLAGS) for backwards compatibility
+ # to tzcode2012h and earlier.
+diff -upr tzdata2014b.old/zic.c tzdata2014b/zic.c
+--- tzdata2014b.old/zic.c      2014-03-30 17:49:03 +0000
++++ tzdata2014b/zic.c  2014-03-30 17:52:02 +0000
+@@ -16,7 +16,7 @@
+ typedef int_fast64_t  zic_t;
+ #define ZIC_MIN INT_FAST64_MIN
+ #define ZIC_MAX INT_FAST64_MAX
+-#define SCNdZIC SCNdFAST64
++#define SCNdZIC "lld"
+ 
+ #ifndef ZIC_MAX_ABBR_LEN_WO_WARN
+ #define ZIC_MAX_ABBR_LEN_WO_WARN      6
+@@ -2814,7 +2814,7 @@ mkdirs(char *argname)
+                       ** created by some other multiprocessor, so we get
+                       ** to do extra checking.
+                       */
+-                      if (mkdir(name, MKDIR_UMASK) != 0) {
++                      if (mkdir(name) != 0) {
+                               const char *e = strerror(errno);
+ 
+                               if (errno != EEXIST || !itsdir(name)) {
diff --git a/win32/patches/webkitgtk.patch b/win32/patches/webkitgtk.patch
new file mode 100644
index 0000000..7cc42fc
--- /dev/null
+++ b/win32/patches/webkitgtk.patch
@@ -0,0 +1,727 @@
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/JavaScriptCore/jit/JITStubsX86.h 
webkitgtk-2.4.1/Source/JavaScriptCore/jit/JITStubsX86.h
+--- webkitgtk-2.4.1.old/Source/JavaScriptCore/jit/JITStubsX86.h        2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/JavaScriptCore/jit/JITStubsX86.h    2014-06-20 19:42:30 +0000
+@@ -32,6 +32,7 @@
+ #define JITStubsX86_h
+ 
+ #include "JITStubsX86Common.h"
++#include <wtf/InlineASM.h>
+ 
+ #if !CPU(X86)
+ #error "JITStubsX86.h should only be #included if CPU(X86)"
+@@ -198,6 +199,225 @@ SYMBOL_STRING(ctiMasmProbeTrampolineEnd)
+ );
+ #endif // USE(MASM_PROBE)
+ 
++#if OS(WINDOWS) && ENABLE(JIT)
++extern "C" {
++
++    // FIXME: Since Windows doesn't use the LLInt, we have inline stubs here.
++    // Until the LLInt is changed to support Windows, these stub needs to be updated.
++    asm (
++        ".globl " SYMBOL_STRING(callToJavaScript) "\n"
++        HIDE_SYMBOL(callToJavaScript) "\n"
++        SYMBOL_STRING(callToJavaScript) ":" "\n"
++            "mov    (%esp),%edx" "\n"
++            "push   %ebp" "\n"
++            "mov    %ebp,%eax" "\n"
++            "mov    %esp,%ebp" "\n"
++            "push   %esi" "\n"
++            "push   %edi" "\n"
++            "push   %ebx" "\n"
++            "sub    $0x1c,%esp" "\n"
++            "mov    0x34(%esp),%ecx" "\n"
++            "mov    0x38(%esp),%esi" "\n"
++            "mov    0x3c(%esp),%ebp" "\n"
++            "sub    $0x20,%ebp" "\n"
++            "movl   $0x0,0x24(%ebp)" "\n"
++            "movl   $0x0,0x20(%ebp)" "\n"
++            "movl   $0x0,0x1c(%ebp)" "\n"
++            "mov    %ecx,0x18(%ebp)" "\n"
++            "mov    (%ecx),%ebx" "\n"
++            "movl   $0x0,0x14(%ebp)" "\n"
++            "mov    %ebx,0x10(%ebp)" "\n"
++            "movl   $0x0,0xc(%ebp)" "\n"
++            "movl   $0x1,0x8(%ebp)" "\n"
++            "mov    %edx,0x4(%ebp)" "\n"
++            "mov    %eax,0x0(%ebp)" "\n"
++            "mov    %ebp,%eax" "\n"
++
++            "mov    0x28(%esi),%edx" "\n"
++            "add    $0x5,%edx" "\n"
++            "shl    $0x3,%edx" "\n"
++            "sub    %edx,%ebp" "\n"
++            "mov    %eax,0x0(%ebp)" "\n"
++
++            "mov    $0x5,%eax" "\n"
++
++        ".copyHeaderLoop:" "\n"
++            "sub    $0x1,%eax" "\n"
++            "mov    (%esi,%eax,8),%ecx" "\n"
++            "mov    %ecx,0x8(%ebp,%eax,8)" "\n"
++            "mov    0x4(%esi,%eax,8),%ecx" "\n"
++            "mov    %ecx,0xc(%ebp,%eax,8)" "\n"
++            "test   %eax,%eax" "\n"
++            "jne .copyHeaderLoop" "\n"
++
++            "mov    0x18(%esi),%edx" "\n"
++            "sub    $0x1,%edx" "\n"
++            "mov    0x28(%esi),%ecx" "\n"
++            "sub    $0x1,%ecx" "\n"
++
++            "cmp    %ecx,%edx" "\n"
++            "je .copyArgs" "\n"
++
++            "xor    %eax,%eax" "\n"
++            "mov    $0xfffffffc,%ebx" "\n"
++
++        ".fillExtraArgsLoop:" "\n"
++            "sub    $0x1,%ecx" "\n"
++            "mov    %eax,0x30(%ebp,%ecx,8)" "\n"
++            "mov    %ebx,0x34(%ebp,%ecx,8)" "\n"
++            "cmp    %ecx,%edx" "\n"
++            "jne .fillExtraArgsLoop" "\n"
++
++        ".copyArgs:" "\n"
++            "mov    0x2c(%esi),%eax" "\n"
++
++        ".copyArgsLoop:" "\n"
++            "test   %edx,%edx" "\n"
++            "je .copyArgsDone" "\n"
++            "sub    $0x1,%edx" "\n"
++            "mov    (%eax,%edx,8),%ecx" "\n"
++            "mov    0x4(%eax,%edx,8),%ebx" "\n"
++            "mov    %ecx,0x30(%ebp,%edx,8)" "\n"
++            "mov    %ebx,0x34(%ebp,%edx,8)" "\n"
++            "jmp .copyArgsLoop" "\n"
++
++        ".copyArgsDone:" "\n"
++            "mov    0x34(%esp),%ecx" "\n"
++            "mov    %ebp,(%ecx)" "\n"
++
++            "call   *0x30(%esp)" "\n"
++
++            "cmpl   $0x1,0x8(%ebp)" "\n"
++            "je .calleeFramePopped" "\n"
++            "mov    0x0(%ebp),%ebp" "\n"
++
++        ".calleeFramePopped:" "\n"
++            "mov    0x18(%ebp),%ecx" "\n"
++            "mov    0x10(%ebp),%ebx" "\n"
++            "mov    %ebx,(%ecx)" "\n"
++
++            "add    $0x1c,%esp" "\n"
++            "pop    %ebx" "\n"
++            "pop    %edi" "\n"
++            "pop    %esi" "\n"
++            "pop    %ebp" "\n"
++            "ret" "\n"
++
++        ".globl " SYMBOL_STRING(returnFromJavaScript) "\n"
++        HIDE_SYMBOL(returnFromJavaScript) "\n"
++        SYMBOL_STRING(returnFromJavaScript) ":" "\n"
++            "add    $0x1c,%esp" "\n"
++            "pop    %ebx" "\n"
++            "pop    %edi" "\n"
++            "pop    %esi" "\n"
++            "pop    %ebp" "\n"
++            "ret" "\n"
++
++        ".globl " SYMBOL_STRING(callToNativeFunction) "\n"
++        HIDE_SYMBOL(callToNativeFunction) "\n"
++        SYMBOL_STRING(callToNativeFunction) ":" "\n"
++            "mov    (%esp),%edx" "\n"
++            "push   %ebp" "\n"
++            "mov    %ebp,%eax" "\n"
++            "mov    %esp,%ebp" "\n"
++            "push   %esi" "\n"
++            "push   %edi" "\n"
++            "push   %ebx" "\n"
++            "sub    $0x1c,%esp" "\n"
++            "mov    0x34(%esp),%ecx" "\n"
++            "mov    0x38(%esp),%esi" "\n"
++            "mov    0x3c(%esp),%ebp" "\n"
++            "sub    $0x20,%ebp" "\n"
++            "movl   $0x0,0x24(%ebp)" "\n"
++            "movl   $0x0,0x20(%ebp)" "\n"
++            "movl   $0x0,0x1c(%ebp)" "\n"
++            "mov    %ecx,0x18(%ebp)" "\n"
++            "mov    (%ecx),%ebx" "\n"
++            "movl   $0x0,0x14(%ebp)" "\n"
++            "mov    %ebx,0x10(%ebp)" "\n"
++            "movl   $0x0,0xc(%ebp)" "\n"
++            "movl   $0x1,0x8(%ebp)" "\n"
++            "mov    %edx,0x4(%ebp)" "\n"
++            "mov    %eax,0x0(%ebp)" "\n"
++            "mov    %ebp,%eax" "\n"
++
++            "mov    0x28(%esi),%edx" "\n"
++            "add    $0x5,%edx" "\n"
++            "shl    $0x3,%edx" "\n"
++            "sub    %edx,%ebp" "\n"
++            "mov    %eax,0x0(%ebp)" "\n"
++
++            "mov    $0x5,%eax" "\n"
++
++        "copyHeaderLoop:" "\n"
++            "sub    $0x1,%eax" "\n"
++            "mov    (%esi,%eax,8),%ecx" "\n"
++            "mov    %ecx,0x8(%ebp,%eax,8)" "\n"
++            "mov    0x4(%esi,%eax,8),%ecx" "\n"
++            "mov    %ecx,0xc(%ebp,%eax,8)" "\n"
++            "test   %eax,%eax" "\n"
++            "jne copyHeaderLoop" "\n"
++
++            "mov    0x18(%esi),%edx" "\n"
++            "sub    $0x1,%edx" "\n"
++            "mov    0x28(%esi),%ecx" "\n"
++            "sub    $0x1,%ecx" "\n"
++
++            "cmp    %ecx,%edx" "\n"
++            "je copyArgs" "\n"
++
++            "xor    %eax,%eax" "\n"
++            "mov    $0xfffffffc,%ebx" "\n"
++
++        "fillExtraArgsLoop:" "\n"
++            "sub    $0x1,%ecx" "\n"
++            "mov    %eax,0x30(%ebp,%ecx,8)" "\n"
++            "mov    %ebx,0x34(%ebp,%ecx,8)" "\n"
++            "cmp    %ecx,%edx" "\n"
++            "jne fillExtraArgsLoop" "\n"
++
++        "copyArgs:" "\n"
++            "mov    0x2c(%esi),%eax" "\n"
++
++        "copyArgsLoop:" "\n"
++            "test   %edx,%edx" "\n"
++            "je copyArgsDone" "\n"
++            "sub    $0x1,%edx" "\n"
++            "mov    (%eax,%edx,8),%ecx" "\n"
++            "mov    0x4(%eax,%edx,8),%ebx" "\n"
++            "mov    %ecx,0x30(%ebp,%edx,8)" "\n"
++            "mov    %ebx,0x34(%ebp,%edx,8)" "\n"
++            "jmp copyArgsLoop" "\n"
++
++        "copyArgsDone:" "\n"
++            "mov    0x34(%esp),%ecx" "\n"
++            "mov    %ebp,(%ecx)" "\n"
++
++            "mov    0x30(%esp),%edi" "\n"
++            "mov    %ebp,0x30(%esp)" "\n"
++            "mov    %ebp,%ecx" "\n"
++            "call   *%edi" "\n"
++
++            "cmpl   $0x1,0x8(%ebp)" "\n"
++            "je calleeFramePopped" "\n"
++            "mov    0x0(%ebp),%ebp" "\n"
++
++        "calleeFramePopped:" "\n"
++            "mov    0x18(%ebp),%ecx" "\n"
++            "mov    0x10(%ebp),%ebx" "\n"
++            "mov    %ebx,(%ecx)" "\n"
++
++            "add    $0x1c,%esp" "\n"
++            "pop    %ebx" "\n"
++            "pop    %edi" "\n"
++            "pop    %esi" "\n"
++            "pop    %ebp" "\n"
++            "ret" "\n"
++        );
++}
++
++#endif // OS(WINDOWS) && ENABLE(JIT)
++
+ #endif // COMPILER(GCC)
+ 
+ #if COMPILER(MSVC)
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/ThirdParty/ANGLE/GNUmakefile.am 
webkitgtk-2.4.1/Source/ThirdParty/ANGLE/GNUmakefile.am
+--- webkitgtk-2.4.1.old/Source/ThirdParty/ANGLE/GNUmakefile.am 2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/ThirdParty/ANGLE/GNUmakefile.am     2014-05-24 05:04:11 +0000
+@@ -80,7 +80,6 @@ libANGLE_la_SOURCES = \
+       Source/ThirdParty/ANGLE/src/compiler/MMap.h \
+       Source/ThirdParty/ANGLE/src/compiler/NodeSearch.h \
+       Source/ThirdParty/ANGLE/src/compiler/osinclude.h \
+-      Source/ThirdParty/ANGLE/src/compiler/ossource_posix.cpp \
+       Source/ThirdParty/ANGLE/src/compiler/OutputESSL.cpp \
+       Source/ThirdParty/ANGLE/src/compiler/OutputESSL.h \
+       Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp \
+@@ -161,3 +160,11 @@ libANGLE_la_SOURCES = \
+       Source/ThirdParty/ANGLE/src/compiler/VersionGLSL.h \
+       Source/ThirdParty/ANGLE/src/third_party/compiler/ArrayBoundsClamper.cpp \
+       Source/ThirdParty/ANGLE/src/third_party/compiler/ArrayBoundsClamper.h
++
++if OS_WIN32
++libANGLE_la_SOURCES += \
++      Source/ThirdParty/ANGLE/src/compiler/ossource_win.cpp
++else
++libANGLE_la_SOURCES += \
++      Source/ThirdParty/ANGLE/src/compiler/ossource_posix.cpp
++endif
+diff -upr -x .deps -x .libs -x '*.la' 
webkitgtk-2.4.1.old/Source/ThirdParty/ANGLE/src/compiler/ossource_win.cpp 
webkitgtk-2.4.1/Source/ThirdParty/ANGLE/src/compiler/ossource_win.cpp
+--- webkitgtk-2.4.1.old/Source/ThirdParty/ANGLE/src/compiler/ossource_win.cpp  2014-07-12 16:07:30 +0000
++++ webkitgtk-2.4.1/Source/ThirdParty/ANGLE/src/compiler/ossource_win.cpp      2014-05-24 05:04:11 +0000
+@@ -0,0 +1,57 @@
++//
++// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++//
++
++#include "compiler/osinclude.h"
++//
++// This file contains contains the window's specific functions
++//
++
++#if !defined(ANGLE_OS_WIN)
++#error Trying to build a windows specific file in a non windows build.
++#endif
++
++
++//
++// Thread Local Storage Operations
++//
++OS_TLSIndex OS_AllocTLSIndex()
++{
++      DWORD dwIndex = TlsAlloc();
++      if (dwIndex == TLS_OUT_OF_INDEXES) {
++              assert(0 && "OS_AllocTLSIndex(): Unable to allocate Thread Local Storage");
++              return OS_INVALID_TLS_INDEX;
++      }
++
++      return dwIndex;
++}
++
++
++bool OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue)
++{
++      if (nIndex == OS_INVALID_TLS_INDEX) {
++              assert(0 && "OS_SetTLSValue(): Invalid TLS Index");
++              return false;
++      }
++
++      if (TlsSetValue(nIndex, lpvValue))
++              return true;
++      else
++              return false;
++}
++
++
++bool OS_FreeTLSIndex(OS_TLSIndex nIndex)
++{
++      if (nIndex == OS_INVALID_TLS_INDEX) {
++              assert(0 && "OS_SetTLSValue(): Invalid TLS Index");
++              return false;
++      }
++
++      if (TlsFree(nIndex))
++              return true;
++      else
++              return false;
++}
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/WTF/GNUmakefile.list.am 
webkitgtk-2.4.1/Source/WTF/GNUmakefile.list.am
+--- webkitgtk-2.4.1.old/Source/WTF/GNUmakefile.list.am 2014-05-18 16:44:48 +0000
++++ webkitgtk-2.4.1/Source/WTF/GNUmakefile.list.am     2014-05-24 05:09:00 +0000
+@@ -256,3 +256,8 @@ wtf_sources += \
+     Source/WTF/wtf/unicode/UnicodeMacrosFromICU.h \
+     Source/WTF/wtf/unicode/icu/CollatorICU.cpp \
+     Source/WTF/wtf/unicode/icu/UnicodeIcu.h
++
++if TARGET_WIN32
++wtf_sources += \
++    Source/WTF/wtf/win/GdiObject.h
++endif # TARGET_WIN32
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/WTF/wtf/Atomics.h 
webkitgtk-2.4.1/Source/WTF/wtf/Atomics.h
+--- webkitgtk-2.4.1.old/Source/WTF/wtf/Atomics.h       2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/WTF/wtf/Atomics.h   2014-05-28 18:01:59 +0000
+@@ -260,7 +260,7 @@ inline void memoryBarrierBeforeUnlock()
+ inline bool weakCompareAndSwap(uint8_t* location, uint8_t expected, uint8_t newValue)
+ {
+ #if ENABLE(COMPARE_AND_SWAP)
+-#if !OS(WINDOWS) && (CPU(X86) || CPU(X86_64))
++#if !COMPILER(MSVC) && (CPU(X86) || CPU(X86_64))
+     unsigned char result;
+     asm volatile(
+         "lock; cmpxchgb %3, %2\n\t"
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/WTF/wtf/MathExtras.h 
webkitgtk-2.4.1/Source/WTF/wtf/MathExtras.h
+--- webkitgtk-2.4.1.old/Source/WTF/wtf/MathExtras.h    2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/WTF/wtf/MathExtras.h        2014-05-24 05:04:11 +0000
+@@ -67,6 +67,12 @@ const double piOverFourDouble = M_PI_4;
+ const float piOverFourFloat = static_cast<float>(M_PI_4);
+ #endif
+ 
++#ifndef M_SQRT2
++const double sqrtOfTwoDouble = 1.41421356237309504880;
++#else
++const double sqrtOfTwoDouble = M_SQRT2;
++#endif
++
+ #if OS(DARWIN)
+ 
+ // Work around a bug in the Mac OS X libc where ceil(-0.1) return +0.
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/WTF/wtf/Platform.h 
webkitgtk-2.4.1/Source/WTF/wtf/Platform.h
+--- webkitgtk-2.4.1.old/Source/WTF/wtf/Platform.h      2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/WTF/wtf/Platform.h  2014-05-24 05:04:11 +0000
+@@ -594,8 +594,6 @@
+ #define HAVE_ALIGNED_MALLOC 1
+ #define HAVE_ISDEBUGGERPRESENT 1
+ 
+-#include <WTF/WTFHeaderDetection.h>
+-
+ #endif
+ 
+ #if OS(WINDOWS)
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/WTF/wtf/threads/BinarySemaphore.h 
webkitgtk-2.4.1/Source/WTF/wtf/threads/BinarySemaphore.h
+--- webkitgtk-2.4.1.old/Source/WTF/wtf/threads/BinarySemaphore.h       2014-05-18 16:44:58 +0000
++++ webkitgtk-2.4.1/Source/WTF/wtf/threads/BinarySemaphore.h   2014-05-29 17:02:56 +0000
+@@ -41,12 +41,12 @@ public:
+     WTF_EXPORT_PRIVATE void signal();
+     WTF_EXPORT_PRIVATE bool wait(double absoluteTime);
+ 
+-#if OS(WINDOWS)
++#if PLATFORM(WIN)
+     HANDLE event() const { return m_event; }
+ #endif
+ 
+ private:
+-#if OS(WINDOWS)
++#if PLATFORM(WIN)
+     HANDLE m_event;
+ #else
+     bool m_isSet;
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/WTF/wtf/win/GDIObject.h 
webkitgtk-2.4.1/Source/WTF/wtf/win/GDIObject.h
+--- webkitgtk-2.4.1.old/Source/WTF/wtf/win/GDIObject.h 2014-07-12 06:21:32 +0000
++++ webkitgtk-2.4.1/Source/WTF/wtf/win/GDIObject.h     2014-05-24 12:26:42 +0000
+@@ -0,0 +1,131 @@
++/*
++ * Copyright (C) 2013 Apple Inc. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ *    notice, this list of conditions and the following disclaimer in the
++ *    documentation and/or other materials provided with the distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
++ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
++ */
++
++#ifndef GDIObject_h
++#define GDIObject_h
++
++#include <algorithm>
++#include <cstddef>
++#include <memory>
++#include <windows.h>
++#include <wtf/Assertions.h>
++#include <wtf/Noncopyable.h>
++
++namespace WTF {
++
++template<typename T> void deleteObject(T);
++
++template<typename T> class GDIObject {
++    WTF_MAKE_NONCOPYABLE(GDIObject);
++public:
++    GDIObject() : m_object(0) { }
++    GDIObject(std::nullptr_t) : m_object(0) { }
++    ~GDIObject() { deleteObject<T>(m_object); }
++
++    T get() const { return m_object; }
++
++    void clear();
++    T leak() WARN_UNUSED_RETURN;
++
++    bool operator!() const { return !m_object; }
++
++    // This conversion operator allows implicit conversion to bool but not to other integer types.
++    typedef const void* UnspecifiedBoolType;
++    operator UnspecifiedBoolType() const { return m_object ? 
reinterpret_cast<UnspecifiedBoolType>(&m_object) : 0; }
++
++    GDIObject<T>& operator=(std::nullptr_t) { clear(); return *this; }
++
++    GDIObject(GDIObject&&);
++    template<typename U> GDIObject(GDIObject<U>&&);
++
++    GDIObject& operator=(GDIObject&&);
++    template<typename U> GDIObject& operator=(GDIObject<U>&&);
++
++    void swap(GDIObject& o) { std::swap(m_object, o.m_object); }
++
++private:
++    template<typename U> friend GDIObject<U> adoptGDIObject(U);
++    GDIObject(T object) : m_object(object) { }
++
++    GDIObject<T>& operator=(T);
++
++    T m_object;
++};
++
++template<typename T> inline void GDIObject<T>::clear()
++{
++    T object = m_object;
++    m_object = 0;
++    deleteObject(object);
++}
++
++template<typename T> inline T GDIObject<T>::leak()
++{
++    T object = m_object;
++    m_object = 0;
++    return object;
++}
++
++template<typename T> inline GDIObject<T>::GDIObject(GDIObject<T>&& other)
++    : m_object(other.leak())
++{
++}
++
++template<typename T> inline GDIObject<T>& GDIObject<T>::operator=(GDIObject<T>&& other)
++{
++    auto object = std::move(other);
++    swap(object);
++    return *this;
++}
++
++template<typename T> inline GDIObject<T> adoptGDIObject(T object)
++{
++    return GDIObject<T>(object);
++}
++
++template<typename T> inline void swap(GDIObject<T>& a, GDIObject<T>& b)
++{
++    a.swap(b);
++}
++
++// Nearly all GDI types use the same DeleteObject call.
++template<typename T> inline void deleteObject(T object)
++{
++    if (object)
++        ::DeleteObject(object);
++}
++
++template<> inline void deleteObject<HDC>(HDC hdc)
++{
++    if (hdc)
++        ::DeleteDC(hdc);
++}
++
++} // namespace WTF
++
++using WTF::GDIObject;
++using WTF::adoptGDIObject;
++
++#endif // GDIObject_h
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/WebCore/GNUmakefile.list.am 
webkitgtk-2.4.1/Source/WebCore/GNUmakefile.list.am
+--- webkitgtk-2.4.1.old/Source/WebCore/GNUmakefile.list.am     2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/WebCore/GNUmakefile.list.am 2014-05-24 05:09:00 +0000
+@@ -6252,9 +6252,11 @@ webcoregtk_sources += \
+       Source/WebCore/platform/graphics/glx/GLContextGLX.h
+ endif # END USE_GLX
+ else
++if !TARGET_WIN32
+ webcore_sources += \
+       Source/WebCore/plugins/PluginPackageNone.cpp \
+       Source/WebCore/plugins/PluginViewNone.cpp
++endif # !TARGET_WIN32
+ endif # END TARGET_X11
+ 
+ if TARGET_X11_OR_WAYLAND
+@@ -6281,9 +6283,12 @@ webcore_sources += \
+       Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp \
+       Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp \
+       Source/WebCore/platform/graphics/win/LocalWindowsContext.h \
++      Source/WebCore/platform/graphics/win/SharedGDIObject.h \
+       Source/WebCore/platform/graphics/win/TransformationMatrixWin.cpp \
+       Source/WebCore/platform/win/BitmapInfo.cpp \
+       Source/WebCore/platform/win/BitmapInfo.h \
++      Source/WebCore/platform/win/GDIObjectCounter.cpp \
++      Source/WebCore/platform/win/GDIObjectCounter.h \
+       Source/WebCore/platform/win/SystemInfo.cpp \
+       Source/WebCore/platform/win/SystemInfo.h \
+       Source/WebCore/platform/win/WebCoreInstanceHandle.cpp \
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/WebCore/bindings/scripts/preprocessor.pm 
webkitgtk-2.4.1/Source/WebCore/bindings/scripts/preprocessor.pm
+--- webkitgtk-2.4.1.old/Source/WebCore/bindings/scripts/preprocessor.pm        2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/WebCore/bindings/scripts/preprocessor.pm    2014-05-24 05:04:11 +0000
+@@ -51,6 +51,8 @@ sub applyPreprocessor
+             $preprocessor = "/usr/sfw/bin/gcc";
+         } elsif (-x "/usr/bin/clang") {
+             $preprocessor = "/usr/bin/clang";
++        } elsif ($Config{osname} eq 'msys') {
++            $preprocessor = "gcc";
+         } else {
+             $preprocessor = "/usr/bin/gcc";
+         }
+@@ -71,7 +73,7 @@ sub applyPreprocessor
+     @macros = map { "-D$_" } @macros;
+ 
+     my $pid = 0;
+-    if ($Config{osname} eq "cygwin" || $Config{osname} eq 'MSWin32') {
++    if ($Config{osname} eq "cygwin" || $Config{osname} eq 'MSWin32' || $Config{osname} eq 'msys') {
+         # This call can fail if Windows rebases cygwin, so retry a few times until it succeeds.
+         for (my $tries = 0; !$pid && ($tries < 20); $tries++) {
+             eval {
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/WebCore/dom/make_names.pl 
webkitgtk-2.4.1/Source/WebCore/dom/make_names.pl
+--- webkitgtk-2.4.1.old/Source/WebCore/dom/make_names.pl       2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/WebCore/dom/make_names.pl   2014-05-24 05:04:11 +0000
+@@ -69,6 +69,8 @@ if ($ENV{CC}) {
+     $gccLocation = "/usr/sfw/bin/gcc";
+ } elsif ($Config::Config{"osname"} eq "darwin" && $ENV{SDKROOT}) {
+     chomp($gccLocation = `xcrun -find cc -sdk '$ENV{SDKROOT}'`);
++} elsif ($Config::Config{"osname"} eq "msys") {
++    $gccLocation = "gcc";
+ } else {
+     $gccLocation = "/usr/bin/cc";
+ }
+diff -upr -x .deps -x .libs -x '*.la' 
webkitgtk-2.4.1.old/Source/WebCore/platform/graphics/FontPlatformData.h 
webkitgtk-2.4.1/Source/WebCore/platform/graphics/FontPlatformData.h
+--- webkitgtk-2.4.1.old/Source/WebCore/platform/graphics/FontPlatformData.h    2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/WebCore/platform/graphics/FontPlatformData.h        2014-05-24 05:04:11 +0000
+@@ -62,7 +62,6 @@ typedef const struct __CTFont* CTFontRef
+ #include <wtf/text/StringImpl.h>
+ 
+ #if PLATFORM(WIN)
+-#include <wtf/win/GDIObject.h>
+ typedef struct HFONT__* HFONT;
+ #endif
+ 
+diff -upr -x .deps -x .libs -x '*.la' 
webkitgtk-2.4.1.old/Source/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp 
webkitgtk-2.4.1/Source/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp
+--- webkitgtk-2.4.1.old/Source/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp 2014-06-20 
20:05:59 +0000
++++ webkitgtk-2.4.1/Source/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp     2014-05-24 
05:04:11 +0000
+@@ -32,6 +32,7 @@
+ #include <ft2build.h>
+ #include FT_TRUETYPE_TABLES_H
+ #include <wtf/text/WTFString.h>
++#include <wtf/MathExtras.h>
+ 
+ #if !PLATFORM(EFL)
+ #include <gdk/gdk.h>
+@@ -120,7 +121,7 @@ static void rotateCairoMatrixForVertical
+     // combination of rotation (R) and translation (T) applied on the
+     // horizontal matrix (H). V = H . R . T, where R rotates by -90 degrees
+     // and T translates by font size towards y axis.
+-    cairo_matrix_rotate(matrix, -M_PI_2);
++    cairo_matrix_rotate(matrix, -piOverTwoDouble);
+     cairo_matrix_translate(matrix, 0.0, 1.0);
+ }
+ 
+diff -upr -x .deps -x .libs -x '*.la' 
webkitgtk-2.4.1.old/Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp 
webkitgtk-2.4.1/Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp
+--- webkitgtk-2.4.1.old/Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp       2014-06-20 
20:05:59 +0000
++++ webkitgtk-2.4.1/Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp   2014-05-24 05:09:00 
+0000
+@@ -32,6 +32,7 @@
+ 
+ #include <cairo-win32.h>
+ #include "GraphicsContextPlatformPrivateCairo.h"
++#include <wtf/win/GdiObject.h>
+ 
+ using namespace std;
+ 
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/WebCore/platform/gtk/FileSystemGtk.cpp 
webkitgtk-2.4.1/Source/WebCore/platform/gtk/FileSystemGtk.cpp
+--- webkitgtk-2.4.1.old/Source/WebCore/platform/gtk/FileSystemGtk.cpp  2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/WebCore/platform/gtk/FileSystemGtk.cpp      2014-05-24 05:04:11 +0000
+@@ -23,6 +23,10 @@
+ #include "config.h"
+ #include "FileSystem.h"
+ 
++#if OS(WINDOWS)
++#include <windows.h>
++#endif
++
+ #include "FileMetadata.h"
+ #include "UUID.h"
+ #include <gio/gio.h>
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/WebCore/rendering/RenderBlock.h 
webkitgtk-2.4.1/Source/WebCore/rendering/RenderBlock.h
+--- webkitgtk-2.4.1.old/Source/WebCore/rendering/RenderBlock.h 2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/WebCore/rendering/RenderBlock.h     2014-05-24 15:52:01 +0000
+@@ -613,8 +613,8 @@ public:
+     unsigned m_beingDestroyed : 1;
+     unsigned m_hasMarkupTruncation : 1;
+     unsigned m_hasBorderOrPaddingLogicalWidthChanged : 1;
+-    enum LineLayoutPath { UndeterminedPath, SimpleLinesPath, LineBoxesPath, ForceLineBoxesPath };
+     unsigned m_lineLayoutPath : 2;
++    enum LineLayoutPath { UndeterminedPath, SimpleLinesPath, LineBoxesPath, ForceLineBoxesPath };
+     
+     // RenderRubyBase objects need to be able to split and merge, moving their children around
+     // (calling moveChildTo, moveAllChildrenTo, and makeChildrenNonInline).
+diff -upr -x .deps -x .libs -x '*.la' 
webkitgtk-2.4.1.old/Source/WebCore/rendering/mathml/RenderMathMLMenclose.cpp 
webkitgtk-2.4.1/Source/WebCore/rendering/mathml/RenderMathMLMenclose.cpp
+--- webkitgtk-2.4.1.old/Source/WebCore/rendering/mathml/RenderMathMLMenclose.cpp       2014-06-20 20:05:59 
+0000
++++ webkitgtk-2.4.1/Source/WebCore/rendering/mathml/RenderMathMLMenclose.cpp   2014-05-24 05:04:11 +0000
+@@ -71,8 +71,8 @@ void RenderMathMLMenclose::computePrefer
+     size_t notationalValueSize = notationValues.size();
+     for (size_t i = 0; i < notationalValueSize; i++) {
+         if (notationValues[i] == "circle") {
+-            m_minPreferredLogicalWidth = minPreferredLogicalWidth() * float(M_SQRT2);
+-            m_maxPreferredLogicalWidth = maxPreferredLogicalWidth() * float(M_SQRT2);
++            m_minPreferredLogicalWidth = minPreferredLogicalWidth() * float(sqrtOfTwoDouble);
++            m_maxPreferredLogicalWidth = maxPreferredLogicalWidth() * float(sqrtOfTwoDouble);
+         }
+     }
+ 
+@@ -86,7 +86,7 @@ void RenderMathMLMenclose::updateLogical
+     size_t notationalValueSize = notationValues.size();
+     for (size_t i = 0; i < notationalValueSize; i++)
+         if (notationValues[i] == "circle")
+-            setLogicalHeight(logicalHeight() * float(M_SQRT2));
++            setLogicalHeight(logicalHeight() * float(sqrtOfTwoDouble));
+ }
+ 
+ void RenderMathMLMenclose::paint(PaintInfo& info, const LayoutPoint& paintOffset)
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/autotools/FindDependencies.m4 
webkitgtk-2.4.1/Source/autotools/FindDependencies.m4
+--- webkitgtk-2.4.1.old/Source/autotools/FindDependencies.m4   2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/autotools/FindDependencies.m4       2014-05-24 05:04:11 +0000
+@@ -109,8 +109,14 @@ case "$host" in
+         UNICODE_LIBS="-licucore"
+         ;;
+     *-*-mingw*)
+-        UNICODE_CFLAGS=""
+-        UNICODE_LIBS="-licui18n -licuuc"
++      PKG_CHECK_MODULES(ICU, icu-i18n, ,)
++      if test "x$ICU_LIBS" = "x" ; then
++              UNICODE_CFLAGS=""
++              UNICODE_LIBS="-licui18n -licuuc"
++      else
++              UNICODE_CFLAGS="$ICU_CFLAGS"
++              UNICODE_LIBS="$ICU_LIBS"
++      fi
+         AC_CHECK_HEADERS([unicode/uchar.h], [], [AC_MSG_ERROR([Could not find ICU headers.])])
+         ;;
+     *)
+@@ -455,7 +461,14 @@ if test "$found_opengl" = "yes"; then
+         OPENGL_LIBS="-lGLESv2"
+     else
+         acceleration_description="$acceleration_description (gl"
+-        OPENGL_LIBS="-lGL"
++        case "$host" in
++            *-*-mingw*)
++                OPENGL_LIBS="-lopengl32"
++                ;;
++            *)
++                OPENGL_LIBS="-lGL"
++                ;;
++        esac
+     fi
+     if test "$enable_egl" = "yes"; then
+         acceleration_description="$acceleration_description, egl"
+diff -upr -x .deps -x .libs -x '*.la' webkitgtk-2.4.1.old/Source/autotools/ReadCommandLineArguments.m4 
webkitgtk-2.4.1/Source/autotools/ReadCommandLineArguments.m4
+--- webkitgtk-2.4.1.old/Source/autotools/ReadCommandLineArguments.m4   2014-06-20 20:05:59 +0000
++++ webkitgtk-2.4.1/Source/autotools/ReadCommandLineArguments.m4       2014-05-24 05:04:11 +0000
+@@ -83,7 +83,7 @@ AM_WEBKIT_DETERMINE_BUILD_TARGET_STATUS(
+ AM_WEBKIT_DETERMINE_BUILD_TARGET_STATUS([directfb], [enable_directfb_target], [build_targets])
+ 
+ AC_MSG_CHECKING([whether to build for the Win32 target])
+-AC_MSG_RESULT([$enable_wayland_target])
++AC_MSG_RESULT([$enable_win32_target])
+ 
+ AC_MSG_CHECKING([whether to enable spellcheck support])
+ AC_ARG_ENABLE([spellcheck],
diff --git a/win32/patches/yelp.m4 b/win32/patches/yelp.m4
new file mode 100644
index 0000000..adbbdb5
--- /dev/null
+++ b/win32/patches/yelp.m4
@@ -0,0 +1,194 @@
+AC_DEFUN([YELP_HELP_INIT],
+[
+AC_REQUIRE([AC_PROG_LN_S])
+m4_pattern_allow([AM_V_at])
+m4_pattern_allow([AM_V_GEN])
+m4_pattern_allow([AM_DEFAULT_VERBOSITY])
+AC_ARG_WITH([help-dir],
+            AC_HELP_STRING([--with-help-dir=DIR],
+                           [path where help files are installed]),,
+            [with_help_dir='${datadir}/help'])
+HELP_DIR="$with_help_dir"
+AC_SUBST(HELP_DIR)
+
+dnl AC_ARG_VAR([ITSTOOL], [Path to the `itstool` command])
+dnl AC_CHECK_PROG([ITSTOOL], [itstool], [itstool])
+dnl if test x"$ITSTOOL" = x; then
+dnl   AC_MSG_ERROR([itstool not found])
+dnl fi
+
+AC_ARG_VAR([XMLLINT], [Path to the `xmllint` command])
+AC_CHECK_PROG([XMLLINT], [xmllint], [xmllint])
+if test x"$XMLLINT" = x; then
+  AC_MSG_ERROR([xmllint not found])
+fi
+
+YELP_HELP_RULES='
+HELP_ID ?=
+HELP_POT ?=
+HELP_FILES ?=
+HELP_EXTRA ?=
+HELP_MEDIA ?=
+HELP_LINGUAS ?=
+
+_HELP_LINGUAS = $(if $(filter environment,$(origin LINGUAS)),$(filter 
$(LINGUAS),$(HELP_LINGUAS)),$(HELP_LINGUAS))
+_HELP_POTFILE = $(if $(HELP_POT),$(HELP_POT),$(if $(HELP_ID),$(HELP_ID).pot))
+_HELP_POFILES = $(if $(HELP_ID),$(foreach lc,$(_HELP_LINGUAS),$(lc)/$(lc).po))
+_HELP_MOFILES = $(patsubst %.po,%.mo,$(_HELP_POFILES))
+_HELP_C_FILES = $(foreach f,$(HELP_FILES),C/$(f))
+_HELP_C_EXTRA = $(foreach f,$(HELP_EXTRA),C/$(f))
+_HELP_C_MEDIA = $(foreach f,$(HELP_MEDIA),C/$(f))
+_HELP_LC_FILES = $(foreach lc,$(_HELP_LINGUAS),$(foreach f,$(HELP_FILES),$(lc)/$(f)))
+_HELP_LC_STAMPS = $(foreach lc,$(_HELP_LINGUAS),$(lc)/$(lc).stamp)
+
+_HELP_DEFAULT_V = $(if $(AM_DEFAULT_VERBOSITY),$(AM_DEFAULT_VERBOSITY),1)
+_HELP_V = $(if $(V),$(V),$(_HELP_DEFAULT_V))
+_HELP_LC_VERBOSE = $(_HELP_LC_VERBOSE_$(_HELP_V))
+_HELP_LC_VERBOSE_ = $(_HELP_LC_VERBOSE_$(_HELP_DEFAULT_V))
+_HELP_LC_VERBOSE_0 = @echo "  GEN    "$(dir [$]@);
+
+all: $(_HELP_C_FILES) $(_HELP_C_EXTRA) $(_HELP_C_MEDIA) $(_HELP_LC_FILES) $(_HELP_POFILES)
+
+.PHONY: pot
+pot: $(_HELP_POTFILE)
+$(_HELP_POTFILE): $(_HELP_C_FILES) $(_HELP_C_EXTRA) $(_HELP_C_MEDIA)
+       $(AM_V_GEN)$(ITSTOOL) -o "[$]@" $(_HELP_C_FILES)
+
+.PHONY: repo
+repo: $(_HELP_POTFILE)
+       $(AM_V_at)for po in $(_HELP_POFILES); do \
+         if test "x[$](_HELP_V)" = "x0"; then echo "  GEN    $${po}"; fi; \
+         msgmerge -q -o "$${po}" "$${po}" "$(_HELP_POTFILE)"; \
+       done
+
+$(_HELP_POFILES):
+       $(AM_V_at)if ! test -d "$(dir [$]@)"; then mkdir "$(dir [$]@)"; fi
+       $(AM_V_at)if test ! -f "[$]@" -a -f "$(srcdir)/[$]@"; then cp "$(srcdir)/[$]@" "[$]@"; fi
+       $(AM_V_GEN)if ! test -f "[$]@"; then \
+         (cd "$(dir [$]@)" && \
+           $(ITSTOOL) -o "$(notdir [$]@).tmp" $(_HELP_C_FILES) && \
+           mv "$(notdir [$]@).tmp" "$(notdir [$]@)"); \
+       else \
+         (cd "$(dir [$]@)" && \
+           $(ITSTOOL) -o "$(notdir [$]@).tmp" $(_HELP_C_FILES) && \
+           msgmerge -o "$(notdir [$]@)" "$(notdir [$]@)" "$(notdir [$]@).tmp" && \
+           rm "$(notdir [$]@).tmp"); \
+       fi
+
+$(_HELP_MOFILES): %.mo: %.po
+       $(AM_V_at)if ! test -d "$(dir [$]@)"; then mkdir "$(dir [$]@)"; fi
+       $(AM_V_GEN)msgfmt -o "[$]@" "$<"
+
+$(_HELP_LC_FILES): $(_HELP_LINGUAS)
+$(_HELP_LINGUAS): $(_HELP_LC_STAMPS)
+$(_HELP_LC_STAMPS): %.stamp: %.mo
+$(_HELP_LC_STAMPS): $(_HELP_C_FILES) $(_HELP_C_EXTRA)
+       $(AM_V_at)if ! test -d "$(dir [$]@)"; then mkdir "$(dir [$]@)"; fi
+       $(_HELP_LC_VERBOSE)if test -d "C"; then d="../"; else d="$(abs_srcdir)/"; fi; \
+       mo="$(dir [$]@)$(patsubst %/$(notdir [$]@),%,[$]@).mo"; \
+       if test -f "$${mo}"; then mo="../$${mo}"; else mo="$(abs_srcdir)/$${mo}"; fi; \
+       (cd "$(dir [$]@)" && $(ITSTOOL) -m "$${mo}" $(foreach f,$(_HELP_C_FILES),$${d}/$(f))) && \
+       touch "[$]@"
+
+.PHONY: clean-help
+mostlyclean-am: $(if $(HELP_ID),clean-help)
+clean-help:
+       rm -f $(_HELP_LC_FILES) $(_HELP_LC_STAMPS) $(_HELP_MOFILES)
+
+EXTRA_DIST ?=
+EXTRA_DIST += $(_HELP_C_EXTRA) $(_HELP_C_MEDIA)
+EXTRA_DIST += $(foreach lc,$(HELP_LINGUAS),$(lc)/$(lc).stamp)
+EXTRA_DIST += $(foreach lc,$(HELP_LINGUAS),$(lc)/$(lc).po)
+EXTRA_DIST += $(foreach f,$(HELP_MEDIA),$(foreach lc,$(HELP_LINGUAS),$(wildcard $(lc)/$(f))))
+
+distdir: distdir-help-files
+distdir-help-files:
+       @for lc in C $(HELP_LINGUAS); do \
+         $(MKDIR_P) "$(distdir)/$$lc"; \
+         for file in $(HELP_FILES); do \
+           if test -f "$$lc/$$file"; then d=./; else d=$(srcdir)/; fi; \
+           cp -p "$$d$$lc/$$file" "$(distdir)/$$lc/" || exit 1; \
+         done; \
+       done; \
+
+.PHONY: check-help
+check: check-help
+check-help:
+       for lc in C $(_HELP_LINGUAS); do \
+         if test -d "$$lc"; \
+           then d=; \
+           xmlpath="$$lc"; \
+         else \
+           d="$(srcdir)/"; \
+           xmlpath="$$lc:$(srcdir)/$$lc"; \
+         fi; \
+         for page in $(HELP_FILES); do \
+           echo "$(XMLLINT) --noout --noent --path $$xmlpath --xinclude $$d$$lc/$$page"; \
+           $(XMLLINT) --noout --noent --path "$$xmlpath" --xinclude "$$d$$lc/$$page"; \
+         done; \
+       done
+
+
+.PHONY: install-help
+install-data-am: $(if $(HELP_ID),install-help)
+install-help:
+       @for lc in C $(_HELP_LINGUAS); do \
+         $(mkinstalldirs) "$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)" || exit 1; \
+       done
+       @for lc in C $(_HELP_LINGUAS); do for f in $(HELP_FILES); do \
+         if test -f "$$lc/$$f"; then d=; else d="$(srcdir)/"; fi; \
+         helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+         if ! test -d "$$helpdir"; then $(mkinstalldirs) "$$helpdir"; fi; \
+         echo "$(INSTALL_DATA) $$d$$lc/$$f $$helpdir`basename $$f`"; \
+         $(INSTALL_DATA) "$$d$$lc/$$f" "$$helpdir`basename $$f`" || exit 1; \
+       done; done
+       @for f in $(_HELP_C_EXTRA); do \
+         lc=`dirname "$$f"`; lc=`basename "$$lc"`; \
+         if test -f "$$f"; then d=; else d="$(srcdir)/"; fi; \
+         helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+         if ! test -d "$$helpdir"; then $(mkinstalldirs) "$$helpdir"; fi; \
+         echo "$(INSTALL_DATA) $$d$$f $$helpdir`basename $$f`"; \
+         $(INSTALL_DATA) "$$d$$f" "$$helpdir`basename $$f`" || exit 1; \
+       done
+       @for f in $(HELP_MEDIA); do \
+         for lc in C $(_HELP_LINGUAS); do \
+           if test -f "$$lc$$f"; then d=; else d="$(srcdir)/"; fi; \
+           helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+           mdir=`dirname "$$f"`; \
+           if test "x$mdir" = "x."; then mdir=""; fi; \
+           if ! test -d "$$helpdir$$mdir"; then $(mkinstalldirs) "$$helpdir$$mdir"; fi; \
+           if test -f "$$d$$lc/$$f"; then \
+             echo "$(INSTALL_DATA) $$d$$lc/$$f $$helpdir$$f"; \
+             $(INSTALL_DATA) "$$d$$lc/$$f" "$$helpdir$$f" || exit 1; \
+           elif test "x$$lc" != "xC"; then \
+             echo "$(LN_S) -f $(HELP_DIR)/C/$(HELP_ID)/$$f $$helpdir$$f"; \
+             $(LN_S) -f "$(HELP_DIR)/C/$(HELP_ID)/$$f" "$$helpdir$$f" || exit 1; \
+           fi; \
+         done; \
+       done
+
+.PHONY: uninstall-help
+uninstall-am: $(if $(HELP_ID),uninstall-help)
+uninstall-help:
+       for lc in C $(_HELP_LINGUAS); do for f in $(HELP_FILES); do \
+         helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+         echo "rm -f $$helpdir`basename $$f`"; \
+         rm -f "$$helpdir`basename $$f`"; \
+       done; done
+       @for f in $(_HELP_C_EXTRA); do \
+         lc=`dirname "$$f"`; lc=`basename "$$lc"`; \
+         helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+         echo "rm -f $$helpdir`basename $$f`"; \
+         rm -f "$$helpdir`basename $$f`"; \
+       done
+       @for f in $(HELP_MEDIA); do \
+         for lc in C $(_HELP_LINGUAS); do \
+           helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \
+           echo "rm -f $$helpdir$$f"; \
+           rm -f "$$helpdir$$f"; \
+         done; \
+       done;
+'
+AC_SUBST([YELP_HELP_RULES])
+m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([YELP_HELP_RULES])])
+])
diff --git a/win32/readme.txt b/win32/readme.txt
new file mode 100644
index 0000000..e8aa73b
--- /dev/null
+++ b/win32/readme.txt
@@ -0,0 +1,53 @@
+************************************************
+*** Caution - this work is still in progress ***
+************************************************
+
+These are steps how to setup local envinronment to build evolution
+and its dependencies from sources.
+
+a) http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download
+       Destination folder: C:\MinGW
+
+       Install packages:
+       - Basic setup:
+         - mingw-developer-toolkit
+         - msys-base
+
+       - All Packages
+         - msys-patch
+         - msys-perl
+         - msys-unzip
+         - msys-wget
+
+b) http://sourceforge.net/projects/mingwbuilds/files/mingw-builds-install/mingw-builds-install.exe/download
+       Version: 4.8.1
+       Architecture: x32
+       Threads: posix
+       Exception: dwarf
+       Build revision: 5
+
+       Destination folder: C:\MinGW64
+
+c) Replace MinGW version of gcc & co. with the MinGW64 version (mainly for webkitgtk)
+       - delete all but 'msys' directories in C:\MinGW\
+       - move all directories from C:\MinGW64\mingw32\ to C:MinGW\
+
+d) http://www.python.org/ftp/python/2.7.6/python-2.7.6.msi
+       Destination folder: C:\Python27
+
+e) Add to PATH: C:\Python27;C:\MinGW\bin
+
+f) go to evolution checkout, into evolution\win32\ subfolder and execute:
+       $ source setup-env
+   which setups build environment. This can take some addition
+   parameters, see the top of setup-env for more information.
+
+g) build evolution from sources with:
+       $ make evolution
+   or with some additional software:
+       $ make addons
+
+h) Make sure dbus-daemon is running before evolution is run, which can
+   be done with $PREFIX\deps\bin\dbus-launch.exe
+
+i) Run 'evolution'
diff --git a/win32/session-local.conf.in b/win32/session-local.conf.in
new file mode 100644
index 0000000..a2b16f4
--- /dev/null
+++ b/win32/session-local.conf.in
@@ -0,0 +1,4 @@
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN" 
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd";>
+<busconfig>
+  <servicedir>@BUILD_ROOT_EVO@</servicedir>
+</busconfig>
diff --git a/win32/setup-env b/win32/setup-env
new file mode 100755
index 0000000..1b0cde5
--- /dev/null
+++ b/win32/setup-env
@@ -0,0 +1,76 @@
+#!/bin/bash
+
+##############################################################################
+#
+# Setup a build environment. This can take up to two parameters:
+# argv[1] - build type, can be 'stable' or 'master'; anything else than
+#           'stable' means 'master' build in the ./Makefile, which uses
+#           relative path for build and if the respective folder is not
+#           downloaded yet, then it creates a checkout from the master git
+#           branch (hence the 'master' build name). There can be built
+#           anything as master, the only condition is that the directory
+#           with the sources is in place.
+# argv[2] - use "debug" to build with debug options; using 'debug' build type
+#           also uses debug build options
+#
+##############################################################################
+
+if [ "$BUILD_ROOT_OVERRIDE" = "" ] ; then
+       export BUILD_ROOT_BASE=/build/local
+else
+       export BUILD_ROOT_BASE=$BUILD_ROOT_OVERRIDE
+fi
+
+# Optional parameter to compile other than 'master' or 'stable' releases;
+# empty value means 'stable', anything else means 'master' type in Makefile
+export EVO_BUILD_TYPE=$1
+
+export BUILD_ROOT_DEPS=$BUILD_ROOT_BASE/deps
+if [ "x$EVO_BUILD_TYPE" != "x" -a "x$EVO_BUILD_TYPE" != "xstable" ] ; then
+       # Build custom builds like from 'master', aka from relative path checkouts
+       export EVO_BUILD_SUFFIX="-master"
+       export BUILD_ROOT_EVO="$BUILD_ROOT_BASE/evo-$EVO_BUILD_TYPE"
+else
+       # Build from tarballs
+       export EVO_BUILD_SUFFIX="-stable"
+       export BUILD_ROOT_EVO=$BUILD_ROOT_BASE/evo
+fi
+
+if [ "$PATH_DEFAULT" = "" ] ; then
+       export PATH_DEFAULT=$PATH
+fi
+
+export PATH=$BUILD_ROOT_DEPS/bin:$BUILD_ROOT_EVO/bin:$PATH_DEFAULT
+
+# Compile against locally installed software.
+export LD_LIBRARY_PATH=$BUILD_ROOT_DEPS/lib:$BUILD_ROOT_EVO/lib:/lib
+export 
PKG_CONFIG_PATH=$BUILD_ROOT_DEPS/lib/pkgconfig:$BUILD_ROOT_EVO/lib/pkgconfig:$BUILD_ROOT_DEPS/share/pkgconfig:$BUILD_ROOT_EVO/share/pkgconfig
+export ACLOCAL_FLAGS="-I $BUILD_ROOT_DEPS/share/aclocal -I $BUILD_ROOT_EVO/share/aclocal -I /share/aclocal"
+export GSETTINGS_SCHEMA_DIR=$BUILD_ROOT_DEPS/share/glib-2.0/schemas:$BUILD_ROOT_EVO/share/glib-2.0/schemas
+if [ "$1" = "debug" -o "$2" = "debug" ] ; then
+       export CFLAGS="$CFLAGS -g -O0 -Wall -DMSVCRT_VERSION=710"
+else
+       export CFLAGS="$CFLAGS -DMSVCRT_VERSION=710"
+fi
+export CPPFLAGS="$CPPFLAGS -I$BUILD_ROOT_DEPS/include -I$BUILD_ROOT_EVO/include -I/include"
+export LDFLAGS="$LDFLAGS -L$BUILD_ROOT_DEPS/lib -L$BUILD_ROOT_EVO/lib -L/lib"
+
+mkdir -p $BUILD_ROOT_DEPS/bin 2>/dev/null
+mkdir -p $BUILD_ROOT_DEPS/include 2>/dev/null
+mkdir -p $BUILD_ROOT_DEPS/lib 2>/dev/null
+mkdir -p $BUILD_ROOT_DEPS/share/aclocal 2>/dev/null
+mkdir -p $BUILD_ROOT_DEPS/etc/dbus-1/session.d 2>/dev/null
+#mkdir -p $BUILD_ROOT_DEPS/share/dbus-1 2>/dev/null
+
+mkdir -p $BUILD_ROOT_EVO/bin 2>/dev/null
+mkdir -p $BUILD_ROOT_EVO/include 2>/dev/null
+mkdir -p $BUILD_ROOT_EVO/lib 2>/dev/null
+mkdir -p $BUILD_ROOT_EVO/share/aclocal 2>/dev/null
+#mkdir -p $BUILD_ROOT_EVO/share/dbus-1 2>/dev/null
+
+#rm /usr/local/share/dbus-1 2>/dev/null
+#ln -s $BUILD_ROOT_DEPS/share/dbus-1 /usr/local/share/dbus-1
+
+if [ -f "session-local.conf.in" ] ; then
+       cat session-local.conf.in | sed 's|@BUILD_ROOT_EVO@|'$BUILD_ROOT_EVO'/share/dbus-1/services|g' 
$BUILD_ROOT_DEPS/etc/dbus-1/session.d/session-local.conf
+fi


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]