summaryrefslogtreecommitdiffstats
path: root/build-aux/osx/build
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 14:32:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 14:32:59 +0000
commitadb934701975f6b0214475d1a8d0d1ce727b9d4d (patch)
tree5688c745d10b64c8856586864ec416a6bdae881d /build-aux/osx/build
parentInitial commit. (diff)
downloadgedit-upstream.tar.xz
gedit-upstream.zip
Adding upstream version 3.38.1.upstream/3.38.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'build-aux/osx/build')
-rw-r--r--build-aux/osx/build/.gitignore5
-rw-r--r--build-aux/osx/build/README131
-rwxr-xr-xbuild-aux/osx/build/build336
-rw-r--r--build-aux/osx/build/config/jhbuildrc-gedit40
-rw-r--r--build-aux/osx/build/modulesets/bootstrap.modules249
-rw-r--r--build-aux/osx/build/modulesets/gedit.modules553
-rw-r--r--build-aux/osx/build/modulesets/patches/berkeleydb-nonsrctree/atomic.patch20
-rw-r--r--build-aux/osx/build/modulesets/patches/berkeleydb/atomic.patch20
-rw-r--r--build-aux/osx/build/modulesets/patches/enchant/enchant-applespell.patch368
-rw-r--r--build-aux/osx/build/modulesets/patches/enchant/enchant-gsize.patch97
-rw-r--r--build-aux/osx/build/modulesets/patches/enchant/enchant-relocatable.patch40
-rw-r--r--build-aux/osx/build/modulesets/patches/gettext-runtime/gettext-bug33999-stpncpy.patch63
-rw-r--r--build-aux/osx/build/modulesets/patches/gettext-tools/gettext-bug33999-stpncpy.patch63
-rw-r--r--build-aux/osx/build/modulesets/patches/glib/0001-Bug-724590-GSlice-slab_stack-corruption.patch28
-rw-r--r--build-aux/osx/build/modulesets/patches/gobject-introspection/girscanner-objc.patch20
-rw-r--r--build-aux/osx/build/modulesets/patches/gtk+/0006-Bug-658722-Drag-and-Drop-sometimes-stops-working.patch274
-rw-r--r--build-aux/osx/build/modulesets/patches/gtk+/0008-Implement-GtkDragSourceOwner-pasteboardChangedOwner.patch39
-rw-r--r--build-aux/osx/build/modulesets/patches/gtk+/gtk+-2-m4-creation.patch5
-rw-r--r--build-aux/osx/build/modulesets/patches/gtk-mac-integration/0001-Fix-unhandled-exception-from-attempting-to-access-me.patch39
-rw-r--r--build-aux/osx/build/modulesets/patches/itstool/itstool.use-correct-libxml.patch28
-rw-r--r--build-aux/osx/build/modulesets/patches/libgcrypt/libgcrypt-build-clang.patch97
-rw-r--r--build-aux/osx/build/modulesets/patches/libxml2/libxml2-Bug-686118-pthreads_once_init.patch33
-rw-r--r--build-aux/osx/build/modulesets/patches/readline/readline62-00146
-rw-r--r--build-aux/osx/build/modulesets/patches/readline/readline62-00257
-rw-r--r--build-aux/osx/build/modulesets/patches/readline/readline62-00376
-rw-r--r--build-aux/osx/build/modulesets/patches/readline/readline62-004108
-rw-r--r--build-aux/osx/build/modulesets/patches/shared-mime-info/0001-Bug-70255-Build-fails-with-glib-2.38.patch42
-rw-r--r--build-aux/osx/build/updater/gedit-bootstrap-overrides.modules119
-rw-r--r--build-aux/osx/build/updater/gedit-overrides.modules211
-rw-r--r--build-aux/osx/build/updater/patches/enchant-applespell.patch368
-rw-r--r--build-aux/osx/build/updater/patches/enchant-relocatable.patch40
-rw-r--r--build-aux/osx/build/updater/patches/gedit-plugins-disable-terminal.patch30
-rwxr-xr-xbuild-aux/osx/build/updater/update_modulesets.py320
33 files changed, 3965 insertions, 0 deletions
diff --git a/build-aux/osx/build/.gitignore b/build-aux/osx/build/.gitignore
new file mode 100644
index 0000000..fdd88bc
--- /dev/null
+++ b/build-aux/osx/build/.gitignore
@@ -0,0 +1,5 @@
+.build
+.home
+updater/.cache
+updater/.gtk-osx
+updater/modulesets
diff --git a/build-aux/osx/build/README b/build-aux/osx/build/README
new file mode 100644
index 0000000..79c0d4a
--- /dev/null
+++ b/build-aux/osx/build/README
@@ -0,0 +1,131 @@
+This is a guide to building gedit on OS X. This guide assumes that you are
+already familiar with building gtk+ software on OS X (natively) using jhbuild.
+Please make sure to read https://live.gnome.org/GTK%2B/OSX/Building
+before proceeding.
+
+
+Building gedit for OS X
+=============================================================================
+
+Since version 3.14, gedit hosts a self-contained, in-tree guided build
+process using jhbuild. The ./build script in this directory is the main
+entry-point which handles:
+
+1) Initializing the build environment (installing jhbuild in-tree)
+2) Bootstrapping and building all the necessary dependencies
+3) Simple wrapper around common jhbuild tasks (build, make, shell, etc.)
+
+The basic build procedure in a pristine environment is:
+
+ ./build all
+
+This will first initialize the build environment (if necessary), install
+jhbuild if needed, bootstrap jhbuild and then continue to build gedit and
+all its dependencies. Each of these stages can also be invoked manually:
+
+ ./build init
+ ./build bootstrap
+ ./build build
+
+Note that at the moment of writing, ./build bootstrap is not entirely
+equivalent to ./build jh bootstrap. The reason is that there is a problem
+when building python as part of the bootstrap process. As a workaround,
+python is actually built twice during bootstrap.
+
+By default, ./build will build against the 10.7 (Lion) OS X SDK, which
+has to be already installed and available at
+
+$(xcode-select -p)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk
+
+Although Xcode 5 does not distribute the 10.7 SDK by default, it can be
+easily obtained from previous Xcode versions. To do so, find the last
+version of Xcode to support a given SDK and download it from apple
+developer downloads [1]. Open the package, and without installing,
+extract the SDK directory and copy it to the right location. For 10.7,
+the latest Xcode version to support it is 4.3.3, which can be downloaded
+at [2] (links subject to change).
+
+It is also possible to build gedit against a different SDK by exporting
+the GEDIT_SDK environment variable (defaults to 10.7). For example:
+
+ export GEDIT_SDK=10.9
+ ./build all
+
+Would build gedit against the 10.9 SDK and install in .build/10.9
+(see Directory structure below).
+
+Note that building gedit for OS X, although made easier by use of this
+./build script, often still requires expertise and manual intervention
+when things go wrong. If this is the case, please feel free to visit the
+#gedit channel on GIMPnet IRC or send an e-mail to the gedit mailing list
+(gedit-list@gnome.org).
+
+
+Directory structure
+=============================================================================
+The general structure is as follows:
+
+ /.build
+ root jhbuild directory. This directory will contain all the sources,
+ checkout directories and install locations during building.
+
+ /$SDK : separated by SDK version
+ /source : checkout directory for all the sources
+ /inst : install directory for $SDK
+
+ /pkgs : download location for tarballs
+
+ /.home
+ an automatically created fake $HOME directory. This is used to create
+ an artificial separation for jhbuild such that it will not pick up on
+ possible existing .jhbuildrc files. This directory is also used to
+ install jhbuild itself.
+
+ /config
+ /jhbuildrc-gedit : the gedit specific jhbuild environment configuration
+
+ /modulesets
+ the jhbuild modulesets used to build gedit. Note that these are
+ self-contained and are updated each release.
+
+ /patches : directory with jhbuild patches
+ /bootstrap.modules : the bootstrap modules
+ /gedit.modules : modules for gedit and all its dependencies
+
+ /updater
+ /gedit-bootstrap-overrides.modules
+ jhbuild moduleset overrides for bootstrap
+
+ /gedit-overrides.modules
+ jhbuild moduleset overrides for gedit
+
+ /update_modulesets.py
+ an application which is used to update and merge jhbuild moduleset
+ files. The use of this application is two-fold:
+
+ 1) It merges the override module files with the latest gtk-osx stable
+ modulesets, allowing for clean separation. The overrides files
+ contain only gedit specific changes on top of the gtk-osx stable
+ modulesets to obtain a gedit build. Additionally, it creates a
+ single moduleset file with only modules required for gedit in it and
+ copies any required patches specified in the moduleset to a local
+ directory.
+
+ 2) It automatically looks for new versions (stable and unstable) of
+ GNOME libraries and queries whether or not to update modules that
+ have newer versions than those already in the moduleset. This makes
+ it easier to update to next-release versions of all required
+ dependencies.
+
+ The output of running this application is a /modulesets directory
+ which is a self-contained modulesets/patches jhbuild configuration.
+ It can be copied to the parent directory to replace the previous
+ modulesets (which were generated in the same manner).
+
+ Versions queried from GNOME ftp and downloaded patches are cached by
+ default in /.cache. Make sure to remove this directory (or parts of
+ it) to get up-to-date.
+
+
+[1] https://developer.apple.com/downloads
+[2] http://adcdownload.apple.com/Developer_Tools/xcode_4.3.3_for_lion/xcode_4.3.3_for_lion.dmg
diff --git a/build-aux/osx/build/build b/build-aux/osx/build/build
new file mode 100755
index 0000000..112b57a
--- /dev/null
+++ b/build-aux/osx/build/build
@@ -0,0 +1,336 @@
+#!/bin/bash
+
+pushd $(dirname "$0") > /dev/null
+D=$(pwd -P)
+popd > /dev/null
+
+BASED="$D/.build"
+HOMED="$D/.home"
+
+SOURCED="$HOMED/source"
+INSTALLD="$HOMED/.local"
+
+GTK_OSX_BASE_URL="https://git.gnome.org/browse/gtk-osx/plain/"
+JHBUILD_SOURCED="$SOURCED/jhbuild"
+
+ME="$0"
+
+if [ -z "$GEDIT_SDK" ]; then
+ export GEDIT_SDK=10.7
+fi
+
+export PATH="$INSTALLD/bin:$PATH"
+
+function do_exit() {
+ printf "$@"
+ echo ""
+ exit 1
+}
+
+if [ ! which git &>/dev/null ]; then
+ do_exit "You need to have git installed to build gedit for OS X"
+fi
+
+if [ ! xcodebuild -version &>/dev/null ]; then
+ do_exit "You need to have Xcode installed to build gedit for OS X"
+fi
+
+xcodebase=$(xcode-select -p)
+sdkdir="$xcodebase/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$GEDIT_SDK.sdk"
+
+if [ ! -d "$sdkdir" ]; then
+ do_exit "SDK base directory for $GEDIT_SDK not found. Please make sure to install the SDK at $sdkdir"
+fi
+
+function checkout_jhbuild() {
+ #JHBUILD_REVISION=$(curl -ks "$GTK_OSX_BASE_URL/jhbuild-revision")
+
+ #if test x"$JHBUILD_REVISION" = x; then
+ # do_exit "Could not find jhbuild revision to use."
+ #fi
+
+ mkdir -p $(dirname "$JHBUILD_SOURCED")
+
+ git clone https://gitlab.gnome.org/GNOME/jhbuild.git "$JHBUILD_SOURCED" || do_exit "Failed to clone jhbuild."
+ #git --work-tree "$JHBUILD_SOURCED" checkout -b stable $JHBUILD_REVISION || do_exit "Failed to checkout stable jhbuild revision."
+}
+
+function build_jhbuild() {
+ echo "Building jhbuild..."
+ (cd "$JHBUILD_SOURCED" && ./autogen.sh --prefix="$INSTALLD" && make -f Makefile.plain DISABLE_GETTEXT=1 install) >/dev/null || do_exit "Jhbuild installation failed";
+
+ rm -f "$INSTALLD/bin/python2"
+
+ cat << PYTHON2 > "$INSTALLD/bin/python2"
+#!/bin/bash
+
+exec /usr/bin/python "\$@"
+PYTHON2
+ chmod +x "$INSTALLD/bin/python2"
+}
+
+function setup_jhbuildrc() {
+ echo "Installing jhbuild configuration..."
+
+ mkdir -p "$HOMED"
+ curl -ks "$GTK_OSX_BASE_URL/jhbuildrc-gtk-osx" | \
+ sed -e 's/^.*PYTHONPATH.*$//g' -e 's/^.*PYTHON_SITE_PACKAGES.*$//g' > "$HOMED/.jhbuildrc" || do_exit "Failed to get jhbuildrc."
+
+ rm -f "$HOMED/.jhbuildrc-gedit"
+ ln -s "$D/config/jhbuildrc-gedit" "$HOMED/.jhbuildrc-gedit" || exit 1
+}
+
+function init_help_short() {
+ echo "Initialize the in-tree build environment (installs jhbuild)"
+}
+
+function cmd_init() {
+ mkdir -p "$SOURCED"
+
+ if [ ! -d "$JHBUILD_SOURCED" ]; then
+ checkout_jhbuild
+ fi
+
+ build_jhbuild
+ setup_jhbuildrc
+
+ rm -f "$BASED/$GEDIT_SDK/source/gedit"
+ mkdir -p "$BASED/$GEDIT_SDK/source"
+ ln -s $(cd "$D/../../" && pwd) "$BASED/$GEDIT_SDK/source/gedit"
+}
+
+function bootstrap_help_short() {
+ echo "Run jhbuild bootstrap"
+}
+
+function cmd_bootstrap() {
+ # Built python once
+ cmd_jh bootstrap -q python || exit 1
+
+ # Built python twice! There is a bug where python somehow manages to link
+ # its main binary to the system framework library, which then doesn't work...
+ # Building python again seems to resolve the issue...
+ cmd_jh bootstrap -q -f -t python python || exit 1
+
+ # Bootstrap all the rest
+ cmd_jh bootstrap -q || exit 1
+}
+
+function jh_help_usage() {
+ echo "jhbuild-command ..."
+}
+
+function jh_help_short() {
+ echo "Run jhbuild commands"
+}
+
+function cmd_jh() {
+ # Setup our jhbuild environment
+ export GEDIT_OSX_SOURCE_BASE="$D"
+ export GEDIT_OSX_BUILD_BASE="$BASED"
+ export __GEDIT_OSX_OLD_HOME="$HOME"
+ export HOME="$HOMED"
+ export JHB=gedit
+
+ # We set this because without it, GNU gettext intltool or whatever the cause
+ # may be, will set DATADIRNAME=lib during configure because gettext is not part
+ # of libc on OS X. The result is that translations would be installed in lib/
+ # instead of share/ and would not get picked up.
+ export DATADIRNAME=share
+
+ "$INSTALLD/bin/jhbuild" -f "$HOMED/.jhbuildrc" "$@"
+}
+
+function dbg_help_usage() {
+ echo "build command ..."
+}
+
+function dbg_help_short() {
+ echo "Run remaining build commands in a debug environment"
+}
+
+function cmd_dbg() {
+ export GEDIT_OSX_DEBUG=1
+ _process "$@"
+}
+
+function shell_help_short() {
+ echo "Start the jhbuild shell (shorthand for jh shell)"
+}
+
+function cmd_shell() {
+ cmd_jh shell
+}
+
+function make_help_usage() {
+ echo "module-source-directory"
+}
+
+function make_help_short() {
+ echo "Run jhbuild make at the provided source directory"
+}
+
+function cmd_make() {
+ cd "$BASED/$GEDIT_SDK/source/$1" && cmd_jh make
+}
+
+function run_help_usage() {
+ echo "program ..."
+}
+
+function run_help_short() {
+ echo "Run the provided program in the jhbuild environment (shorthand for jh run)"
+}
+
+function cmd_run() {
+ cmd_jh run "$@"
+}
+
+function env_help_short() {
+ echo "Obtain certain environment paths"
+}
+
+function cmd_env() {
+ vars=(source inst bin home local-bin)
+
+ case "$1" in
+ source)
+ echo "$BASED/$GEDIT_SDK/source"
+ ;;
+ inst)
+ echo "$BASED/$GEDIT_SDK/inst"
+ ;;
+ bin)
+ echo "$BASED/$GEDIT_SDK/inst/bin"
+ ;;
+ home)
+ echo "$HOMED"
+ ;;
+ local-bin)
+ echo "$HOMED/.local/bin"
+ ;;
+ "")
+ for v in "${vars[@]}"; do
+ u=$(echo -n "$v" | tr '-' '_')
+ echo -n "$u="
+ cmd_env "$v"
+ done
+ ;;
+ *)
+ varnames=$(printf ", \033[1m%s\033[0m" "${vars[@]}")
+ varnames=${varnames:2}
+
+ do_exit "Unknown environment variable \033[1m$1\033[0m, available variables are: $varnames"
+ ;;
+ esac
+}
+
+function all_help_short() {
+ echo "Runs the init, bootstrap and build commands"
+}
+
+function cmd_all() {
+ if [ ! -d "$JHBUILD_SOURCED" ]; then
+ cmd_init || exit 1
+ fi
+
+ if [ ! -f "$BASED/$GEDIT_SDK/inst/bin/python" ]; then
+ cmd_bootstrap || exit 1
+ fi
+
+ cmd_jh build -q
+}
+
+function help_help_short() {
+ echo "Shows this help message"
+}
+
+function cmd_help() {
+ if [ -z "$1" ]; then
+ echo "Usage: $ME [command]"
+ echo ""
+ echo "Available commands:"
+ echo ""
+
+ for cmd in "${commands[@]}"; do
+ printf " \033[1m$cmd\x1B[0m "
+
+ l=${#cmd}
+ let d="$commandsmaxlen - $l + 1"
+
+ printf "%${d}s" ""
+ echo -n "- "
+
+ if [[ $(type -t "${cmd}_help_short") = "function" ]]; then
+ "${cmd}_help_short"
+ else
+ echo ""
+ fi
+ done
+
+ echo ""
+ else
+ cmd="cmd_$1"
+
+ if [[ $(type -t "$cmd") != "function" ]]; then
+ do_exit "Invalid command \033[1m$1\033[0m, available commands are: $cmds"
+ fi
+
+ printf "Usage: $ME \033[1m$1\033[0m "
+
+ if [[ $(type -t "$1_help_usage") = "function" ]]; then
+ "$1_help_usage"
+ else
+ echo ""
+ fi
+
+ echo ""
+
+ if [[ $(type -t "$1_help_long") != "function" ]]; then
+ "$1_help_short"
+ else
+ "$1_help_long"
+ fi
+ fi
+}
+
+commands=()
+commandsmaxlen=0
+
+while read line
+do
+ cmd=${line#declare -f }
+
+ if [[ "$cmd" = cmd_* ]]; then
+ cname=${cmd#cmd_}
+
+ commands+=($cname)
+
+ l=${#cname}
+
+ if [[ $l > $commandsmaxlen ]]; then
+ commandsmaxlen=$l
+ fi
+ fi
+done < <(declare -F)
+
+cmds=$(printf ", \033[1m%s\033[0m" "${commands[@]}")
+cmds=${cmds:2}
+
+function _process() {
+ if [ -z "$1" ]; then
+ cmd_help
+ exit 0
+ fi
+
+ cmd="cmd_$1"
+
+ if [[ $(type -t "$cmd") != "function" ]]; then
+ do_exit "Invalid command $1, available commands are: $cmds"
+ fi
+
+ shift 1
+ "$cmd" "$@"
+}
+
+_process "$@"
diff --git a/build-aux/osx/build/config/jhbuildrc-gedit b/build-aux/osx/build/config/jhbuildrc-gedit
new file mode 100644
index 0000000..46ca950
--- /dev/null
+++ b/build-aux/osx/build/config/jhbuildrc-gedit
@@ -0,0 +1,40 @@
+# -*- mode: python -*-
+
+import sys, os
+
+_gsdk = os.environ.get('GEDIT_SDK', None)
+
+if not _gsdk:
+ sys.stderr.write("No GEDIT_SDK environment given. Please provide 10.x\n")
+ sys.exit(1)
+
+_basedir = os.environ['GEDIT_OSX_BUILD_BASE']
+
+if not _basedir:
+ sys.stderr.write("No GEDIT_OSX_BASE environment given. Please provide the base build directory\n")
+ sys.exit(1)
+
+_sourcedir = os.environ['GEDIT_OSX_SOURCE_BASE']
+
+if not _sourcedir:
+ sys.stderr.write("No GEDIT_OSX_SOURCE_BASE environment given. Please provide the base source directory\n")
+ sys.exit(1)
+
+checkoutroot = os.path.join(_basedir, _gsdk, "source")
+prefix = os.path.join(_basedir, _gsdk, "inst")
+tarballdir = os.path.join(_basedir, "pkgs")
+
+# Main setup
+setup_sdk(target=_gsdk, sdk_version=_gsdk, architectures=['x86_64'])
+
+if 'GEDIT_OSX_DEBUG' in os.environ:
+ setup_debug()
+else:
+ setup_release()
+
+# Main module set
+modulesets_dir = os.path.join(_sourcedir, "modulesets")
+moduleset = "gedit.modules"
+modules = ["gedit-meta"]
+
+os.environ['HOME'] = os.environ['__GEDIT_OSX_OLD_HOME']
diff --git a/build-aux/osx/build/modulesets/bootstrap.modules b/build-aux/osx/build/modulesets/bootstrap.modules
new file mode 100644
index 0000000..e6dfdc5
--- /dev/null
+++ b/build-aux/osx/build/modulesets/bootstrap.modules
@@ -0,0 +1,249 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!DOCTYPE moduleset SYSTEM "moduleset.dtd">
+<moduleset><repository type="tarball" name="apache.org" href="http://archive.apache.org/dist/"/>
+ <repository type="tarball" name="cmake" href="http://www.cmake.org/files/"/>
+ <repository type="tarball" name="cpan" href="http://search.cpan.org/CPAN/"/>
+ <repository type="tarball" name="ftp.gnome.org" default="yes" href="ftp://ftp.gnome.org/pub/gnome/sources/"/>
+ <repository type="tarball" name="ftp.gnu.org" href="ftp://ftp.gnu.org/gnu/"/>
+ <repository type="tarball" name="intltool" href="http://launchpad.net/intltool/trunk/"/>
+
+ <repository type="tarball" name="itstool.org" href="http://files.itstool.org/itstool/"/>
+ <repository type="tarball" name="oracle" href="http://download.oracle.com/"/>
+
+ <repository type="tarball" name="pkgconfig" href="http://pkgconfig.freedesktop.org/releases/"/>
+ <repository type="tarball" name="python" href="http://www.python.org/ftp/python/"/>
+ <repository type="tarball" name="sourceforge" href="http://downloads.sourceforge.net/sourceforge/"/>
+ <repository type="tarball" name="tukaani.org" href="http://tukaani.org/"/>
+ <repository type="tarball" name="xmlsoft.org" href="ftp://xmlsoft.org/libxml2/"/>
+ <autotools id="berkeleydb-nonsrctree" autogen-sh="configure" autogen-template="%(srcdir)s/dist/%(autogen-sh)s --prefix %(prefix)s --libdir %(libdir)s %(autogenargs)s">
+
+ <branch module="berkeley-db/db-4.8.30.NC.tar.gz" version="4.8.30" repo="oracle">
+ <patch file="berkeleydb-nonsrctree/atomic.patch" strip="1"/>
+ </branch>
+ </autotools>
+
+ <autotools id="berkeleydb" autogen-sh="configure" supports-non-srcdir-builds="no" makeargs="-C build_unix" autogen-template="cd build_unix; ../dist/%(autogen-sh)s --prefix %(prefix)s --libdir %(libdir)s %(autogenargs)s" makeinstallargs="-C build_unix install">
+
+ <branch module="berkeley-db/db-4.8.30.NC.tar.gz" version="4.8.30" repo="oracle">
+ <patch file="berkeleydb/atomic.patch" strip="1"/>
+ </branch>
+ </autotools>
+
+ <autotools id="readline" autogen-sh="configure">
+ <branch repo="ftp.gnu.org" module="readline/readline-6.2.tar.gz" version="6.2">
+ <patch file="readline/readline62-001" strip="0"/>
+ <patch file="readline/readline62-002" strip="0"/>
+ <patch file="readline/readline62-003" strip="0"/>
+ <patch file="readline/readline62-004" strip="0"/>
+ </branch>
+ </autotools>
+
+ <autotools id="gettext-runtime" autogen-sh="configure" autogenargs="--without-emacs --disable-java --disable-native-java --disable-libasprintf --disable-csharp">
+ <branch repo="ftp.gnu.org" source-subdir="gettext-runtime" module="gettext/gettext-0.18.1.1.tar.gz" version="0.18.1.1" size="15139737" md5sum="3dd55b952826d2b32f51308f2f91aa89">
+ <patch file="gettext-runtime/gettext-bug33999-stpncpy.patch" strip="1"/>
+ </branch>
+ </autotools>
+
+ <autotools id="python" autogenargs="--enable-shared" autogen-sh="configure">
+ <branch repo="python" module="2.7.6/Python-2.7.6.tar.xz" version="2.7.6">
+ </branch>
+ <dependencies>
+ <dep package="gettext-runtime"/>
+ <dep package="readline"/>
+ </dependencies>
+ <after>
+ <dep package="berkeleydb"/>
+ <dep package="berkeleydb-nonsrctree"/>
+ </after>
+ </autotools>
+
+ <autotools id="itstool" autogen-sh="autoreconf">
+ <branch repo="itstool.org" module="itstool-2.0.2.tar.bz2" version="2.0.2" hash="sha256:bf909fb59b11a646681a8534d5700fec99be83bb2c57badf8c1844512227033a" size="96748">
+ <patch file="itstool/itstool.use-correct-libxml.patch" strip="1"/>
+ </branch>
+ </autotools>
+
+ <autotools id="yelp-xsl" autogen-sh="configure">
+ <branch module="yelp-xsl/3.12/yelp-xsl-3.12.0.tar.xz" version="3.12.0" hash="sha256:dd0b8af338b1cdae50444273d7c761e3f511224421487311103edc95a4493656" repo="ftp.gnome.org"/>
+ <dependencies>
+ <dep package="libxslt"/>
+ <dep package="libxml2"/>
+ <dep package="intltool"/>
+ <dep package="itstool"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="libxml2" autogen-sh="configure" autogenargs="--with-python">
+ <branch version="2.9.0" module="libxml2-2.9.0.tar.gz" repo="xmlsoft.org">
+ <patch file="libxml2/libxml2-Bug-686118-pthreads_once_init.patch" strip="1"/>
+ </branch>
+ <dependencies>
+ <dep package="python"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="apr">
+ <branch repo="apache.org" module="apr/apr-1.4.5.tar.bz2" version="1.4.5"/>
+ </autotools>
+
+ <autotools id="yelp-tools" autogen-sh="configure">
+ <branch module="yelp-tools/3.13/yelp-tools-3.13.3.tar.xz" version="3.13.3" hash="sha256:20067061736e3d4ec05fc364a71d8e5d06b230528b6b7a16cb41e03c9bf3b8c6" repo="ftp.gnome.org"/>
+ <dependencies>
+ <dep package="libxslt"/>
+ <dep package="libxml2"/>
+ <dep package="intltool"/>
+ <dep package="yelp-xsl"/>
+ <dep package="itstool"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="libxslt" autogen-sh="configure">
+ <branch version="1.1.27" module="libxslt-1.1.27.tar.gz" repo="xmlsoft.org"/>
+ <dependencies>
+ <dep package="libxml2"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="apr-util" autogenargs="--with-apr=$PREFIX/bin/apr-1-config">
+ <branch repo="apache.org" module="apr/apr-util-1.3.12.tar.bz2" version="1.3.12"/>
+ <dependencies>
+ <dep package="apr"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="intltool" autogen-sh="configure">
+ <branch repo="intltool" module="0.50.2/+download/intltool-0.50.2.tar.gz" version="0.50.2" hash="md5:23fbd879118253cb99aeac067da5f591"/>
+ <dependencies>
+ <dep package="gnome-common"/>
+ <dep package="perl-xml-parser"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="gnome-common">
+ <branch module="gnome-common/3.12/gnome-common-3.12.0.tar.xz" version="3.12.0" hash="sha256:18712bc2df6b2dd88a11b9f7f874096d1c0c6e7ebc9cfc0686ef963bd590e1d8" repo="ftp.gnome.org"/>
+ </autotools>
+ <autotools id="gtk-doc" autogenargs="--disable-scrollkeeper --with-xml-catalog=$JHBUILD_PREFIX/etc/xml/catalog" makeargs="-k -i" makeinstallargs="-k -i install" autogen-sh="configure">
+ <branch version="1.21" module="gtk-doc/1.21/gtk-doc-1.21.tar.xz" hash="sha256:5d934d012ee08edd1585544792efa80da271652587ba5b843d2cea8e8b80ee3e" repo="ftp.gnome.org"/>
+ <dependencies>
+ <dep package="libxslt"/>
+ <dep package="yelp-tools"/>
+ </dependencies>
+ </autotools>
+<autotools id="gtk-osx-docbook" autogen-sh="configure" supports-non-srcdir-builds="no">
+ <branch repo="sourceforge" module="gtk-osx/gtk-osx-docbook-1.1.tar.gz" version="1.1"/>
+ </autotools>
+
+ <perl id="perl-xml-simple">
+ <branch repo="cpan" module="authors/id/G/GR/GRANTM/XML-Simple-2.20.tar.gz" version="2.20" size="75993" md5sum="4d10964e123b76eca36678464daa63cd"/>
+ <dependencies>
+ <dep package="perl-xml-parser"/>
+ </dependencies>
+ </perl>
+
+ <perl id="perl-xml-parser" makeargs="EXPATLIBPATH=${prefix}/lib EXPATINCPATH=${prefix}/include">
+ <branch repo="cpan" module="authors/id/T/TO/TODDR/XML-Parser-2.41.tar.gz" version="2.41"/>
+ <dependencies>
+ <dep package="expat"/>
+ </dependencies>
+ </perl>
+
+ <autotools id="expat" autogen-sh="configure">
+ <branch module="expat/expat-2.1.0.tar.gz" version="2.1.0" repo="sourceforge"/>
+ </autotools>
+
+ <autotools id="flex" autogen-sh="configure">
+ <branch repo="sourceforge" module="flex/flex-2.5.37.tar.bz2" version="2.5.37"/>
+ </autotools>
+
+ <autotools id="bison" autogen-sh="configure">
+ <branch repo="ftp.gnu.org" module="bison/bison-2.6.3.tar.bz2" version="2.6.3"/>
+ </autotools>
+
+ <autotools id="pkg-config" autogen-sh="configure">
+ <branch repo="pkgconfig" module="pkg-config-0.25.tar.gz" version="0.25"/>
+ </autotools>
+
+ <autotools id="automake-1.13" autogen-sh="configure">
+ <branch repo="ftp.gnu.org" module="automake/automake-1.13.1.tar.xz" version="1.13.1"/>
+ </autotools>
+
+<autotools id="automake-1.12" autogen-sh="configure">
+ <branch repo="ftp.gnu.org" module="automake/automake-1.12.6.tar.xz" version="1.12.6"/>
+ </autotools>
+
+ <autotools id="automake-1.11" autogen-sh="configure">
+ <branch repo="ftp.gnu.org" module="automake/automake-1.11.6.tar.xz" version="1.11.6"/>
+ </autotools>
+
+ <autotools id="automake-1.10" autogen-sh="configure">
+ <branch repo="ftp.gnu.org" module="automake/automake-1.10.3.tar.bz2" version="1.10.3" size="957505" md5sum="b8e67fb458da396bc35555af7ef2b49f"/>
+ </autotools>
+
+ <autotools id="libtool" autogen-sh="configure">
+ <branch repo="ftp.gnu.org" module="libtool/libtool-2.4.2.tar.gz" version="2.4.2"/>
+ </autotools>
+
+ <autotools id="autoconf" autogen-sh="configure">
+ <branch repo="ftp.gnu.org" module="autoconf/autoconf-2.69.tar.xz" version="2.69"/>
+ <dependencies>
+ <dep package="m4"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="m4" autogen-sh="configure">
+ <branch repo="ftp.gnu.org" module="m4/m4-1.4.16.tar.bz2" version="1.4.16"/>
+ </autotools>
+
+ <autotools id="cmake" autogen-sh="bootstrap" autogen-template="%(srcdir)s/%(autogen-sh)s --prefix=%(prefix)s %(autogenargs)s">
+ <branch repo="cmake" module="v2.8/cmake-2.8.12.tar.gz" version="2.8.12"/>
+ </autotools>
+
+ <autotools id="gettext-tools" autogen-sh="configure" autogenargs="--without-emacs --disable-java --disable-native-java --disable-libasprintf --disable-csharp --with-included-glib">
+ <branch repo="ftp.gnu.org" source-subdir="gettext-tools" module="gettext/gettext-0.18.1.1.tar.gz" version="0.18.1.1" size="15139737" md5sum="3dd55b952826d2b32f51308f2f91aa89">
+ <patch file="gettext-tools/gettext-bug33999-stpncpy.patch" strip="1"/>
+ </branch>
+ </autotools>
+
+ <autotools id="subversion">
+ <branch repo="apache.org" module="subversion/subversion-1.5.9.tar.bz2" version="1.5.9"/>
+ <dependencies>
+ <dep package="apr-util"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="make">
+ <branch repo="ftp.gnu.org" module="make/make-3.82.tar.gz" version="3.82"/>
+ </autotools>
+
+ <autotools id="xz" autogen-sh="configure">
+ <branch repo="tukaani.org" module="xz/xz-5.0.4.tar.bz2" version="5.0.4"/>
+ </autotools>
+
+ <metamodule id="meta-bootstrap">
+ <dependencies>
+ <dep package="xz"/>
+ <dep package="make"/> <!-- Needed for Tiger, skipped otherwise -->
+ <dep package="subversion"/> <!-- Needed for Tiger, skipped otherwise -->
+ <dep package="gettext-tools"/> <!-- Needed for 64-bit -->
+ <dep package="cmake"/>
+ <dep package="m4"/> <!-- Can be skipped for Leopard and later -->
+ <dep package="autoconf"/>
+ <dep package="libtool"/>
+ <dep package="automake-1.10"/>
+ <dep package="automake-1.11"/>
+ <dep package="automake-1.12"/>
+ <dep package="automake-1.13"/>
+ <dep package="pkg-config"/>
+ <dep package="bison"/> <!-- included for Tiger, skipped otherwise -->
+ <dep package="flex"/> <!-- included for Tiger, skipped otherwise -->
+ <dep package="expat"/>
+ <dep package="perl-xml-parser"/>
+ <dep package="perl-xml-simple"/>
+ <dep package="gtk-osx-docbook"/>
+ <dep package="gtk-doc"/>
+ <dep package="gnome-common"/>
+ <dep package="intltool"/>
+ </dependencies>
+ </metamodule>
+
+</moduleset>
diff --git a/build-aux/osx/build/modulesets/gedit.modules b/build-aux/osx/build/modulesets/gedit.modules
new file mode 100644
index 0000000..f8497b9
--- /dev/null
+++ b/build-aux/osx/build/modulesets/gedit.modules
@@ -0,0 +1,553 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!DOCTYPE moduleset SYSTEM "moduleset.dtd">
+<moduleset><repository type="tarball" name="abisource/enchant" href="http://www.abisource.com/downloads/enchant/"/>
+ <repository type="tarball" name="cairographics" href="http://cairographics.org/releases/"/>
+
+ <repository type="tarball" name="cairographics.org" href="http://cairographics.org/releases/"/>
+ <repository type="tarball" name="cups" href="http://ftp.easysw.com/pub/"/>
+
+ <repository type="tarball" name="fontconfig" href="http://www.freedesktop.org/software/fontconfig/release/"/>
+ <repository type="tarball" name="ftp.gnome.org" default="yes" href="ftp://ftp.gnome.org/pub/gnome/sources/"/>
+ <repository type="tarball" name="ftp.gnu.org" href="ftp://ftp.gnu.org/gnu/"/>
+ <repository type="tarball" name="ftp.gnupg.org" href="ftp://ftp.gnupg.org/"/>
+ <repository type="git" name="git.github.com" href="https://github.com/"/>
+
+ <repository type="git" name="git.gnome.org" href="git://git.gnome.org/"/>
+ <repository type="tarball" name="hadess" href="http://freedesktop.org/~hadess/"/>
+ <repository type="tarball" name="harfbuzz" href="http://www.freedesktop.org/software/harfbuzz/release/"/>
+ <repository type="tarball" name="icon-theme" href="http://icon-theme.freedesktop.org/releases/"/>
+ <repository type="tarball" name="iso-codes" href="http://pkg-isocodes.alioth.debian.org/downloads/"/>
+ <repository type="tarball" name="jpeg" href="http://www.ijg.org/files/"/>
+ <repository type="tarball" name="libtiff" href="http://download.osgeo.org/"/>
+ <repository type="tarball" name="oracle" href="http://download.oracle.com/"/>
+ <repository type="tarball" name="python" href="https://www.python.org/ftp/python/"/>
+ <repository type="tarball" name="sourceforge" href="http://downloads.sourceforge.net/sourceforge/"/>
+ <repository type="tarball" name="sourceware.org" href="ftp://sourceware.org/pub/"/>
+
+ <repository type="tarball" name="sqlite" href="http://www.sqlite.org/"/>
+ <repository type="tarball" name="tango.freedesktop.org" href="http://tango.freedesktop.org/releases/"/>
+ <repository type="tarball" name="tarball.github.com" href="https://github.com/"/>
+ <repository type="tarball" name="xmlsoft.org" href="ftp://xmlsoft.org/libxml2/"/>
+ <autotools id="libcroco" autogenargs="--disable-Bsymbolic" autogen-sh="configure">
+ <branch module="libcroco/0.6/libcroco-0.6.8.tar.xz" version="0.6.8" hash="sha256:ea6e1b858c55219cefd7109756bff5bc1a774ba7a55f7d3ccd734d6b871b8570" repo="ftp.gnome.org"/>
+ </autotools>
+
+ <autotools id="libgpg-error" autogen-sh="configure" supports-non-srdir-builds="no">
+ <branch repo="ftp.gnupg.org" version="1.10" module="gcrypt/libgpg-error/libgpg-error-1.10.tar.bz2"/>
+ </autotools>
+
+ <autotools id="libtasn1" supports-non-srcdir-builds="no" autogen-sh="configure">
+ <branch repo="ftp.gnu.org" version="2.14" module="libtasn1/libtasn1-2.14.tar.gz"/>
+ </autotools>
+
+ <autotools id="gnome-icon-theme" autogen-sh="configure">
+ <branch module="gnome-icon-theme/3.12/gnome-icon-theme-3.12.0.tar.xz" version="3.12.0" hash="sha256:359e720b9202d3aba8d477752c4cd11eced368182281d51ffd64c8572b4e503a" repo="ftp.gnome.org"/>
+ <dependencies>
+ <dep package="hicolor-icon-theme"/>
+ <dep package="icon-naming-utils"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="librsvg" autogenargs="--disable-Bsymbolic">
+ <branch module="librsvg/2.40/librsvg-2.40.3.tar.xz" version="2.40.3" hash="sha256:eb2755fe8bf0aa5b439bcf94edc880f08396b4c79fd54c73147df0607c63c98f" repo="ftp.gnome.org"/>
+ <dependencies>
+ <dep package="libcroco"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="pixman" autogenargs="--disable-gtk" autogen-sh="configure">
+ <branch version="0.30.2" module="pixman-0.30.2.tar.gz" repo="cairographics" hash="sha1:59cc9cd91a2394b7c0aa90ffc7c141f06d75f066"/>
+ <after>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ </after>
+ </autotools>
+
+ <autotools id="libxml2" autogen-sh="configure" autogenargs="--with-python">
+ <branch version="2.9.0" module="libxml2-2.9.0.tar.gz" repo="xmlsoft.org">
+ <patch file="libxml2/libxml2-Bug-686118-pthreads_once_init.patch" strip="1"/>
+ </branch>
+ <after>
+ <dep package="python"/>
+ <dep package="python3"/>
+ </after>
+ </autotools>
+
+ <autotools id="libgcrypt" autogen-sh="configure" autogenargs="--disable-asm">
+ <branch repo="ftp.gnupg.org" version="1.5.3" module="gcrypt/libgcrypt/libgcrypt-1.5.3.tar.bz2">
+ <patch file="libgcrypt/libgcrypt-build-clang.patch" strip="1"/>
+ </branch>
+ <dependencies>
+ <dep package="libgpg-error"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="gnutls" autogen-sh="configure" autogenargs="--with-libgcrypt --without-p11-kit">
+ <branch repo="ftp.gnu.org" version="2.12.20" module="gnutls/gnutls-2.12.20.tar.bz2"/>
+ <dependencies>
+ <dep package="libgcrypt"/>
+ <dep package="libtasn1"/>
+ <dep package="zlib"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="berkeleydb-nonsrctree" autogen-sh="configure" autogen-template="%(srcdir)s/dist/%(autogen-sh)s --prefix %(prefix)s --libdir %(libdir)s %(autogenargs)s">
+
+ <branch module="berkeley-db/db-4.8.30.NC.tar.gz" version="4.8.30" repo="oracle">
+ <patch file="berkeleydb-nonsrctree/atomic.patch" strip="1"/>
+ </branch>
+ </autotools>
+
+ <autotools id="berkeleydb" autogen-sh="configure" supports-non-srcdir-builds="no" makeargs="-C build_unix" autogen-template="cd build_unix; ../dist/%(autogen-sh)s --prefix %(prefix)s --libdir %(libdir)s %(autogenargs)s" makeinstallargs="-C build_unix install">
+
+ <branch module="berkeley-db/db-4.8.30.NC.tar.gz" version="4.8.30" repo="oracle">
+ <patch file="berkeleydb/atomic.patch" strip="1"/>
+ </branch>
+ </autotools>
+
+ <autotools id="adwaita-icon-theme" autogen-sh="configure">
+ <branch module="adwaita-icon-theme/3.13/adwaita-icon-theme-3.13.91.tar.xz" version="3.13.91" hash="sha256:d0cf4705d3439c68d344431b62cca5fe6fcf91bd38c745c48b2476d0aa41b8ad" repo="ftp.gnome.org"/>
+ <dependencies>
+ <dep package="hicolor-icon-theme"/>
+ <dep package="icon-naming-utils"/>
+ <dep package="librsvg"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="gnome-themes-standard" autogen-sh="configure" autogenargs="--disable-gtk2-engine">
+ <branch module="gnome-themes-standard/3.13/gnome-themes-standard-3.13.90.tar.xz" version="3.13.90" hash="sha256:76bfbf25cdd6f86fdbf15b085c5bcfbe0abf4715510a917ec023a4d780fb5f53" repo="ftp.gnome.org"/>
+ <dependencies>
+ <dep package="librsvg"/>
+ <dep package="gnome-icon-theme"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="icon-naming-utils" autogen-sh="configure">
+ <branch repo="tango.freedesktop.org" version="0.8.90" module="icon-naming-utils-0.8.90.tar.bz2" hash="md5:dd8108b56130b9eedc4042df634efa66"/>
+ <after>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ </after>
+ </autotools>
+
+ <autotools id="gtk+" autogen-sh="autoreconf" autogenargs="--with-gdktarget=quartz --enable-quartz-relocation --disable-introspection">
+ <branch module="gtk+/2.24/gtk+-2.24.21.tar.xz" version="2.24.21" hash="sha256:302e9216dd19ec4b5b9e2f77275e23758253f7e86b06287284d8e794ef38dce3" repo="ftp.gnome.org">
+ <!--patch file="http://git.gnome.org/browse/gtk-osx/plain/patches/0004-Bug-571582-GtkSelection-implementation-for-quartz.patch" strip="1"/-->
+ <patch file="gtk+/0008-Implement-GtkDragSourceOwner-pasteboardChangedOwner.patch" strip="1"/>
+ <patch file="gtk+/0006-Bug-658722-Drag-and-Drop-sometimes-stops-working.patch" strip="1"/>
+<patch file="gtk+/gtk+-2-m4-creation.patch" strip="1"/>
+ </branch>
+ <dependencies>
+ <dep package="glib"/>
+ <dep package="pango"/>
+ <dep package="atk"/>
+ <dep package="gdk-pixbuf"/>
+ <dep package="gobject-introspection"/>
+ </dependencies>
+ <after>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ </after>
+ </autotools>
+
+ <autotools id="atk" autogen-sh="configure">
+ <branch module="atk/2.13/atk-2.13.90.tar.xz" version="2.13.90" hash="sha256:66a1ddf2ee3e8251012d428740549d7ac176135451927bcc4c332e3ed12dfc47" repo="ftp.gnome.org"/>
+ <dependencies>
+ </dependencies>
+ <after>
+ <dep package="glib"/>
+ <dep package="glib"/>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ </after>
+ </autotools>
+
+ <autotools id="gdk-pixbuf" autogen-sh="configure">
+ <branch module="gdk-pixbuf/2.31/gdk-pixbuf-2.31.1.tar.xz" version="2.31.1" hash="sha256:25a75e3c61dac11e6ff6416ad846951ccafac6486b1c6a1bfb0b213b99db52cd" repo="ftp.gnome.org"/>
+ <after>
+ <dep package="pango"/>
+ </after>
+ </autotools>
+
+ <autotools id="pango" autogen-sh="autoreconf">
+ <branch version="1.36.7" module="pango/1.36/pango-1.36.7.tar.xz" hash="sha256:1f7b527423a1b3044fd9ae7fbe054107b06723ff1c73e0b5f7bf9b84358d404a" repo="ftp.gnome.org">
+ </branch>
+ <dependencies>
+ <dep package="cairo"/>
+ </dependencies>
+ <after>
+ <dep package="gobject-introspection"/>
+ <dep package="meta-gtk-osx-freetype"/>
+ <dep package="glib"/>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ </after>
+ </autotools>
+
+ <autotools id="zlib" autogen-sh="configure" skip-autogen="never" supports-non-srcdir-builds="no">
+ <branch repo="sourceforge" version="1.2.7" module="libpng/zlib-1.2.7.tar.gz"/>
+ </autotools>
+
+ <autotools id="python" autogenargs="--enable-shared" autogen-sh="configure">
+ <branch repo="python" module="2.7.6/Python-2.7.6.tar.xz" version="2.7.6">
+ </branch>
+ <dependencies>
+ <dep package="gettext-runtime"/>
+ <dep package="readline"/>
+ </dependencies>
+ <after>
+ <dep package="berkeleydb"/>
+ <dep package="berkeleydb-nonsrctree"/>
+ </after>
+ </autotools>
+
+ <autotools id="cairo" autogen-sh="configure" autogenargs="--enable-pdf --enable-quartz --enable-xlib=no --without-x">
+ <branch module="cairo-1.12.16.tar.xz" version="1.12.16" repo="cairographics" hash="sha1:4f6e337d5d3edd7ea79d1426f575331552b003ec">
+ </branch>
+ <dependencies>
+ <dep package="pixman"/>
+ </dependencies>
+ <after>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ <dep package="fontconfig"/>
+ <dep package="freetype"/>
+ </after>
+ </autotools>
+
+ <autotools id="libffi" autogenargs="--disable-builddir" autogen-sh="configure">
+ <branch module="libffi/libffi-3.0.13.tar.gz" repo="sourceware.org" version="3.0.13" checkoutdir="atgreen-libffi-873d687"/>
+ </autotools>
+
+<autotools id="libxslt" autogen-sh="configure">
+ <branch version="1.1.27" module="libxslt-1.1.27.tar.gz" repo="xmlsoft.org"/>
+ <dependencies>
+ <dep package="libxml2"/>
+ </dependencies>
+ </autotools>
+
+<autotools id="sqlite" autogenargs="--disable-tcl --enable-threadsafe" autogen-sh="configure">
+ <branch module="sqlite-autoconf-3071401.tar.gz" version="3.7.14" repo="sqlite"/>
+ </autotools>
+
+<autotools id="glib-networking" autogen-sh="configure" autogenargs="--without-ca-certificates set_more_warnings=no">
+ <branch module="glib-networking/2.41/glib-networking-2.41.4.tar.xz" version="2.41.4" hash="sha256:930ad618865dcf81765d0f48cb6f13e22d76203efa59d30604aed0384ce80fd7" repo="ftp.gnome.org"/>
+ <dependencies>
+ <dep package="gnutls"/>
+ <dep package="libgcrypt"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="pygobject3" autogenargs="--with-python=python3">
+ <branch module="pygobject" repo="git.gnome.org"/>
+ <dependencies>
+ <dep package="meta-gtk-osx-gtk3"/>
+ </dependencies>
+ <after>
+ <dep package="python"/>
+ <dep package="python3"/>
+ </after>
+ </autotools>
+
+ <waf id="pycairo-python3" autogen-sh="configure" python-command="python3">
+ <branch module="pycairo-1.10.0.tar.bz2" repo="cairographics.org" version="1.10.0" hash="sha1:b4283aa1cc9aafd12fd72ad371303a486da1d014"/>
+ <dependencies>
+ <dep package="python3"/>
+ <dep package="cairo"/>
+ </dependencies>
+ <after>
+ <dep package="python3"/>
+ <dep package="meta-gtk-osx-gtk3"/>
+ </after>
+ </waf>
+
+ <autotools id="python3" autogenargs="--enable-shared" autogen-sh="configure">
+ <branch repo="python" module="3.3.2/Python-3.3.2.tar.xz" version="3.3.2"/>
+ <dependencies>
+ <dep package="gettext-runtime"/>
+ <dep package="readline"/>
+ </dependencies>
+ <after>
+ <dep package="berkeleydb"/>
+ <dep package="berkeleydb-nonsrctree"/>
+ </after>
+ </autotools>
+
+ <metamodule id="meta-gtk-osx-gtk3-core-themes">
+ <dependencies>
+ <dep package="icon-naming-utils"/>
+ <dep package="gnome-themes-standard"/>
+ <dep package="adwaita-icon-theme"/>
+ </dependencies>
+ </metamodule>
+
+ <autotools id="gtk-mac-integration" autogen-sh="configure" autogenargs="--disable-python">
+ <branch module="gtk-mac-integration/2.0/gtk-mac-integration-2.0.5.tar.xz" version="2.0.5" hash="sha256:6c4ff7501d7ff35e49068052d80fcf76ce494e5953c5f3967e4958b1b0c67b9f" repo="ftp.gnome.org">
+ <patch file="gtk-mac-integration/0001-Fix-unhandled-exception-from-attempting-to-access-me.patch" strip="1"/>
+ </branch>
+ <dependencies>
+ </dependencies>
+ <after>
+ <dep package="gtk+"/>
+ <dep package="gtk+-3.0"/>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ </after>
+ </autotools>
+
+<autotools id="gtk+-3.0" autogenargs="--enable-quartz-backend --enable-quartz-relocation --disable-colord --without-atk-bridge">
+ <branch module="jessevdk/gtk" checkoutdir="gtk+-3.0" repo="git.github.com" revision="wip/app-osx-int"/>
+ <dependencies>
+ <dep package="gobject-introspection"/>
+ <dep package="pango"/>
+ <dep package="gdk-pixbuf"/>
+ <dep package="atk"/>
+ </dependencies>
+ <after>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ </after>
+ </autotools>
+
+ <autotools id="harfbuzz" autogen-sh="configure" autogenargs="--with-coretext">
+ <branch repo="harfbuzz" module="harfbuzz-0.9.26.tar.bz2" version="0.9.26"/>
+ <dependencies>
+ <dep package="freetype"/>
+ <dep package="fontconfig"/>
+ <dep package="glib"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="fontconfig" autogen-sh="autoreconf" autogenargs="--disable-docs">
+ <branch repo="fontconfig" version="2.11.0" module="fontconfig-2.11.0.tar.gz"/>
+ <dependencies>
+ <dep package="freetype"/>
+ </dependencies>
+ </autotools>
+
+<autotools id="freetype" autogen-sh="configure" skip-autogen="never" autogenargs="--without-bzip2">
+ <branch module="freetype/freetype-2.5.2.tar.gz" version="2.5.2" repo="sourceforge">
+ </branch>
+ <dependencies>
+ <dep package="zlib"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="gobject-introspection" autogen-sh="configure">
+ <branch module="gobject-introspection/1.41/gobject-introspection-1.41.91.tar.xz" version="1.41.91" hash="sha256:a1ea708eeaa13dcc5a3078b1ae5aae178f22410023a56c699560f4e068722d9e" repo="ftp.gnome.org">
+ <patch file="gobject-introspection/girscanner-objc.patch" strip="1"/>
+ </branch>
+ <dependencies>
+ <dep package="glib"/>
+ <dep package="cairo"/>
+ </dependencies>
+ <after>
+ <dep package="python"/>
+ </after>
+ </autotools>
+
+ <autotools id="glib" autogen-sh="autoreconf">
+ <branch module="glib/2.41/glib-2.41.4.tar.xz" version="2.41.4" hash="sha256:1661bc4abfd1b0b59ae7abbef9d6a60c32192a7a65122753d5d8cc2db110fbf7" repo="ftp.gnome.org">
+ <patch file="glib/0001-Bug-724590-GSlice-slab_stack-corruption.patch" strip="1"/>
+ </branch>
+ <dependencies>
+ <dep package="libffi"/>
+ </dependencies>
+ <after>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ </after>
+ </autotools>
+
+ <cmake id="libgit2" cmakeargs="-DTHREADSAFE:BOOL=1">
+ <branch repo="tarball.github.com" module="libgit2/libgit2/archive/v${version}.tar.gz" version="0.21.0" hash="ae2afb5729ab6dcf6f690e5d66cb876372eaaedd37dc4fb072ad8da92338e099" checkoutdir="libgit2-${version}">
+ </branch>
+ </cmake>
+
+ <autotools id="hicolor-icon-theme" autogen-sh="configure" supports-non-srcdir-builds="no">
+ <branch module="hicolor-icon-theme-0.11.tar.gz" repo="icon-theme" version="0.11"/>
+
+ </autotools>
+
+ <autotools id="gnome-doc-utils" autogenargs="--disable-scrollkeeper" autogen-sh="configure" supports-non-srcdir-builds="no">
+ <branch module="gnome-doc-utils/0.20/gnome-doc-utils-0.20.10.tar.xz" version="0.20.10" hash="sha256:cb0639ffa9550b6ddf3b62f3b1add92fb92ab4690d351f2353cffe668be8c4a6" repo="ftp.gnome.org"/>
+ <dependencies>
+ <dep package="libxslt"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="gettext-runtime" autogen-sh="configure" autogenargs="--without-emacs --disable-java --disable-native-java --disable-libasprintf --disable-csharp">
+ <branch repo="ftp.gnu.org" source-subdir="gettext-runtime" module="gettext/gettext-0.18.1.1.tar.gz" version="0.18.1.1" size="15139737" md5sum="3dd55b952826d2b32f51308f2f91aa89">
+ <patch file="gettext-runtime/gettext-bug33999-stpncpy.patch" strip="1"/>
+ </branch>
+ </autotools>
+
+ <autotools id="libtiff" autogen-sh="configure" autogenargs="--without-x --without-apple-opengl-framework">
+ <branch version="3.9.5" module="libtiff/tiff-3.9.5.tar.gz" repo="libtiff"/>
+ <dependencies>
+ <dep package="libjpeg"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="libjpeg" autogen-sh="configure">
+ <branch module="jpegsrc.v8d.tar.gz" version="8c" repo="jpeg" checkoutdir="jpeg-8d">
+ </branch>
+ </autotools>
+
+ <autotools id="libpng" autogenargs="--enable-shared" autogen-sh="configure">
+ <branch version="1.5.13" module="libpng/libpng-1.5.13.tar.bz2" repo="sourceforge"/>
+ </autotools>
+
+ <autotools id="cups" autogen-sh="configure" skip-autogen="never" autogenargs="DSOFLAGS=&quot;$LDFLAGS&quot;">
+ <branch module="cups/1.2.12/cups-1.2.12-source.tar.bz2" version="1.2.12" repo="cups" checkoutdir="cups-1.2.12"/>
+ <dependencies>
+ <dep package="libtiff"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="readline" autogen-sh="configure">
+ <branch repo="ftp.gnu.org" module="readline/readline-6.3.tar.gz" version="6.3">
+ </branch>
+ </autotools>
+
+ <autotools id="libsoup" autogen-sh="configure" autogenargs="set_more_warnings=no">
+ <branch module="libsoup/2.46/libsoup-2.46.0.tar.xz" version="2.46.0" hash="sha256:fa3d5574c1a2df521242e2ca624a2b3057121798cab9f8f40525aa186a7b15a3" repo="ftp.gnome.org"/>
+ <dependencies>
+ <dep package="glib"/>
+ <dep package="glib-networking"/>
+ <dep package="sqlite"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="shared-mime-info" autogen-sh="configure" supports-non-srcdir-builds="no">
+ <branch module="shared-mime-info-1.2.tar.xz" version="1.2" repo="hadess">
+ <patch file="shared-mime-info/0001-Bug-70255-Build-fails-with-glib-2.38.patch" strip="1"/>
+ </branch>
+ <dependencies>
+ <dep package="glib"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="iso-codes" autogen-sh="configure">
+ <branch module="iso-codes-3.51.tar.xz" version="3.51" repo="iso-codes"/>
+ </autotools>
+
+ <autotools id="gsettings-desktop-schemas">
+ <branch module="gsettings-desktop-schemas/3.13/gsettings-desktop-schemas-3.13.92.tar.xz" version="3.13.92" hash="sha256:82338a066b48cf39f190ef7a82db46bc6a6a451cbe08d43dca7d03364bf9c034" repo="ftp.gnome.org">
+ </branch>
+ <dependencies>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ <dep package="glib"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="enchant" autogenargs="--disable-myspell --disable-ispell">
+ <branch module="1.6.0/enchant-1.6.0.tar.gz" version="1.6.0" repo="abisource/enchant">
+ <patch file="enchant/enchant-gsize.patch" strip="1"/>
+ <patch file="enchant/enchant-applespell.patch" strip="1"/>
+ <patch file="enchant/enchant-relocatable.patch" strip="1"/>
+ </branch>
+ <dependencies>
+ <dep package="glib"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="gtksourceview3">
+ <branch module="gtksourceview" repo="git.gnome.org"/>
+ <after>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ <dep package="meta-gtk-osx-gtk3"/>
+ </after>
+ </autotools>
+
+ <autotools id="libpeas" autogenargs="PYTHON=python3 --disable-python2 --enable-python3">
+ <branch module="libpeas" repo="git.gnome.org">
+ </branch>
+ <dependencies>
+ <dep package="python3"/>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ <dep package="meta-gtk-osx-gtk3"/>
+ <dep package="pycairo-python3"/>
+ <dep package="pygobject3"/>
+ </dependencies>
+ </autotools>
+
+ <metamodule id="meta-gtk-osx-gtk3">
+ <dependencies>
+ <dep package="gtk+-3.0"/>
+ <dep package="gtk-mac-integration"/>
+ <dep package="meta-gtk-osx-gtk3-core-themes"/>
+ </dependencies>
+ <after>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ </after>
+ </metamodule>
+
+ <metamodule id="meta-gtk-osx-freetype">
+ <dependencies>
+ <dep package="freetype"/>
+ <dep package="fontconfig"/>
+ <dep package="harfbuzz"/>
+ </dependencies>
+ </metamodule>
+
+ <autotools id="vte" autogenargs="--disable-Bsymbolic --disable-vala --disable-gnome-pty-helper">
+ <branch module="jessevdk/vte" repo="git.github.com"/>
+ <dependencies>
+ <dep package="meta-gtk-osx-gtk3"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="libgit2-glib">
+ <branch module="libgit2-glib/0.0/libgit2-glib-0.0.20.tar.xz" version="0.0.20" hash="sha256:f8a10c8d3fcad14eed080dff6b8db0c72866c11a05b9731af31cb7258bcc8d95" repo="ftp.gnome.org"/>
+ <dependencies>
+ <dep package="libgit2"/>
+ <dep package="glib"/>
+ <dep package="gobject-introspection"/>
+ </dependencies>
+ </autotools>
+
+ <metamodule id="meta-gtk-osx-bootstrap">
+ <dependencies>
+ <dep package="readline"/>
+ <dep package="cups"/>
+ <dep package="libpng"/>
+ <dep package="libjpeg"/>
+ <dep package="libtiff"/>
+ <dep package="gettext-runtime"/>
+ <dep package="gnome-doc-utils"/>
+ <dep package="hicolor-icon-theme"/>
+ </dependencies>
+ </metamodule>
+
+ <metamodule id="gedit-deps">
+ <dependencies>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ <dep package="meta-gtk-osx-freetype"/>
+ <dep package="meta-gtk-osx-gtk3"/>
+ <dep package="libpeas"/>
+ <dep package="gtksourceview3"/>
+ <dep package="enchant"/>
+ <dep package="gsettings-desktop-schemas"/>
+ <dep package="iso-codes"/>
+ <dep package="shared-mime-info"/>
+ <dep package="libsoup"/>
+ </dependencies>
+ </metamodule>
+
+ <autotools id="gedit-plugins">
+ <branch module="gedit-plugins" repo="git.gnome.org"/>
+ <dependencies>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ <dep package="gedit"/>
+ <dep package="libgit2-glib"/>
+ <dep package="vte"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="gedit" autogenargs="PYTHON=python3">
+ <branch repo="git.gnome.org" module="gedit"/>
+ <dependencies>
+ <dep package="gedit-deps"/>
+ </dependencies>
+ </autotools>
+
+ <metamodule id="gedit-meta">
+ <dependencies>
+ <dep package="gedit"/>
+ <dep package="gedit-plugins"/>
+ </dependencies>
+ </metamodule>
+
+</moduleset>
diff --git a/build-aux/osx/build/modulesets/patches/berkeleydb-nonsrctree/atomic.patch b/build-aux/osx/build/modulesets/patches/berkeleydb-nonsrctree/atomic.patch
new file mode 100644
index 0000000..398aa1d
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/berkeleydb-nonsrctree/atomic.patch
@@ -0,0 +1,20 @@
+--- src/dbinc/atomic.h 2013-03-12 14:07:22.000000000 -0400
++++ src/dbinc/atomic.h.change 2013-03-12 14:06:35.000000000 -0400
+@@ -144,7 +144,7 @@
+ #define atomic_inc(env, p) __atomic_inc(p)
+ #define atomic_dec(env, p) __atomic_dec(p)
+ #define atomic_compare_exchange(env, p, o, n) \
+- __atomic_compare_exchange((p), (o), (n))
++ __atomic_compare_exchange_db((p), (o), (n))
+ static inline int __atomic_inc(db_atomic_t *p)
+ {
+ int temp;
+@@ -176,7 +176,7 @@
+ * http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
+ * which configure could be changed to use.
+ */
+-static inline int __atomic_compare_exchange(
++static inline int __atomic_compare_exchange_db(
+ db_atomic_t *p, atomic_value_t oldval, atomic_value_t newval)
+ {
+ atomic_value_t was;
diff --git a/build-aux/osx/build/modulesets/patches/berkeleydb/atomic.patch b/build-aux/osx/build/modulesets/patches/berkeleydb/atomic.patch
new file mode 100644
index 0000000..398aa1d
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/berkeleydb/atomic.patch
@@ -0,0 +1,20 @@
+--- src/dbinc/atomic.h 2013-03-12 14:07:22.000000000 -0400
++++ src/dbinc/atomic.h.change 2013-03-12 14:06:35.000000000 -0400
+@@ -144,7 +144,7 @@
+ #define atomic_inc(env, p) __atomic_inc(p)
+ #define atomic_dec(env, p) __atomic_dec(p)
+ #define atomic_compare_exchange(env, p, o, n) \
+- __atomic_compare_exchange((p), (o), (n))
++ __atomic_compare_exchange_db((p), (o), (n))
+ static inline int __atomic_inc(db_atomic_t *p)
+ {
+ int temp;
+@@ -176,7 +176,7 @@
+ * http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
+ * which configure could be changed to use.
+ */
+-static inline int __atomic_compare_exchange(
++static inline int __atomic_compare_exchange_db(
+ db_atomic_t *p, atomic_value_t oldval, atomic_value_t newval)
+ {
+ atomic_value_t was;
diff --git a/build-aux/osx/build/modulesets/patches/enchant/enchant-applespell.patch b/build-aux/osx/build/modulesets/patches/enchant/enchant-applespell.patch
new file mode 100644
index 0000000..f6f1f65
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/enchant/enchant-applespell.patch
@@ -0,0 +1,368 @@
+--- a/configure.in (revision 30591)
++++ b/configure.in (working copy)
+@@ -33,4 +33,5 @@
+ AC_PROG_CC
+ AC_PROG_CPP
++AC_PROG_OBJC
+ AC_PROG_INSTALL
+ AC_PROG_LN_S
+--- a/src/applespell/Makefile.am 2010-04-01 22:53:37.000000000 +0200
++++ b/src/applespell/Makefile.am 2012-01-11 22:42:13.000000000 +0100
+@@ -1,4 +1,13 @@
+-EXTRA_DIST= \
+- applespell_checker.h \
+- applespell_checker.mm \
+- AppleSpell.config
++target_lib = libenchant_applespell.la
++
++INCLUDES=-I$(top_srcdir)/src $(ENCHANT_CFLAGS) $(CC_WARN_CFLAGS) -DXP_TARGET_COCOA -xobjective-c -D_ENCHANT_BUILD=1
++
++applespell_LTLIBRARIES = $(target_lib)
++applespelldir= $(libdir)/enchant
++
++libenchant_applespell_la_LIBADD= $(ENCHANT_LIBS) -lobjc $(top_builddir)/src/libenchant.la
++libenchant_applespell_la_LDFLAGS = -module -avoid-version -no-undefined -framework Cocoa
++libenchant_applespell_la_SOURCES = applespell_provider.m
++libenchant_applespell_la_LIBTOOLFLAGS = --tag=CC
++
++libenchant_applespell_lalibdir=$(libdir)/enchant
+--- a/src/applespell/applespell_provider.m 2012-01-11 22:46:35.000000000 +0100
++++ b/src/applespell/applespell_provider.m 2012-01-11 22:39:17.000000000 +0100
+@@ -0,0 +1,337 @@
++/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/* enchant
++ * Copyright (C) 2004 Remi Payette
++ * Copyright (C) 2004 Francis James Franklin
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2
++ * of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++ * 02110-1301, USA.
++ */
++
++#include <glib.h>
++#include <gmodule.h>
++#include <Cocoa/Cocoa.h>
++#include <AvailabilityMacros.h>
++
++#include "enchant-provider.h"
++
++#ifdef __cplusplus
++extern "C"
++{
++#endif
++
++ENCHANT_MODULE_EXPORT (EnchantProvider *)
++init_enchant_provider (void);
++
++ENCHANT_MODULE_EXPORT (void)
++configure_enchant_provider (EnchantProvider *provider, const gchar *module_dir);
++
++#ifdef __cplusplus
++}
++#endif
++
++ENCHANT_PLUGIN_DECLARE("AppleSpell")
++
++typedef struct
++{
++ NSSpellChecker *checker;
++ NSString *language;
++} Dictionary;
++
++static Dictionary *
++dictionary_new (NSSpellChecker *checker,
++ NSString *language)
++{
++ Dictionary *ret;
++
++ ret = g_slice_new (Dictionary);
++
++ ret->checker = checker;
++ ret->language = language;
++
++ return ret;
++}
++
++static void
++dictionary_free (Dictionary *dictionary)
++{
++ [dictionary->language release];
++ g_slice_free (Dictionary, dictionary);
++}
++
++static gchar **
++applespell_dict_suggest (EnchantDict *dict,
++ const gchar * const word,
++ size_t len,
++ size_t *out_n_suggs)
++{
++ NSAutoreleasePool *pool;
++ gchar **ret = NULL;
++ NSString *str;
++ Dictionary *d;
++ NSArray *words;
++ NSRange range;
++ guint i = 0;
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ d = dict->user_data;
++
++ str = [[NSString alloc] initWithBytes:word length:len encoding:NSUTF8StringEncoding];
++
++ range.location = 0;
++ range.length = [str length];
++
++#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5
++ words = [d->checker guessesForWordRange:range
++ inString:str
++ language:d->language
++ inSpellDocumentWithTag:0];
++#else
++ [d->checker setLanguage:d->language];
++ words = [d->checker guessesForWord:str];
++#endif
++
++ *out_n_suggs = [words count];
++
++ ret = g_new0 (gchar *, *out_n_suggs + 1);
++
++ for (i = 0; i < [words count]; ++i)
++ {
++ ret[i] = g_strdup ([[words objectAtIndex:i] UTF8String]);
++ }
++
++ [str release];
++ [pool release];
++
++ return ret;
++}
++
++static gint
++applespell_dict_check (EnchantDict *dict,
++ const gchar * const word,
++ size_t len)
++{
++ NSAutoreleasePool *pool;
++ gint result = 0;
++ NSString *str;
++ Dictionary *d;
++ NSRange range;
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ d = dict->user_data;
++
++ str = [[NSString alloc] initWithBytes:word length:len encoding:NSUTF8StringEncoding];
++
++ range = [d->checker checkSpellingOfString:str
++ startingAt:0
++ language:d->language
++ wrap:true
++ inSpellDocumentWithTag:0
++ wordCount:NULL];
++
++ result = range.length > 0 ? 1 : 0;
++
++ [str release];
++ [pool release];
++
++ return result;
++}
++
++static EnchantDict *
++applespell_provider_request_dict (EnchantProvider *provider,
++ const char * const tag)
++{
++ NSAutoreleasePool *pool;
++ EnchantDict *dict;
++ NSString *str;
++
++ pool = [[NSAutoreleasePool alloc] init];
++ str = [[NSString alloc] initWithUTF8String:tag];
++
++ dict = g_new0 (EnchantDict, 1);
++
++ dict->check = applespell_dict_check;
++ dict->suggest = applespell_dict_suggest;
++
++ dict->user_data = dictionary_new (provider->user_data,
++ str);
++
++ [str retain];
++
++ [pool release];
++ return dict;
++}
++
++static void
++applespell_provider_dispose_dict (EnchantProvider *provider,
++ EnchantDict *dict)
++{
++ NSAutoreleasePool *pool;
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ dictionary_free (dict->user_data);
++ g_free (dict);
++
++ [pool release];
++}
++
++#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
++static gchar const *available_languages[] = {
++ "en",
++ "en_GB",
++ "en_AU",
++ "de",
++ "fr",
++ "nl",
++ "pl",
++ NULL
++};
++
++#endif
++
++static gint
++applespell_provider_dictionary_exists (EnchantProvider *provider,
++ const gchar * const tag)
++{
++ NSAutoreleasePool *pool;
++ gint result = 0;
++ NSSpellChecker *checker;
++#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
++ NSArray *languages;
++ guint i;
++#else
++ gchar const **ptr;
++#endif
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ checker = provider->user_data;
++
++#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
++ languages = [checker availableLanguages];
++
++ for (i = 0; i < [languages count]; ++i)
++ {
++ if (g_strcmp0 (tag, [[languages objectAtIndex:i] UTF8String]) == 0)
++ {
++ result = 1;
++ break;
++ }
++ }
++#else
++ ptr = available_languages;
++
++ while (ptr && *ptr)
++ {
++ if (g_strcmp0 (tag, *ptr) == 0)
++ {
++ result = 1;
++ break;
++ }
++ ++ptr;
++ }
++#endif
++
++ [pool release];
++
++ return result;
++}
++
++static void
++applespell_provider_dispose (EnchantProvider *provider)
++{
++ g_free (provider);
++}
++
++static const gchar *
++applespell_provider_identify (EnchantProvider *provider)
++{
++ return "AppleSpell";
++}
++
++static const gchar *
++applespell_provider_describe (EnchantProvider *provider)
++{
++ return "AppleSpell Provider";
++}
++
++static gchar **
++applespell_provider_list_dicts (EnchantProvider *provider,
++ size_t *out_n_dicts)
++{
++ NSSpellChecker *checker;
++ NSAutoreleasePool *pool;
++ gchar **ret = NULL;
++#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
++ NSArray *languages;
++ guint i = 0;
++#endif
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ checker = provider->user_data;
++
++#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
++ languages = [checker availableLanguages];
++ *out_n_dicts = [languages count];
++
++ ret = g_new0 (gchar *, *out_n_dicts + 1);
++
++ for (i = 0; i < [languages count]; ++i)
++ {
++ ret[i] = g_strdup ([[languages objectAtIndex:i] UTF8String]);
++ }
++#else
++ ret = g_strdupv ((gchar **)available_languages);
++#endif
++
++ [pool release];
++
++ return ret;
++}
++
++ENCHANT_MODULE_EXPORT (EnchantProvider *)
++init_enchant_provider (void)
++{
++ NSAutoreleasePool *pool;
++ EnchantProvider *provider;
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ provider = g_new0 (EnchantProvider, 1);
++
++ provider->dispose = applespell_provider_dispose;
++ provider->request_dict = applespell_provider_request_dict;
++ provider->dispose_dict = applespell_provider_dispose_dict;
++ provider->dictionary_exists = applespell_provider_dictionary_exists;
++ provider->identify = applespell_provider_identify;
++ provider->describe = applespell_provider_describe;
++ provider->list_dicts = applespell_provider_list_dicts;
++
++ provider->user_data = [NSSpellChecker sharedSpellChecker];
++
++ [pool release];
++
++ return provider;
++}
++
++ENCHANT_MODULE_EXPORT (void)
++configure_enchant_provider (EnchantProvider *provider,
++ const gchar *module_dir)
++{
++ return;
++}
diff --git a/build-aux/osx/build/modulesets/patches/enchant/enchant-gsize.patch b/build-aux/osx/build/modulesets/patches/enchant/enchant-gsize.patch
new file mode 100644
index 0000000..5bfba14
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/enchant/enchant-gsize.patch
@@ -0,0 +1,97 @@
+--- a/src/ispell/ispell_checker.cpp Thu Apr 1 13:53:37 2010
++++ b/src/ispell/ispell_checker.cpp Mon Feb 24 15:35:49 2014
+@@ -162,7 +162,7 @@
+ else
+ {
+ /* convert to 8bit string and null terminate */
+- size_t len_in, len_out, result;
++ gsize len_in, len_out, result;
+ // the 8bit encodings use precomposed forms
+ char *normalizedWord = g_utf8_normalize (utf8Word, length, G_NORMALIZE_NFC);
+ char *In = normalizedWord;
+@@ -172,7 +172,7 @@
+ len_out = sizeof( szWord ) - 1;
+ result = g_iconv(m_translate_in, &In, &len_in, &Out, &len_out);
+ g_free(normalizedWord);
+- if ((size_t)-1 == result)
++ if ((gsize)-1 == result)
+ return false;
+ *Out = '\0';
+ }
+@@ -210,7 +210,7 @@
+ {
+ /* convert to 8bit string and null terminate */
+
+- size_t len_in, len_out, result;
++ gsize len_in, len_out, result;
+ // the 8bit encodings use precomposed forms
+ char *normalizedWord = g_utf8_normalize (utf8Word, length, G_NORMALIZE_NFC);
+ char *In = normalizedWord;
+@@ -219,7 +219,7 @@
+ len_out = sizeof( word8 ) - 1;
+ result = g_iconv(m_translate_in, &In, &len_in, &Out, &len_out);
+ g_free(normalizedWord);
+- if ((size_t)-1 == result)
++ if ((gsize)-1 == result)
+ return NULL;
+ *Out = '\0';
+ }
+@@ -252,13 +252,13 @@
+ {
+ /* convert to 32bit string and null terminate */
+
+- size_t len_in, len_out;
++ gsize len_in, len_out;
+ char *In = m_possibilities[c];
+ char *Out = reinterpret_cast<char *>(utf8Sugg);
+
+ len_in = l;
+ len_out = INPUTWORDLEN + MAXAFFIXLEN;
+- if ((size_t)-1 == g_iconv(m_translate_out, &In, &len_in, &Out, &len_out)) {
++ if ((gsize)-1 == g_iconv(m_translate_out, &In, &len_in, &Out, &len_out)) {
+ *out_n_suggestions = c;
+ return sugg_arr;
+ }
+--- a/src/myspell/myspell_checker.cpp Thu Apr 1 13:53:37 2010
++++ b/src/myspell/myspell_checker.cpp Mon Feb 24 15:37:56 2014
+@@ -159,11 +159,11 @@
+ char *in = normalizedWord;
+ char word8[MAXWORDLEN + 1];
+ char *out = word8;
+- size_t len_in = strlen(in);
+- size_t len_out = sizeof( word8 ) - 1;
+- size_t result = g_iconv(m_translate_in, &in, &len_in, &out, &len_out);
++ gsize len_in = strlen(in);
++ gsize len_out = sizeof( word8 ) - 1;
++ gsize result = g_iconv(m_translate_in, &in, &len_in, &out, &len_out);
+ g_free(normalizedWord);
+- if ((size_t)-1 == result)
++ if ((gsize)-1 == result)
+ return false;
+ *out = '\0';
+ if (myspell->spell(word8))
+@@ -185,11 +185,11 @@
+ char *in = normalizedWord;
+ char word8[MAXWORDLEN + 1];
+ char *out = word8;
+- size_t len_in = strlen(in);
+- size_t len_out = sizeof(word8) - 1;
+- size_t result = g_iconv(m_translate_in, &in, &len_in, &out, &len_out);
++ gsize len_in = strlen(in);
++ gsize len_out = sizeof(word8) - 1;
++ gsize result = g_iconv(m_translate_in, &in, &len_in, &out, &len_out);
+ g_free(normalizedWord);
+- if ((size_t)-1 == result)
++ if ((gsize)-1 == result)
+ return NULL;
+
+ *out = '\0';
+@@ -203,7 +203,7 @@
+ len_out = MAXWORDLEN;
+ char *word = g_new0(char, len_out + 1);
+ out = reinterpret_cast<char *>(word);
+- if ((size_t)-1 == g_iconv(m_translate_out, &in, &len_in, &out, &len_out)) {
++ if ((gsize)-1 == g_iconv(m_translate_out, &in, &len_in, &out, &len_out)) {
+ for (size_t j = i; j < *nsug; j++)
+ free(sugMS[j]);
+ free(sugMS);
diff --git a/build-aux/osx/build/modulesets/patches/enchant/enchant-relocatable.patch b/build-aux/osx/build/modulesets/patches/enchant/enchant-relocatable.patch
new file mode 100644
index 0000000..7e56eb7
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/enchant/enchant-relocatable.patch
@@ -0,0 +1,40 @@
+--- a/src/enchant.c 2010-04-01 22:53:37.000000000 +0200
++++ b/src/enchant.c 2014-08-26 21:32:21.000000000 +0200
+@@ -210,6 +210,13 @@
+ char * module_dir = NULL;
+ char * prefix = NULL;
+
++ const char *envdir = g_getenv ("ENCHANT_MODULES_DIR");
++
++ if (envdir != NULL && *envdir != '\0')
++ {
++ module_dirs = enchant_slist_append_unique_path (module_dirs, g_strdup (envdir));
++ }
++
+ {
+ char* user_module_dir;
+
+@@ -239,7 +246,8 @@
+ module_dirs = enchant_slist_append_unique_path (module_dirs, module_dir);
+
+ #if defined(ENCHANT_GLOBAL_MODULE_DIR)
+- module_dirs = enchant_slist_append_unique_path (module_dirs, g_strdup (ENCHANT_GLOBAL_MODULE_DIR));
++ if (envdir == NULL || *envdir == '\0')
++ module_dirs = enchant_slist_append_unique_path (module_dirs, g_strdup (ENCHANT_GLOBAL_MODULE_DIR));
+ #else
+ /* Dynamically locate library and search for modules relative to it. */
+ prefix = enchant_get_prefix_dir();
+@@ -278,6 +286,13 @@
+ if (ordering_dir)
+ conf_dirs = enchant_slist_append_unique_path (conf_dirs, ordering_dir);
+
++ const char *envdir = g_getenv ("ENCHANT_DATA_DIR");
++
++ if (envdir != NULL && *envdir != '\0')
++ {
++ conf_dirs = enchant_slist_append_unique_path (conf_dirs, g_strdup (envdir));
++ }
++
+ /* Dynamically locate library and search for files relative to it. */
+ prefix = enchant_get_prefix_dir();
+ if(prefix)
diff --git a/build-aux/osx/build/modulesets/patches/gettext-runtime/gettext-bug33999-stpncpy.patch b/build-aux/osx/build/modulesets/patches/gettext-runtime/gettext-bug33999-stpncpy.patch
new file mode 100644
index 0000000..eda2932
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/gettext-runtime/gettext-bug33999-stpncpy.patch
@@ -0,0 +1,63 @@
+
+--- a/gettext-tools/libgettextpo/string.in.h Sun Apr 25 02:22:40 2010
++++ b/gettext-tools/libgettextpo/string.in.h Tue Oct 4 14:36:31 2011
+@@ -229,6 +229,7 @@
+ #if @GNULIB_STPNCPY@
+ # if @REPLACE_STPNCPY@
+ # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
++# undef stpncpy
+ # define stpncpy rpl_stpncpy
+ # endif
+ _GL_FUNCDECL_RPL (stpncpy, char *,
+
+ Rename module 'memxfrm' to 'amemxfrm'.
+--- a/gettext-tools/gnulib-lib/string.in.h Mon May 24 02:42:47 2010
++++ b/gettext-tools/gnulib-lib/string.in.h Tue Oct 4 14:35:46 2011
+@@ -229,6 +229,7 @@
+ #if @GNULIB_STPNCPY@
+ # if @REPLACE_STPNCPY@
+ # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
++# undef stpncpy
+ # define stpncpy rpl_stpncpy
+ # endif
+ _GL_FUNCDECL_RPL (stpncpy, char *,
+
+--- a/gettext-runtime/gnulib-lib/string.in.h Sun Apr 25 02:20:42 2010
++++ b/gettext-runtime/gnulib-lib/string.in.h Tue Oct 4 14:34:57 2011
+@@ -229,6 +229,7 @@
+ #if @GNULIB_STPNCPY@
+ # if @REPLACE_STPNCPY@
+ # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
++# undef stpncpy
+ # define stpncpy rpl_stpncpy
+ # endif
+ _GL_FUNCDECL_RPL (stpncpy, char *,
+--- a/gettext-tools/configure Sun Jun 6 13:12:20 2010
++++ b/gettext-tools/configure Tue Oct 4 16:29:27 2011
+@@ -40562,6 +40562,16 @@
+
+
+
++ ac_fn_c_check_decl "$LINENO" "stpncpy" "ac_cv_have_decl_stpncpy" "$ac_includes_default"
++if test "x$ac_cv_have_decl_stpncpy" = x""yes; then :
++ ac_have_decl=1
++else
++ ac_have_decl=0
++fi
++
++cat >>confdefs.h <<_ACEOF
++#define HAVE_DECL_STPNCPY $ac_have_decl
++_ACEOF
+
+
+
+@@ -40606,7 +40616,9 @@
+ #include <stdlib.h>
+ #include <string.h> /* for strcpy */
+ /* The stpncpy prototype is missing in <string.h> on AIX 4. */
++#if !HAVE_DECL_STPNCPY
+ extern char *stpncpy (char *dest, const char *src, size_t n);
++#endif
+ int main () {
+ const char *src = "Hello";
+ char dest[10];
diff --git a/build-aux/osx/build/modulesets/patches/gettext-tools/gettext-bug33999-stpncpy.patch b/build-aux/osx/build/modulesets/patches/gettext-tools/gettext-bug33999-stpncpy.patch
new file mode 100644
index 0000000..eda2932
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/gettext-tools/gettext-bug33999-stpncpy.patch
@@ -0,0 +1,63 @@
+
+--- a/gettext-tools/libgettextpo/string.in.h Sun Apr 25 02:22:40 2010
++++ b/gettext-tools/libgettextpo/string.in.h Tue Oct 4 14:36:31 2011
+@@ -229,6 +229,7 @@
+ #if @GNULIB_STPNCPY@
+ # if @REPLACE_STPNCPY@
+ # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
++# undef stpncpy
+ # define stpncpy rpl_stpncpy
+ # endif
+ _GL_FUNCDECL_RPL (stpncpy, char *,
+
+ Rename module 'memxfrm' to 'amemxfrm'.
+--- a/gettext-tools/gnulib-lib/string.in.h Mon May 24 02:42:47 2010
++++ b/gettext-tools/gnulib-lib/string.in.h Tue Oct 4 14:35:46 2011
+@@ -229,6 +229,7 @@
+ #if @GNULIB_STPNCPY@
+ # if @REPLACE_STPNCPY@
+ # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
++# undef stpncpy
+ # define stpncpy rpl_stpncpy
+ # endif
+ _GL_FUNCDECL_RPL (stpncpy, char *,
+
+--- a/gettext-runtime/gnulib-lib/string.in.h Sun Apr 25 02:20:42 2010
++++ b/gettext-runtime/gnulib-lib/string.in.h Tue Oct 4 14:34:57 2011
+@@ -229,6 +229,7 @@
+ #if @GNULIB_STPNCPY@
+ # if @REPLACE_STPNCPY@
+ # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
++# undef stpncpy
+ # define stpncpy rpl_stpncpy
+ # endif
+ _GL_FUNCDECL_RPL (stpncpy, char *,
+--- a/gettext-tools/configure Sun Jun 6 13:12:20 2010
++++ b/gettext-tools/configure Tue Oct 4 16:29:27 2011
+@@ -40562,6 +40562,16 @@
+
+
+
++ ac_fn_c_check_decl "$LINENO" "stpncpy" "ac_cv_have_decl_stpncpy" "$ac_includes_default"
++if test "x$ac_cv_have_decl_stpncpy" = x""yes; then :
++ ac_have_decl=1
++else
++ ac_have_decl=0
++fi
++
++cat >>confdefs.h <<_ACEOF
++#define HAVE_DECL_STPNCPY $ac_have_decl
++_ACEOF
+
+
+
+@@ -40606,7 +40616,9 @@
+ #include <stdlib.h>
+ #include <string.h> /* for strcpy */
+ /* The stpncpy prototype is missing in <string.h> on AIX 4. */
++#if !HAVE_DECL_STPNCPY
+ extern char *stpncpy (char *dest, const char *src, size_t n);
++#endif
+ int main () {
+ const char *src = "Hello";
+ char dest[10];
diff --git a/build-aux/osx/build/modulesets/patches/glib/0001-Bug-724590-GSlice-slab_stack-corruption.patch b/build-aux/osx/build/modulesets/patches/glib/0001-Bug-724590-GSlice-slab_stack-corruption.patch
new file mode 100644
index 0000000..0e62201
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/glib/0001-Bug-724590-GSlice-slab_stack-corruption.patch
@@ -0,0 +1,28 @@
+From 1b21a85f1914eecc107319cb94e8c8517291599b Mon Sep 17 00:00:00 2001
+From: John Ralls <jralls@ceridwen.us>
+Date: Mon, 17 Feb 2014 15:51:38 -0800
+Subject: [PATCH] Bug 724590 - GSlice slab_stack corruption
+
+Dereference allocation->contention_counters before trying to take the
+address of an element.
+---
+ glib/gslice.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/glib/gslice.c b/glib/gslice.c
+index 0563d80..2c5f4fb 100644
+--- a/glib/gslice.c
++++ b/glib/gslice.c
+@@ -715,7 +715,8 @@ static ChunkLink*
+ magazine_cache_pop_magazine (guint ix,
+ gsize *countp)
+ {
+- g_mutex_lock_a (&allocator->magazine_mutex, &allocator->contention_counters[ix]);
++ guint *counters = allocator->contention_counters;
++ g_mutex_lock_a (&allocator->magazine_mutex, &counters[ix]);
+ if (!allocator->magazines[ix])
+ {
+ guint magazine_threshold = allocator_get_magazine_threshold (allocator, ix);
+--
+1.8.3.rc0
+
diff --git a/build-aux/osx/build/modulesets/patches/gobject-introspection/girscanner-objc.patch b/build-aux/osx/build/modulesets/patches/gobject-introspection/girscanner-objc.patch
new file mode 100644
index 0000000..76d2bee
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/gobject-introspection/girscanner-objc.patch
@@ -0,0 +1,20 @@
+diff --git a/giscanner/scannerlexer.l b/giscanner/scannerlexer.l
+index 6a40398..40f1fc0 100644
+--- a/giscanner/scannerlexer.l
++++ b/giscanner/scannerlexer.l
+@@ -108,6 +108,7 @@ stringtext ([^\\\"])|(\\.)
+ "|" { return '|'; }
+ "~" { return '~'; }
+ "!" { return '!'; }
++"@" { return '@'; }
+ "=" { return '='; }
+ "<" { return '<'; }
+ ">" { return '>'; }
+@@ -199,6 +200,7 @@ stringtext ([^\\\"])|(\\.)
+
+ "\""{stringtext}*"\"" { return STRING; }
+ "L\""{stringtext}*"\"" { return STRING; }
++"@\""{stringtext}*"\"" { return STRING; }
+
+ . { if (yytext[0]) fprintf(stderr, "%s:%d: unexpected character `%c'\n", scanner->current_filename, lineno, yytext[0]); }
+
diff --git a/build-aux/osx/build/modulesets/patches/gtk+/0006-Bug-658722-Drag-and-Drop-sometimes-stops-working.patch b/build-aux/osx/build/modulesets/patches/gtk+/0006-Bug-658722-Drag-and-Drop-sometimes-stops-working.patch
new file mode 100644
index 0000000..b0a1ef5
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/gtk+/0006-Bug-658722-Drag-and-Drop-sometimes-stops-working.patch
@@ -0,0 +1,274 @@
+From dcd9ab00c64a1df63fd5fa58c2ca25efd9b3e09e Mon Sep 17 00:00:00 2001
+From: John Ralls <jralls@ceridwen.us>
+Date: Sat, 24 Sep 2011 18:14:09 -0700
+Subject: [PATCH 06/15] Bug 658722 - Drag and Drop sometimes stops working
+
+First, rather than assuming that there's already an event queued up if
+_gdk_quartz_drag_source_context isn't NULL, assume that it just didn't get
+cleaned up the last time it ran and abort it.
+
+This naturally requires implementing gdk_quartz_drag_abort(), so remove the
+code from [GdkQuartzNSWindow draggedImage:endedAt:operation:] and move it to
+gdkdnd_quartz.c as static void gdk_quartz_drag_end(). Implement both
+gdk_quartz_drag_drop() and gdk_quartz_drag_abort() by calling
+gdk_quartz_drag_end().
+
+Next, try to get rid of the memory cycle between gtk_drag_source_info.context
+and _gdk_quartz_drag_source_context (which carries the GtkQuartzDragSourceInfo
+struct as qdata). Replace gtk_drag_source_clear_info() by using a
+g_object_set_qdata_full() for context in gtk_drag_get_source_context, calling
+gtk_drag_source_info_destroy() as the destructor. This eliminates the need to
+queue a cleanup idle event. I use g_object_run_dispose() on
+_gtk_quartz_drag_source_context to force the deletion of the info stored as
+qdata, which in turn unrefs the info->context pointer. Ordinarily this gets
+fired off from draggedImage:endedAt:operation:, meaning that the special
+dragging CFRunLoop is complete and NSEvents are again flowing, so queuing a
+cleanup event isn't necessary. The advantage is that it can also be run from
+gdk_drag_abort, so if Gdk thinks there's a drag but CF doesn't all of the
+memory still gets cleaned up.
+---
+ gdk/quartz/GdkQuartzWindow.c | 16 +-------
+ gdk/quartz/gdkdnd-quartz.c | 35 +++++++++++++--
+ gtk/gtkdnd-quartz.c | 96 ++++++++++++++++-------------------------
+ 3 files changed, 69 insertions(+), 78 deletions(-)
+
+diff --git a/gdk/quartz/GdkQuartzWindow.c b/gdk/quartz/GdkQuartzWindow.c
+index dcd7250..20ed80e 100644
+--- a/gdk/quartz/GdkQuartzWindow.c
++++ b/gdk/quartz/GdkQuartzWindow.c
+@@ -560,21 +560,7 @@ update_context_from_dragging_info (id <NSDraggingInfo> sender)
+
+ - (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint operation:(NSDragOperation)operation
+ {
+- GdkEvent event;
+-
+- g_assert (_gdk_quartz_drag_source_context != NULL);
+-
+- event.dnd.type = GDK_DROP_FINISHED;
+- event.dnd.window = g_object_ref ([[self contentView] gdkWindow]);
+- event.dnd.send_event = FALSE;
+- event.dnd.context = _gdk_quartz_drag_source_context;
+-
+- (*_gdk_event_func) (&event, _gdk_event_data);
+-
+- g_object_unref (event.dnd.window);
+-
+- g_object_unref (_gdk_quartz_drag_source_context);
+- _gdk_quartz_drag_source_context = NULL;
++ gdk_drag_drop (_gdk_quartz_drag_source_context, (guint32)g_get_real_time());
+ }
+
+ @end
+diff --git a/gdk/quartz/gdkdnd-quartz.c b/gdk/quartz/gdkdnd-quartz.c
+index bb70b71..143a8ed 100644
+--- a/gdk/quartz/gdkdnd-quartz.c
++++ b/gdk/quartz/gdkdnd-quartz.c
+@@ -111,11 +111,20 @@ GdkDragContext *
+ gdk_drag_begin (GdkWindow *window,
+ GList *targets)
+ {
+- g_assert (_gdk_quartz_drag_source_context == NULL);
++ if (_gdk_quartz_drag_source_context != NULL)
++ {
++ /* Something is amiss with the existing drag, so log a message
++ and abort it */
++ g_warning ("Drag begun with existing context; aborting the preexisting drag");
++ gdk_drag_abort (_gdk_quartz_drag_source_context,
++ (guint32)g_get_real_time ());
++ }
++
+
+ /* Create fake context */
+ _gdk_quartz_drag_source_context = gdk_drag_context_new ();
+ _gdk_quartz_drag_source_context->is_source = TRUE;
++ _gdk_quartz_drag_source_context->source_window = window;
+
+ return _gdk_quartz_drag_source_context;
+ }
+@@ -155,20 +164,36 @@ gdk_drag_find_window_for_screen (GdkDragContext *context,
+ /* FIXME: Implement */
+ }
+
++static void
++gdk_quartz_drag_end (GdkDragContext *context)
++{
++ GdkEvent event;
++
++ g_assert (context != NULL);
++ event.dnd.type = GDK_DROP_FINISHED;
++ event.dnd.window = g_object_ref (context->source_window);
++ event.dnd.send_event = FALSE;
++ event.dnd.context = context;
++
++ (*_gdk_event_func) (&event, _gdk_event_data);
++
++ g_object_run_dispose (_gdk_quartz_drag_source_context);
++ _gdk_quartz_drag_source_context = NULL;
++}
++
+ void
+ gdk_drag_drop (GdkDragContext *context,
+ guint32 time)
+ {
+- /* FIXME: Implement */
++ gdk_quartz_drag_end (context);
+ }
+
+ void
+ gdk_drag_abort (GdkDragContext *context,
+ guint32 time)
+ {
+- g_return_if_fail (context != NULL);
+-
+- /* FIXME: Implement */
++ g_warning ("Gdk-quartz-drag-drop, aborting\n");
++ gdk_quartz_drag_end (context);
+ }
+
+ void
+diff --git a/gtk/gtkdnd-quartz.c b/gtk/gtkdnd-quartz.c
+index 5688568..be92a22 100644
+--- a/gtk/gtkdnd-quartz.c
++++ b/gtk/gtkdnd-quartz.c
+@@ -269,6 +269,39 @@ gtk_drag_dest_info_destroy (gpointer data)
+ g_free (info);
+ }
+
++static void
++gtk_drag_source_info_destroy (GtkDragSourceInfo *info)
++{
++ NSPasteboard *pasteboard;
++ NSAutoreleasePool *pool;
++
++ if (info->icon_pixbuf)
++ g_object_unref (info->icon_pixbuf);
++
++ g_signal_emit_by_name (info->widget, "drag-end",
++ info->context);
++
++ if (info->source_widget)
++ g_object_unref (info->source_widget);
++
++ if (info->widget)
++ g_object_unref (info->widget);
++
++ gtk_target_list_unref (info->target_list);
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ /* Empty the pasteboard, so that it will not accidentally access
++ * info->context after it has been destroyed.
++ */
++ pasteboard = [NSPasteboard pasteboardWithName: NSDragPboard];
++ [pasteboard declareTypes: nil owner: nil];
++
++ [pool release];
++
++ g_free (info);
++}
++
+ static GtkDragDestInfo *
+ gtk_drag_get_dest_info (GdkDragContext *context,
+ gboolean create)
+@@ -308,18 +341,14 @@ gtk_drag_get_source_info (GdkDragContext *context,
+ {
+ info = g_new0 (GtkDragSourceInfo, 1);
+ info->context = context;
+- g_object_set_qdata (G_OBJECT (context), dest_info_quark, info);
++ g_object_ref (info->context);
++ g_object_set_qdata_full (G_OBJECT (context), dest_info_quark,
++ info, gtk_drag_source_info_destroy);
+ }
+
+ return info;
+ }
+
+-static void
+-gtk_drag_clear_source_info (GdkDragContext *context)
+-{
+- g_object_set_qdata (G_OBJECT (context), dest_info_quark, NULL);
+-}
+-
+ GtkWidget *
+ gtk_drag_get_source_widget (GdkDragContext *context)
+ {
+@@ -1089,7 +1118,8 @@ gtk_drag_begin_idle (gpointer arg)
+ [owner release];
+ [types release];
+
+- if ((nswindow = get_toplevel_nswindow (info->source_widget)) == NULL)
++ if (info->source_widget == NULL
++ || (nswindow = get_toplevel_nswindow (info->source_widget)) == NULL)
+ return FALSE;
+
+ /* Ref the context. It's unreffed when the drag has been aborted */
+@@ -1108,7 +1138,6 @@ gtk_drag_begin_idle (gpointer arg)
+ source:nswindow
+ slideBack:YES];
+
+- [info->nsevent release];
+ [drag_image release];
+
+ [pool release];
+@@ -1833,61 +1862,12 @@ gtk_drag_set_default_icon (GdkColormap *colormap,
+ }
+
+ static void
+-gtk_drag_source_info_destroy (GtkDragSourceInfo *info)
+-{
+- NSPasteboard *pasteboard;
+- NSAutoreleasePool *pool;
+-
+- if (info->icon_pixbuf)
+- g_object_unref (info->icon_pixbuf);
+-
+- g_signal_emit_by_name (info->widget, "drag-end",
+- info->context);
+-
+- if (info->source_widget)
+- g_object_unref (info->source_widget);
+-
+- if (info->widget)
+- g_object_unref (info->widget);
+-
+- gtk_target_list_unref (info->target_list);
+-
+- pool = [[NSAutoreleasePool alloc] init];
+-
+- /* Empty the pasteboard, so that it will not accidentally access
+- * info->context after it has been destroyed.
+- */
+- pasteboard = [NSPasteboard pasteboardWithName: NSDragPboard];
+- [pasteboard declareTypes: nil owner: nil];
+-
+- [pool release];
+-
+- gtk_drag_clear_source_info (info->context);
+- g_object_unref (info->context);
+-
+- g_free (info);
+- info = NULL;
+-}
+-
+-static gboolean
+-drag_drop_finished_idle_cb (gpointer data)
+-{
+- gtk_drag_source_info_destroy (data);
+- return FALSE;
+-}
+-
+-static void
+ gtk_drag_drop_finished (GtkDragSourceInfo *info)
+ {
+ if (info->success && info->delete)
+ g_signal_emit_by_name (info->source_widget, "drag-data-delete",
+ info->context);
+
+- /* Workaround for the fact that the NS API blocks until the drag is
+- * over. This way the context is still valid when returning from
+- * drag_begin, even if it will still be quite useless. See bug #501588.
+- */
+- g_idle_add (drag_drop_finished_idle_cb, info);
+ }
+
+ /*************************************************************
diff --git a/build-aux/osx/build/modulesets/patches/gtk+/0008-Implement-GtkDragSourceOwner-pasteboardChangedOwner.patch b/build-aux/osx/build/modulesets/patches/gtk+/0008-Implement-GtkDragSourceOwner-pasteboardChangedOwner.patch
new file mode 100644
index 0000000..5b9153c
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/gtk+/0008-Implement-GtkDragSourceOwner-pasteboardChangedOwner.patch
@@ -0,0 +1,39 @@
+From 259563958047ccbf6f61578f2d724fc731218304 Mon Sep 17 00:00:00 2001
+From: John Ralls <jralls@ceridwen.us>
+Date: Sun, 25 Sep 2011 12:03:54 -0700
+Subject: [PATCH 08/15] Implement GtkDragSourceOwner pasteboardChangedOwner:
+
+---
+ gtk/gtkdnd-quartz.c | 11 +++++++++++
+ 1 files changed, 11 insertions(+), 0 deletions(-)
+
+diff --git a/gtk/gtkdnd-quartz.c b/gtk/gtkdnd-quartz.c
+index 084aada..21ce11a 100644
+--- a/gtk/gtkdnd-quartz.c
++++ b/gtk/gtkdnd-quartz.c
+@@ -149,6 +149,8 @@ struct _GtkDragFindData
+ guint target_info;
+ GtkSelectionData selection_data;
+
++ g_return_if_fail(info->source_widget != NULL);
++ g_return_if_fail(info->target_list != NULL);
+ selection_data.selection = GDK_NONE;
+ selection_data.data = NULL;
+ selection_data.length = -1;
+@@ -171,6 +173,15 @@ struct _GtkDragFindData
+ }
+ }
+
++- (void)pasteboardChangedOwner: (NSPasteboard*)sender
++{
++ if (!info) return;
++
++ info->target_list = NULL;
++ info->widget = NULL;
++ info->source_widget = NULL;
++}
++
+ - (id)initWithInfo:(GtkDragSourceInfo *)anInfo
+ {
+ self = [super init];
+
diff --git a/build-aux/osx/build/modulesets/patches/gtk+/gtk+-2-m4-creation.patch b/build-aux/osx/build/modulesets/patches/gtk+/gtk+-2-m4-creation.patch
new file mode 100644
index 0000000..26321b7
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/gtk+/gtk+-2-m4-creation.patch
@@ -0,0 +1,5 @@
+diff -uN gtk+-2.24.21/m4/.bogus gtk+-2.24.21.save/m4/.bogus
+--- gtk+-2.24.21/m4/.bogus 2013-10-02 08:01:33.000000000 -0700
++++ gtk+-2.24.21.save/m4/.bogus 2013-10-02 08:03:40.000000000 -0700
+@@ -0,0 +1 @@
++A phony file to enable making a patch to create this directory.
diff --git a/build-aux/osx/build/modulesets/patches/gtk-mac-integration/0001-Fix-unhandled-exception-from-attempting-to-access-me.patch b/build-aux/osx/build/modulesets/patches/gtk-mac-integration/0001-Fix-unhandled-exception-from-attempting-to-access-me.patch
new file mode 100644
index 0000000..87151bb
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/gtk-mac-integration/0001-Fix-unhandled-exception-from-attempting-to-access-me.patch
@@ -0,0 +1,39 @@
+From cd3a21ff115cd6c6c11ce39aa62eaf912c78b060 Mon Sep 17 00:00:00 2001
+From: John Ralls <jralls@ceridwen.us>
+Date: Mon, 30 Dec 2013 12:20:26 -0800
+Subject: [PATCH] Fix unhandled exception from attempting to access menu
+ itemAtIndex:-1
+
+---
+ src/cocoa_menu_item.c | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/src/cocoa_menu_item.c b/src/cocoa_menu_item.c
+index 793c254..dd46586 100644
+--- a/src/cocoa_menu_item.c
++++ b/src/cocoa_menu_item.c
+@@ -550,12 +550,16 @@ cocoa_menu_item_add_item (NSMenu* cocoa_menu, GtkWidget* menu_item, int index)
+ /* Clean up adjacent separators: */
+ if ([cocoa_menu numberOfItems] > 0)
+ {
+- if (([cocoa_menu numberOfItems] == index ||
+- [[cocoa_menu itemAtIndex: index] isSeparatorItem]) &&
+- [[cocoa_menu itemAtIndex: index - 1] isSeparatorItem])
++ if (index == 0)
++ {
++ if ([[cocoa_menu itemAtIndex: index] isSeparatorItem])
++ [cocoa_menu removeItemAtIndex: index];
++ }
++ else if (([cocoa_menu numberOfItems] == index ||
++ [[cocoa_menu itemAtIndex: index] isSeparatorItem]) &&
++ [[cocoa_menu itemAtIndex: index - 1] isSeparatorItem])
+ [cocoa_menu removeItemAtIndex: index - 1];
+- if (index == 0 && [[cocoa_menu itemAtIndex: index] isSeparatorItem])
+- [cocoa_menu removeItemAtIndex: index];
++
+ }
+ }
+
+--
+1.8.3.rc0
+
diff --git a/build-aux/osx/build/modulesets/patches/itstool/itstool.use-correct-libxml.patch b/build-aux/osx/build/modulesets/patches/itstool/itstool.use-correct-libxml.patch
new file mode 100644
index 0000000..51a25c0
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/itstool/itstool.use-correct-libxml.patch
@@ -0,0 +1,28 @@
+From d6ef86e2fb7bf9ddf888521e2c7dc5b5b7e4b6d8 Mon Sep 17 00:00:00 2001
+From: Michael Catanzaro <mcatanzaro@gnome.org>
+Date: Fri, 10 Jan 2014 23:50:52 -0600
+Subject: [PATCH] build: use $PYTHON when testing for libxml2
+
+/usr/bin/python is a symlink to /usr/bin/python3 on some systems.
+In this case, configure unconditionally checks for the Python 3 version
+of libxml2. Instead, use the version of Python found by AM_PATH_PYTHON.
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index c29efad..dbd0c7f 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -14,7 +14,7 @@ AM_PATH_PYTHON([2.6])
+
+ py_module=libxml2
+ AC_MSG_CHECKING(for python module $py_module)
+-echo "import $py_module" | python - &>/dev/null
++echo "import $py_module" | $PYTHON - &>/dev/null
+ if test $? -ne 0; then
+ AC_MSG_RESULT(not found)
+ AC_MSG_ERROR(Python module $py_module is needed to run this package)
+--
+1.8.5.2
+
diff --git a/build-aux/osx/build/modulesets/patches/libgcrypt/libgcrypt-build-clang.patch b/build-aux/osx/build/modulesets/patches/libgcrypt/libgcrypt-build-clang.patch
new file mode 100644
index 0000000..5e6beb5
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/libgcrypt/libgcrypt-build-clang.patch
@@ -0,0 +1,97 @@
+diff -c /Users/john/Development/gtk-sources/libgcrypt-1.5.3/cipher/rijndael.c\~ /Users/john/Development/gtk-sources/libgcrypt-1.5.3/cipher/rijndael.c
+--- a/cipher/rijndael.c Tue Oct 15 11:09:37 2013
++++ b/cipher/rijndael.c
+ Tue Oct 15 11:53:22 2013
+@@ -725,13 +725,13 @@
+ "movdqa 0x90(%%esi), %%xmm1\n\t"
+ aesenc_xmm1_xmm0
+ "movdqa 0xa0(%%esi), %%xmm1\n\t"
+- "cmp $10, %[rounds]\n\t"
++ "cmpl $10, %[rounds]\n\t"
+ "jz .Lenclast%=\n\t"
+ aesenc_xmm1_xmm0
+ "movdqa 0xb0(%%esi), %%xmm1\n\t"
+ aesenc_xmm1_xmm0
+ "movdqa 0xc0(%%esi), %%xmm1\n\t"
+- "cmp $12, %[rounds]\n\t"
++ "cmpl $12, %[rounds]\n\t"
+ "jz .Lenclast%=\n\t"
+ aesenc_xmm1_xmm0
+ "movdqa 0xd0(%%esi), %%xmm1\n\t"
+@@ -780,13 +780,13 @@
+ "movdqa 0x90(%%esi), %%xmm1\n\t"
+ aesdec_xmm1_xmm0
+ "movdqa 0xa0(%%esi), %%xmm1\n\t"
+- "cmp $10, %[rounds]\n\t"
++ "cmpl $10, %[rounds]\n\t"
+ "jz .Ldeclast%=\n\t"
+ aesdec_xmm1_xmm0
+ "movdqa 0xb0(%%esi), %%xmm1\n\t"
+ aesdec_xmm1_xmm0
+ "movdqa 0xc0(%%esi), %%xmm1\n\t"
+- "cmp $12, %[rounds]\n\t"
++ "cmpl $12, %[rounds]\n\t"
+ "jz .Ldeclast%=\n\t"
+ aesdec_xmm1_xmm0
+ "movdqa 0xd0(%%esi), %%xmm1\n\t"
+@@ -839,13 +839,13 @@
+ "movdqa 0x90(%%esi), %%xmm1\n\t"
+ aesenc_xmm1_xmm0
+ "movdqa 0xa0(%%esi), %%xmm1\n\t"
+- "cmp $10, %[rounds]\n\t"
++ "cmpl $10, %[rounds]\n\t"
+ "jz .Lenclast%=\n\t"
+ aesenc_xmm1_xmm0
+ "movdqa 0xb0(%%esi), %%xmm1\n\t"
+ aesenc_xmm1_xmm0
+ "movdqa 0xc0(%%esi), %%xmm1\n\t"
+- "cmp $12, %[rounds]\n\t"
++ "cmpl $12, %[rounds]\n\t"
+ "jz .Lenclast%=\n\t"
+ aesenc_xmm1_xmm0
+ "movdqa 0xd0(%%esi), %%xmm1\n\t"
+@@ -857,7 +857,7 @@
+ "movdqu %[src], %%xmm1\n\t" /* Save input. */
+ "pxor %%xmm1, %%xmm0\n\t" /* xmm0 = input ^ IV */
+
+- "cmp $1, %[decrypt]\n\t"
++ "cmpl $1, %[decrypt]\n\t"
+ "jz .Ldecrypt_%=\n\t"
+ "movdqa %%xmm0, %[iv]\n\t" /* [encrypt] Store IV. */
+ "jmp .Lleave_%=\n"
+@@ -918,13 +918,13 @@
+ "movdqa 0x90(%%esi), %%xmm1\n\t"
+ aesenc_xmm1_xmm0
+ "movdqa 0xa0(%%esi), %%xmm1\n\t"
+- "cmp $10, %[rounds]\n\t"
++ "cmpl $10, %[rounds]\n\t"
+ "jz .Lenclast%=\n\t"
+ aesenc_xmm1_xmm0
+ "movdqa 0xb0(%%esi), %%xmm1\n\t"
+ aesenc_xmm1_xmm0
+ "movdqa 0xc0(%%esi), %%xmm1\n\t"
+- "cmp $12, %[rounds]\n\t"
++ "cmpl $12, %[rounds]\n\t"
+ "jz .Lenclast%=\n\t"
+ aesenc_xmm1_xmm0
+ "movdqa 0xd0(%%esi), %%xmm1\n\t"
+@@ -1045,7 +1045,7 @@
+ aesenc_xmm1_xmm3
+ aesenc_xmm1_xmm4
+ "movdqa 0xa0(%%esi), %%xmm1\n\t"
+- "cmp $10, %[rounds]\n\t"
++ "cmpl $10, %[rounds]\n\t"
+ "jz .Lenclast%=\n\t"
+ aesenc_xmm1_xmm0
+ aesenc_xmm1_xmm2
+@@ -1057,7 +1057,7 @@
+ aesenc_xmm1_xmm3
+ aesenc_xmm1_xmm4
+ "movdqa 0xc0(%%esi), %%xmm1\n\t"
+- "cmp $12, %[rounds]\n\t"
++ "cmpl $12, %[rounds]\n\t"
+ "jz .Lenclast%=\n\t"
+ aesenc_xmm1_xmm0
+ aesenc_xmm1_xmm2
+
+Diff finished. Tue Oct 15 11:53:31 2013
diff --git a/build-aux/osx/build/modulesets/patches/libxml2/libxml2-Bug-686118-pthreads_once_init.patch b/build-aux/osx/build/modulesets/patches/libxml2/libxml2-Bug-686118-pthreads_once_init.patch
new file mode 100644
index 0000000..8f42220
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/libxml2/libxml2-Bug-686118-pthreads_once_init.patch
@@ -0,0 +1,33 @@
+From 3f6cfbd1d38d0634a2ddcb9a0a13e1b5a2195a5e Mon Sep 17 00:00:00 2001
+From: Friedrich Haubensak <hsk@fli-leibniz.de>
+Date: Wed, 12 Sep 2012 15:34:53 +0000
+Subject: Fix a thread portability problem
+
+cannot compile libxml2-2.9.0 using studio 12.1 compiler on solaris 10
+
+I.M.O. structure initializer (as PTHREAD_ONCE_INIT) cannot be used in
+a structure assignment anyway
+---
+diff --git a/threads.c b/threads.c
+index f206149..7e85a26 100644
+--- a/threads.c
++++ b/threads.c
+@@ -146,6 +146,7 @@ struct _xmlRMutex {
+ static pthread_key_t globalkey;
+ static pthread_t mainthread;
+ static pthread_once_t once_control = PTHREAD_ONCE_INIT;
++static pthread_once_t once_control_init = PTHREAD_ONCE_INIT;
+ static pthread_mutex_t global_init_lock = PTHREAD_MUTEX_INITIALIZER;
+ #elif defined HAVE_WIN32_THREADS
+ #if defined(HAVE_COMPILER_TLS)
+@@ -915,7 +916,7 @@ xmlCleanupThreads(void)
+ #ifdef HAVE_PTHREAD_H
+ if ((libxml_is_threaded) && (pthread_key_delete != NULL))
+ pthread_key_delete(globalkey);
+- once_control = PTHREAD_ONCE_INIT;
++ once_control = once_control_init;
+ #elif defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
+ if (globalkey != TLS_OUT_OF_INDEXES) {
+ xmlGlobalStateCleanupHelperParams *p;
+--
+cgit v0.9.0.2
diff --git a/build-aux/osx/build/modulesets/patches/readline/readline62-001 b/build-aux/osx/build/modulesets/patches/readline/readline62-001
new file mode 100644
index 0000000..d4563c3
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/readline/readline62-001
@@ -0,0 +1,46 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 6.2
+Patch-ID: readline62-001
+
+Bug-Reported-by: Clark J. Wang <dearvoid@gmail.com>
+Bug-Reference-ID: <AANLkTimGbW7aC4E5infXP6ku5WPci4t=xVc+L1SyHqrD@mail.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00157.html
+
+Bug-Description:
+
+The readline vi-mode `cc', `dd', and `yy' commands failed to modify the
+entire line.
+
+[This patch intentionally does not modify patchlevel]
+
+Patch (apply with `patch -p0'):
+
+*** ../readline-6.2-patched/vi_mode.c 2010-11-20 19:51:39.000000000 -0500
+--- vi_mode.c 2011-02-17 20:24:25.000000000 -0500
+***************
+*** 1115,1119 ****
+ _rl_vi_last_motion = c;
+ RL_UNSETSTATE (RL_STATE_VIMOTION);
+! return (0);
+ }
+ #if defined (READLINE_CALLBACKS)
+--- 1115,1119 ----
+ _rl_vi_last_motion = c;
+ RL_UNSETSTATE (RL_STATE_VIMOTION);
+! return (vidomove_dispatch (m));
+ }
+ #if defined (READLINE_CALLBACKS)
+*** ../readline-6.2-patched/callback.c 2010-06-06 12:18:58.000000000 -0400
+--- callback.c 2011-02-17 20:43:28.000000000 -0500
+***************
+*** 149,152 ****
+--- 149,155 ----
+ /* Should handle everything, including cleanup, numeric arguments,
+ and turning off RL_STATE_VIMOTION */
++ if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)
++ _rl_internal_char_cleanup ();
++
+ return;
+ }
diff --git a/build-aux/osx/build/modulesets/patches/readline/readline62-002 b/build-aux/osx/build/modulesets/patches/readline/readline62-002
new file mode 100644
index 0000000..3dc2604
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/readline/readline62-002
@@ -0,0 +1,57 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 6.2
+Patch-ID: readline62-002
+
+Bug-Reported-by: Vincent Sheffer <vince.sheffer@apisphere.com>
+Bug-Reference-ID: <F13C1C4F-C44C-4071-BFED-4BB6D13CF92F@apisphere.com>
+Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2011-08/msg00000.html
+
+Bug-Description:
+
+The readline shared library helper script needs to be updated for Mac OS X
+10.7 (Lion, darwin11).
+
+Patch (apply with `patch -p0'):
+
+*** ../readline-6.2-patched/support/shobj-conf 2009-10-28 09:20:21.000000000 -0400
+--- support/shobj-conf 2011-08-27 13:25:23.000000000 -0400
+***************
+*** 158,162 ****
+
+ # Darwin/MacOS X
+! darwin[89]*|darwin10*)
+ SHOBJ_STATUS=supported
+ SHLIB_STATUS=supported
+--- 172,176 ----
+
+ # Darwin/MacOS X
+! darwin[89]*|darwin1[012]*)
+ SHOBJ_STATUS=supported
+ SHLIB_STATUS=supported
+***************
+*** 187,191 ****
+
+ case "${host_os}" in
+! darwin[789]*|darwin10*) SHOBJ_LDFLAGS=''
+ SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
+ ;;
+--- 201,205 ----
+
+ case "${host_os}" in
+! darwin[789]*|darwin1[012]*) SHOBJ_LDFLAGS=''
+ SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
+ ;;
+
+*** ../readline-6.2-patched/patchlevel 2010-01-14 10:15:52.000000000 -0500
+--- patchlevel 2011-11-17 11:09:35.000000000 -0500
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 1
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 2
diff --git a/build-aux/osx/build/modulesets/patches/readline/readline62-003 b/build-aux/osx/build/modulesets/patches/readline/readline62-003
new file mode 100644
index 0000000..0462242
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/readline/readline62-003
@@ -0,0 +1,76 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 6.2
+Patch-ID: readline62-003
+
+Bug-Reported-by: Max Horn <max@quendi.de>
+Bug-Reference-ID: <20CC5C60-07C3-4E41-9817-741E48D407C5@quendi.de>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2012-06/msg00005.html
+
+Bug-Description:
+
+A change between readline-6.1 and readline-6.2 to prevent the readline input
+hook from being called too frequently had the side effect of causing delays
+when reading pasted input on systems such as Mac OS X. This patch fixes
+those delays while retaining the readline-6.2 behavior.
+
+Patch (apply with `patch -p0'):
+
+*** ../readline-6.2-patched/input.c 2010-05-30 18:33:01.000000000 -0400
+--- input.c 2012-06-25 21:08:42.000000000 -0400
+***************
+*** 410,414 ****
+ rl_read_key ()
+ {
+! int c;
+
+ rl_key_sequence_length++;
+--- 412,416 ----
+ rl_read_key ()
+ {
+! int c, r;
+
+ rl_key_sequence_length++;
+***************
+*** 430,441 ****
+ while (rl_event_hook)
+ {
+! if (rl_gather_tyi () < 0) /* XXX - EIO */
+ {
+ rl_done = 1;
+ return ('\n');
+ }
+ RL_CHECK_SIGNALS ();
+- if (rl_get_char (&c) != 0)
+- break;
+ if (rl_done) /* XXX - experimental */
+ return ('\n');
+--- 432,447 ----
+ while (rl_event_hook)
+ {
+! if (rl_get_char (&c) != 0)
+! break;
+!
+! if ((r = rl_gather_tyi ()) < 0) /* XXX - EIO */
+ {
+ rl_done = 1;
+ return ('\n');
+ }
++ else if (r == 1) /* read something */
++ continue;
++
+ RL_CHECK_SIGNALS ();
+ if (rl_done) /* XXX - experimental */
+ return ('\n');
+*** ../readline-6.2-patched/patchlevel 2010-01-14 10:15:52.000000000 -0500
+--- patchlevel 2011-11-17 11:09:35.000000000 -0500
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 2
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 3
diff --git a/build-aux/osx/build/modulesets/patches/readline/readline62-004 b/build-aux/osx/build/modulesets/patches/readline/readline62-004
new file mode 100644
index 0000000..5f3ba9b
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/readline/readline62-004
@@ -0,0 +1,108 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 6.2
+Patch-ID: readline62-004
+
+Bug-Reported-by: Jakub Filak
+Bug-Reference-ID:
+Bug-Reference-URL: https://bugzilla.redhat.com/show_bug.cgi?id=813289
+
+Bug-Description:
+
+Attempting to redo (using `.') the vi editing mode `cc', `dd', or `yy'
+commands leads to an infinite loop.
+
+Patch (apply with `patch -p0'):
+
+*** ../readline-6.2-patched/vi_mode.c 2011-02-25 11:17:02.000000000 -0500
+--- vi_mode.c 2012-06-02 12:24:47.000000000 -0400
+***************
+*** 1235,1243 ****
+ r = rl_domove_motion_callback (_rl_vimvcxt);
+ }
+! else if (vi_redoing)
+ {
+ _rl_vimvcxt->motion = _rl_vi_last_motion;
+ r = rl_domove_motion_callback (_rl_vimvcxt);
+ }
+ #if defined (READLINE_CALLBACKS)
+ else if (RL_ISSTATE (RL_STATE_CALLBACK))
+--- 1297,1313 ----
+ r = rl_domove_motion_callback (_rl_vimvcxt);
+ }
+! else if (vi_redoing && _rl_vi_last_motion != 'd') /* `dd' is special */
+ {
+ _rl_vimvcxt->motion = _rl_vi_last_motion;
+ r = rl_domove_motion_callback (_rl_vimvcxt);
+ }
++ else if (vi_redoing) /* handle redoing `dd' here */
++ {
++ _rl_vimvcxt->motion = _rl_vi_last_motion;
++ rl_mark = rl_end;
++ rl_beg_of_line (1, key);
++ RL_UNSETSTATE (RL_STATE_VIMOTION);
++ r = vidomove_dispatch (_rl_vimvcxt);
++ }
+ #if defined (READLINE_CALLBACKS)
+ else if (RL_ISSTATE (RL_STATE_CALLBACK))
+***************
+*** 1317,1325 ****
+ r = rl_domove_motion_callback (_rl_vimvcxt);
+ }
+! else if (vi_redoing)
+ {
+ _rl_vimvcxt->motion = _rl_vi_last_motion;
+ r = rl_domove_motion_callback (_rl_vimvcxt);
+ }
+ #if defined (READLINE_CALLBACKS)
+ else if (RL_ISSTATE (RL_STATE_CALLBACK))
+--- 1387,1403 ----
+ r = rl_domove_motion_callback (_rl_vimvcxt);
+ }
+! else if (vi_redoing && _rl_vi_last_motion != 'c') /* `cc' is special */
+ {
+ _rl_vimvcxt->motion = _rl_vi_last_motion;
+ r = rl_domove_motion_callback (_rl_vimvcxt);
+ }
++ else if (vi_redoing) /* handle redoing `cc' here */
++ {
++ _rl_vimvcxt->motion = _rl_vi_last_motion;
++ rl_mark = rl_end;
++ rl_beg_of_line (1, key);
++ RL_UNSETSTATE (RL_STATE_VIMOTION);
++ r = vidomove_dispatch (_rl_vimvcxt);
++ }
+ #if defined (READLINE_CALLBACKS)
+ else if (RL_ISSTATE (RL_STATE_CALLBACK))
+***************
+*** 1378,1381 ****
+--- 1456,1472 ----
+ r = rl_domove_motion_callback (_rl_vimvcxt);
+ }
++ else if (vi_redoing && _rl_vi_last_motion != 'y') /* `yy' is special */
++ {
++ _rl_vimvcxt->motion = _rl_vi_last_motion;
++ r = rl_domove_motion_callback (_rl_vimvcxt);
++ }
++ else if (vi_redoing) /* handle redoing `yy' here */
++ {
++ _rl_vimvcxt->motion = _rl_vi_last_motion;
++ rl_mark = rl_end;
++ rl_beg_of_line (1, key);
++ RL_UNSETSTATE (RL_STATE_VIMOTION);
++ r = vidomove_dispatch (_rl_vimvcxt);
++ }
+ #if defined (READLINE_CALLBACKS)
+ else if (RL_ISSTATE (RL_STATE_CALLBACK))
+*** ../readline-6.2-patched/patchlevel 2010-01-14 10:15:52.000000000 -0500
+--- patchlevel 2011-11-17 11:09:35.000000000 -0500
+***************
+*** 1,3 ****
+ # Do not edit -- exists only for use by patch
+
+! 3
+--- 1,3 ----
+ # Do not edit -- exists only for use by patch
+
+! 4
diff --git a/build-aux/osx/build/modulesets/patches/shared-mime-info/0001-Bug-70255-Build-fails-with-glib-2.38.patch b/build-aux/osx/build/modulesets/patches/shared-mime-info/0001-Bug-70255-Build-fails-with-glib-2.38.patch
new file mode 100644
index 0000000..f2007d2
--- /dev/null
+++ b/build-aux/osx/build/modulesets/patches/shared-mime-info/0001-Bug-70255-Build-fails-with-glib-2.38.patch
@@ -0,0 +1,42 @@
+From bfb2d780ff11cb547cc20d31c473be35cacb4509 Mon Sep 17 00:00:00 2001
+From: John Ralls <jralls@ceridwen.us>
+Date: Tue, 8 Oct 2013 11:33:11 -0700
+Subject: [PATCH] Bug 70255 - Build fails with glib-2.38
+
+---
+ configure.ac | 3 +++
+ test-tree-magic.c | 3 ++-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 68007c9..60a4c4d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -29,6 +29,9 @@ dnl Check whether libxml and glib are present is installed
+ PKG_CHECK_MODULES(ALL, \
+ libxml-2.0 >= 2.4 \
+ glib-2.0 >= 2.6.0)
++PKG_CHECK_MODULES(GLIB_2_36, glib-2.0 >= 2.36.0,
++ [AC_DEFINE([HAVE_GLIB_2_36], [1], [Configure g_type_init deprecation])],
++ [PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.6.0)])
+ AC_SUBST(ALL_CFLAGS)
+ AC_SUBST(ALL_LIBS)
+
+diff --git a/test-tree-magic.c b/test-tree-magic.c
+index 9b4dfaf..ec44a29 100644
+--- a/test-tree-magic.c
++++ b/test-tree-magic.c
+@@ -637,8 +637,9 @@ int main (int argc, char **argv)
+ char *content, **lines;
+ guint i;
+
++#ifndef HAVE_GLIB_2_36
+ g_type_init ();
+-
++#endif
+ if (argc != 2) {
+ g_print ("Usage: %s [file]\n", argv[0]);
+ g_print ("Where file contains, on each line, a directory path,\n"
+--
+1.8.3.rc0
+
diff --git a/build-aux/osx/build/updater/gedit-bootstrap-overrides.modules b/build-aux/osx/build/updater/gedit-bootstrap-overrides.modules
new file mode 100644
index 0000000..37c2726
--- /dev/null
+++ b/build-aux/osx/build/updater/gedit-bootstrap-overrides.modules
@@ -0,0 +1,119 @@
+<?xml version="1.0"?>
+<!DOCTYPE moduleset SYSTEM "moduleset.dtd">
+<?xml-stylesheet type="text/xsl" href="moduleset.xsl"?>
+<moduleset>
+ <repository type="tarball" name="ftp.gnome.org" default="yes" href="ftp://ftp.gnome.org/pub/gnome/sources/"/>
+ <repository type="tarball" name="xmlsoft.org" href="ftp://xmlsoft.org/libxml2/"/>
+ <repository type="tarball" name="itstool.org" href="http://files.itstool.org/itstool/"/>
+ <repository type="tarball" name="python" href="https://www.python.org/ftp/python/"/>
+ <repository type="tarball" name="oracle" href="http://download.oracle.com/"/>
+
+ <autotools id="berkeleydb-nonsrctree" autogen-sh="configure" autogen-template="%(srcdir)s/dist/%(autogen-sh)s --prefix %(prefix)s --libdir %(libdir)s %(autogenargs)s">
+
+ <branch module="berkeley-db/db-4.8.30.NC.tar.gz" version="4.8.30" repo="oracle">
+ <patch file="berkeleydb-nonsrctree/atomic.patch" strip="1"/>
+ </branch>
+ </autotools>
+
+ <autotools id="berkeleydb" autogen-sh="configure" supports-non-srcdir-builds="no" makeargs="-C build_unix" autogen-template="cd build_unix; ../dist/%(autogen-sh)s --prefix %(prefix)s --libdir %(libdir)s %(autogenargs)s" makeinstallargs="-C build_unix install">
+
+ <branch module="berkeley-db/db-4.8.30.NC.tar.gz" version="4.8.30" repo="oracle">
+ <patch file="berkeleydb/atomic.patch" strip="1"/>
+ </branch>
+ </autotools>
+
+ <autotools id='readline' autogen-sh="configure">
+ <branch repo="ftp.gnu.org" module="readline/readline-6.2.tar.gz"
+ version="6.2">
+ <patch file="http://ftp.gnu.org/gnu/readline/readline-6.2-patches/readline62-001" strip="0"/>
+ <patch file="http://ftp.gnu.org/gnu/readline/readline-6.2-patches/readline62-002" strip="0"/>
+ <patch file="http://ftp.gnu.org/gnu/readline/readline-6.2-patches/readline62-003" strip="0"/>
+ <patch file="http://ftp.gnu.org/gnu/readline/readline-6.2-patches/readline62-004" strip="0"/>
+ </branch>
+ </autotools>
+
+ <autotools id="gettext-runtime" autogen-sh="configure"
+ autogenargs="--without-emacs --disable-java --disable-native-java --disable-libasprintf --disable-csharp">
+ <branch repo="ftp.gnu.org" source-subdir="gettext-runtime"
+ module="gettext/gettext-0.18.1.1.tar.gz" version="0.18.1.1"
+ size="15139737" md5sum="3dd55b952826d2b32f51308f2f91aa89">
+ <patch file="http://git.gnome.org/browse/gtk-osx/plain/patches/gettext-bug33999-stpncpy.patch" strip="1"/>
+ </branch>
+ </autotools>
+
+ <autotools id="python" autogenargs="--enable-shared"
+ autogen-sh="configure">
+ <branch repo="python"
+ module="2.7.6/Python-2.7.6.tar.xz" version="2.7.6">
+ </branch>
+ <dependencies>
+ <dep package="gettext-runtime"/>
+ <dep package='readline'/>
+ </dependencies>
+ <after>
+ <dep package="berkeleydb"/>
+ <dep package="berkeleydb-nonsrctree"/>
+ </after>
+ </autotools>
+
+ <!-- Remove annoying autogen-sh="autoreconf" when itstool.use-correct-libxml.patch is removed -->
+ <autotools id="itstool" autogen-sh="autoreconf">
+ <branch repo="itstool.org"
+ module="itstool-2.0.2.tar.bz2"
+ version="2.0.2"
+ hash="sha256:bf909fb59b11a646681a8534d5700fec99be83bb2c57badf8c1844512227033a"
+ size="96748">
+ <patch file="https://git.gnome.org/browse/jhbuild/plain/patches/itstool.use-correct-libxml.patch" strip="1"/>
+ </branch>
+ </autotools>
+
+ <autotools id="libxml2" autogen-sh="configure" autogenargs="--with-python">
+ <branch version="2.9.0" module="libxml2-2.9.0.tar.gz"
+ repo="xmlsoft.org">
+ <patch file="http://git.gnome.org/browse/gtk-osx/plain/patches/libxml2-Bug-686118-pthreads_once_init.patch" strip="1"/>
+ </branch>
+ <dependencies>
+ <dep package="python"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="libxslt" autogen-sh="configure">
+ <branch version="1.1.27" module="libxslt-1.1.27.tar.gz" repo="xmlsoft.org"/>
+ <dependencies>
+ <dep package="libxml2"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="yelp-xsl" autogen-sh="configure">
+ <branch module="yelp-xsl/3.10/yelp-xsl-3.10.1.tar.xz"
+ version="3.10.1"
+ hash="sha256:59c6dee3999121f6ffd33a9c5228316b75bc22e3bd68fff310beb4eeff245887" />
+ <dependencies>
+ <dep package="libxslt"/>
+ <dep package="libxml2"/>
+ <dep package="intltool"/>
+ <dep package="itstool"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="yelp-tools" autogen-sh="configure">
+ <branch module="yelp-tools/3.10/yelp-tools-3.10.0.tar.xz"
+ version="3.10.0"
+ hash="sha256:ff5e1102631049b08e3ef0ade2cd10e63a62a812690e3d8558ed1413baef2611" />
+ <dependencies>
+ <dep package="libxslt"/>
+ <dep package="libxml2"/>
+ <dep package="intltool"/>
+ <dep package="yelp-xsl"/>
+ <dep package="itstool"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="gtk-doc" autogenargs="--disable-scrollkeeper --with-xml-catalog=$JHBUILD_PREFIX/etc/xml/catalog" makeargs="-k -i" makeinstallargs="-k -i install" autogen-sh="configure">
+ <branch version="1.21" module="gtk-doc/1.21/gtk-doc-1.21.tar.xz" hash="sha256:5d934d012ee08edd1585544792efa80da271652587ba5b843d2cea8e8b80ee3e"/>
+ <dependencies>
+ <dep package="libxslt"/>
+ <dep package="yelp-tools"/>
+ </dependencies>
+ </autotools>
+</moduleset>
diff --git a/build-aux/osx/build/updater/gedit-overrides.modules b/build-aux/osx/build/updater/gedit-overrides.modules
new file mode 100644
index 0000000..d893392
--- /dev/null
+++ b/build-aux/osx/build/updater/gedit-overrides.modules
@@ -0,0 +1,211 @@
+<?xml version="1.0"?>
+<!DOCTYPE moduleset SYSTEM "moduleset.dtd">
+<?xml-stylesheet type="text/xsl" href="moduleset.xsl"?>
+<moduleset>
+ <repository type="git" name="git.gnome.org"
+ href="git://git.gnome.org/"/>
+ <repository type="tarball" name="ftp.gnome.org" default="yes"
+ href="http://ftp.gnome.org/pub/GNOME/sources/"/>
+ <repository type="tarball" name="cairographics.org"
+ href="http://cairographics.org/releases/"/>
+ <repository type="tarball" name="iso-codes"
+ href="http://pkg-isocodes.alioth.debian.org/downloads/"/>
+ <repository type="tarball" name="abisource/enchant"
+ href="http://www.abisource.com/downloads/enchant/" />
+ <repository type="tarball" name="tarball.github.com"
+ href="https://github.com/"/>
+ <repository type="git" name="git.github.com"
+ href="https://github.com/"/>
+
+ <autotools id="enchant"
+ autogenargs="--disable-myspell --disable-ispell">
+ <branch module="1.6.0/enchant-1.6.0.tar.gz" version="1.6.0"
+ repo="abisource/enchant">
+ <patch file="http://git.gnome.org/browse/gtk-osx/plain/patches/enchant-gsize.patch" strip="1"/>
+ <patch file="patches/enchant-applespell.patch" strip="1"/>
+ <patch file="patches/enchant-relocatable.patch" strip="1"/>
+ </branch>
+ <dependencies>
+ <dep package="glib"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="gtk+-3.0"
+ autogenargs="--enable-quartz-backend --enable-quartz-relocation --disable-colord --without-atk-bridge">
+ <branch module="jessevdk/gtk" checkoutdir="gtk+-3.0" repo="git.github.com" revision="wip/app-osx-int"/>
+ <dependencies>
+ <dep package="gobject-introspection"/>
+ <dep package="pango"/>
+ <dep package="gdk-pixbuf"/>
+ <dep package="atk"/>
+ </dependencies>
+ <after>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ </after>
+ </autotools>
+
+ <autotools id="pygobject3" autogenargs="--with-python=python3">
+ <branch module="pygobject" repo="git.gnome.org"/>
+ <dependencies>
+ <dep package="meta-gtk-osx-gtk3"/>
+ </dependencies>
+ <after>
+ <dep package="python"/>
+ <dep package="python3"/>
+ </after>
+ </autotools>
+
+ <waf id="pycairo-python3" autogen-sh="configure" python-command="python3">
+ <branch module="pycairo-1.10.0.tar.bz2" repo="cairographics.org" version="1.10.0" hash="sha1:b4283aa1cc9aafd12fd72ad371303a486da1d014"/>
+ <dependencies>
+ <dep package="python3"/>
+ <dep package="cairo"/>
+ </dependencies>
+ <after>
+ <dep package="python3"/>
+ <dep package="meta-gtk-osx-gtk3"/>
+ </after>
+ </waf>
+
+ <autotools id="pango" autogen-sh="autoreconf">
+ <branch version="1.36.6" module="pango/1.36/pango-1.36.6.tar.xz" hash="sha256:4c53c752823723875078b91340f32136aadb99e91c0f6483f024f978a02c8624" repo="ftp.gnome.org">
+ </branch>
+ <dependencies>
+ <dep package="cairo"/>
+ </dependencies>
+ <after>
+ <dep package="gobject-introspection"/>
+ <dep package="meta-gtk-osx-freetype"/>
+ <dep package="glib"/>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ </after>
+ </autotools>
+
+ <autotools id="libpeas" autogenargs="PYTHON=python3 --disable-python2 --enable-python3">
+ <branch module="libpeas" repo="git.gnome.org">
+ </branch>
+ <dependencies>
+ <dep package="python3"/>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ <dep package="meta-gtk-osx-gtk3"/>
+ <dep package="pycairo-python3"/>
+ <dep package="pygobject3"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="gsettings-desktop-schemas">
+ <branch module="gsettings-desktop-schemas/3.10/gsettings-desktop-schemas-3.10.1.tar.xz"
+ version="3.10.1"
+ hash="sha256:452378c4960a145747ec69f8c6a874e5b7715454df3e2452d1ff1a0a82e76811">
+ </branch>
+ <dependencies>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ <dep package="glib"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="gtksourceview3">
+ <branch module="gtksourceview" repo="git.gnome.org"/>
+ <after>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ <dep package="meta-gtk-osx-gtk3"/>
+ </after>
+ </autotools>
+
+ <autotools id="adwaita-icon-theme" autogen-sh="configure">
+ <branch module="adwaita-icon-theme/3.13/adwaita-icon-theme-3.13.5.tar.xz"
+ version="3.13.5" hash="sha256:e163f5f7e205b5f5345dd7f2c30d4104f19376217ca90def83b61a9459a62dbc"/>
+ <dependencies>
+ <dep package="hicolor-icon-theme"/>
+ <dep package="icon-naming-utils"/>
+ <dep package="librsvg"/>
+ </dependencies>
+ </autotools>
+
+ <metamodule id="meta-gtk-osx-gtk3-core-themes">
+ <dependencies>
+ <dep package="icon-naming-utils"/>
+ <dep package="gnome-themes-standard"/>
+ <dep package="adwaita-icon-theme"/>
+ </dependencies>
+ </metamodule>
+
+ <cmake id="libgit2"
+ cmakeargs="-DTHREADSAFE:BOOL=1">
+ <branch repo="tarball.github.com"
+ module="libgit2/libgit2/archive/v${version}.tar.gz"
+ version="0.21.0"
+ hash="ae2afb5729ab6dcf6f690e5d66cb876372eaaedd37dc4fb072ad8da92338e099"
+ checkoutdir="libgit2-${version}">
+ </branch>
+ </cmake>
+
+ <autotools id="libgit2-glib">
+ <branch module="libgit2-glib/0.0/libgit2-glib-0.0.20.tar.xz"
+ version="0.0.20" hash="sha256:f8a10c8d3fcad14eed080dff6b8db0c72866c11a05b9731af31cb7258bcc8d95"/>
+ <dependencies>
+ <dep package="libgit2"/>
+ <dep package="glib"/>
+ <dep package="gobject-introspection"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="vte" autogenargs="--disable-Bsymbolic --disable-vala --disable-gnome-pty-helper">
+ <branch module="jessevdk/vte" repo="git.github.com"/>
+ <dependencies>
+ <dep package="meta-gtk-osx-gtk3"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="gedit-plugins">
+ <branch module="gedit-plugins" repo="git.gnome.org"/>
+ <dependencies>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ <dep package="gedit"/>
+ <dep package="libgit2-glib"/>
+ <dep package="vte"/>
+ </dependencies>
+ </autotools>
+
+ <autotools id="libsoup" autogen-sh="configure" autogenargs="set_more_warnings=no">
+ <branch module="libsoup/2.40/libsoup-2.40.1.tar.xz"
+ version="2.40.1" hash="sha256:77a55d57e7e8055acd2f44e0cc889b9ba48052e8b7f07e829157d57417ac650a" />
+ <dependencies>
+ <dep package="glib"/>
+ <dep package="glib-networking"/>
+ <dep package='sqlite'/>
+ </dependencies>
+ </autotools>
+
+ <metamodule id="gedit-deps">
+ <dependencies>
+ <dep package="meta-gtk-osx-bootstrap"/>
+ <dep package="meta-gtk-osx-freetype"/>
+ <dep package="meta-gtk-osx-gtk3"/>
+ <dep package="libpeas"/>
+ <dep package="gtksourceview3"/>
+ <dep package="enchant"/>
+ <dep package="gsettings-desktop-schemas"/>
+ <dep package="iso-codes"/>
+ <dep package="shared-mime-info"/>
+ <dep package="libsoup"/>
+ </dependencies>
+ </metamodule>
+
+ <autotools id="gedit" autogenargs="PYTHON=python3">
+ <branch repo="git.gnome.org" module="gedit"/>
+ <dependencies>
+ <dep package="gedit-deps"/>
+ </dependencies>
+ </autotools>
+
+ <metamodule id="gedit-meta">
+ <dependencies>
+ <dep package="gedit"/>
+ <dep package="gedit-plugins"/>
+ </dependencies>
+ </metamodule>
+
+</moduleset>
+
+<!-- vi:ex:ts=2:et -->
diff --git a/build-aux/osx/build/updater/patches/enchant-applespell.patch b/build-aux/osx/build/updater/patches/enchant-applespell.patch
new file mode 100644
index 0000000..f6f1f65
--- /dev/null
+++ b/build-aux/osx/build/updater/patches/enchant-applespell.patch
@@ -0,0 +1,368 @@
+--- a/configure.in (revision 30591)
++++ b/configure.in (working copy)
+@@ -33,4 +33,5 @@
+ AC_PROG_CC
+ AC_PROG_CPP
++AC_PROG_OBJC
+ AC_PROG_INSTALL
+ AC_PROG_LN_S
+--- a/src/applespell/Makefile.am 2010-04-01 22:53:37.000000000 +0200
++++ b/src/applespell/Makefile.am 2012-01-11 22:42:13.000000000 +0100
+@@ -1,4 +1,13 @@
+-EXTRA_DIST= \
+- applespell_checker.h \
+- applespell_checker.mm \
+- AppleSpell.config
++target_lib = libenchant_applespell.la
++
++INCLUDES=-I$(top_srcdir)/src $(ENCHANT_CFLAGS) $(CC_WARN_CFLAGS) -DXP_TARGET_COCOA -xobjective-c -D_ENCHANT_BUILD=1
++
++applespell_LTLIBRARIES = $(target_lib)
++applespelldir= $(libdir)/enchant
++
++libenchant_applespell_la_LIBADD= $(ENCHANT_LIBS) -lobjc $(top_builddir)/src/libenchant.la
++libenchant_applespell_la_LDFLAGS = -module -avoid-version -no-undefined -framework Cocoa
++libenchant_applespell_la_SOURCES = applespell_provider.m
++libenchant_applespell_la_LIBTOOLFLAGS = --tag=CC
++
++libenchant_applespell_lalibdir=$(libdir)/enchant
+--- a/src/applespell/applespell_provider.m 2012-01-11 22:46:35.000000000 +0100
++++ b/src/applespell/applespell_provider.m 2012-01-11 22:39:17.000000000 +0100
+@@ -0,0 +1,337 @@
++/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
++/* enchant
++ * Copyright (C) 2004 Remi Payette
++ * Copyright (C) 2004 Francis James Franklin
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2
++ * of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++ * 02110-1301, USA.
++ */
++
++#include <glib.h>
++#include <gmodule.h>
++#include <Cocoa/Cocoa.h>
++#include <AvailabilityMacros.h>
++
++#include "enchant-provider.h"
++
++#ifdef __cplusplus
++extern "C"
++{
++#endif
++
++ENCHANT_MODULE_EXPORT (EnchantProvider *)
++init_enchant_provider (void);
++
++ENCHANT_MODULE_EXPORT (void)
++configure_enchant_provider (EnchantProvider *provider, const gchar *module_dir);
++
++#ifdef __cplusplus
++}
++#endif
++
++ENCHANT_PLUGIN_DECLARE("AppleSpell")
++
++typedef struct
++{
++ NSSpellChecker *checker;
++ NSString *language;
++} Dictionary;
++
++static Dictionary *
++dictionary_new (NSSpellChecker *checker,
++ NSString *language)
++{
++ Dictionary *ret;
++
++ ret = g_slice_new (Dictionary);
++
++ ret->checker = checker;
++ ret->language = language;
++
++ return ret;
++}
++
++static void
++dictionary_free (Dictionary *dictionary)
++{
++ [dictionary->language release];
++ g_slice_free (Dictionary, dictionary);
++}
++
++static gchar **
++applespell_dict_suggest (EnchantDict *dict,
++ const gchar * const word,
++ size_t len,
++ size_t *out_n_suggs)
++{
++ NSAutoreleasePool *pool;
++ gchar **ret = NULL;
++ NSString *str;
++ Dictionary *d;
++ NSArray *words;
++ NSRange range;
++ guint i = 0;
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ d = dict->user_data;
++
++ str = [[NSString alloc] initWithBytes:word length:len encoding:NSUTF8StringEncoding];
++
++ range.location = 0;
++ range.length = [str length];
++
++#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5
++ words = [d->checker guessesForWordRange:range
++ inString:str
++ language:d->language
++ inSpellDocumentWithTag:0];
++#else
++ [d->checker setLanguage:d->language];
++ words = [d->checker guessesForWord:str];
++#endif
++
++ *out_n_suggs = [words count];
++
++ ret = g_new0 (gchar *, *out_n_suggs + 1);
++
++ for (i = 0; i < [words count]; ++i)
++ {
++ ret[i] = g_strdup ([[words objectAtIndex:i] UTF8String]);
++ }
++
++ [str release];
++ [pool release];
++
++ return ret;
++}
++
++static gint
++applespell_dict_check (EnchantDict *dict,
++ const gchar * const word,
++ size_t len)
++{
++ NSAutoreleasePool *pool;
++ gint result = 0;
++ NSString *str;
++ Dictionary *d;
++ NSRange range;
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ d = dict->user_data;
++
++ str = [[NSString alloc] initWithBytes:word length:len encoding:NSUTF8StringEncoding];
++
++ range = [d->checker checkSpellingOfString:str
++ startingAt:0
++ language:d->language
++ wrap:true
++ inSpellDocumentWithTag:0
++ wordCount:NULL];
++
++ result = range.length > 0 ? 1 : 0;
++
++ [str release];
++ [pool release];
++
++ return result;
++}
++
++static EnchantDict *
++applespell_provider_request_dict (EnchantProvider *provider,
++ const char * const tag)
++{
++ NSAutoreleasePool *pool;
++ EnchantDict *dict;
++ NSString *str;
++
++ pool = [[NSAutoreleasePool alloc] init];
++ str = [[NSString alloc] initWithUTF8String:tag];
++
++ dict = g_new0 (EnchantDict, 1);
++
++ dict->check = applespell_dict_check;
++ dict->suggest = applespell_dict_suggest;
++
++ dict->user_data = dictionary_new (provider->user_data,
++ str);
++
++ [str retain];
++
++ [pool release];
++ return dict;
++}
++
++static void
++applespell_provider_dispose_dict (EnchantProvider *provider,
++ EnchantDict *dict)
++{
++ NSAutoreleasePool *pool;
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ dictionary_free (dict->user_data);
++ g_free (dict);
++
++ [pool release];
++}
++
++#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
++static gchar const *available_languages[] = {
++ "en",
++ "en_GB",
++ "en_AU",
++ "de",
++ "fr",
++ "nl",
++ "pl",
++ NULL
++};
++
++#endif
++
++static gint
++applespell_provider_dictionary_exists (EnchantProvider *provider,
++ const gchar * const tag)
++{
++ NSAutoreleasePool *pool;
++ gint result = 0;
++ NSSpellChecker *checker;
++#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
++ NSArray *languages;
++ guint i;
++#else
++ gchar const **ptr;
++#endif
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ checker = provider->user_data;
++
++#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
++ languages = [checker availableLanguages];
++
++ for (i = 0; i < [languages count]; ++i)
++ {
++ if (g_strcmp0 (tag, [[languages objectAtIndex:i] UTF8String]) == 0)
++ {
++ result = 1;
++ break;
++ }
++ }
++#else
++ ptr = available_languages;
++
++ while (ptr && *ptr)
++ {
++ if (g_strcmp0 (tag, *ptr) == 0)
++ {
++ result = 1;
++ break;
++ }
++ ++ptr;
++ }
++#endif
++
++ [pool release];
++
++ return result;
++}
++
++static void
++applespell_provider_dispose (EnchantProvider *provider)
++{
++ g_free (provider);
++}
++
++static const gchar *
++applespell_provider_identify (EnchantProvider *provider)
++{
++ return "AppleSpell";
++}
++
++static const gchar *
++applespell_provider_describe (EnchantProvider *provider)
++{
++ return "AppleSpell Provider";
++}
++
++static gchar **
++applespell_provider_list_dicts (EnchantProvider *provider,
++ size_t *out_n_dicts)
++{
++ NSSpellChecker *checker;
++ NSAutoreleasePool *pool;
++ gchar **ret = NULL;
++#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
++ NSArray *languages;
++ guint i = 0;
++#endif
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ checker = provider->user_data;
++
++#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
++ languages = [checker availableLanguages];
++ *out_n_dicts = [languages count];
++
++ ret = g_new0 (gchar *, *out_n_dicts + 1);
++
++ for (i = 0; i < [languages count]; ++i)
++ {
++ ret[i] = g_strdup ([[languages objectAtIndex:i] UTF8String]);
++ }
++#else
++ ret = g_strdupv ((gchar **)available_languages);
++#endif
++
++ [pool release];
++
++ return ret;
++}
++
++ENCHANT_MODULE_EXPORT (EnchantProvider *)
++init_enchant_provider (void)
++{
++ NSAutoreleasePool *pool;
++ EnchantProvider *provider;
++
++ pool = [[NSAutoreleasePool alloc] init];
++
++ provider = g_new0 (EnchantProvider, 1);
++
++ provider->dispose = applespell_provider_dispose;
++ provider->request_dict = applespell_provider_request_dict;
++ provider->dispose_dict = applespell_provider_dispose_dict;
++ provider->dictionary_exists = applespell_provider_dictionary_exists;
++ provider->identify = applespell_provider_identify;
++ provider->describe = applespell_provider_describe;
++ provider->list_dicts = applespell_provider_list_dicts;
++
++ provider->user_data = [NSSpellChecker sharedSpellChecker];
++
++ [pool release];
++
++ return provider;
++}
++
++ENCHANT_MODULE_EXPORT (void)
++configure_enchant_provider (EnchantProvider *provider,
++ const gchar *module_dir)
++{
++ return;
++}
diff --git a/build-aux/osx/build/updater/patches/enchant-relocatable.patch b/build-aux/osx/build/updater/patches/enchant-relocatable.patch
new file mode 100644
index 0000000..7e56eb7
--- /dev/null
+++ b/build-aux/osx/build/updater/patches/enchant-relocatable.patch
@@ -0,0 +1,40 @@
+--- a/src/enchant.c 2010-04-01 22:53:37.000000000 +0200
++++ b/src/enchant.c 2014-08-26 21:32:21.000000000 +0200
+@@ -210,6 +210,13 @@
+ char * module_dir = NULL;
+ char * prefix = NULL;
+
++ const char *envdir = g_getenv ("ENCHANT_MODULES_DIR");
++
++ if (envdir != NULL && *envdir != '\0')
++ {
++ module_dirs = enchant_slist_append_unique_path (module_dirs, g_strdup (envdir));
++ }
++
+ {
+ char* user_module_dir;
+
+@@ -239,7 +246,8 @@
+ module_dirs = enchant_slist_append_unique_path (module_dirs, module_dir);
+
+ #if defined(ENCHANT_GLOBAL_MODULE_DIR)
+- module_dirs = enchant_slist_append_unique_path (module_dirs, g_strdup (ENCHANT_GLOBAL_MODULE_DIR));
++ if (envdir == NULL || *envdir == '\0')
++ module_dirs = enchant_slist_append_unique_path (module_dirs, g_strdup (ENCHANT_GLOBAL_MODULE_DIR));
+ #else
+ /* Dynamically locate library and search for modules relative to it. */
+ prefix = enchant_get_prefix_dir();
+@@ -278,6 +286,13 @@
+ if (ordering_dir)
+ conf_dirs = enchant_slist_append_unique_path (conf_dirs, ordering_dir);
+
++ const char *envdir = g_getenv ("ENCHANT_DATA_DIR");
++
++ if (envdir != NULL && *envdir != '\0')
++ {
++ conf_dirs = enchant_slist_append_unique_path (conf_dirs, g_strdup (envdir));
++ }
++
+ /* Dynamically locate library and search for files relative to it. */
+ prefix = enchant_get_prefix_dir();
+ if(prefix)
diff --git a/build-aux/osx/build/updater/patches/gedit-plugins-disable-terminal.patch b/build-aux/osx/build/updater/patches/gedit-plugins-disable-terminal.patch
new file mode 100644
index 0000000..e1d2928
--- /dev/null
+++ b/build-aux/osx/build/updater/patches/gedit-plugins-disable-terminal.patch
@@ -0,0 +1,30 @@
+--- a/configure.ac 2011-10-16 22:03:19.000000000 +0200
++++ b/configure.ac 2012-01-15 13:57:54.000000000 +0100
+@@ -246,6 +246,27 @@
+ fi
+ fi
+
++# ================================================================
++# Terminal (vte)
++# ================================================================
++plugin_defined terminal
++
++if test "$?" = 1
++then
++ AC_CHECK_LIB([vte], [vte_terminal_new], [have_vte=yes], [have_vte=no])
++
++ if test "x$have_vte" = "xno"; then
++ plugin_defined_explicit terminal
++ if test "$?" = 1
++ then
++ AC_MSG_ERROR([vte could not be found, needed for terminal plugin])
++ else
++ AC_MSG_WARN([vte could not be found, terminal plugin will be disabled])
++ undef_plugin terminal "vte not found"
++ fi
++ fi
++fi
++
+ if test -z "$disabled_plugins"
+ then
+ disabled_plugins="none"
diff --git a/build-aux/osx/build/updater/update_modulesets.py b/build-aux/osx/build/updater/update_modulesets.py
new file mode 100755
index 0000000..1382297
--- /dev/null
+++ b/build-aux/osx/build/updater/update_modulesets.py
@@ -0,0 +1,320 @@
+#!/usr/bin/env python
+
+import lxml.etree as ET
+import lxml.objectify
+
+import subprocess, shutil, os, glob, urllib2, json, sys, difflib
+
+if not os.path.exists('.gtk-osx'):
+ subprocess.call(['git', 'clone', 'git://git.gnome.org/gtk-osx', '.gtk-osx'])
+
+try:
+ os.makedirs('.cache')
+except:
+ pass
+
+class Merger:
+ def __init__(self):
+ self.repos = {}
+ self.modules = {}
+
+ def normalize_xml(self, xml):
+ s = ET.tostring(xml)
+ o = lxml.objectify.fromstring(s)
+
+ return ET.tostring(o, pretty_print=True)
+
+ def extract_repos(self, t):
+ default = None
+
+ for repo in t.findall('./repository'):
+ name = repo.attrib['name']
+
+ if 'default' in repo.attrib:
+ default = repo
+
+ if not name in self.repos:
+ self.repos[name] = repo
+
+ return default
+
+ def parse_module(self, f):
+ t = ET.parse(f)
+ drepo = self.extract_repos(t)
+
+ tags = {}
+
+ for x in t.getroot().findall('./'):
+ if x.tag == 'include' or x.tag == 'repository':
+ continue
+
+ branch = x.find('./branch')
+
+ if not branch is None and not 'repo' in branch.attrib:
+ branch.attrib['repo'] = drepo.attrib['name']
+
+ id = x.attrib['id']
+
+ if id in self.modules:
+ print('Overriding existing module {0}:'.format(id))
+
+ a = self.normalize_xml(self.modules[id]).splitlines(True)
+ b = self.normalize_xml(x).splitlines(True)
+
+ print(''.join(difflib.unified_diff(a, b, fromfile='old', tofile='new')))
+ print('\n')
+
+ sys.stdout.write('Do you want to keep the original, or the new file? [(o)riginal, (n)new] ')
+ sys.stdout.flush()
+ answer = sys.stdin.readline().rstrip()
+
+ if answer == '' or answer == 'n' or answer == 'new':
+ self.modules[id] = x
+ print('Using new version\n')
+ else:
+ print('Used original version\n')
+ else:
+ self.modules[id] = x
+
+ def copy_patches(self, mod):
+ # Copy patches locally
+ patches = mod.findall('./branch/patch')
+
+ if len(patches) == 0:
+ return
+
+ dname = 'modulesets/patches/' + mod.attrib['id']
+
+ try:
+ os.makedirs(dname)
+ except:
+ pass
+
+ locc = 'http://git.gnome.org/browse/gtk-osx/plain/'
+
+ for p in patches:
+ f = p.attrib['file']
+
+ pname = os.path.basename(f)
+
+ if f.startswith(locc):
+ shutil.copyfile('.gtk-osx/' + f[len(locc):], dname + '/' + pname)
+ elif f.startswith('patches/'):
+ shutil.copyfile(f, dname + '/' + pname)
+ else:
+ content = self.from_cache_or_url(os.path.join('patches', mod.attrib['id'], pname), f)
+
+ with open(dname + '/' + pname, 'w') as patch:
+ patch.write(content)
+
+ p.attrib['file'] = mod.attrib['id'] + '/' + pname
+
+ def from_cache_or_url(self, filename, url):
+ cfile = os.path.join('.cache', filename)
+
+ try:
+ with open(cfile) as f:
+ return f.read()
+ except:
+ pass
+
+ resp = urllib2.urlopen(url)
+ ret = resp.read()
+ resp.close()
+
+ dname = os.path.dirname(cfile)
+
+ try:
+ os.makedirs(dname)
+ except:
+ pass
+
+ try:
+ with open(cfile, 'w') as f:
+ f.write(ret)
+ except:
+ pass
+
+ return ret
+
+ def update_module(self, mod):
+ branch = mod.find('./branch')
+
+ if branch is None:
+ return
+
+ if not branch.attrib['repo'].endswith('.gnome.org'):
+ return
+
+ # Check for latest versions
+ repo = self.repos[branch.attrib['repo']]
+
+ if repo.attrib['type'] != 'tarball':
+ return
+
+ module = branch.attrib['module']
+
+ modname = module.split('/', 2)[0]
+ version = [int(x) for x in branch.attrib['version'].split('.')]
+
+ # Skip updating gtk+ 2.x
+ if modname == 'gtk+' and version[0] == 2:
+ return
+
+ href = repo.attrib['href']
+ versions = self.from_cache_or_url(mod.attrib['id'] + '.json', href + modname + '/cache.json')
+ versions = json.loads(versions)
+
+ latest = [version, version]
+
+ for v in versions[1][modname]:
+ vv = [int(x) for x in v.split('.')]
+
+ if vv[1] % 2 == 0:
+ if vv > latest[0] and vv[0] == latest[0][0]:
+ latest[0] = vv
+ else:
+ if vv > latest[1] and vv[0] == latest[1][0]:
+ latest[1] = vv
+
+ if latest[0] > version or latest[1] > version:
+ choices = []
+
+ if latest[0] > version:
+ choices.append('stable = {0}'.format('.'.join([str(x) for x in latest[0]])))
+
+ if latest[1] > version:
+ choices.append('unstable = {0}'.format('.'.join([str(x) for x in latest[1]])))
+
+ sversion = '.'.join([str(x) for x in version])
+ print('Found new versions for {0} = {1}: {2}'.format(modname, sversion, ', '.join(choices)))
+
+ sys.stdout.write('Do you want to update? [(s)table/(u)nstable/(n)o]: ')
+ sys.stdout.flush()
+ answer = sys.stdin.readline().rstrip()
+
+ nv = None
+
+ if answer == '':
+ if latest[0] > latest[1]:
+ answer = 'stable'
+ else:
+ answer = 'unstable'
+
+ if (answer == 'stable' or answer == 's') and latest[0] > version:
+ nv = latest[0]
+ elif (answer =='unstable' or answer == 'u') and latest[1] > version:
+ nv = latest[1]
+
+ if not nv is None:
+ v = '.'.join([str(x) for x in nv])
+ info = versions[1][modname][v]
+ branch.attrib['version'] = v
+ branch.attrib['module'] = '{0}/{1}'.format(modname, info['tar.xz'])
+
+ hfile = href + modname + '/' + info['sha256sum']
+
+ ret = self.from_cache_or_url(os.path.join('hashes', modname, info['sha256sum']), hfile)
+
+ for line in ret.splitlines():
+ hash, fname = line.rstrip().split(None, 2)
+
+ if fname == os.path.basename(info['tar.xz']):
+ branch.attrib['hash'] = 'sha256:{0}'.format(hash)
+
+ print('Updated to version {0}\n'.format(v))
+ else:
+ print('Keep version {0}\n'.format(sversion))
+
+ def merge(self, modules, entry_point, overrides):
+ self.modules = {}
+ self.repos = {}
+
+ for mod in modules:
+ self.parse_module(mod)
+
+ self.required_modules = []
+ processed = set()
+
+ self.parse_module(overrides)
+
+ process = [self.modules[entry_point]]
+ processed.add(entry_point)
+
+ while len(process) != 0:
+ mod = process.pop()
+ id = mod.attrib['id']
+
+ self.required_modules.insert(0, mod)
+
+ deps = mod.findall('./dependencies/dep') + mod.findall('./after/dep') + mod.findall('./suggests/dep')
+
+ for dep in deps:
+ package = dep.attrib['package']
+
+ if package in processed:
+ continue
+
+ if not package in self.modules:
+ sys.stderr.write('Package dependency is not in modules... {0}\n'.format(package))
+ sys.exit(1)
+
+ processed.add(package)
+ process.insert(0, self.modules[package])
+
+ def write(self, f):
+ needed_repos = {}
+
+ for mod in self.required_modules:
+ branch = mod.find('./branch')
+
+ if not branch is None and 'repo' in branch.attrib:
+ needed_repos[branch.attrib['repo']] = self.repos[branch.attrib['repo']]
+
+ try:
+ os.makedirs('.cache')
+ except:
+ pass
+
+ for mod in self.required_modules:
+ self.copy_patches(mod)
+ self.update_module(mod)
+
+ with open(f, 'w') as f:
+ root = ET.Element('moduleset')
+
+ repos = needed_repos.values()
+ repos.sort(lambda a, b: cmp(a.attrib['name'], b.attrib['name']))
+
+ for repo in repos:
+ root.append(repo)
+
+ for mod in self.required_modules:
+ root.append(mod)
+
+ ret = ET.ElementTree(root)
+
+ content = ET.tostring(ret, pretty_print=True, xml_declaration=True, encoding='utf-8', doctype='<!DOCTYPE moduleset SYSTEM "moduleset.dtd">')
+ f.write(content)
+
+shutil.rmtree('modulesets', ignore_errors=True)
+
+os.makedirs('modulesets')
+os.makedirs('modulesets/patches')
+
+allf = glob.glob('.gtk-osx/modulesets-stable/*.modules')
+
+nobs = [x for x in allf if os.path.basename(x) != 'bootstrap.modules']
+bs = [x for x in allf if os.path.basename(x) == 'bootstrap.modules']
+
+m = Merger()
+
+m.merge(nobs, 'gedit-meta', 'gedit-overrides.modules')
+m.write('modulesets/gedit.modules')
+
+m.merge(bs, 'meta-bootstrap', 'gedit-bootstrap-overrides.modules')
+m.write('modulesets/bootstrap.modules')
+
+print('New modules have been written to "modulesets"')
+
+# vi:ts=4:et