Overview of changes in GLib 2.49.4
==================================

* Change the just-introduced structured logging API. The arguments
  of g_log_structured() had to be reordered to enable an implementation
  within the limits of what the standards guarantee about var args.

Bugs fixed:
 744456 Structured logging API
 768936 gio doc build fails because of missing gio.xml in the tarballs
 768963 improper va_list use in g_log_structured()
 768968 gio/tests/socket-listener hangs since e4ee307

Translation updates:
 Spanish


Overview of changes in GLib 2.49.3
==================================

* GLib has a structured logging API, g_log_structured, with support
  for writing to the systemd journal. It also supports colored output
  in terminals

* Some new GBytes API has been added:
 - g_key_file_load_from_bytes
 - g_compute_hmac_for_bytes

* Stack-allocated GVariantBuilder and GVariantDict objects can now be
  initialized with G_VARIANT_BUILDER_INIT and G_VARIANT_DICT_INIT

* gio:
 - Add a way to register handlers for custom uri schemes
 - Add a G_FILE_ATTRIBUTE_FILESYSTEM_REMOTE attribute to
   have these heuristics in a single place
 - Include a gio tool that makes the functionality of the
   various gvfs commandline tools available in a single place
 - Add portal support to g_app_info_launch_default_for_uri
 - Add portal support to GNetworkMonitor
 - Add portal support to GProxyResolver
 - Add portal support to g_application_send_notification

Bugs fixed:
 547200 g_utf8_find_next_char() issues
 662802 systemtap multiarch issue
 723506 fork/exec from non-main thread when autolaunching could be avoided...
 725902 build: simplify dtrace configuration
 728207 gsocketservice: Documentation does not mention that is already act...
 729914 instead of DEBUG_CODE and IF_DEBUG, provide a common macro to supp...
 744456 Structured logging API
 744678 Unable to delete relocatable schemas
 746685 clarify that g_variant_get_data() can be used instead of g_variant...
 747134 glib-compile-resources --generate should detect common C++ file ex...
 750257 GSettings changed signal should clearly state the order required
 753231 Memory is potentially used after free
 754012 missing filename in "Error loading css: Failed to import: Error op...
 760115 gtestutils: add missing dash in seed argument's --help documentation
 760423 gio-querymodules prints error messages as question marks on some l...
 761102 Increase performance for main loop
 765338 GLib.compute_hmac_for_data throws every time
 766370 Add a macro for initializing g_auto(GVariantBuilder)
 766899 Superflous HTML/XML comments in GDBusProxyTypeFunc documentation s...
 766933 GSocketAddress leaks in gnetworkmonitornetlink.c:read_netlink_mess...
 767765 Add names and tags to various GSources and GTasks constructed in GLib
 767880 gkeyfile: add g_key_file_load_from_bytes() API
 767887 vfs: add g_vfs_register_uri_scheme()
 767949 [patch] Typos in glib docs
 768029 infinite loop in parse_name_internal()
 768119 Fix fallout from get_supported_schemes() changes
 768357 Build the gio tool on Windows/MSVC
 768498 portal support for glib
 768504 keyfile: g_key_file_get_double behavior doesn't follow documentation
 768549 Test failure: test_ip_sync_dgram
 768551 Test failure: test_socket_address_to_string
 768560 gio/tests/gsettings: fix GSettings reference leaks in some tests
 768780 O_PATH is a non-standard flag which may be unavailable on non-Lin...
 768806 gdbus tool must swallow -- argument

Translation updates:
 Chinese (Taiwan)
 French
 Hebrew
 Indonesian
 Lithuanian
 Portuguese
 Spanish


Overview of changes in GLib 2.49.2
==================================

 * GMainContext and GTask have gained more systemtap probes

Bugs fixed:
 673101 resource compiler dependency generation not working for gen...
 700756 GFile.new_for_path arguments misses (type filename) annotation
 730187 glocalfileoutputstream: Fix an FD leak in an error path
 755439 Memory leak in gdbusproxy.c
 759813 Add more SystemTap/DTrace probes for main context and GTask
 761810 gio: Support using GDBusObjectManagerServer at path ‘/’
 767172 docs: Move GIO_USE_VFS to "okay for production" section
 767218 Remove a UTF-8 ellipsis from gsignal.h
 767245 Add filename type annotations
 767824 Some UTC timezones incorrectly recognized on Windows 7

Translation updates:
 Occitan


Overview of changes in GLib 2.49.1
==================================

 * GDesktopAppInfo now allows bus activation with dashes. This is
   not technically allowed per the Desktop Entry specification, but
   it happens in the wild. Rather than forcing people to go through
   another traumatic desktop file rename, accept it and translate - to _.

 * The support for giving names to threads has been improved. Thread names
   are now supported on Solaris as well, and the Linux support no longer
   uses prctl() but the pthread api.

 * GIO resources can now be overridden at runtime, using the G_RESOURCE_OVERLAYS
   environment variable.

 * gdbus-codegen can now generate autocleanup definitions for the types
   it generates. Use the --c-generate-autocleanup option to control this

Bugs fixed:
 665446 Use g_abort() instead of abort()
 731988 glocalfile: Avoid a potential NULL pointer dereference
 742898 g_value_type_transformable() description differs from the code
 747107 GVariant varargs documentation: g_variant_get() example
 747478 g_system_thread_set_name() is not implemented for gthread-win32
 748474 g_get_language_names() is not thread-safe
 748530 gthread: W32 implementation of g_get_num_processors() has lame fallback
 748806 GVariant: Better introduction to the concepts and its uses
 749583 GSequence performance improvements
 749606 tests: always remove app.desktop
 755898 [PATCH] settings: add get/set uint64
 758174 Fix documentation typos
 758738 Usage of GType properties causes crashes due to gulong/gpointer mismatch
 760186 namespace clash with gdb pretty-printing code
 762994 Race condition in GIO/AppFileChooser crashes Firefox/Gtk3
 763379 codegen: Add support for g_autoptr to gdbus-codegen–generated objects
 763821 build: Also dist Systemtap files always for gobject/
 764092 gstrfuncs: Document the behaviour of g_strjoinv()
 764163 g_task_had_error doesn't remember the error after g_task_propagate_*
 764415 Very High CPU usage in g_poll() Windows implementation
 764574 build: Fix all statfs() tests failing
 764575 tests: Fix compilation errors due to Y2K format problems
 764685 GApplication documentation about handling command-line options is confusing
 764754 '-' in application id: unbreak bus activation and notifications
 765173 documentation of g_main_context_push_thread_default() regarding GIO...
 765668 GResources: add support for resource overlays
 765710 gdbus-tool: only print note about expected argument types if that...
 765712 tests: Fix compilation
 765861 task: avoid context lock when setting source name
 765900 Add g_drive_is_removable() support
 765924 Improve external drives detection
 765959 socket: set fd field to -1 after closing socket
 765990 Visual Studio: Define inline only when necessary
 765991 Compilation of gresource.c is broken due to S_ISDIR
 766092 Incorrect locale handling in g_date_time_format_locale()
 766211 Fix the upper bound in g_unichar_iswide_bsearch
 766407 Some build-related defects in glib testsuite
 766570 build: Fix a misnamed variable in glib-tap.mk

Translation updates:
 Basque
 Catalan
 Chinese
 Occitan
 Portuguese
 Turkish
 Vietnamese


Overview of changes in GLib 2.48.0
==================================

 * a minor build fix in the name of determinism

 * a few coverity fixes

Bugs fixed:
 763617 giotypefuncs.c: Sort _get_type functions in the 'C' locale

Translations updated:
 Danish
 Italian

Overview of changes in GLib 2.47.92
===================================

 * gdbus-codegen now supports g_autoptr()

 * g_get_user_runtime_dir() now reliably returns an existing directory

 * g_array_remove_range() can now remove 0 items from the end of an array

 * Many fixes for Windows
   * build fixes
   * file monitoring
   * gsettings backend
   * streams
   * random numbers
   * wide character support

 * documentation improvements

 * other small bugfixes

Bugs fixed:
 724847 Segmentation fault on "gsettings list-recursively"
 743933 gapplication: add --app-id command line option
 756706 [PATCH] gio/gtestdbus.c: don't use non-standard %m printf modifier
 757506 gsettings: schema_list should use the passed schema's source
 760694 W32: Apps linked with -mwindows make cursor busy sometimes
 762202 g_win32_error_message improvements
 762637 build: Unconditionally dist tapset files
 762748 Undefined behavior
 762937 Mention that g_clear_error can be used with an "empty" GError
 763339 array: Support clearing an empty array with g_array_remove_range()
 763344 g_get_user_runtime_dir(): ensure directory exists
 763379 codegen: Add support for g_autoptr to gdbus-codegen–generated objects

Translations updated:
 Brazilian Portuguese
 Czech
 Finnish
 French
 Galician s
 German
 Greek
 Hebrew
 Hungarian
 Italian
 Kazakh
 Korean
 Latvian
 Lithuanian
 Occitan
 Polish
 Russian
 Serbian
 Slovak
 Slovenian
 Spanish
 Swedish

Overview of changes in GLib 2.47.6
==================================

* Windows usupport:
 - Fixes and improvements to the GSettings registry backend
 - Handle readability and writability of registry keys
 - Use Unicode registry APIs

* Bugs fixed:
760852 744772 761126 747927 761337 744570 761504 761550 761843
 744570 GString is missing (transfer none) annotations on many of its methods
 744772 systemtap and gdb scripts install in wrong place
 747927 Documentation: various small improvements
 760852 gdbusobjectmanagerserver: Clarify recommended ObjectManager paths
 761126 winiconv: update to upstream version
 761337 Fix some annotations
 761504 W32 registry GSettings backend does not use Unicode
 761550 Cannot build with default flags under Fedora rawhide (-Werror=format-...
 761843 gmacros.h is testing attributes with __has_feature (when compiling wi...

* Translation updates:
 Brazilian Portuguese
 Bulagarian
 Chinese (Taiwan)
 Hungarian
 Polish
 Slovak
 Slovenian
 Spanish
 Swedish


Overview of changes in GLib 2.47.5
==================================

* the system copy of PCRE is now used by default to implement GRegex.
  Configure with --with-pcre=internal if a system PCRE version
  is unavailable or undesired.

* interfaces for DTLS support have been added.  A new version of
  glib-networking will also be required.

* GDBusMethodInvocation now drops replies if the sender set the
  NO_REPLY_EXPECTED flag

* several GApplication fixes, including fixes for commandline arguments
  in interpreted languages on Windows

Bugs fixed:
 624186 Deprecate glib-gettext macros
 734095 gtk-demo.py of PyGObject fails to run on Windows (and likely other binding scripts using g_application_run())
 735754 Implement close on TLS GOutputStream
 748064 gnulib vfprintf returns desired (not actual) number of bytes, ignores errors
 752240 Add DTLS support to GIO
 755421 GDBus ignores NO_REPLY_EXPECTED flag in messages, leading to warnings on system bus
 756875 Include ntdef.h for NTSTATUS
 759554 g_application_run() calls g_main_context_default() repeatidly
 760199 gsettings: Install gettext ITS rules
 760215 G_LIKELY/_UNLIKELY macros need more parentheses
 760683 regex test: Check the expected PCRE exceptions at runtime

Translations updated:
 Brazilian Portuguese
 Czech
 German
 Lithuanian
 Swedish

Overview of changes in GLib 2.47.4
==================================

* The GApplication documentation has been improved in several areas.

* Bugs fixed:
 749092 gdb pretty-printers fail on Python 3 with a TypeError...
 757374 macros: clean up "inline" mess
 758641 Memory leak in g_dbus_proxy_new_for_bus_sync()
 759134 Add missing checks for gnulib vasnprintf()
 759408 Do not use uninitialized var 
 756475 Stop supporting non-POSIX getpwuid_r, getgrgid_r
 757372 GApplication: destroy the impl on shutdown
 728099 macros: add G_GNUC_CHECK_VERSION() for compiler checks
 757299 glib-compile-resources: do not leak c_name
 758553 Fix gettext use
 758823 file monitors: reorder some code to avoid segfault
 756214 gsettings: Don't translate ""
 710243 Add GParamSpec object ref management annotations
 735696 xdgmime: Finer handling for cases where mmap() is not available
 752983 gapplication: Acquire the main context before running

* Translation updates:
 Swedish


Overview of changes in GLib 2.47.3
==================================

The inline cleanup in the last release accidentally removed three
symbols from libglib-2.0.so.  It is unlikely that this will have caused
any problems because these symbols were only backup symbols for
definitions exported as inlines in the header files, but ABI is ABI.

This release corrects only this problem.

Overview of changes in GLib 2.47.2
==================================

* We have formalised the assumption that all compilers that are
  interested in support 'static inline' and simplified the macros around
  this considerably.  Please watch for and report unintentional fallout.

* New API: hardware-assisted helpers for overflow-checked integer math.

* other fixes

Bugs fixed:
 696324 gtester-report doesn't work with Python 3.x
 719966 glib: Add missing (nullable) and (optional) annotations
 752837 gobject and glib-compile-resources rely on .CRT$XCU section, no longer works with Win 10 UCRT (VS 2015)
 755364 make gtkdoc-check happy again
 756134 Segmentation fault on calling g_simple_action_group_add_action with bad action constructor call
 756179 gwin32.c: Replace VerifyVersionInfoW() with RtlGetVersion() due to API deprecation
 756988 GSequence should document each function's complexity
 757294 Move G_POLLFD_FORMAT to glibconfig.h
 757374 macros: clean up "inline" mess
 757451 doc: fix g_task_attach_source() example
 757628 gio tests fail to build when cross compiling 2.46.1
 757693 Invalid free in g_local_file_trash()
 757742 Fix up annotations in ghash.c
 758181 GTask: fix wrong example code

Translations updated:
 Greek
 Hebrew
 Hungarian
 Norwegian bokmål
 Portuguese
 Scottish Gaelic
 Simplified Chinese
 Spanish

Overview of changes in GLib 2.47.1
==================================

* The Unicode support has been updated to version 8.0 of the Unicode standard

* GDesktopAppInfo no longer sets the DISPLAY environment variable when
  launching apps. This is now done in the GAppLaunchContext implementations
  when appropriate

* Bug fixes:
 664740 Key-value file parser, space after integer
 687223 cleverer GThreadPool management
 692085 stderr and stdout are not always file descriptors 1 and 2
 697907 Add interface for socket-like things (GSocket, DTLS, etc)
 735754 Implement close on TLS GOutputStream
 737116 Add functions to print GSocketConnectables and addresses as strings
 743011 Minor additions to GError documentation
 749161 undefined reference to `__imp__stat32i64'
 749314 Cannot restore a just-trashed file
 751924 Add recvmmsg()-like API on GSocket
 752240 Add DTLS support to GIO
 752837 gobject and glib-compile-resources rely on .CRT$XCU section, no longer...
 753310 Remove `#pragma GCC system_header` from gmessages.h
 753935 Update example namespace and class names in GObject tutorial
 754855 Object instantiation documentation refers to example that no longer ex...
 754983 Wayland: g_desktop_app_info_launch_uris_with_spawn() forces DISPLAY va...
 754994 g_date_time_get_second () sometimes returns an off-by-one result
 755083 Clarify in G_ADD_PRIVATE that it is safe to call _get_instance_private...
 755351 Example still contains g_autoptr(gchar)
 755355 Move GStrv to glib.h so it can be used with g_auto()
 755374 g_variant_get_child(): flatten-first logic on '&'
 755496 glib 2.46 fails GStreamer test suite
 755609 glib 2.46.0 breaks Sun Java JVM 1.8.0.60
 755766 gvalue: The g_auto cleanup function assert if value is G_VALUE_INIT
 755795 2.46 considers empty files as octet-stream rather than text (leads to...
 755961 Fix up annotations in gbytes.c
 756053 MSVC doesn't understand the symbol 'msghdr'
 756054 MSVC linker error due to 'g_socket_send_message_with_timeout()'
 756077 testutils: remove internal ABI comment
 756099 g_main_context_query(): Annotate @n_fds as (in) parameter
 756139 musl: ctors called in the wrong order
 756179 gwin32.c: Replace VerifyVersionInfoW() with RtlGetVersion() due to AP...
 756251 The documentation of G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START is confusing
 756255 GOutputStream swallowing errors in splice with G_OUTPUT_STREAM_SPLICE...
 756316 GSequence should provide fast api to check if empty
 756382 snprintf used on Windows with VS2015 doesn't support %n
 756477 gio/gthreadedresolver.c has outdated copy of bionic headers (for android)
 756550 gtypes.h: Make G_MININTn literals negative
 756875 Include ntdef.h for NTSTATUS
 756952 giomodule: return a copy of module name

* Translation updates:
 Basque
 Czech
 Serbian
 Serbian Latin
 Vietnamese


Overview of changes in GLib 2.46.0
==================================

* Disable runtime-deprecation warnings

* Fix marshalling of flags on bigendian 64bit architectures

* Translation updates
 Brazilian Portuguese
 Danish
 German
 Latvian
 Russian
 Turkish


Overview of changes in GLib 2.45.8
==================================

* utf8 validation and utf8-to-ucs4 conversion are faster

* Small speedups to property change notification

* Various other small optimizations for GQuark, GData

* Bugs fixed:
 696426 GParamSpecTypeInfo do not need to be static
 735429 Cleanup MSVC Project Files Generation
 738504 Optimize UTF-8 decoding by unrolling branches and expressions
 742903 Add missing (transfer) annotation to GString
 748633 g_set_object order of operations
 754431 Fix build of glib/gstrfuncs.c on Windows
 754560 gioerror: Add more mappings for WinSock error codes
 754582 Glib cannot compile
 754601 Make g_strerror work with non-glibc POSIX systems
 754636 tests/unicode-encoding test fails for glib 2.45.7 on x86-64
 754788 more g_strerror stuff
 754831 autocleanups: Add GString type
 754924 Improve test coverage of g_utf8_validate() by added known-...
 754986 Avoid unnecessary signal emission during draw

* Translation updates:
 Italian
 Kazakh
 Korean
 Lithuanian
 Slovenian
 Swedish


Overview of changes in GLib 2.45.7
==================================

* Add G_FILE_ATTRIBUTE_STANDARD_IS_VOLATILE for use by non-POSIX-like
  backends (e.g. cloud storage).

* GFileMonitor: Make the inotify backend work with atomic renames again

* GSettings: change notification is again working unconditionally

* GListStore has a sort function now

* Test infrastructure:
 - Tests are now required to have unique names
 - TAP support has been improved
 - A macro for asserting that two memory regions have identical content
   has been added

* Bugs fixed:
 708525 A "g_file_query_info" on the file path "/sys/kernel/debug/hid"...
 742849 inotify: send paired events to both sides
 744060 Update GObject tutorial documentation to use G_DECLARE_FINAL_T...
 747364 Fix GError leak in g_file_query_writable_namespaces()
 749492 Support file creation time on FreeBSD and NetBSD
 752769 (g_socket_receive_message | g_socket_send_message) performance
 753745 glib-genmarshal still needed for cross-compilation
 754152 Add g_list_store_sort
 754211 Memory leak in g_file_enumerator_iterate ()
 754264 GLib 2.44 certificate chain construction fails if the PEM incl...
 754283 gtestutils: add g_assert_cmpmem()
 754284 gtestutils: print the TAP test plan first, not last
 754286 misc gtestutils fixes
 754307 size of array '_GStaticAssertCompileTimeAssertion_3387' is neg...


* Translation updates:
 Chinese (Taiwan)
 French
 Galician
 Greek
 Hebrew
 Hungarian
 Indonesian
 Polish
 Portuguese


Overview of changes in GLib 2.45.6
==================================

* Fix a test failure and a build failure

Overview of changes in GLib 2.45.5
==================================

* GNetworkMonitor now provides information about metered networks

* g_mem_set_vtable has been deprecated; it has not been working for
  quite a while. The recommendation is to use valgrind, or replace
  malloc itself.

* Bugs fixed:
 656325 Make GDBusInterfaceVTable binding friendly
 741779 Documentation tweaks addressing real-world API misuses
 741822 Fails to build with VS 2015
 742386 gdbusconnection: Don't g_printerr() when exiting
 743018 gobject: Add more cross-links between documentation pages
 750282 Add g_network_monitor_get_network_metered() to get if the connection...
 751358 GFileMonitor doesn't react to "mv some-file watched-file"
 751592 Stop using GMemVtable
 751598 Stop 'handle-local-options' propagation when callback reports an err...
 751610 g_str_hash produces collisions with strings of length 2
 751751 Wrong docs of g_async_queue_remove
 752210 gdbus command crashes with SIGSEGV
 752656 gdbusconnection: Fix signal subscription documentation
 752767 Fix typo in g_hash_table_replace() documentation
 753278 gdbus: Don't use g_assert_no_error() GDBusObjectManagerServer
 753285 g_menu_item_set_icon fails if called with NULL icon

* Translation updates:
 Catalan
 Czech
 French
 Indonesian
 Lithuanian
 Norwegian bokmål
 Slovak
 Spanish
 Thai
 Turkish


Overview of changes in GLib 2.45.4
==================================

* Bugs fixed:
 727829 win32: glibconfig.h.win32 updates
 741901 Clang cannot know that g_error don't return
 746339 GSocket kills process when fd is not a socket
 747676 gio/tests/socket fails: test_fd_roundtrip
 748610 Some tests fail with non-English locales
 749911 g_inet_address_to_string broken on XP/2003
 749912 g_inet_address_new_from_string broken on XP/2003
 750625 Should dismiss Software Updates Available notification after...
 750807 G_BREAKPOINT doesn't work as intended on Darwin
 751160 gtask does unnecessary work
 751672 -Wduplicate-decl-specifier in glib/tests/keyfile.c
 751731 GFile/DirectoryMonitor emit move events with other_file=NULL
 751737 gio/tests/appmonitor test fails in 2.45.3
 751798 Wrong enum type used in some test-cases
 752089 make gsocketservice::active a property
 752293 small cleanup: use list_free_full

* Translation updates:
 Greek
 Hebrew
 Portuguese


Overview of changes in GLib 2.45.3
==================================

* Improve performance of g_signal_handler_disconnect for signals
  with many handlers

* GDBus has gained a new call flag to allow interactive authorization

* GSettings:
 - New API: g_settings_schema_list_keys
 - Deprecated: g_settings_list_keys

* OS X:
 - Implement GNotification
 - Bump the OS X requirement to 10.9

* Windows:
 - Add registry reading API
 - Reimplement GAppInfo using registry information

* Bugs fixed:
 666831 Support URI opening on W32
 728489 property action with inverted boolean state
 730168 Incorrect annotation on g_action_group_get_action_state_type return...
 733325 Several regex tests fail with pcre3 8.35
 734888 GLib has no helper functions to work with W32 Registry
 737009 signal handler lookup doesn't scale
 738185 Misleading language about "file name encoding" in the docs on g_env...
 738504 Optimize UTF-8 decoding by unrolling branches and expressions
 739122 glib not handling -1 return ("no limit") from sysconf (_SC_THREAD_S...
 739424 gnome-shell crashes when files are added, deleted, or modified in $...
 739616 DBus; Add new call flag to allow interactive authorization
 740308 Add g_settings_schema_list_keys() method
 740516 RFE: please provide an introspectible version of g_log_set_handler
 741788 Document GSettings build system integration
 745013 GBinding not thread safe
 747146 Implement GNotification on OSX
 747941 try XDG_RUNTIME_DIR/bus before falling back to X11 autolaunch (dbus...
 748727 Filechooser dialog shows no icons for directories on W32
 749693 GActionGroupExporter: flush queue on requests
 750203 GNetworkMonitorNetlink hangs in user namespace
 750322 gapplication: Make sure --help output is translated
 750344 GTlsInteractionClass is missing from doc
 750369 Various GBinding cleanups
 750386 Race condition in g_io_condition_get_type
 750399 Typo "equilalent" in glib documentation's glib-Error-Reporting.html...
 750573 GTlsDatabaseClass is not documented
 750918 genmarshal: silence register storage class warnings
 751122 gsocket: avoid unnecessary g_socket_cond_wait() in _send_messages()
 479730 The "g_key_file_set_comment" interface prepends '#' character to...

* Translation updates:
 Hungarian
 Spanish


Overview of changes in GLib 2.45.2
==================================

* Improve error reporting in glib-compile-schemas.

* Add introspection annotations to GListStore.

* Bugs fixed:
 696749 win32 : failed to compile because of careless mistake in the code
 723394 const parameter to GtkPopover gtk_popover_set_pointing_to
 724113 gdbus-connection-loss test can fail on slow machines
 725981 tap-driver.sh: internal error getting exit status
 733325 Several regex tests fail with pcre3 8.35
 744895 Unknown or unsupported transport 'this-should-not-be-used-and-will...
 747882 gtype: Bump allowed number of children
 748534 gtest: if a subprocess assertion fails, print its stdout and stderr
 748612 de_DE locale used in option-context test is not supported by FreeBSD
 748614 Double unref in g_socket_listener_add_inet_port
 748834 glocalfilemonitor: Emit notification on rate limit change
 749079 gdbus-peer test: TCP tests can fail with ECONNRESET due to a race...
 749080 gdatetime test: fails if close to rollover between seconds
 749180 gnetworkaddress: add return type annotation to parse methods
 749352 g_binding_unbind() fails when source is also the target
 749353 GBinding does not connect to the detailed notify signal

* Translation updates:
 Catalan
 French
 Slovak
 Thai


Overview of changes in GLib 2.45.1
==================================

* The GSettings schema compiler, glib-compile-schemas has been changed
  to reject schema xml that has duplicate <summary> or <description>
  elements. Such elements typically occur when translations are merged
  into the schema, with xml:lang attributes. This is not the correct
  way to translate schemas. Instead keep the translations in the .mo
  file and set the gettext-domain attribute on the <schemalist> element.

* The file monitoring infrastructure has been rewritten, and all backends
  have seen major improvements.

  The inotify backend is reporting events with less delay (no event will
  be delayed more than 10ms) and wakeups due to file monitoring have been
  significantly reduced. A CHANGES_DONE event will also be sent when new
  files appear.

  The poll implementation is now using the thread default main context.

  The fam implmentation is now running in the worker thread.

  The fen implementation has been removed, since it was unmaintained.

* The GSettings schema compiler, glib-compile-schemas, is more strict
  about rejecting schemas with xml:lang style merged translations.
  Schema translations should be done by specifying the gettext domain
  in the xml, and keeping the translations in gettext. To avoid breaking
  already-installed schemas, this change is only taking effect when
  you use the --strict option.

* The hardcoded 10-thread limit of GTask's thread pool has been removed,
  since it was prone to causing deadlocks. The thread pool is now allowed
  to grow dynamically and will shrink back over time.

* GSimpleAsyncResult has been deprecated in favor of GTask.

* The algorithm used by GAppInfo to find default handlers for mime types
  has been tweaked to prefer apps that handle the specific subtype over
  default handlers for a generic supertype.

* Bug fixes:
 627285 inotify file monitor hardwired delay
 631597 Segmentation fault in append_escaped_text
 661767 merge/improve various bits of run-in-thread functionality
 687223 cleverer GThreadPool management
 711547 win32: silence some build warnings
 719966 glib: Add missing (nullable) and (optional) annotations
 726447 Possibly an error in text string
 728663 W32: wrong stat struct is used when built with MinGW-w64
 728669 W32: GLocalFile can't measure size of files larger than 2^32...
 730188 gsocket: Document FD ownership with g_socket_new_from_fd()
 733325 Several regex tests fail with pcre3 8.35
 738207 Add a way to set SO_SENDBUF and SO_RECVBUF on listener (and...
 739850 GClosure: add valgrind hints
 741791 gmain: Save errno when handling unix signals
 744282 gvfs-open for application/x-virt-viewer changed behaviour bet...
 745255 Add support for copying sessions between GTlsClientConnections
 745745 gdbus: fix out-of-bound array access
 745821 Don't use __alloc_size__ attribute with clang
 746749 GLib-GIO:ERROR:inotify-kernel.c:327:ik_source_dispatch: ass...
 746753 Glib-compile-resources --generate-header not using ".h" as ...
 747209 glib-compile-schemas ought to reject repeated <summary> and...
 747349 Conversion of gdbus to use GTask causes deadlocks
 747363 gatomic: Add missing new line in API doc comment
 747472 Don't ignore already-installed schemas with multiple <summa...
 747541 gdbus segfaults with invalid --dest
 747772 Having hardcoded utf8 strings in the source code does not p...
 748019 gsocketconnection: Fix copy-pasto in documentation
 748177 not all test schemas are distributed, "make distcheck" fails

* Translation updates:
 Basque
 Czech
 Danish
 Finnish
 German
 Hebrew
 Icelandic
 Norwegian bokmål
 Russian
 Turkish


Overview of changes in GLib 2.43.92
===================================

GLib is now considered frozen.  We do not expect any major changes
before the release of 2.44.0.

 * GUnixMountMonitor now properly supports multiple main contexts

 * many documentation improvements and cleanups.  We are now
   approaching a point where the documentation is 100% complete and the
   xml will build without warnings.  This will probably be enabled by
   default in the next cycle.

 * new support for HTTP proxies in GIO

 * new GTask:completed property

 * use "private" futexes in order to further improve the performance of
   the contended case of GMutex and g_bit_lock()

Bugs fixed:
 614684 Make various parts of GObject const-correct
 730352 Use inet_pton(), if_nametoindex() and if_indextoname() for newer versions of Windows
 733876 Proxy protocol 'http' is not supported.
 741442 threads: use FUTEX_WAIT_PRIVATE and FUTEX_WAKE_PRIVATE if possible
 742599 Clean up GUnixMountMonitor
 743636 gtask: Add a GTask:completed property
 743661 g_win32_check_windows_version() is missing from doc
 744722 docs: Expand introduction to mention using async calls over sync ones
 745589 [Patch] gio: add some missing autocleanup
 745634 [GNotifications] Use themed icon as icon-name

Translations updated:
 Bosnian
 Bulgarian
 Catalan
 Czech
 French
 German
 Greek
 Hungarian
 Italian
 Kazakh
 Korean
 Latvian
 Lithuanian
 POTFILESin
 Polish
 Russian
 Serbian
 Slovak
 Slovenian
 Spanish
 Swedish
 Vietnamese
 pa  for Gnome

Overview of changes in GLib 2.43.91
===================================

We have now added 'g_autofree' as a libgsystem-style autocleanup macro
that calls g_free() on the content of a local variable when it leaves
scope (working only on GCC and clang).

GApplication now has an "is-busy" property, allowing one to query the
effective busy state.

There have been various other bugfixes and cleanups.

Bugs fixed:
 661554 GIO's use of GError is wrong
 744263 Fix format specifier for __LINE__ in G_OBJECT_WARN_INVALID_PSPEC
 744565 gapplication: add bind_busy_property()
 744747 Add g_autofree
 744756 Can't find out if gapplication is marked as busy
 744830 autocleanups: Add GArray and GPtrArray
 744876 Unclean exit from from g_application_run
 745239 g_property_action_new missing type annotation

Translations updated:
 Chinese (Taiwan)
 French
 Galician
 Lithuanian
 Slovak

Overview of changes in GLib 2.43.90
===================================

* new GSimpleIOStream class to construct a GIOStream from an arbitrary
  GInputStream and GOutputStream

* GApplication: new API for marking 'busy' state according to the value
  of a boolean property on another object

* GOptionGroup: add binding support (boxed type, annotation fixes, etc.)

Bugs fixed:
 739724 Test functions should have async scope
 741024 glist: Mention that g_list_length() is bad for checking list emptiness
 741630 Add GSimpleIOStream class
 743349 goption: Add boxed type for GOptionGroup
 743990 GDBus connection closing is broken
 744565 gapplication: add bind_busy_property()

Translations updated:
 Greek
 Italian
 Norwegian bokmål
 Russian
 Slovenian
 Swedish

Overview of changes in GLib 2.43.4
==================================

* GType now has type declaration macros G_DECLARE_DERIVABLE_TYPE,
  G_DECLARE_FINAL_TYPE and G_DECLARE_INTERFACE, which significantly reduce
  the boilerplate needed for GObject types and interfaces.

* g_autoptr and g_auto are macros for declaring variables with automatic
  cleanup. They only work with gcc and clang.

* GListModel is a new interface that represents a dynamic list of GObjects.

* GListStore is a GSequence-based implementation of GListModel.

* Support thread names on OS X

* g_simple_action_set_state_hint: New function to set the state hint
  of GSimpleActions

* g_win32_check_windows_version: New function to check Windows version

* g_settings_schema_list_children and g_settings_schema_key_get_name
  are new functions to complete the GSettingsSchema API.

* Bugs fixed:
 389585 G_DEFINE_TYPE hack for header files
 729351 Add GListModel
 736914 Docs: various fixes and improvements
 741807 Add thread name support on OS X and iOS
 741895 gwin32: Add Simple API to check whether we are on at least a v...
 742456 object: Add g_steal_pointer() convenience function to mark own...
 743508 polkitd fails to start: patch for gio/gcredentialsprivate.h
 743517 GSettings API is missing some introspection functions
 743521 GSimpleAction: add g_simple_action_set_state_hint
 743596 G_DECLARE_DERIVABLE_TYPE() should allow additional typedef for...
 743640 add __attribute__((cleanup)) support
 743827 Fix build of GListModel (on Visual Studio)
 743927 GListStore: add sorted insert function
 743936 glib: handle unsigned modifier for long long in internal printf
 744012 Add GMutexLocker
 744190 Fix build on Compilers That Do Not Use inline for Plain C Code


Overview of changes in GLib 2.43.3
==================================

* add g_set_object() convenience function

* GNetworkMonitor: check if NM is not running and don't crash

* fix some races with g_mkdir_with_parents

* fix some warnings in MSVC

* avoid use of G_STRLOC in G_OBJECT_WARN_INVALID_PSPEC in order to save
  on static strings

* fix some content type vs. mime issues

* documentation improvements

* Bugs fixed:
 719455  g_file_make_directory_with_parents() can erroneously throw G_IO_ERROR_EXISTS
 732439  GSocket: avoid unnecessary g_socket_wait_condition() for blocking sockets
 734946  Implement GContentType on OSX
 741589  gobject: Add g_set_object() convenience function to set GObject pointers
 741653  gnetworkmonitornm: Check if network-manager is running
 741654  [patch] gobject: don't use G_STRLOC in G_OBJECT_WARN_INVALID_PSPEC() macro
 741707  Gsocket blocks trying to send data
 741788  Document GSettings build system integration
 742548  configure.ac: stay out of autoconf's namespace
 742851  avoid MSVC warnings in G_STMT_END
 742972  ggettext: Include an example of setlocale() and friends in the i18n docs
 743014  gtestutils: Add an example of using test fixtures 

* Translations updated:
 Basque
 Brazilian Portuguese
 Spanish

Overview of changes in GLib 2.43.2
==================================

* New function: g_strv_contains

* New function: g_network_address_new_loopback

* New function: g_socket_send_messages

* A new GNetworkMonitor implementation using NetworkManager provides
  more detailed connectivity information

* Bugs fixed:
  11059 Linux poll issue
 664562 captive wifi portal support for GNetworkMonitor
 685880 Add g_strv_contains()
 712570 Hang in g_threaded_socket_service_func
 719646 GSocket: add g_socket_send_messages() to send multiple messages...
 728928 Provide separate error code for "Connection reset by peer"
 732317 Support GSocketConnectable for loopback addresses
 740814 "make check" should ensure that every symbol is documented
 740848 Backend subscription fails when connecting to a signal with a d...
 741016 gio: add G_IO_ERROR_NOT_CONNECTED
 741226 keyfile: Add "in group" to GError message consistently

* Translation updates:
 Gujarati
 Hebrew
 Hungarian
 Kannada
 Turkish
 Vietnamese


Overview of changes in GLib 2.43.1
==================================

* GQueue now accepts NULL as a sibling in g_queue_insert_before() and
  g_queue_insert_after()

* Bugs fixed:
  11059 Linux poll issue
 726037 Add G_PARAM_READWRITE value to the GParamFlags enumeration
 727988 GMemoryOutputStream hangs when writing more than 1GiB
 729739 tlscertificate: add support for loading certificate chains
 733791 GSettings: delay backend subscription
 736286 Clarify g_file_replace behavior with etags
 736620 GQueue: accept NULL sibling for insert_before() and insert_after()
 737150 GLib-GIO-WARNING **: Failed to parse translated string 'visible-name...
 737160 unhelpful error message
 738259 GDBusInterfaceVTable: clarify memory handling for the method() virt...
 738551 'interface' variable conflicts with Windows defines
 738633 Need to disable SSLv3 in glib-networking
 740157 <app> --help doesn't work even when options were added
 740309 Fix docs in g_strfreev
 740413 Fix the GSettings Registry Backend 

* Translation updates:
 Norwegian bokmål


Overview of changes in GLib 2.43.0
==================================

* GObject gained a debug option to provide instance counts. To use it,
  set GOBJECT_DEBUG=instance-count and call g_type_get_instance_count().

* GOption now has a strict POSIX mode in which it stops parsing arguments
  as soon as a non-option argument is encountered.

* Bugs fixed:
 354457 Feature Proposal: Per-Type Statistics for Instantiable GTypes
 695082 g_hash_table_remove_all is not save against a call to g_hash_table_remove
 723160 GOption: add strict posix mode
 728256 gcredentials: add NetBSD support
 729739 tlscertificate: add support for loading certificate chains
 733338 Don't segfault in GNetworkMonitor when IPv6 support is unavailable
 736273 gdesktopappinfo: Use symbolic names in the code
 736284 Keep only one list of signal emissions
 736806 gtask: Fix reference count loop causing leaks
 736914 Docs: various fixes and improvements
 737143 Include <stdint.h> in glib/valgrind.h
 737259 gcancellable: Clarify that GSources hold references to GCancellables
 737338 gmain: Unref child sources when finalising a GSource
 737446 tests: Fix some minor leaks in the unit tests
 737451 Provide api to read_all_async
 737741 g_datalist_id_get_data assertion fails for non-existant keys
 737869 GApplication command line handling breaks --help
 738170 g_byte_array_new_take() doesn't initialize array->alloc
 738197 g_cond_timed_wait() doesn't time out on Mac OS X
 738374 gfile: g_file_equal (x, x) is TRUE
 738675 GSubprocessLauncher is missing some data on the docs 

* Translation updates:
 Bengali (India)
 Bulgarian
 Gujarati
 Italian
 Telugu


Overview of changes in GLib 2.42.0
===================================

All changes in this release are trivial in nature.

 - introspection warning fixes

 - g_application_add_main_option now uses an enum instead of an 'int'
   for the type of a parameter

 - added a G_OPTION_FLAG_NONE so that people don't need to use 0

 - gresource: Use GError in more places

 - gresource commandline tool: improve extraction from multiple sections

 - GSource now takes the context lock (if any) in g_source_set_name()

 - new documentation to clarify the use of some APIs related to
   GVariant, GSource, GApplication

 - other minor updates to docs

* Bugs fixed
 736683 Thread safety issues with g_main_context_find_source_by_id
 736975 [patch] please document that GVariant serialization needs an
        out-of-band length field

* Translation updates
 Danish
 Hindi
 Marathi
 Punjabi
 Serbian
 Simplified Chinese

Overview of changes in GLib 2.41.5
==================================

* Bug fixes:
 735819 single native credential struct used for two purposes
 735915 glib-building.html uses --enable-gcov instead of --enable-coverage
 736350 GDesktopAppInfo: avoid polling on missing desktop dirs
 736351 Don't use issetugid() on Android
        Fix the default application logic in GDesktopAppInfo
 736458 Only use rand_s() when targetting Visual Studio >= 2005

* Translation updates
 Galician
 Hungarian
 Indonesian
 Kannada
 Latvian
 Polish
 Russian
 Slovenian
 Tamil


Overview of changes in GLib 2.41.4
==================================

* GApplication now has binding-friendly API to handle
  commandline options: g_application_add_main_option

* G_GNUC_BEGIN_IGNORE_DEPRECATIONS works with clang

* Bugs fixed:
 583330 poll list of mounted file systems (no mtab support)
 727455 Command line option parsing from bindings
 734126 add G_GNUC_BEGIN_IGNORE_DEPRECATIONS macro for clang
 735179 gsocketclient: Handle cancellation between CONNECTING...
 735297 Docs claim that GThread struct is deprecated 

* Translation updates:
  Assamese
  Catalan
  Catalan (Valencian)
  Czech
  French
  German
  Greek
  Hebrew
  Korean
  Oriya
  Traditional Chinese


Overview of changes in GLib 2.41.3
==================================

* g_clear_pointer and g_clear_object no longer use atomics

* Bugs fixed:
 711547 win32: silence some build warnings
 725511 Compiled resource files should have the same /-separators everywhere
 725513 Some tests fail to build on W32
 725514 W32: gfileutils does not preserve errno correctly
 725515 test-printf fails on W32
 728730 gsocket: Set SO_NOSIGPIPE on sockets on Darwin
 729703 Leaks a GError in g_file_move
 730932 statically assert that reasonable assumptions about enums are true
 732085 gtype: Fast-path for g_type_is_a
 732754 GDBusMessage: optimise (de)serialisation of fixed arrays
 733345 ginetaddress: Add a precondition to g_inet_address_new_from_string()
 733576 Patches from static analysis run on 2.40
 733715 glib's configure.ac makes accidentally use of nested function
 733934 win32: improve the package installation dir lookup
 733960 W32: spawning a console process creates a new window when stdout...
 733969 Remove atomic aspects of g_clear_pointer/object
 733982 Do not crash when checking whether an instance type is of a given...
 734035 gedit hangs up when there's no GSettings key in the registry 

* Translation updates:
 Basque
 Brazilian Portuguese
 Lithuanian
 Slovenian
 Spanish


Overview of changes in GLib 2.41.2
==================================

* The Unicode support has been updated to version 7.0
  of the Unicode standard

* GNotification now supports priorities for notifications

* GCredentials has gained NetBSD support

* GMutex now uses a faster, native implementation on Linux

* Bugs fixed:
 699132 Pluggable event loop backends
 720708 g_assert_warning(): number of arguments doesn't match for...
 722092 Add GtkApplication resources support
 724986 Change gio/data-to-c.pl to /usr/bin/env perl.
 727974 Fix up failure-to-see-expected-message logging
 728256 gcredentials: add NetBSD support
 728401 GDateTime: Add guards to g_date_time_new()
 729825 Formatting of g_alloca documentation
 729914 instead of DEBUG_CODE and IF_DEBUG, provide a common macro...
 730293 clang++-3.4: error: 'register' storage class specifier is ...
 731339 giochannel: avoid setting uninitialised length
 731424 #ifdef spaghetti for load_user_special_dirs() implementations
 731623 GNotification: add support for a priority setting
 731929 update tables to unicode 7.0.0
 731950 gvalue: New g_value_from_instance
 731986 GLib: implement GMutex natively on Linux
 732184 GObject: warn on use of deprecated properties
 732357 Docs: various fixes and improvements
 732429 GActionEntry: improve documentation
 732465 Fix build on x64 Visual C++ builds
 732704 Docs: various fixes and improvements
 732739 ginetsocketaddress: Explicitly initialise flags for getaddr...
 732754 GDBusMessage: optimise (de)serialisation of fixed arrays
 732984 g_object_ref(NULL) in g_dbus_object_manager_client_finalize
 733084 Typos in g_bytes_hash() and g_time_zone_find_interval() docs
 733146 spawn helper does not use correctly the parameters 

* Translation updates:
 Lithuanian


Overview of changes in GLib 2.41.1
==================================

* Bug fixes:
 697229 Custom Interface implementations will be broken with glib 2.37/38
 698614 GObject: prevent installing properties after init
 729269 gvariant: Fix confusion between type and format strings in the docs
 730198 broken valgrind.h leads to crashes in g_type_free_instance on mingw64
 730807 GMutex performance regression
 730963 gconvert: mention that the g_convert len should be in bytes
 730984 Faster instance type check for fundamentals
 731050 <structname> tags appear in documentation
 731200 unconditional 'notify' during g_object_set() is problematic
 731335 gtype: guard uses of new fundamental type check
 731341 gparam: change value of G_PARAM_EXPLICIT_NOTIFY
 731366 run-assert-msg-test.sh gdb leaves assert-msg-test zombie
 731425 giomodule protects function-call with different token than function...
 731513 clang: build failure: implicit declaration of function '__atomic_load_4'
 731584 gbookmarkfile: Cleaner error handling code to pacify static analysis
 731657 Prevent an invalid @CARBON_LIBS@ from appearing in the .pc files
 731979 docs: Correct param to interface's default_init()
 731996 Return folder as icon for directories
 732002 gwakeup: Clarify buffer sizing in g_wakeup_signal()
 732005 Remove unused assignments
 732019 gtestdbus: Don’t close stdout for dbus-daemon
 732068 gsignal: Add an example to the g_signal_connect_swapped() documentation
 732081 gsocket: Document that g_socket_create_source() holds a socket ref
 732107 gsocketlistener: Reconsider closing sockets on listener finalisation


Overview of changes in GLib 2.41.0
===================================

* Many bugfixes found by static analysis, including potential fd leaks
  and NULL pointer dereferences.

* Increased use of (nullable) attribute on out values and return types
  now that it is supported (mostly from porting Vala metadata).

* use XDG_CURRENT_DESKTOP for OnlyShowIn/NotShowIn handling of desktop
  files, deprecating g_desktop_app_info_set_desktop_env()

* add support for g_desktop_app_info_get_implementations() to find
  desktop files that have an Implements= line for a given interface

* GHmac has gained SHA-512 support

* support the new mimeapps specification (most notably, moving the
  assoications/defaults configuration to ~/.config/mimeapps.list).

* libgobject is now linked -Wl,-z,nodelete when possible to avoid errors
  when gobject is used from a module for a program that does not itself
  use gobject and that module is unloaded/reloaded

* ... and many other bug fixes.

 623552 glib warns if backtrace.py is not present
 667468 glib-2.30.2: ipv6 tests fail when no ipv6 support is available
 668152 -framework Carbon linker flag not passed to pkg-config .pc files
 707298 libgobject should be linked with -Wl,-z,nodelete
 712391 Add g_desktop_app_info_get_implementors()
 722723 Infinite recursion when calling g_io_stream_close_async() from libsoup
 724741 hmac: Fix support for SHA-512 in GHmac
 726040 networkaddress: fix parsing of uri with @ after authority
 726318 gio: Document that GSocket is not thread safe
 726611 socketclient: Leak on cancellation
 726872 gio: Add names to idles and timeouts
 727119 wrong IN6_IS_ADDR_MC_LINKLOCAL usage break android build
 727123 GNotification: Some small documentation fixes
 727320 docs: Remove escaping '\' from literals
 727551 Check use_count of GApplication in g_application_release()
 727559 g_file_copy: Don't set GError when we intend to ignore errors
 727692 gio/gtlscertificate.c -- broken PEM-file processing (affects local CA root stores, for starters)
 727890 soup_content_sniffer_real_sniff segfault
 727900 gio: Add newer dbus UnknownXxxx and PropertyReadOnly errors
 727928 gapplication-tool fixes
 727939 INTLLIBS are always appended in configure checks
 727964 g_io_extension_point_get_extension_by_name: Warn, but don't crash, for NULL inputs
 728040 Implement new mimeapps spec
 728066 Deal with startup notify id being NULL
 728280 platform_get_argv0: fix sysctl(3) use on OpenBSD
 728285 docs: Use markdown links in .h files, too
 728350 gaction: Minor clarifications in the GAction documentation
 728380 docs: Remove <!-- --> comment before plural s
 728565 gfile: More explicitly document the context for GFileProgressCallback
 728983 Docs: various fixes and improvements
 729167 gobject: Document that classes/objects/interfaces are zero-filled
 729563 GOption: A short option's value is included in G_OPTION_REMAINING
 729813 AppInfo: use XDG_CURRENT_DESKTOP for OnlyShowIn
 729875 gio: cleanup gdbusmessage.c file
 730045 Avoid overeager warning about deprecated properties
 730189 gtestutils: Fix a very unlikely FD leak in test fork handling
 730190 gsocket: Add missing preconditions to g_socket_send_message()
 730277 gthread: Fix use of a local variable after it went out of scope
 730278 gsubprocess: Add a missing va_end() call
 730295 gdbus-tool: Remove dead variables
 730493 Port annotations from Vala metadata

Translations updated:
 Basque
 Brazilian Portuguese
 Catalan
 Czech
 Danish
 Greek
 Hebrew
 Hungarian
 Punjabi
 Serbian
 Slovenian
 Spanish
 Ukrainian

Overview of changes from GLib 2.39.91 to GLib 2.39.92
=====================================================

This is a release candidate for 2.40.0.

There are no major changes in this release, but a few serious bugs have
been fixed.

* Bugs fixed:
 710367 Crash in g_settings_backend_dispatch_signal()
 723899 G_DEFINE_TYPE() causes compiler warnings with clang due to foo_get_instance_private
 724859 Let the test_wait_until() test also run on non-*nix
 724916 gio unmount code makes XFCE's Thunar crash
 725651 GSubprocessLauncher: Does not copy the calling process environment.
 725656 Unskip GVariantDict
 725891 gio tests: add codegen to BUILT_SOURCES
 726046 Recent commit created symbolic icons issues

* Translations:
 Chinese
 French
 Korean
 Latvian
 Norwegian bokmål
 Portuguese
 Russian
 Traditional Chinese

Overview of changes from GLib 2.39.90 to GLib 2.39.91
=====================================================

This release introduces a hard dependency on present and functioning
clock_gettime() and CLOCK_MONOTONIC.  It also introduces a dependency on
pthread_condattr_setclock() unless your system happens to have
pthread_cond_timedwait_relative_np() (as do Mac OS and Android).  This
release is known to be broken with at least GNU/Hurd, pending addition
of working pthread_condattr_setclock(CLOCK_MONOTONIC) there.

New API: g_str_to_ascii()

* Fixed bugs:
 670144 unconditional use of CLOCK_MONOTONIC is broken
 673607 invalid assumption in g_cond_wait_until() / g_get_monotonic_time() API
 710142 Add more impressive transliteration to GLib
 722360 make check fails
 722604 (partial) Various tests are failing with 2.39.3
 723316 g_hash_table_iter_remove() should be explicit whether or not it is safe while iterating the table
 724609 Fix build of GIO on Windows
 724687 gmain: make monotonic time really monotonic, everywhere
 724706 gsource: document priority of child sources
 724707 some GSocket source improvements
 724839 GMainContext: some source ID cleanups
 724858 Dist gtranslit-data.h
 724994 Missing icons for bookmarks in file chooser
 725023 Can no longer find apps by executable/desktop file name

* Translations:
 Lithuanian
 Polish
 Thai

Overview of changes from GLib 2.39.4 to GLib 2.39.90
====================================================

* Fixed bugs:
 625408 make GVariant dictionaries more useful
 660809 document that if you fail a precondition check, documented guarantees do not apply
 661576 fix handling of constructors that destroy half-constructed objects
 679957 g_inet_address_new_from_string is not able to handle dots and numbers IPv4 addresses
 712837 gvariant: Document the need to cast varargs when constructing GVariants
 721458 g_simple_async_result_is_valid has a NULL check for the wrong source_tag
 721977 improve split handling of command line arguments
 722033 win32: fixup lib.exe invocation
 723422 Fix g_socket_get_available() with TCP on Windows
 723616 gio/tests: fix race when generating code
 724001 gsubprocess: Fix a broken link in the documentation
 724124 glib/tests/collate.c fails if no en_US locale
 724126 intermittent GApplication test failure: /gapplication/local-actions: lines of output permuted
 724233 gsocketservice: Note g_socket_listener_close() for closing open sockets
 724239 soup_session_queue_message - Connection terminated unexpectedly
 724278 gsocketconnection: Document closing connections with g_io_stream_close()
 724330 configure.ac: tweak inotify check
 724385 gtestutils: make the new assert messages more detailed
 724401 gsubprocess: Mutex leak
 724417 glib master build broken on OpenBSD
 724434 Build failure in gio/gresolver.c

* Updated translations:
 Brazilian Portuguese
 Galician
 Indonesian
 Italian
 Kannada
 Norwegian bokmål
 Spanish
 Thai

Overview of changes from GLib 2.39.3 to GLib 2.39.4
===================================================

* Fixed Bugs:
 139699 Correction for g_main_context_unref()
 583036 g_strchomp and g_strchug are not declared const
 683388 improve documentation for application developers
 685204 ./configure fails to add the '-g' flag to CFLAGS
 688406 GStaticMutex broke ABI on at least ARM EABI during 2.31.x
 693299 cannot compile on Solaris: error in gbitlock.c
 707111 Clarify type transformability and compatibility
 711547 win32: silence some build warnings
 719344 Fix the various test programs (or GLib itself) on Windows
 722025 cleanup/clarify command line argument encoding on Windows
 722323 remove unused include 'gslist.h' in 'gbookmarkfile.c'
 722326 gstringchunk: Use g_slist_free_full() where possible
 722357 gio: fix small memory leak on local xattr
 722436 Adjust doc to Makefile.decl renaming
 722503 GSimpleAction: add default activate handler
 722526 glib/deprecated/gthread.h error on FreeBSD
 722591 [documentation] broken link to GtkAction from GAction.html
 722973 Broken example in GApplication reference
 723048 'network-access' test can fail to guess interface index
 723360 gmain: Note that g_source_destroy() can be called multiple times 

* Updated Translations:
 Assamese
 Tamil
 Traditional Chinese


Overview of changes from GLib 2.39.2 to GLib 2.39.3
===================================================

No major changes this release -- mostly lots of small fixes and
improvements in test coverage.

 * fix a crasher in code from gdbus-codegen

 * improvements to gobject gdb helper script

 * portability:

   - fix a deadlock issue with kqueue on FreeBSD

   - work around a quirk in the sunstudio compiler

   - rename a variable to avoid clashing with a macro definition of
     'environ' on some platforms (like mingw)

   - use POSIX-specified <poll.h> over <sys/poll.h>

   - many improvements to Visual Studio projects and and some build
     fixes for Windows

 * tests
   - a very large number of improvements in test coverage

   - don't report skipped tests as failures

   - return 77 if we skip all tests in an executable

   - improve gtest documentation and fix some minor issues

   - fix g_test_trap_reached_timeout() return value

   - remove some dead code uncovered during test coverage expansion

   - Use tap mode for installed tests too, when using tap

 * fix races in unix signal handling

 * make our GVariant-based commandline tools (glib-compile-schemas,
   gdbus, gapplication) print out GVariant parse errors in context

 * GApplication now has a --gapplication-service command line switch to
   turn any GApplication into a service

 * improve compatibility of GApplication and GOptionContext

 * fix gsettings.m4 wrt. builddir != srcdir with non-recursive make

 * use a directory monitor in GKeyfileSettingsBackend

 * improve robustness of some GIcon classes

Bugs fixed
 141251  poll(2) is in <poll.h>, not <sys/poll.h> per SUS standard
 613732  [PATCH] gobject.py: Don't install frame filters when GDB does not support them
 708212  g_variant_parser_error_get_quark() has unexpected name.
 710965  GApplication: add --gapplication-service switch
 711090  periodic failure of spawn-multithreaded async testcase
 712171  gsettings.m4: @GSETTINGS_RULES@: Support srcdir != builddir with nonrecursive make
 712630  Revert "gsettings m4: check for .xml in src/builddir"
 715028  GVariant: add way to print context of parse errors
 719344  Fix the various test programs (or GLib itself) on Windows
 720263  gtestutils: skipping a test should count as success, not failure
 720539  gdbus-codegen: Fix crasher in goa-using apps
 720635  Make gdb pretty-printers compatible with Python3
 720891  g_settings_get_child does not inherit the backend
 721034  glib 2.38.2 cannot be compiled with SunStudio Compiler under Solaris
 721059  g_subprocess_launcher_set_environ vs "environ"
 721074  kqueue: deadlock
 721087  Missing -lselinux in pkg-config --libs --static gio-2.0
 721324  Error message is printed to stdout
 721624  Regression in GTest framework reorders existing test cases
 721625  backwards NEWS entry about g_source_remove change
 721796  insufficient escaping in g_dbus_annotation_info_generate_xml()
 721947  Improve GApplication ⇔ GOptionContext compatibility 

Translations updated:
 Brazilian Portuguese
 Galician
 Greek
 Hebrew

Overview of changes from GLib 2.39.1 to GLib 2.39.2
===================================================

* Portability

  - Remove alleged support for OS/2

  - Remove alleged support for BeOS

  - Remove alleged support for last-millennium Unixes

  - Require C90 compliance

  - Require POSIX.1 (1990) compliance on Unix

  - Require GNU make

* Bugs fixed:
 113075 support "nonnull" attribute
 159528 g_ptr_array_remove_range()
 307947 The check for growing stack pointer in configure can fail
 607016 docs should mention property notification order
 671557 Fun with integers and g_key_file_load_from_data()
 676761 don't use g_critical for a runtime error
 690525 g_file_replace_contents_async doesn't copy its @conten...
 691608 Support compilation with clang 3.2
 697585 g_variant_builder_add's doc example is leaking
 697828 g_hash_table_add() should return a boolean
 702862 gdbus-codegen : look for deps in default install path
 703522 Reference leak in GvariantBuilder documentation
 705902 g_get_current_dir() should check PWD env var and retur...
 708274 Added GObject Introspection annotations to genums.c
 710519 Portability schmortability
 710741 some mainloop instrumentation
 710983 Test failures on powerpc
 711047 Enable the build of the various test programs on Windo...
 711051 Add basic test for the GNotification gtk backend
 711088 gbacktrace: Don't close stderr when running gdb
 711103 gmessages: Add g_info macro for G_LOG_LEVEL_INFO
 711178 appinfo test problems
 711546 utf8: report allocation error
 711640 gdesktopappinfo: Rank Keywords matches higher than Gen...
 711751 Fix memory leaks in libglib tests
 711753 gthread-posix: Don't use gslice allocated GRecMutex
 711796 glib-tap.mk: fix to actually use the TAP driver
 711800 fix g_test_set_nonfatal_assertions()
 711801 giomodule: Allow overriding source directory gio modul...
 711805 gdbus-connection: Fix race condition in test
 711806 gtestdbus: Don't destroy GSource twice
 711807 gtestdbus: Properly close server connections
 711871 Broken and misleading configure check for growing stack
 712136 'O_CLOEXEC' undeclared (first use in this function)
 712148 Add system bus support to GTestDBus
 712171 gsettings.m4: @GSETTINGS_RULES@: Support srcdir != bui...
 712314 AIX port: splice(); major()/minor(); libtool library order
 712315 GSettings: More docs for deprecated _list_schemas()
 712393 gobject: Box GMappedFile
 712547 GSocketClient "event" not useful for determining resol...
 715164 Clang static analysis fixes
 719395 GPtrArray add g_ptr_array_insert
 719402 Crashes when startup
 719472 leak in generated proxy-side property-setter
 719687 fix or remove g_trap_object_ref
 719809 Signal connection ids are always > 0 if successful
 719837 gdbus-connection: Work around race in connection tests
 719884 Fix documentation typos in GTask and GCancellable examples
 719979 g_settings_get: check validity of format string
 720080 Truncating a GMemoryOutputStream to a larger size cause...
 720210 gdataset: Remove unused define
 720236 Allow clean simple use of g_test_trap_subprocess() 

* Translations updates:
 Italian
 Lithuanian
 Simplified Chinese
 Spanish


Overview of changes from GLib 2.39.0 to GLib 2.39.1
====================================================

 * GSettings fixes/improvements

   - GSettingsSchema API is now more powerful and consistent

   - new GSettingsSchemaKey API allows accessing metadata for keys:
     type, default value, range and the long-awaited support for summary
     and description

   - GSettingsSchemaSource gains support for listing schemas within a
     source.  Deprecate the global API that did this for the default
     source.

   - 'gsettings list-schemas' now works properly with --schemadir

   - deprecate a bunch of now-redundant functionality on GSettings

   - add API to GSettings for getting the default value of a key (as set
     by the sysadmin)

   - add API to GSettings for determining if the user has assigned a
     particular value to a key (ie: we are not just reading the default)

   - ignore qualified tags and attributes appearing in schema files

 * Applications/Actions

   - make GSimpleAction a bit more strict with respect to state changes
     that would violate the interface (ie: by changing the state type
     after construction)

   - throw an error when attempting to 'Describe' a non-existent action
     via D-Bus instead of returning a bogus description

   - throw an error when attempting to invoke unsupported methods on an
     Application (eg: 'Open' on an app that doesn't HANDLES_OPEN)
     instead of emitting a g_critical() in context of the app (which is
     not itself at fault for the errant call)

 * Appinfo

   - substantially rework GDesktopAppInfo to reduce the amount of disk
     accesses that are performed in common situations

   - add a new class: GAppInfoMonitor for discovering when applications
     are installed/removed

   - add a new g_desktop_app_info_search() API for searching for
     installed applications by name, keywords, etc.

 * GMarkup: add new G_MARKUP_IGNORE_QUALIFIED flag for skipping over
   "qualified" tags and attributes (those with a colon in the name, such
   as 'my:tag')

 * GDBus

   - ignore qualified tags, as above

   - GTestDBus: unset all D-Bus addresses (such as STARTER) to ensure
     that test programs don't pick them up

   - add new session_bus_run() convenience in the tests and use it

 * GRand: use real random data as a seed on win32 and use the
   timestamp/pid/uid fallback only on UNIX machines where we can't open
   '/dev/urandom'.  This may cause issues with older mingw32 releases
   due to a missing prototype for the rand_s() API.

 * Many win32 (and particularly MSVC) portability fixes.  Many
   additional tests are now runnable when building with MSVC.

 * Due to early testing of the (soon to land) GCleanup framework, a very
   large number of memory errors have been found and fixed (mostly in
   the testcases, but some in glib itself).

 * GIO:

   - some more seeking cleanups: particularly on GLocalFileInputStream

   - don't leave a .trashinfo file around if trashing a file fails

   - Add a request_certificate virtual method to GTlsInteraction

Translations updated:
 Assamese
 Galician
 Greek
 Spanish
 Tamil

Bugs fixed:
 635641 schema compiler should ignore unknown attributes
 637257 g_tls_client_connection_gnutls_retrieve_function needs to be able to block
 637956 GKeyfileSettingsBackend should ignore file deletions
 645453 keys from base schema missing from extended schema
 665634 g_dbus_node_info_new_for_xml() errors on unknown attributes in XML files
 668232 Unable to get description and summary for a key
 668233 Unable to determine if a key is set to the default / what the default value is
 680838 Need g_settings_schema_source_get_schemas()
 683017 API for accessing GSettings Schema metadata
 687185 org.gtk.Actions.Describe doesn't return an error for non-existing action names
 687202 If trashing fails, the ".trashinfo" file is not removed
 695558 The --schemadir option has no effect
 696424 GSimpleAction.state property is not right
 697348 GTestDBus should unset DBUS_STARTER_ADDRESS, DBUS_STARTER_BUS_TYPE
 710133 Emit backward compatible code with gdbus-codegen
 710691 glib-networking: locking during implicit handshake
 710738 GRand has lame fallback for Windows
 710859 Typo in gio docs
 710885 Two fixes for GApplication
 710962 error: 'F_DUPFD_CLOEXEC' undeclared (first use in this function)
 710964 Add g_hash_table_get_key_array()
 710991 test: g_debug messages shouldn't affect g_assert_expected_messages
 711016 g_settings_list_keys () segfaults for empty schemas
 711048 glocalfileinputstream.c allows skip past end of file
 711049 Fix build of GLib-GIO 2.39.x on Windows/MSVC
 711064 Adding child source to blocked source can cause a segfault
 711070 Copying a symlink over another one segfaults
 711099 gapplication test failure
 711520 GDesktopAppInfo: allow more than one level of legacy folder prefixes
 711556 Add GAppInfoMonitor
 711557 Add g_desktop_app_info_search()
 711600 trivial portability fix
 711632 The desktop-app-info test fails during make check
 711754 gmain: Fix use of uninitialized memory in sigaction structure
 711755 private: Use threading primitives correctly in private test
 711756 gthreadpool: Don't pass bad data to GThreadPool sorter
 711768 Fix memory leaks in libgmodule tests
 711775 utils: Don't free memory owned by glib in test
 711782 boxed: Fix double free in boxed unit tests
 711803 gsubprocess: Fix a number of leaks and a segfault
 711808 gtestdbus: Fix leak of GMainLoop 

Overview of changes from GLib 2.38.0 to GLib 2.39.0
====================================================

 * prep for the 2.40 series (version macros, docs index, etc.)

 * GNotification

   - new API for sending persistent notifications via the desktop shell

   - notifications persist when the application has quit and clicking on
     them can restart the application with an action (via
     DBusActivatable)

 * GSubprocess

   - new API for launching subprocesses

   - nice GIO integration like async functions, cancellability, etc.

   - a convenient communicate() API inspired by the same API in Python

   - related: the gspawn API now has a CLOEXEC flag for the created
     pipes for stdin/stdout/stderr

 * New gapplication(1) commandline tool

   - intended to be used with DBusActivatable apps

   - can be used for launching apps, opening files, invoking application
     actions and listing apps and actions

   - bash tab completion is supported

 * GDesktopAppInfo changes:

   - g_file_get_path() can implicitly cause a FUSE mount so don't call
     it until we know we need it (for an app that doesn't support URIs)

   - don't crash when trying to load from a keyfile with
     DBusActivatable=true

   - remove some dead code, refactor the search path handling a bit and
     do a large-scale whitespace cleanup (prep work for the pending
     desktop file index)

 * File monitors

   - fix broken handling of mount point monitoring

   - remove some strange use of GObject::constructor() from the base
     class and inotify backend

   - fix GFileMonitor to work in the non-default main context even when
     the main context is not running (or is blocked)

   - add internal private API for easily creating a file monitor in the
     GLib worker thread

 * GSettings

   - g_settings_list_children: only list viable schemas.  This fixes a
     longstanding issue where 'gsettings list-recursively' will crash
     when there are invalid schemas installed

   - don't accept invalid paths on g_settings_new_with_path, etc.

 * GIO

   - GFile now has a thumbnail::is-valid attribute to check if the
     thumbnail in thumbnail::path needs to be regenerated

   - GDBusProxy now has a flag to control autostarting of services at
     construction time

   - for GSeekable, properly introduce the concept of "resizable" vs.
     "fixed-sized" streams in the docs, explaining the expected
     semantics of the interface in each case

   - fix some cases in GMemoryOutputStream that were violating the above
     expectations (which may cause a slight API incompatibility)

   - clean up GCredentials code and add support for Hurd and Solaris

   - improve splicing by using different codepaths for the case where we
     have real _read_async() and _write_async() implementations on the
     stream vs. the case where they are internally emulated (via
     dispatching the sync variant of the call in a thread)

 * GKeyFile

   - fix a leak in g_key_file_get_(u)int64 when we fail to parse the
     value as an integer

   - add long-requested API g_key_file_save_to_file()

 * Portability improvements

   - avoid using O_DIRECTORY on platforms that don't have it

   - be careful about systems that define SOCK_CLOEXEC but don't
     actually support it (like Hurd)

   - only use SA_RESTART if it exists

 * Other small API changes/additions

   - a pair of functions to support matching strings for the type of
     search functionality that you'd expect to have with things like
     GtkSearchBar.  This will also be used by the desktop file index.

   - g_str_is_ascii() with obvious purpose

   - g_test_expect_message() no longer appears to allow you to catch
     G_LOG_ERROR messages

 * GMainContext/GSource

   - fix handling of overflowing the 'next source id' counter

   - g_source_remove() will now throw a critical in the case that you
     try to remove a non-existent source.  We expect that there is some
     code in the wild that will fall afoul of this new critical but
     considering that we now reuse source IDs, this code is already
     broken and should probably be fixed.

   - simplify handling of the 'current dispatching source' to not
     require use of a linked list

 * GObject

   - the long-broken (and leaky) pattern of destroying a just-allocated
     object from inside of a custom GObject::constructor is now
     officially completely illegal and will abort the program

 * Unicode: update to 6.3.0

 * Bug fixes

   - g_file_copy() now falls back to pathname queryinfo.  This should
     clear up the bugs with copying from some GVfs backends (afp,
     gphoto, archive, at least).

   - fix an out-of-bounds read in the xdgmime code

   - fix a typo in the /org/freedesktop/DBus path on the object manager
     client

   - skip emitting path_namespace='/' in match rules in order to
     workaround a bug in the D-Bus daemon and fix our own implementation
     (which shared exactly the same bug)

   - fix crashes on precondition violations for GParamSpec constructors

   - many other small fixups (see bug list)

  * Many documentation improvements

Bugs fixed:
 309224 g_key_file_save_to_file missing
 583321 QNX: no SA_RESTART
 661576 fix handling of constructors that destroy half-constructed objects
 672102 GSubprocess class
 684842 Seeks on GMemoryOutputStream don't have opaque semantics
 688492 Add a notification API
 691581 g_output_stream_real_splice_async doesn't use overriden read/write_async functions
 702516 gfileutils: Make -Werror=format-nonliteral happy
 704218 New gapplication(1) tool
 704593 g_setenv: on some systems (BSD, OSX…), setting a variable to NULL crashes the system
 704882 GLocalDirectoryMonitorClass mount_notify field is useless
 704887 file monitoring improvements
 705029 Support for Solaris credentials
 705688 g_settings_list_children: only list viable schemas
 706254 Afp backend cannot copy files
 707887 Attempting to create GObject Property with underscore prefix segfaults
 708042 gapplication: don't rely on cmdline being finalized immediately
 708265 add support for GNU/Hurd in GLib D-Bus Library
 708266 fix error code checks when SOCK_CLOEXEC is defined but not supported
 708529 xdgmime: valgrind warns about invalid reads
 708677 incorrect object path 'deskop' used in gio/gdbusobjectmanagerclient.c
 708714 Typo in docs of GLIB_VERSION_2_40 macro.
 708753 gdesktopappinfo: Call g_file_get_path() on demand
 708793 glib build fails with clang < 3.1: error: expected ';' after top level declarator
 708828 GDBusProxy: add the ability to call methods on non autostarted proxies
 708860 glib-2.38.0 doesn't build on Solaris 10
 708972 gnetworking.h in tarball screws up out-of-source builds
 709113 [PATCH] Main loop dispatch path has needless linked list
 709227 Update to unicode 6.3.0
 709301 goutputstream: Add clear warning about short writes to _write_bytes() and async version
 709326 GDesktopAppInfo crashes creating a DBusActivatable app without a filename
 709440 Fix overloading of "source" and "target" terminology in GBinding
 709615 Cannot use g_test_expect_message with g_error
 709753 Add helpers for string matches when using GtkSearchBar-like widget
 709898 Expose thumbnail validity in GFile attributes
 709966 Remove outdated documentation
 709994 Minor fix for HACKERS doc to direct hackers to proper help file
 709995 Obsolete makefile rules
 710002 G_MAXUINT may be assigned as duplicate source id
 710313 Memory leak in g_key_file_get_(u)int64 with invalid integer values
 710345 [Patches] Fix some redundant-decls
 710496 g_locale_to/from_utf8() doc updated.
 710625 g_file_error_from_errno: Remove unneeded breaks
 710666 Frame clock related bug fixes
 710724 gmain: Warn when g_source_remove() fails
 710726 Work around D-Bus bug with path_namespace='/' match rules

Translations:
 Assamese
 Brazilian Portuguese
 Indonesian
 Russian
 Tamil
 Traditional Chinese

What's new in Glib 2.38
========================

 * Application support

  - GIO now provides an implementation of Desktop Actions from the
    desktop entry specification

  - GApplication now implements the org.freedesktop.Application
    interface as per the desktop entry specification, allowing for
    standards-based D-Bus launching of GLib-based applications

  - GDesktopAppInfo now supports DBusActivatable as per the desktop
    entry specification, allowing GLib-based applications to use D-Bus
    to launch other applications

  - GApplication now has a "busy" flag that can be set on an application
    to allow the shell to show that it is busy

 * GObject

  - the private offset for a given class type is now always constant.
    This was done by reorganising the memory layout of instances so that
    the private data comes before the "official" pointer for the object
    (ie: at a negative offset).  Valgrind macros were added to mitigate
    any problems that this may have caused.

  - a new G_DEFINE_TYPE_WITH_PRIVATE has been added along with a
    generated function *_get_instance_private() that can now serve as an
    equally-performing alternative to ->priv pointers in instances
    (allowing memory savings)

  - new G_PRIVATE_FIELD, G_PRIVATE_FIELD_P and G_PRIVATE_OFFSET macros
    provide a convenient method of converting between named variables in
    private structures and their (now constant) offsets

  - installing properties on a GObjectClass must now be done from
    class_init.  It is no longer valid to install them after class_init
    has returned.

  - it is now possible to manually break a GObject property binding
    without destroying one of the objects involved

 * Icons

  - the requirements for implementing the GIcon interface have changed
    in order to make it possible to consume all implementations of GIcon
    with a finite number of cases

  - a new GBytesIcon type was added for an icon represented by an
    in-memory binary blob in a known image format (ideally png).

  - new APIs g_icon_serialize() and g_icon_deserialize() replace the old
    to/from_string APIs and will always work, irrespective of which
    types have been initialised in the calling process, allowing for a
    serialised GdkPixbuf to be deserialised in a process that doesn't
    have GdkPixbuf

  - support for icons has been added to GMenuModel using the new APIs

 * Actions and menus

  - GPropertyAction provides a convenient way of creating a stateful
    property corresponding to a property on a GObject, such as the
    "visible-child-name" property of a GtkStack

  - new API g_menu_remove_all()

  - we now have established rules about what is a "valid" action name
    and an API to check them

  - a new API for converting detailed action names to and from the
    split-out name and parameter value (as GVariant)

  - for backwards compatibility, invalid action names can still be used
    with most functions, but this is not recommended

 * Other GIO

  - GDBus now supports services that wish to handle some of all
    properties on an interface asynchronously, without requiring the
    service to reimplement the entire org.freedesktop.DBus.Properties
    interface

  - GFile now has a new _measure_disk_usage() (and async) API for
    recursively determining the amount of disk space used by a
    particular directory (akin to 'du').

  - asynchronous version of g_file_trash() and g_file_make_directory()
    have been added

 * Other new API

  - GRegex has a new function to query the maximum lookbehind length to
    allow for regexp matching on streams

  - GVariant has two new APIs for constructing strings that allow
    avoiding copies in some cases: g_variant_new_take_string() and
    g_variant_new_printf()

 * Testing

  - we can now generate TAP output

  - new support functions for simplifying the process of dealing with
    data files for srcdir != builddir and installed test cases

  - g_test_trap_subprocess() provides a portable alternative to
    g_test_trap_fork()

 * Other

  - GLib now builds on Android against the bionic C library

Overview of changes from GLib 2.37.93 to 2.38.0
================================================

* fix the documentation for GSourceFuncs

* fix compilation on OS X/ppc64

Bugs fixed: 708445, 647145

Translations updated:
 Danish
 French
 Portuguese
 Punjabi

Overview of changes from GLib 2.37.92 to 2.37.93
================================================

* a couple of bugfixes in the new g_file_measure_disk_usage() API

* updated Traditional Chinese translation

Overview of changes from GLib 2.37.7 to 2.37.92
===============================================

* new API g_file_measure_disk_usage() similar to du(1)

* minor fixes

* Translation updates:
 Assamese
 Belarusian
 Brazilian Portuguese
 Catalan
 Czech
 Galician
 German
 Hungarian
 Indonesian
 Italian
 Korean
 Korean
 Latvian
 Lithuanian
 Polish
 Serbian
 Slovenian
 Spanish

Overview of changes from GLib 2.37.6 to 2.37.7
==============================================

* GDateTime now supports %:z formatting variations
  for timezones. This is a GNU date extension.

* Bugs fixed:
 685387 Segfault with GObject.signal_handler_is_connected()...
 686786 g_socket_get_available_bytes() returns wrong value ...
 705027 GSocket GSource not threadsafe on Windows
 706469 Fix G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE documentation
 706706 Fix Gir annotations on g_loadable_icon_load_finish
 706888 gtype: fix a no-op assertion
 706958 configure.ac: fix atomic opts detection
 707092 "File Utilities" page for GLib documentation doesn'...
 707151 gdatetime: Extend the '%z' timezone format

* Translation updates:
 Catalan
 Hungarian
 Japanese
 Polish
 Slovak
 Tamil


Overview of changes from GLib 2.37.5 to 2.37.6
==============================================

* Tests using the g_test facilities can now generate TAP output

* Bugs fixed:
 680926 generic type fallback logic is broken for -symbolic
 684327 setting null icon to icon list
 689245 GSocket unable to reuse (address,port) on Mac OS X
 692125 Support TAP as GTest output format
 693335 build: fix dtrace-related warnings
 696633 gdbus-codegen trips over unicode chars when using python 3.x
 696970 Compiling 2.36.0 for win64 fails
 697185 GSocket – Allow specifying the multicast interface from...
 700268 Add support for using the clang analyzer
 701318 Add G_SPAWN_DEFAULT to GSpawnFlags
 701529 glib/tests/gdatetime: use UTC time in test_GDateTime_diff()
 701800 a new approach to reporting critical errors
 702674 g_date_time_new_utc crash
 704165 GLib.IOChannel read_unichar() fails
 705075 Simplify g_get_tmp_dir()
 705152 Race in glib/task.test
 705398 gtype: Fix typo in g_type_class_add_private() error message
 705570 Check ref_count in g_object_notify_by_pspec
 705600 Deprecate GSimpleActionGroup functions?

* Updated translations:
 Assamese
 Brazilian Portuguese
 Czech
 Dutch
 Galician
 Gujarati
 Hebrew
 Italian
 Lithuanian
 Marathi
 Norwegian bokmål
 Russian
 Slovenian
 Spanish
 Thai
 Traditional Chinese


Overview of changes from GLib 2.37.4 to 2.37.5
==============================================

* Implement the Desktop Action specification: In the case that the
  application is a GApplication and DBusActivatable, actions from the
  desktop file are translated into GActions that have been added to
  the  application with g_action_map_add_action().

* GPropertyAction is a new type of GAction that represents the value
  of a property on an object, and allows to change the value when
  activated.

* GNetworkMonitorNetlink can now handle default routes via a device.

* The gsettings tool now reports failure to write a key (e.g. because
  the key was locked down)

* Miscellaneous new api:
 - g_variant_new_printf
 - g_action_print_detailed_name
 - g_regex_get_max_lookbehind

* Bugs fixed:
 664444 Support additional application actions in .desktop files
 684123 glib build only tries -D_GNU_SOURCE if glibc is detected
 689794 support incremental matching
 699259 add org.freedesktop.Application support to GIO
 700460 rewrite tests to not rely on precise timing of timeouts
 701511 updates to various GSource types
 701609 gnetworkmonitornetlink: handle default route via device
 703270 add GPropertyAction
 704157 GAction: add function for printing detailed names
 704250 Doc: various fixes
 704267 regression gsourceclosure: segfault in gedit file chooser
 704322 glib-unix: fix handling of multiple signal source for the...
 704424 No error when failing to override a locked key
 704447 Fix build/use of g_child_watch_closure_callback on Windows
 704523 g_thread_create_full() can dereference NULL pointer
 704543 Add implementations for G_GNUC_*_IGNORE_DEPRECATIONS for ...
 704567 gdbusnameowning: Don't spew an error if we're releasing a...
 704585 libc printf can give mixed-case strings for NaN and Inf
 704587 FTBFS: statfs_result is undeclared for statvfs()
 704699 gmain: Reset signal handlers to default when source is
 704704 AI_NUMERICSERV cannot be used with ai_socktype = 0
 704873 inotify: don't assume mainloop is running
 704999 glib/convert.test crashing due to lack of iconv cache
 704931 GMenuModel: add annotations to virtual functions

* Translation updates:
 Assamese
 Czech
 German
 Gujarati
 Spanish
 Tamil


Overview of changes from GLib 2.37.3 to 2.37.4
==============================================

* Bugs fixed:
 701283 g_source_add_child_source() segfault
 702147 inconsistency of G_STRFUNC
 703191 new private macros interact poorly with versioning macros
 703254 Doc: various fixes
 703407 g_spawn_async() keeps child_pid_report_pipe open in child process
 703437 GDBusConnection: be more careful with async GetAll
 703478 Missing G_BEGIN/END_DECLS in gsettingsschema.h

* Translation updates:
 Catalan

Overview of changes from GLib 2.37.2 to 2.37.3
==============================================

* add a new API for instance private data: G_DEFINE_TYPE_WITH_PRIVATE

* fix timestamps in tarball to prevent automake from being required to
  build the unmodified source

* add new D-Bus API for async property handling

* add back fsync() on ext4 for g_file_set_contents() after it was
  discovered that despite statements in the ext4 documentation
  suggesting that this is safe, it is not safe.

* Translations:
 Italian
 Norwegian bokmål

* Bugs fixed:
 698375 - D-Bus async properties
 700350 - timestamp issue
 701560 - fsync issue (fixed again)
 700035 - new API for instance private data

Overview of changes from GLib 2.37.1 to 2.37.2
==============================================

* The GLib test utilities have grown some file-related APIs
  to support tests that can be used installed and uninstalled.

* Installing properties after class initialization is deprecated,
  and will trigger a warning.

* GApplication:
 - Support org.freedesktop.Application, including D-Bus activation
   from desktop files
 - Set prgname to appid for services

* Bugs fixed:
 549783 gtester lacks framework for tests with data files
 692848 Fix property example in gobject tutorial
 698018 Add an explicit g_binding_release()
 698614 GObject: prevent installing properties after init
 699259 add org.freedesktop.Application support to GIO
 699959 g_file_copy(): Ensure we create private files by default
 700123 Test failure: g_inet_socket_address_get_scope_id
 700725 GIcon: NULLify the `type' out param in the sync methods too
 701401 gtest: add function for testing for WINE
 701456 Error in gnome/glib/gio/tests/file.c
 701474 Error building glibmm due to extra comma in glib/gtestutils.h
 701560 various improvements for g_file_set_contents()
 701680 GFileEnumerator: Add some documentation about ordering
 701878 Check wakeup() before iteration(TRUE) doesn't block

* Translations:
 Assamese
 Czech
 Galician
 Gujarati
 Kannada
 Marathi
 Odia
 Polish
 Slovenian
 Spanish
 Telugu


Overview of changes from GLib 2.37.0 to 2.37.1
==============================================

 * add support for installed tests:
   https://live.gnome.org/GnomeGoals/InstalledTests

 * add a new g_test_trap_subprocess() that works on Windows as a
   replacement for the (now deprecated) g_test_trap_fork()

 * support for explicitly cancelling a gobject property binding

 * performance improvements for signal argument handling

 * stop using `quotes' in very many log messages generated by GLib, for
   favour of 'this style'.  This may cause testcases in other packages
   to fail if they were matching on the previous text.

 * improve manpages: add missing arguments and flags

Translations: 
 Aragonese
 Assamese
 Gujarati
 Hindi
 Kannada
 Norwegian bokmål
 Odia
 Slovenian
 Spanish
 Tamil
 Telugu

Bugs fixed:
 679683 replace g_test_trap_fork()
 694380 Improve signal argument collection performance
 695233 Strings require plural forms
 697849 spelling fixes in cross.xml and running.xml
 698877 GProxyAddressEnumerator calls g_network_address_parse_uri without port
 698981 [PATCH] test /gdbus/connection/large_message could hang forever
 699079 Prototype support for installed tests
 699485 [PATCH] tests/mappedfile: Also handle ENOMEM
 699493 SOCKS5 proxy code crashes if it cannot authenticate
 699500 gbitlock: fix this to not unconditionally use futex emulation
 699779 [PATCH] G_GNUC_FORMAT: documentation error
 700263 m4macros/glib-gettext.m4: Don't use AC_HEADER_STDC
 700714 [PATCH] gtestutils: Ensure test subprocesses don't dump core
 700746 Use 'dumb quotes' rather than `really dumb quotes'

Overview of changes fron GLib 2.36.0 to 2.37.0
==============================================

* The syntax for detailed action names has been documented,
  and a parser API for them is now provided

* GApplication has gained a busy state. This feature is intended for
  clients that want to signal a desktop shell their busy state, for
  instance because a long-running operation is pending.

* GLib can now be built with the bionic C library

* GIcon can now be serialized to a GVariant

* Bugs fixed:
 548353 Finish implementing GFile interface (mostly asynchron...
 645881 Full port of glib-2.28.1 onto Android-ARM
 665445 Glib mistakes nl_langinfo() from plibc for the real t...
 672018 Need API to set global application state (busy, count...
 687659 drop support for adding interfaces after class_init
 688820 GIcon is a bad interface
 688954 extend 'detailed action' syntax, provide parser
 689223 Fix compilation on Android with the bionic C library
 695156 Add support for arg0namespace matching in signal_subs...
 696108 gdbus-codegen: avoid warnings in generated code
 696629 fix sed(1) usage
 696652 GTask won't free its error member variable on finalize
 696857 GThreadedResolver: set an error if no records could b...
 696973 Compiling 2.36.0 for win64 fails in gdbusmessage.c
 697131 No --version
 697160 [PATCH] gmacros: Mark G_UNAVAILABLE() functions as de...
 697229 Custom Interface implementations will be broken with ...
 697250 Documentation glitch of G_DEFINE_TYPE_EXTENDED causes...
 697365 Fix usage of hasmntopt in gunixmounts.c
 697367 Remove warning on gio/gunixmounts.c
 697386 Except const argument with atomic is not lock free
 697595 g_main_context_unref unlocks a mutex twice
 697601 reduce GMenuModel D-Bus traffic
 697626 Allow posix threads to be used on w32
 697652 Help options generated even when help disabled
 697771 fix a typo of "fo" to "of" in building.xml
 697887 GVariant: fix transfer annotation
 697942 abicheck.sh fails on mips
 698056 rewrite g_object_new()
 698081 Pidgin hangs in g_spawn_command_line_sync
 698455 GVariant: add new g_variant_new_take_string() API
 698457 g_variant_get_data_as_bytes() always returns toplevel...
 698478 gactionmap: don't require GActionGroup
 698595 the valgrind/priv-before-instance bug
 698655 desktop-app-info test relies on true being in /usr/bin/
 698686 GUnixSocketAddress: fix construct parameter issue
 698716 Use of g_mem_set_vtable() breaks after gobject automa...
 698999 bytesicon: fix a memory leak
 699001 bytesicon: don't use g_object_unref() on GBytes
 699361 gio: fix small leak

* Translation updates:
 Assamese
 Gujarati
 Hungarian
 Italian
 Kannada
 Norwegian bokmål
 Polish
 Spanish
 Tamil


Overview of changes fron GLib 2.35.9 to 2.36.0
==============================================

This release contains only small bugfixes and translations updates.

 - g_file_copy(): fix bug where attributes were not applied properly to
   the destination file

 - fix some 'available since' annotations

 - fix gdbus-codegen to produce more pedantically-correct code

* Bugs fixed:
 696108 gdbus-codegen: avoid warnings in generated code
 696014 g_file_copy(): Ensure G_FILE_COPY_OVERWRITE preserves permissions

* Translations updated:
 Basque
 Czech
 Gujarati
 Hindi
 Hungarian
 Japanese
 Malayalam
 Marathi
 Odia
 Punjabi
 Russian
 Tadjik
 Tamil
 Telugu

Overview of changes from GLib 2.35.8 to 2.35.9
==============================================

This release drops the old codepage ABI from gutils.c. This is a
source-compatible change and only breaks ABI with respect to truly
ancient binaries (and those binaries are already broken for other
reasons).  This change only affects Windows.

* Bugs fixed:
 682896 glib doesn't build on mingw32
 693204 split up g_get_{hostname,username,realname,home_dir} etc.
 694181 Handle GNetworkAddress better in g_network_monitor_base_...
 694253 occasional /gdbus/unref-pending test failure
 694350 Add type names to gsignal warnings
 694757 Use separate GLIB_WARN_CFLAGS that can be overridden ext...
 568405 Which is the correct replacement for g_strncasecmp, if...
 630284 g_hash_table_get_keys docs
 659428 docs: Small clean-up of howto subsection headers
 675333 Cannot forget association in Open With dialog: program...
 694669 consider unicode corrigendum #9
 694843 g_base64_decode_step () produces invalid data
 695147 Don't use PATH_MAX as it's not guaranteed to be defined
 695191 Commit f641699 broke /appinfo/mime/api test case
 695339 Swapped msgid plural forms for translation
 695376 GDBusMethodInvocation leak and potential crash
 695425 Untranslatable message in gsettings-tool
 695887 Improvements to GObject API documentation
 695925 GUINT32/64_SWAP_LE_BE macros do not enclose val argume...
 696015 PATCH Add doc warning to g_base64_decode()

* Translation updates:
 Assamese
 Belarusian
 Brazilian Portuguese
 Catalan
 Catalan (Valencian)
 Danish
 French
 Galician
 German
 Greek
 Gujarati
 Italian
 Korean
 Latvian
 Lithuanian
 Polish
 Portuguese
 Punjabi
 Serbian
 Simplified Chinese
 Slovak
 Slovenian
 Spanish
 Thai
 Traditional Chinese
 Uyghur
 Vietnamese


Overview of changes from GLib 2.35.7 to 2.35.8
==============================================

This release contains one major change that may cause problems: type
modules are now never unloaded.  This is implemented by (effectively)
leaking the last reference on dynamic types.  Some testcases that check
for unloading of types have been observed to be broken by this change,
but we know of no actual cases of "real code" breaking.  Please report
any problems.

Other changes:
 * A couple of build fixes for Solaris
 * Fix signal emission for GDBusObjectManagerClient
 * annotations fixes
 * new API: g_dbus_address_escape_value()
 * GSocketClient: add proxy-resolver property
 * GSimpleProxyResolver: new simple GProxyResolver class
 * documentation fixes
 * gnetworkaddress: preserve IPv6 scope ID in IP literals

Bugs fixed:
 691105 Allow GSocketClient to override GProxyResolver for per client proxy settings.
 692827 configure test fails for arpa_nameser.h
 692829 new Btrfs support causes build failure on Solaris
 693285 GDBusObjectManagerClient: won't emit object-added|removed if name-owner arrives later
 693502 Cross-compiling documentation: typo (np -> no)
 693673 add g_dbus_address_escape_value()
 693694 gio: Fix annotations on g_[async_]initable_new() and friends 

Translations:
 Dutch
 Galician
 Polish
 Serbian

Overview of changes from GLib 2.35.6 to 2.35.7
==============================================

This is a quick follow-up release with a few bug fixes.

* Fix the build on systems with strict linkers by adding -pthread back
  to the LDFLAGS for a testcase.

* Re-enable native atomic operations on some buggy versions of clang
  that ship as part of the MacOS X SDK.

* Make G_IO_FLAG_IS_WRITEABLE an enum again (the #define broke bindings)

* a small docs fix

* Bugs fixed:
 657045
 636683
 682818
 693105

* Translations:
 Italian

Overview of changes from GLib 2.35.4 to 2.35.6
==============================================

* GUnixFdSource is a new way to add file descriptors
  to the mainloop

* g_source_set_ready_time lets you mark a source to become
  ready at a specified monotonic time

* The internal visibility handling of GLib has been reworked

* GFileMonitor will now automatically use fam instead of inotify
  if $HOME is on NFS

* The file monitor implementation can now be overridden with
  the GIO_USE_FILE_MONITOR environment variable

* Bugs fixed:
 570572 2 make check errors on
 592211 No monitoring over NFS mounts
 625552 wrong behaviour of GVolume GVolumeMonitor related func...
 657729 modernise GMainLoop
 658020 GSource for a single GPollFD
 678223 g_mutex_free
 682560 leak fixes
 682819 EINTR-harden all the things
 684404 When using g_network_address_address_enumerator_next()...
 686853 new GSource fd API
 688169 G_DISABLE_DEPRECATED doesn't cover deprecated/gthread....
 688681 build: Make .symbols file canonical on all platforms
 690118 Crash when closing last tab of a window using Ctrl-w
 691624 glib/gtester.c: missing include
 691812 gioinputstream - give task as callback_data not task_data
 691866 fails out of source build directory - gnetwork.h not f...
 692029 Add new API checking utility
 692034 Install an invalidation notifier for GClosure in g_sou...
 692058 Broken makefile for gio tests
 692079 build failure in gmarkup.c when using gcc 4.8 and buil...
 692201 inotify: fix a memleak
 692202 gfile: don't report completion twice on g_file_load_co...
 692229 Incorrect string formatters in a translation string
 692332 GNetworkMonitorNetlink: make the netlink socket cloexec
 692360 possibly non-threadsafe code in g_content_type_guess()?
 692404 tester: Use FD_CLOEXEC when creating pipes
 692408 nautilus SIGSEGV in g_file_info_get_size()
 692544 [PATCH] gfile: Ensure we create internal pipe with FD_C...
 692583 atomic get doesn't accept a const argument on architect...
 692618 Use g_timeout_add_seconds
 692815 Using g_hash_table_insert() when using a hash table as ...
 692865 Invalid docbook generated by gdbus-codegen
 692928 Document G_MENU_{ATTRIBUTE,LINK}_*

* Translation updates:
 Hebrew
 Kannada
 Lithuanian
 Norwegian bokmål
 Polish
 Serbian
 Slovenian
 Spanish
 Uyghur


Overview of changes from GLib 2.35.3 to 2.35.4
==============================================

* New features:
 - New API: g_get_num_processors
 - New API: g_application_command_line_get_stdin
 - New GFileMonitor flag: G_FILE_MONITOR_WATCH_HARD_LINKS
 - Parse more timezone offset formats
 - Better timezone support on Windows
 - Make GParamSpec constructors introspectable

* Removed or deprecated features:
 - Disallow adding interfaces after class_init

* Bug fixes:
 532815 gio + inotify support for hardlinks
 614930 add g_get_num_processors (), return the max concurrent...
 626497 Btrfs clone/reflink ioctl support in g_local_file_copy
 633117 glib fails stests if /etc/localtime is not properly set
 661767 merge/improve various bits of run-in-thread functionality
 668210 Add g_application_command_line_get_stdin()
 675856 Use GDbus via gobject-introspection instead dbus-python
 684103 make glib work with python3
 684723 run-assert-msg-test.sh fails
 686058 OpenBSD: disable ipv6_v4mapped test
 686128 GTimeZone should be able to parse POSIX format for...
 687223 cleverer GThreadPool management
 687659 drop support for adding interfaces after class_init
 687920 GCredentials should have an accessor for the process ID
 688681 build: Make .symbols file canonical on all platforms
 688829 Variable overflow in utils.c test on 32-bit machine
 689324 Variable scoping in gunixmounts.c
 689810 Include guard optimization
 690043 Broken link for gsettings tutorial: gnome-utils in...
 690084 gmarkup: Make GMarkupParseContext a boxed type
 690388 Check if CMSG_FIRSTHDR() returns NULL when there is...
 690538 gschema DTD is invalid
 690543 Add test coverage for testing in-tree DBus services...
 690670 local_command_line not introspectable/annotated
 690902 G_END_DECLS needs to be at the end of gutils.h
 690970 Unhelpful deprecation message for g_value_array_get_nth
 691001 building docs is broken on master branch
 691011 Automake-1.13 errors on obsolete AM_PROG_CC_STDC
 691077 gio-querymodules crashes with SIGSEGV
 691110 g_cond_wait() docs incomplete
 691489 Crash in Oscars 2013 page
 691558 Only check for .hidden files if standard::is-hidden...
 691608 Support compilation with clang 3.2

* Translation updates:
 Assamese
 Bulgarian
 Estonian
 Galician
 Greek
 Hebrew
 Norwegian bokmål
 Polish
 Slovak
 Slovenian
 Spanish
 Tamil


Overview of changes from GLib 2.35.2 to 2.35.3
==============================================

* This release contains an incompatible change to the g_get_home_dir()
 function. Previously, this function would effectively ignore the HOME
 environment variable and always return the value from /etc/password.
 As of this version, the HOME variable is used if it is set and the
 value from /etc/passwd is only used as a fallback.

* We now install a public "gnetworking.h" header that can be used to
 include the relevant OS-dependent networking headers. This does not
 really abstract away unix-vs-windows however; error codes, in
 particular, are incompatible.

* Bugs fixed in this release:
 142568 Allow $HOME to override passwd entry if the user really wants
 587806 The file selector should honor .hidden files
 602715 [GChecksum] Please add support for SHA512
 623187 provide some support for arbitrary setsockopt()s?
 629301 .goutputstream files left behind when cancelling I/O
 652650 Optimize GDBusMessage serialization
 664627 /gapplication/basic test intermittently fails: cmdline re-or...
 675516 Win32: Don't start a DBus server when built as static library
 679683 replace g_test_trap_fork()
 684145 Current Git sources fails to cross-compile for Windows in Li...
 686895 file-info: catch thumbnail files in large directory as well
 687092 IPv6 <-> IPv4 mismatch when subscribing to multicast (send)
 688180 GObject: Minor error in description of floating reference
 688319 gthread: add missing AVAILABLE_IN_2_32 annotations
 688377 configure: add missing square bracket in AS_IF for memmove
 688419 gtask: source_object arguments and return values not annota...
 688497 AppInfo: Add sufficient api to port gnome-session from Egg...
 688681 build: Make .symbols file canonical on all platforms
 688704 Add boxed GType for GThread
 688886 Improve the i18n documentation
 688931 GMemoryOutputStream: Add new _resizable() constructor usab...
 689037 need helper for creating a GFile from a remote commandline...
 689377 Fix a compiler warning in GDBus
 689538 Source object tag set too late in gsocketlistener
 689800 Treat lost+found directory as a hidden file
 689847 Add fast repeated typename -> GType resolver
 689982 Make GChecksum more fully introspectable
 690069 g_unix_open_pipe: Add missing F_SETFD
 690083 gfileenumerator: Add a g_file_enumerator_get_child method
 690163 Add a pre-configured gio/gnetworking.h for Visual C++ builds
 690346 Remove an unneeded escaping in NAMESER_COMPAT_INCLUDE
 690348 Fix g_type_add_class_private() name in g_warning

* Translation updates:
 Assamese
 Galician
 Hebrew
 Hindi
 Kannada
 Odia
 Polish
 Spanish


Overview of changes from GLib 2.35.1 to 2.35.2
==============================================

Note that the incompatible change to the ->constructed() vfunc that was
made in the last unstable release (2.35.1) has been reverted due to
causing regressions in applications.

A new incompatible change has been introduced in this version: it is no
longer permitted to add interfaces to a class after the first
instantiation (or more strictly: after g_type_class_ref()).  Bug #687659
is tracking this.

Two private symbols (g_menu_{attribute,link}_hash_iter_get_type) which
were accidentally exported have also been properly hidden.  This may
cause some tools to issue warnings about ABI mismatch.

The remaining changes should be relatively harmless: 

 * GIO now has kqueue support for GFileMonitor (BSDs, Mac OS)

 * New g_variant_new_from_bytes() API

 * UNIX signal sources now allow watching SIGUSR1 and SIGUSR2

 * Many pedantic cleanups to adhere to a higher level of -W use

 * GTask changes to avoid a deadlock

 * many cleanups/fixes for Windows

 * Boxing for GPollFD, GIOChannel, GBytes, GByteArray

 * Fix URL-encoding of trashed files

 * Many other docs and annotations fixes

Translations:

 Galician
 Gujarati
 Lithuanian
 Serbian
 Slovak
 Slovenian

Bugs closed:

 649302 Add support for GNU/FreeBSD
 668842 [GSocket] Add caching for the sender address in g_socket_receive_from()
 672924 Add annotations for g_filename_from_uri()
 673229 glib: Use Returns:, not @returns
 677062 (partial) GVariant: Make g_variant_new_from_bytes() public, add more GBytes API
 686185 g_date_time_format Transcoding Fails on OSX      
 686191 g_mutex_get_impl() should use g_atomic_pointer_get()
 686797 Box GPollFD to make it introspectable
 686810 [regression] Infinite wait in g_task_run_in_thread_sync()
 686822 possible dlopen()/dlclose() issue with automatic g_type_init()
 686839 mkinstalldirs: Move to glib-mkinstalldirs
 686895 file-info: catch thumbnail files in large directory as well
 686898 g_unix_signal_source_new: Allow SIGUSR1 and SIGUSR2
 686920 gdbus: Allow GDBusObjectManagerClient to work on peer connections
 686921 Remove some of the repetition from gio/tests/Makefile.am
 687075 g_spawn_sync diagnostic incorrectly complains about SIGCHLD
 687089 g_dbus_connection_export_menu_model(): fix a crash
 687098 Repeated g_timeout_add* use can lead to guint overflow
 687385 Add some stricter CFLAGS, fix up the code
 687441 ABI break in master: g_menu_attribute_hash_iter_get_type, g_menu_link_hash_iter_get_type removed
 687516 typo in string: KB should be kB
 687540 In Trash folder, Nautilus misinterprets "\n" in filename as a line break
 687541 GSignalQuery param_types field needs array annotation
 687600 gfileutils.c performs invalid cast of (varargs) open to non-vararg type
 687698 plural forms needed
 687700 ending spaces
 687742 Add support for internal linkage to glib-compile-resources
 687801 tests/buffered-input-stream: Fix size of parameter passed
 688109 win32 warning/error fixes
 688255 'make check' regressed in 138f4c1 because GMarkup error messages changed
 688338 [PATCH] gobject/gtype.c: Fix spelling of »exceed«
 688370 GDBusError documentation improvement for client-side
 688378 g_socket_join_multicast_group not working
 688518 gio-kqueue: use O_EVTONLY on MacOS



Overview of changes from GLib 2.34.0 to 2.35.1
==============================================

These two changes in particular may be slightly incompatible.  Please
give feedback if they cause trouble:

  * Signal handlers connected with g_signal_connect_object() are now
    automatically disconnected on target object destruction

  * The ->constructed vfunc is now called after all properties are set

The remaining changes should not cause problems.

  * g_type_init() is no longer necessary and has been deprecated

  * GTask (the new GAsyncResult implementation) has landed 

  * GLib version macros updated

  * Update to Unicode 6.2

  * Thread safety fixes for GFileMonitor in non-default main contexts

  * GTimeZone support for old-format zoneinfo database (as on Mac OS)

  * g_settings_bind() now works with non-canonical property names

  * Fix crashes related to NULL connection passed to
    GBusNameVanishedCallback and document this situation

* Bugs fixed:
 118536 Make g_signal_connect_object'ed handlers disconnect when the data object is destroyed
 661767 merge/improve various bits of run-in-thread functionality
 682950 GFileMonitor crashing on high event count when running in different thread
 683642 Missing g_content_type_get_symbolic_icon
 684882 Gsettings should spaw a warning when binding against a low_underscored_property
 684909 codegen: Explicitly close output
 684912 Update to Unicode 6.2
 685037 g_strcmp0: Returns shall include values less and greater than zero
 685069 Leak in glib-compile-resources
 685208 missing g_return_if_fail
 685608 [Patch] Port gio tests from pygobject to pygi
 685697 Documentation typo in g_dbus_interface_skeleton_has_connection()
 685733 Call ->constructed() after all properties are set
 685787 gtestdbus: correct documentation typos
 685995 Crash in g_menu_exporter_name_vanished
 686091 Invalid reads in g_bytes_unref_to_data
 686119 dtrace, gobject_probes.d, the last three probes - semicolon missing
 686161 Deprecate g_type_init()
 686231 GBusNameVanishedCallback: document NULL connection
 686458 slightly increase poll duration in test_timed_wait 

* Translations updated
  Catalan (Valencian)
  Czech
  Danish
  Italian
  Lithuanian
  Norwegian bokmål
  Slovenian

Overview of changes from GLib 2.33.14 to 2.34.0
===============================================

* Bug fixes:
 654239 g_type_init()'s docs have no statement about how to...
 674620 Update GSettings migration guide for intltool updates
 676034 Fix doc annotation for g_ptr_array_ref()
 684278 Fix GIO build on Windows

* Translation updates:
 Brazilian Portuguese
 British English
 Bulgarian
 Catalan
 Galician
 German
 Hebrew
 Hindi
 Hungarian
 Kannada
 Latvian
 Marathi
 Spanish
 Telugu


Overview of changes from GLib 2.33.12 to 2.33.14
================================================

 * CVE-2012-3524: don't run dbus-launch from setuid binaries

 * g_content_type_get_generic_icon_name():
     new API for getting the icon name for a mime type

 * Introspection fixes:
  - GDBusConnection nullability fixes
  - give a box type to GTimeZone

 * Drop GVFS_INOTIFY_DIAG

 * Add a new "Writing GLib Applications" section to the reference
   documentation with general info on security, threads, etc.

 * gwin32mount.c: Fix syntax error

 * gresource tests: srcdir != builddir fixes

 * tests/gvariant: Fix test on big endian architectures

 * Fix regression in g_shell_parse_argv()

Bugs fixed:
 562907 g_shell_parse_argv() mishandles # (hash)
 683167 g_time_zone_new not introspectable
 683384 /gvariant/checksum-basic failure on big endian machines
 683641 Typo in gwin32mount.c
 683744 have a way to get the generic icon name for a mime type

Translation updates:
 Assamese
 Belarusian
 British English
 Czech
 Danish
 French
 Galician
 German
 Greek
 Hebrew
 Indonesian
 Indonesian
 Korean
 Lithuanian
 Marathi
 Marathi
 Polish
 Portuguese
 Punjabi
 Russian
 Serbian
 Slovenian
 Traditional Chinese

Overview of changes from GLib 2.33.10 to 2.33.12
================================================

* Add a G_DEFINE_QUARK macro

* Add symbolic icon support to drive, volume, and mount, file
  and content types

* Add API to allow thread-safe access to the same qdata item

* Bugs fixed:
 562907 g_shell_parse_argv() mishandles # (hash)
 627240 add G_DEFINE_QUARK
 672329 memory leaks in gutils.c and glib tests
 673012 Stable byte-level specification for normal form
 674805 gdbusproxy async test is broken
 679835 gvariant format string parsing (and assertions)...
 682075 gdbus: Fix double free and use after free of ob...
 682101 Provide a way to get a symbolic icon for a device
 682222 test_method_calls_on_proxy: assertion failed (e...
 682284 mount-op: use gint64 instead of guint64 for tim...
 682386 "make check" fails due to sys/resource.h not be...
 682560 leak fixes
 682586 gsettings-tool: make list-recursively really re...
 682819 EINTR-harden all the things
 682833 Handle EINTR for open()
 682849 drop the global lock for g_object_weak_ref
 682965 gdbus-tool: Check return value of strrchr()
 683088 gdbus-codegen: fix error when wrong interface n...
        Fix the build with gtk-doc-stub
        Don't crash if set_app_info is called before ad...

* Translation updates
 Assamese
 Galician
 Greek
 Indonesian
 Japanese
 Latvian
 Lithuanian
 Norwegian bokmål
 Polish
 Portuguese
 Punjabi
 Russian
 Spanish
 Traditional Chinese
 Vietnamese


Overview of changes from GLib 2.33.8 to 2.33.10
===============================================

* New GTest API for testcases where log output is expected:
  g_test_expect_message()

* GMenuItem now has 'get' accessors and a construct-from-GMenuModel API

* GVariant now has a function to check a format-string for type
  compatibility

* win32: We now use overlapped IO to support multiple asynchronous
  operations (ie: reading and writing) at the same time.

* GMappedFile: Add g_mapped_file_get_bytes()

* The problems with g_file_make_directory_with_parents() should be
  resolved.

* The long-standing issues with placeholder generation of manpages are
  now resolved.

* gtlscertificate: Add GBytes based certificate and private-key props

* build: Switch back to using AS_IF for conditionals

* test coverage improvements, documentation improvements, leak fixes

* Bugs fixed
 326931 Better docs for G_GNUC_*
 550433 g_test_init doesn't recognize --help
 600751 GCompletion should better document if and how items memory is managed
 628193 Miscellaneous string fixes
 637460 man glib-genmarshal is hard to use
 674483 broken configure results when cross-compiling with gcc >= 4.5
 677065 GMappedFile: Add g_mapped_file_get_bytes()
 679288 win32: use overlapped events for streams
 679556 it's hard to use gtest when g_warning() is expected
 680823 g_file_make_directory_with_parents: Fix error propagation
 681319 gtlscertificate: Add certificate-bytes and private-key-bytes props
 681336 man pages not built if --enable-gtk-doc not specified
 681413 build: Switch back to using AS_IF for conditionals
 681501 gmem: array only partially filled with memcpy
 681854 Documentation fix for Howto compile a program with glib
 682025 Documentation correction
 682067 Fix problems with CLEANFILES and automake-1.11.1 

* Translations updated:
 Lithuanian
 Spanish
 Galician
 Telugu
 Serbian
 Assamese
 Marathi
 Indonesian
 Traditional Chinese

Overview of changes from GLib 2.33.6 to 2.33.8
==============================================

* GIO now has a g_file_delete_async function

* The defaults for GThreadPools max_unused_threads
  and max_idle_time values have been changed to
  2 and 15*1000, respectively.

* Bugs fixed:
 661767 merge/improve various bits of run-in-thread functionality
 680074 undefined symbol "get_C_locale"
 680121 g_cancellable_source_new: don't use a file descriptor
 680148 gthread: check for definition of PR_SET_NAME
 680310 Sorting of access points by strengh not working
 680704 g_utf8_strup() crash
 68076a0 GFile: Add g_file_delete_async()
 680787 Add .dir-locals.el to tell Emacs users not to use tabs...
 680823 g_file_make_directory_with_parents: Fix error propagation
 680994 STATIC_ASSERT in GDBusError docs don't have much utility
 681116 gtlscertificate: Add g_tls_certificate_equal() function
 681118 gtlsdatabase: Don't complain if no callbacks for async...
 669331 try to get gio tests working a little better on win32
 674314 Make gtk-doc not a hard dependency of GLib
 674800 gclosure: generic marshaller leaks return value
 675524 gsocket: FIONREAD undeclared (needs sys/filio.h)
 679509 use after free in g_dbus_action_group_describe_all_done()
 679996 gobject docs minor cleanup
 680459 Extra newline char in local implementation of g_applic...
 680505 object_path memory leak in gdbusobjectproxy.c
 680831 Deprecate and remove g_slice_[sg]et_config.*
 680912 gchecksum: Add g_compute_checksum_for_bytes()
 681151 checksum: Use functions instead of macros when buildin...
 681158 gtlscertificate: Don't confuse certificate and public ...

* Translation updates:
 Galician
 German
 Gujarati
 Hebrew
 Norwegian bokmål
 Serbian
 Slovenian


Overview of changes from GLib 2.33.4 to 2.33.6
==============================================

* GAsyncInitable: partially revert the init_finish changes,
  some applications were found to rely on behaviour that
  was broken by these changes

* Bugs fixed:
 679617 win32: fix g_get_environ()
 679968 Add some annotations to GBytes, GVariantType...
 680111 GIOScheduler assumes GCancellable "cancelled...

* Translation updates:
 Spanish

Overview of changes from GLib 2.33.3 to 2.33.4
==============================================

* GMainContext: the source list has been reorganzied to
  avoid O(n) behaviour

* GRegex: Update included PCRE to 8.31 and expose new
  functionality in 8.x versions of PCRE

* GMountOperation gained a ::show-unmount-progress signal
  which provides information about slow unmount operations

* Bugs fixed:
 616892 gio: Add a boxed type for GFileAttributeMatcher
 619329 g_source_attach() O(n) in number of sources
 639771 g_dir_read_name() can also return NULL on error
 661767 merge/improve various bits of run-in-thread fun...
 667375 GAsyncInitable subclassing (and async subclassi...
 671545 Constify collect and lcopy strings in GTypeValu...
 674452 SEGFAULT in gio contenttype test
 674898 Deal with GLIB_VERSION_MIN_REQUIRED/MAX_ALLOWED...
 675504 Fix up GObject interface documentation
 677064 GString: Tweak documentation, add g_string_free...
 677578 error in PCRE error code conversion
 677579 update GRegexError for newer PCRE error codes
 678066 gdbus codegen does not work with python3
 678273 unicode othercasing is wrong in gregex
 678576 GIOScheduler performance enhancements
 678758 GTlsInteraction unlocks an unlocked mutex
 678808 GTestDBus issues
 678881 Test failures in /socket/timed_wait in some cas...
 678941 /contenttype/guess test case failure
 678944 gio returns the wrong default applications for ...
 678949 wrong definition of ulong_bool for 64 bit big e...
 678959 /mainloop/timeouts race condition: assertion fa...
 679193 update included pcre to 8.31
 679258 The 'Since' tag for G_SOURCE_CONTINUE and G_SOU...
 679473 Don't generate invalid property names
 679691 Add g_spawn_check_exit_status()
 679671 GDBusNodeInfo: the XML string must contain exac...
 676111 mount-operation: add show-unmount-progress signal
 679691 win32: fix build g_spawn_check_exit_status() wi...
 679813 Documentation bug on http://developer.gnome.org...

* Translation updates:
 Assamese
 Belarusian
 Bulgarian
 Galician
 Greek
 Norwegian bokmål
 Polish
 Spanish
 Traditional Chinese
 Vietnamese


Overview of changes from GLib 2.33.2 to 2.33.3
==============================================

This release contains mostly bugfixes, cleanups and performance
improvements (including many fixes contributed by Colin on the advice of
Coverity).  There are a few notable externally-visible changes:

* Thumbnails are now in XDG_CACHE_HOME

* new GDBus API: per-thread g_dbus_connection_get_last_serial()

* GUnixOutputStream now has a can_poll() implementation

* New deep copy APIs for G(S)List: g_(s)list_copy_deep

* Bugs fixed:
 518309 Incorrect data*dir path in glib-gettextize output
 566994 Safer passing of -framework flag
 672889 GLib.utf8_validate does segfault
 673253 Not strict enough autconf test for libelf
 675024 adds g_list_copy_deep() and g_slist_copy_deep
 675168 prepare for thumbnails to move to XDG_CACHE_HOME
 675966 gresolver: More robust parsing of DNS responses
 676594 [Patch] fix g_reload_user_special_dirs_cache
 676825 Implement g_dbus_connection_get_last_serial ()
 677235 Clarify the comment at the top of gmarshal.list
 677527 OS X: gthread/spawn-async selftest failure
 677718 GDBusProxy: treat org.freedesktop.systemd1.Masked error as non-fatal
 677770 GUnixOutputStream does not implement can_poll
 677782 Install bash completion files in /usr/share
 677817 g_key_file_to_data adds extra blank lines in some cases
 677952 Missing annotation for GDBusConnection signal "closed"
 678052 g_wakeup_acknowledge is called too often.
 678273 unicode othercasing is wrong in gregex
 678333 gdbus-codegen code causes warnings under -Wfloat-equal

* Translations updated:
 Arabic
 Assamese
 Galecian
 Greek
 Spanish
 Telugu

Overview of changes from GLib 2.33.1 to 2.33.2
==============================================

* GLIB_VERSION_MIN_REQUIRED now defaults to the current stable version

* GIO input and output stream classes have grown GBytes-based methods

* GApplication now has hooks to register D-Bus objects before the bus
  name is taken

* Bugs fixed:
 605976 add g_type_ensure(), to ensure that a type has...
 660851 Breakage of code due to changes in the GThread...
 666386 Empathy doesn't open Redirect URI with particu...
 671139 need (transfer async) for io stream buffers
 672329 memory leaks in gutils.c and glib tests
 672548 g_utf8_validate: @str shouldn't end up annotat...
 674111 Provide an accessor for MimeType desktop entry...
 674483 broken configure results when cross-compiling ...
 674634 Add g_clear_pointer()
 674777 What's the (transfer) of g_variant_lookup()?
 675309 gkeyfile: Fix annotations for g_key_file_load_...
 675446 gfile: Plug memory leak in g_file_make_directo...
 675509 add extra dbus hooks
 675832 Incomplete gsettings bash auto-completion
 676208 The tmpl parameter to g_file_new_tmp can be NULL
 676265 GNetworkMonitor leaks a lot of memory
 676277 Document that g_app_info_create_from_commandli...
 676397 g_environ_* should work with NULL envp
 676398 g_spawn_* should take PATH from the passed env...
 676478 Broken gzip decoding
 676594 [Patch] fix g_reload_user_special_dirs_cache
 676816 Add more GLIB_AVAILABLE_IN_*
 676937 Document notify signal deduplication with free...

* Translation updates:
 Czech
 French
 German
 Greek
 Japanese
 Russian
 Slovenian
 Spanish


Overview of changes from GLib 2.32.1 to 2.33.1
==============================================

* GApplication
 - can now have a NULL application ID
 - add accessors for determining dbus connection and object path

* g_clear_object: fix warnings when using it on C++ (due to lack of
  ability to implicitly cast void*)
* add g_clear_pointer as a generic form of g_clear_object

* GDBus:
 - add our own implementation of the message bus for use on Windows only
 - fix up a few bugs that use of this bus uncovered in GDBus
 - escape nonce files in dbus addressess (think 'c:\')
 - support initial underscores in dbus codegen namespace (for private)
 - add GTestDBus for bringing up a session bus for testing purposes
 - gdbus-codegen: Avoid warnings in generated code
 - GDBusAuthObserver: Add a way to control what authentication mechanisms to use
 - 

* Fix misdetection of GNUstep as Cocoa (for the MacOS GSettings backend)

* make sure configure fails if AC_CHECK_ALIGNOF cannot detect the alignment

* GAppInfo
 - overwrite the DISPLAY only if it is set in the launch context
 - add accessor for StartupWMClass

* glib/tests/date: force US locale running the GDateTime tests

* Resources:
 - fix broken use of GVDB on big endian machines
 - set a 'display name' so that pretty file names appear in Gtk CSS
   warning messages

* GMainContext:
 - block child sources when blocking the parent
 - introduce more testcases for child sources

* GResolver: add support for MX, TXT, NS and SOA records

* GSocketControlMessage: Don't warn about unknown messages

* GIO:
 - implement GSeekable for the data and buffered stream classes
 - implement GPollable for many more classes as well
 - fix GConverterInputStream infinite loop when fill_buffer returns an error
 - fileinfo: document the correct type for trash::orig-path

* test coverage improvements and general fixes

* new 2.34 stuff: version macros, docs index section, etc.

* Build:
 - add --disable-modular-tests build option
 - don't require host binaries if tests are not enabled for cross-builds

* Translations updated
 Brazilian Portuguese
 Bulgarian
 Czech
 French
 Galician
 German
 Hebrew
 Hindi
 Italian
 Norwegian bokmål
 Polish
 Russian
 Russian
 Serbian
 Simplified Chinese
 Slovenian
 Spanish
 Telugu

Overview of changes from GLib 2.32.0 to 2.32.1
==============================================

* Bugs fixed:
 670254 glib-2.30.2: Fails /GDateTime/new_from_unix test
 672541 glib-compile-resources prepends --sourcedir to absolute paths
 673139 URL to mailing lists in README incorrect
 673174 g_input_stream_read[_finish]: document returning 0 on EOF
 673191 glib/gchecksum.c warning: dereferencing type-punned pointer...
 673216 [W32] gtestutils does not use path separators consistently
 673439 Properly deprecate g_value_{set,get}_char
 673612 Fails to decode dictionaries wrapped in two layers of array
 673803 gclosure: Support return values of GVariants
 669285 glib/tests/markup-parse fails under non-english locale
 673911 gio-2.0.pc lists full path to executables, breaking cross com..
 673762 gnextstepsettingsbackend.c:343: error: parse error before 'in'

* Updated translations:
 Belarusian
 British English
 Bulgarian
 Catalan
 Czech
 French
 German
 Hebrew
 Hindi
 Hungarian
 Italian
 Japanese
 Kannada
 Latvian
 Lithuanian
 Marathi
 Norwegian bokmål
 Odia
 Polish
 Serbian
 Slovenian
 Spanish
 Swedish
 Telugu


Overview of changes from GLib 2.31.22 to 2.32.0
===============================================

* Bugs fixed:
 671988 Quickly registering / unregistering objects on bus...
 672095 glib needs stable sort function
 672406 glib/tests/include.c fails to build on FreeBSD

* Updated translations:
 Telugu


Overview of changes from GLib 2.31.20 to 2.31.22
================================================

* Bugs fixed:
 531901 Use __builtin_bswap* for GUINT*_SWAP_LE_BE if building...
 653167 Out of tree build is broken on windows
 668973 Test /gvariant/parser fails on Solaris 10
 669797 gvfs now lists its fuse mounts
 670846 deadlock: GStreamer-WARNING **: wrong STREAM_LOCK count 0
 671664 gio-querymodules: unlink instead of writing empty cache
 671676 Glib can't be cross-compiled any more after merge of...
 671918 gnome-shell is inaccessible unless started while an AT...
 671942 GSocketMsgFlags: annotate as a flags
 671997 Unix signal handling assumes that volatile 1-byte writes...
 672013 GSimpleAsyncResult: support reliable cancellation
 672026 default log output should include pid and/or prgname
 672095 glib needs stable sort function
 672201 G_SPAWN_SEARCH_PATH should continue on ENODEV and ETIMEDOUT
 672239 request NO_REPLY from g_dbus_connection_call() with no as...
 672249 gdbusproxy leaks asyncresult in an error case instead of...

* Translation updates:
 Assamese
 British English
 Catalan
 Catalan (Valencian)
 Danish
 Esperanto
 Finnish
 French
 German
 Hungarian
 Korean
 Lithuanian
 Norwegian bokmål
 Polish
 Portuguese
 Russian
 Traditional Chinese


Overview of changes from GLib 2.31.18 to 2.31.20
================================================

* Update to Unicode 6.1

* Update PCRE to 8.30

* Deprecations are now versioned, and new API is
  marked with the version it was introduced.
  Use these with GLIB_VERSION_{MIN,MAX}_REQUIRED

* The performance of signal emissions has been
  improved for simple cases

* Bugs fixed:
 529806 Cannot build in 64-bit Mac OS X due to libiconv
 580873 Documentation of register type functions incomplete
 592666 Document how to unset an attribute
 597785 g_type_class_add_private code snippet is a bad example
 621368 glib-2.24.1: FAIL: run-assert-msg-test.sh when updating...
 622149 --disable-regex breaks glib2 build
 639873 GBinding: Crash when binding two properties on the same...
 640202 For GLIB v. 2.23.6 and above: impossibility to build mu...
 668295 Need a way to classify GVolume instances
 669670 gasyncqueue: don't use deprecated g_cond_timed_wait()
 670542 Add version information for deprecations
 670557 gvaluetransform: Fix an infinite loop with GFlagsValue...
 670721 global variable for signal ID should be hidden
 670751 IceWM build fails due to the G_DEPRECATED_FOR macro
 670909 g_dbus_connection_call leaks when it receives an error...
 670922 Include path to gdbus-codegen in the pkgconfig file
 670969 GSequence lookup may fail if there was no sort prior to...
 671025 Constants and identifiers starting with a number are no...
 671270 make distclean failures
 671281 glib-compile-resources.xml is missing from the dist tar...

* Translation updates:
 Basque
 Belarusian
 Brazilian Portuguese
 Bulgarian
 Galician
 Hebrew
 Lithuanian
 Persian
 Punjabi
 Serbian
 Simplified Chinese
 Slovenian
 Telugu
 Traditional Chinese
 Uyghur
 Vietnamese


Overview of changes from GLib 2.31.16 to 2.31.18
================================================

* GDBusProxy has now a flag, G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
  which can be set to make GDBus automatically reload
  changed properties even if the propertychanged signal
  does not contain the new values.

* GApplication puts non-unique applications on the bus

* GApplication now has g_application_quit()

* g_async_queue_timed_pop has been deprecated in favor of
  the new g_async_queue_timeout_pop, which uses relative
  delays in microseconds instead of a GTimeVal.

* a huge number of API documentation fixes

* Bugs fixed:
 647986 put non-unique apps on D-Bus
 658484 vpn connection vs NetworkSecretDialog
 664237 GDateTime falls back to UTC if TZ is set
 669329 gthread-win32: update for g_get_monotonic_time() changes
 669330 glocalfile: fix error code when opening a directory on win32
 669372 glib/tests memory leaks.
 669412 mem leak in g_environ_unsetenv
 669538 Fix compilation of glib-compile-resources.c on Windows
 669544 gdbus-codegen example introspection XML is not complete
 669595 glib-mkenums: fix handling of forward enum declarations
 669670 gasyncqueue: don't use deprecated g_cond_timed_wait()
 669671 gobject: use #pragmas to avoid deprecated function warnings
 669689 Retrieve cwd and environ in local GApplicationCommandLine
 669810 socket/win32: flush pending read before signaling HUP
 669865 g_regex_fetch()
 670085 memory leak in g_output_stream_write_async
 670138 gbytes.h is missing the G_BEGIN/END_DECL guards
 670485 Simplify session API (shared bug with gtk+)

* Updated translations:
 Belarusian
 Danish
 Galician
 Serbian
 Telugu
 Hebrew


Overview of changes from GLib 2.31.14 to 2.31.16
================================================

* GResource:
 - The resource compiler can now convert pngs into
   pixel data that can be used without parsing at runtime
   (requires gdk-pixbuf-pixdata to be present)

* Bugs fixed:
 669123 resource compiler: failing to-pixdata should...
 669173 resource: fix xml preprocess entity handling
 669224 Cross-compilation broken by data-to-c
 669253 gsettings set buggy on array values
 669334 fix memory leak in bookmark file parser

* Translation updates:
 Norwegian bokmål
 Spanish


Overview of changes from GLib 2.31.12 to 2.31.14
================================================

* GResource:
 - GLib now includes a commandline utility, gresource,
   to explore resources in ELF files
 - The resource compiler can now optionally strip
   ignorable whitespace from XML resources
 - The resource compiler can now generate build dependencies
 - The resource compiler will now autoselect output formats

* GApplication:
 - The menu markup parser API has been dropped, the
   menu XML support lives in GTK+ now

* GValueArray has been deprecated

* Bugs fixed:
 626258 N-ary Trees - 'nodes' can be inserted before and after...
 634232 Core Dump / Aborted using g_key_file_to_data
 639099 schema compiler chokes on valid schema
 667228 Deprecate GValueArray
 667243 Add an element clear function to GArray
 667929 glib-compile-resources: xml resources doesn't need to...
 668250 g_date_time_format() produces a non-UTF8 string
 668468 'IP_ADD_SOURCE_MEMBERSHIP' undeclared
 668532 resources: add dependency generator to the resource compiler
 668539 resources: compiler should autoselect output format...
 668561 gresource-tool not internationalized
 668572 glib_cv_g_atomic_lock_free config.cache setting not honored...
 668650 GRealArray->clear_func should be initialized
 668756 GKeyFile: allow loading from empty strings
 668857 fix couple of typos in comments
 669024 goption: implement platform_get_argv0() for OpenBSD

* Updated translations:
 Galician
 Norwegian bokmål
 Spanish
 Traditional Chinese

Overview of changes from GLib 2.31.10 to 2.31.12
================================================

* GApplication:
 - Drop support for exporting menus - this functionality
   will be provided in GtkApplication
 - Add a way to create actions that change settings

* Bugs fixed:
 629503 Add async versions of g_unix_connection_{receive,send}_credentials
 656301 glib-compile-schemas should not create an empty file
 668071 mingw-gcc build fails on gio/gsocket.[c|h]
 668118 the big appmenu switcheroo
 668158 base64 encode and line termination
 668163 GDBusConnection: note that exit-on-close is sometimes TRUE
 668269 gsignal: add g_signal_handlers_disconnect_by_data
 668279 create GAction from GSettings

* Translation updates:
 Norwegian bokmål


Overview of changes from GLib 2.31.8 to 2.31.10
===============================================

* GResource:
 - A new facility to allow linking data files into binaries
   and make them available as resources
 - Resources are compiled using glib-compile-resources
 - GIO supports resource:/// uris to access resources

* Bugs fixed:
 619126 Missing dependency libs
 658315 g_key_file_get_keys() should set length to 0...
 660371 is it ever valid to have 0 as a GError domain?
 666700 Add some missing (allow-none) annotations
 667375 GAsyncInitable subclassing (and async subclassing...
 667447 Missing many introspection annotations
 667790 Protect call to pthread_condattr_setclock with define
 667938 wrong gtypes generated for empty flags enums

* Translation updates:
 Hebrew
 Spanish


Overview of changes from GLib 2.31.6 to 2.31.8
==============================================

* GObject:
 - The type checks for overriding properties have been loosened.
   In particular, it is now possible to add the CONSTRUCT flag
   to an overridden property
 - GWeakRef is a new API for weak references; unlike g_object_weak_ref
   and g_object_add_weak_pointer, it is thread-safe.

* GHashTable has grown new convenience api for use as a set:
  g_hash_table_add, g_hash_table_contains

* GSocketConnection has gained API for managing connection status

* GSettings: a native OS X backend has been added, under the
  name 'nexstep'

* Bugs fixed
 455640 Something fishy with GRegex and unicode
 548954 weak references are not threadsafe
 625751 Add G_FILE_ATTRIBUTE_FILESYSTEM_USED
 658871 gbacktrace: g_get_prgname () isn't called for a NULL argu...
 664069 gvariant: Never break out of g_variant_iter_loop
 664830 g_strescape doesn't natively handle \v (vertical tab)
 665211 GDBusConnection singleton access can race with disposal
 665805 Add GSocketClient::action, for tracking socket client status
 666116 some tests provoke undefined behaviour, which is undesira...
 666422 Unreachable code in gio gnetworkmonitornetlink.c
 666551 Crash in g_thread_xp_SleepConditionVariableSRW
 666595 menu parser disallows id='' on submenu and section
 666615 loosen property override flag restrictions
 666616 gobject: fix property override type checks
 666803 g_utf8_validate() fails to validate strings with known size
 666804 g_ateaxit deprecation warning in devhelp points in wrong ...
 666951 g_mkdtemp: Since version incorrect in docs
 666978 Fails to compile glib applications with ISO C90 compiler
 667098 ginetaddressmask leaks its address property
 667225 GSocket: add missing type checks to public methods
 667226 GSocket: fix an error return value
 667279 Sometimes crashes when launching commandline-crea...
 667285 Wrong keyname listed in documentation for g_deskt...
 667331 Use g_queue_free_full() convenience function
 667420 GHashTable GDB pretty printing is broken

* Updated translations
 Belarusian
 Bulgarian
 Hebrew
 Norwegian bokmål
 Norwegian Nynorsk
 Spanish
 Vietnamese


Overview of changes from GLib 2.31.4 to 2.31.6
==============================================

* GApplication no longer has APIs for setting menus.  Those have been
  moved to GtkApplication.

* the GActionGroup import/export functionality has been decoupled from
  GApplication by the introduction of a new interface for the purpose of
  handling platform data: GRemoteActionGroup.  This allows Gtk to
  properly deal with platform data (and gdk threads) on window actions.

* lots of documentation improvements

* bug fixes and a huge number of memory leak fixes

* the test suite now passes on ARM and some of the GDBus testcase hangs
  we've been seeing have been resolved (although others could remain)

* g_bytes_get_data() API changed: now includes 'size' out parameter

* new g_queue_free_full() API similar to g_[s]list_free_full()

* desktop files: use standard "Keywords" now, not "X-GNOME-Keywords"

* gsettings commandline tool now has --schemadir option for schemas not
  installed in the usual place (ie: as part of plugins)

* Bugs fixed:
 643736 GApplication doesn't emit dbus signals on action updates
 657433 g_queue_free_full() missing
 664699 glib: documentation fixes
 665737 acquire/release gdk threads lock on incoming dbus
 665879 GBytes: add a size argument to g_bytes_get_data
 666113 various leaks in GLib, GIO are visible in the regression tests
 666115 various tests leak memory, obscuring real leaks in the library
 666145 Doc could be more explicite that g_thread_init calls can be droped
 666173 Configure warning - linux/netlink.h usability... no
 666296 Race condition in g_thread_xp_get_srwlock
 666415 Settings tools should allow specifying a schema directory 

* Translations updated:
 French
 Spanish

Overview of changes from GLib 2.31.2 to 2.31.4
==============================================

* EXPERIMENTAL: Menu support has been added to GApplication.  Menus
  are exported on the bus, alongside the actions that are already there.
  There have also been many related improvements to action group
  functionality.

  These new APIs are subject to changes in the coming releases.  In
  particular, it seems somewhat likely that the APIs for registering
  menubars may change in order to accommodate windows with different
  types of menubars.

* GDBusConnection previously directly dispatched destroy notifies when
  unregistering objects if the current main context was the same context
  the object was exported on.  It now unconditionally dispatches these
  through an idle on the context.

* Clean up Requires in pc files. Linking against GIO no
  longer drags in gmodule. This may require dependency
  fixes here and there.

* Introduce GBytes, a data type for immutable, fixed-size
  byte sequences. This makes the pre-existing GBuffer
  API available outside GLib

* GDBusInterfaceSkeleton can now be exported on multiple
  connections

* Bugs fixed:
 600161 Do not use static GTypeInfo and GInterfaceInfo
 640077 GFileMonitor: Always send CHANGES_DONE_HINT after a move...
 641720 Misleading definition for local_command_line() in GApplic...
 648516 Little comment error and 2 useless lines of code
 651997 Dummy backend for gapplication
 652560 Test for g_ascii_strtod is failing
 662208 failure to initialize a GInitable should be considered...
 662718 GDBusInterfaceSkeleton should be able to export on multi...
 663291 GBytes: Immutable, refcounted sequence of bytes
 664406 Need context for a proper translation
 664455 Build fixes for GLib GIT master (2.31.x)
 664558 GDBusWorker.frozen has a value > 1 in a gboolean
 664559 sys/wait.h not available on windows
 664617 gdbus segfault error 4 in libgio-2.0.so.0.3102.0
 664635 GMemory{Out,In}putStream _async functions break sub-class...
 664809 Add command line option to gtester to allow skipping tests
 665067 cryptic assertion failure if nonsensical flag combinations...
 665184 Check ref. count before reffing/unreffing
 665298 Add 'Requires.private: libpcre' to glib-2.0.pc
 665391 update documentation around mainloops
 665607 ./configure is there for fiddling with cross-compile enviro...
 665634 g_dbus_node_info_new_for_xml() errors on unknown attributes...
 665685 Add a #define for the max length of a Unicode decomposition
 665733 GDBusConnection holds lock while calling destroynotify

* Translation updates:
 Norwegian bokmål
 Spanish


Overview of changes from GLib 2.31.0 to 2.31.2
==============================================

* Monotonic time is now properly supported on Windows

* glib-mkenums: fix @ENUMPREFIX@ with /*< underscore_name=... >*/

* EXPERIMENTAL: introduce new GSettingsSchema and GSettingsSchemaSource
  APIs for the convenience of plugin system authors and those who wish
  to introspect the contents of schemas.  This API may change.

* Improve the performance of GObject property notifies.

* GDBus:
 - fix a race when unowning a name immediately after owning it
 - thread safety improvements on GDBusConnection
 - fixes for exit-on-close functionality

* Deprecations:
 - add G_SIGNAL_DEPRECATED
 - don't use G_DISABLE_DEPRECATED masking for functions anymore

* docs
 - tmpl/ is finally dead for glib

* GIO:
 - GInetAddressMask: new type for internet address range matching
 - various GIO file and stream fixes
 - improvements to attribute and fileinfo handling

Overview of changes from GLib 2.29/2.30 to 2.31.0
=================================================

This release contains a huge number of changes (500 commits worth).  The
list below attempts to summarise, but not every change is listed.

* Major changes to threading and synchronisation
 - threading is now always enabled in GLib
 - support for custom thread implementations (including our own internal
   support for errorcheck mutexes) has been removed
 - a whole lot of dead code (to deal with the non-threaded case) has
   been ripped out.  This includes the racy path of GMainContext that
   caused deadlocks with respect to child process exits in
   single-threaded programs (such as gtester).
 - libgthread is now an empty shell and g_thread_init() is no longer
   required (and has been deprecated)
 - GMutex and GCond can now be statically allocated without explicit
   initialisation.  Dynamic allocation for these types is deprecated.
 - new types GRecMutex and GRWLock can also be statically allocated
   without explicit initialisation.
 - GPrivate can now be statically allocated and has an improved API.
   Dynamic allocation of GPrivate is deprecated.
 - GStaticMutex, GStaticRecMutex, GStaticRwLock, GStaticPrivate are
   deprecated.
 - GCond now uses monotonic time internally and a new API takes
   monotonic time for timed waits, deprecating the wallclock API
 - removal of the insane macro indirection used in the previous
   implementation of threading and synchronisation APIs
 - use SRWLock and CONDITION_VARIABLE APIs when available on Windows
   (Vista and later) and emulate them on XP
 - leaks of G(Static)Private-allocated data on some cases of thread exit
   have been fixed
 - simplified new thread creation API with the old API deprecated.  The
   concept of joinability has disappeared (all threads are joinable) as
   have priority levels, 'bound'ness (ie: kernel vs. userspace threads)
   and ability to manipulate the stack size.
 - GThread is now a refcounted type
 - other implementation details changed

* Move headers for some deprecated functionality to a separate
  deprecated/ directory.

* New support for attribute-based deprecations to issue compiler
  warnings instead of breaking the build and/or giving warnings about
  implicit declarations (and possibly miscompiling).

* GCache has been deprecated (after its last use was removed from our
  platform over a year ago).

* It is no longer possible to include individual headers (like
  "ghash.h") -- you must #include <glib.h>.

* The misguided experiment of allowing the program to stumble along with
  missing GSettings schemas is now over -- the abort is back.

* Clarify that fork() is not valid while using GMainContext.  This is
  because the internal resources of the GMainContext end up being shared
  by both processes.  We had an assert here but it was breaking existing
  (valid) use cases as well, so it has been removed for now.

* GApplication
  - add ::shutdown signal as logical dual to ::startup
  - don't use a GMainLoop: iterate the GMainContext directly (improves
    quit logic)

* Several portability fixes for Windows, OpenBSD, Solaris

* Add new GValue API to specifically deal in signed chars (in case the
  platform defines 'char' as unsigned)

* some new API to mitigate the problems associated with calling setenv()
  in a multi-threaded program

* Use CLOCK_MONOTONIC unconditionally if the libc has support at compile
  time (ie: stop checking for kernel support at runtime).

* pkg-config files:
  - drop -uninstalled variants
  - remove gobject dependency on gthread

* New macro G_ATOMIC_LOCK_FREE is defined if the atomic operations are
  implemented without use of a mutex.  Cleaned up atomic-related
  compilation issues with mingw compilers on win32 systems.

* SOCKS proxy and resolver improvements

* Fix the spelling of G_IO_FLAG_IS_WRITABLE (was WRITEABLE) and
  introduce a macro for backwards compatibility.

* GDBus:
  - many code generation updates and improvements
  - some race condition fixes, including testcase hangs

* GVariant:
  - new g_variant_new_from_fixed_array() API
  - substantial docs improvements/clarifications

* GKeyFile is now refcounted and boxed

* mount monitoring is now based on /proc/mounts (where available)
  instead of mtab

* new macros G_SOURCE_CONTINUE and G_SOURCE_REMOVE for returning from
  GSourceFunc (so you don't have to remember what TRUE and FALSE mean)

* use xlocale functions where available to avoid too much heavy lifting
  in functions like g_ascii_strtod()

* GMappedFile can now be created from an fd

* error message strings grammar/i18n fixes

* many docs updates

* Partial list of bugs closed:
 70598  Unify GStaticMutex and GMutex.
 320888 optimization for g_main_context_wakeup
 398418 GChildWatch race condition?
 527214 g_timer_elapsed() returns random values
 580505 add a way to set/get name for a thread
 583511 race condition means g_main_loop_quit() does not work
 590808 GKeyFile should have a refcount and a boxed type in GObject
 592715 Document that g_str_hash() and g_int_hash() are not NULL safe
 631413 Add macros for GSourceFunc return values
 632049 not immediately clear what g_variant_get_fixed_array expects
 640212 "Error stating file" is not a friendly message
 640293 Use xlocale functions to implement g_ascii_strtod()
 640975 Check that error exists before trying to set it
 643934 GApplication lacking a logical dual for the ::startup signal
 651268 assertion failed in GDBus worker thread
 653987 g_key_file_get_integer cannot interpret trailing spaces
 654412 Documentation for g_variant_get_child_value unclear
 654563 info capplet: Failed to calculate disk space
 655366 missing GSettings schemas lead to obscure crashes
 656621 g_spawn_*() calls executables in current directory
 656679 [gi] Add two annotations to gio
 657992 Add glib__private__() API to share between glib,gio
 658188 _set_as_last_used_for_type generates a broken mimeapps.list
 658206 gsocks5proxy.c has invalid gettext use
 658207 glib-compile-schemas says "can not"
 658558 simpleaction: Fix documentation of :enabled
 658683 clean up charset/language threading issues
 658692 add introspection annotations to g_time_val_from_iso8601()
 658715 Duplicite strings
 658769 Invalid reuse of GError in GThreadedResolver
 658806 sign error in string hash implementation
 658976 gdbus-codegen's C namespace option needs to support Ugly_Case
 659070 gdbus-codegen generated code segfaults when property changes
 659082 gdbus-codegen: Single letter namespaces get dropped from names
 659212 GMappedFile should fail on non-regular files
 659324 _SPLICE_CLOSE_TARGET doesn't mark the output stream as closed
 659423 Use adaptive mutexes when available
 659427 Move deprecated code to a separate directory
 659646 gdbus-codegen produce code that warnings at build
 659690 Possible build warning in code generated by gdbus-codegen
 659699 property name collision when generating code for "Connection"
 659754 Add API to GMappedFile that allows to pass FD
 659838 incorrect types in introspection for g_object_bind_property
 659866 pthread_rwlock_t requires defined __USE_UNIX98
 659870 gvalue: Fix signedness of g_value_get_char()
 659889 glib-2.29.92/gio-2.0.pc.in has a wrong line.
 659916 GObject size of 64K is not actively enforced
 659920 Missing setter for read/write property 'closed' of GIOStream
 659923 Add g_variant_new_fixed_array() function
 660013 Remove old g_atomic configure cruft
 660096 glib/rwlock tests failure (tests asserted)
 660130 Possible loss of user data when updating mimeapps.list
 660147 tracker causes g_critical in "gsettings list-recursively"
 660413 Make G_ASSERT_STATIC work with clang
 660498 Generated test code fails when the codegen changes
 660511 Use /proc/mounts for monitoring mounts, not /etc/mtab
 660536 Expose options for /etc/fstab entries
 660635 Deprecate g_thread_foreach
 660637 Pending dbus method calls not canceled on connection loss
 660739 kill off g_{mutex,cond}_{new,free}()
 660740 make GThread more standard
 660741 g_cond_timedwait is a disaster
 660743 macro wrappers for g_once_init_enter/leave
 660744 finish killing g_thread_init()
 660745 GPrivate leaks on Windows
 660791 [gio] Improve doc for g_file_make_directory_with_parents()
 660843 asyncqueue-test is broken
 660849 Remove cruft from g_strerror and g_strsignal
 660886 GDBusProxy: don't drop/complain about unknown props/signals
 660887 g_slice_set_config() is broken
 660994 Add g_main_context_ref_thread_default()
 661255 gio: enable test_peer regression test for OpenBSD
 661257 giomodules.c uses ":" instead of G_SEARCHPATH_SEPARATOR_S
 661318 tests use pthread without appropriate compiler/linker flags
 661421 Applications fail to initialize on GNU Hurd - commit
 661438 Implement G_GNUC_DEPRECATED/G_GNUC_DEPRECATED_FOR on Visual C++
 661711 Sorting keys for GDrive, GVolume and GMount instances
 661763 desktop-app-info: Add support for X-GNOME-Keywords
 661896 /gdbus/connection/life-cycle is racy
 661914 Gstreamer/Totem locks up
 662100 regression: g_dbus_connection_close() triggers exit-on-close logic

* Translations updates:
 Belarusian 
 Brazilian Portuguese
 British English 
 Bulgarian 
 Catalan 
 Catalan (Valencian)
 Czech 
 Danish 
 Esperanto
 French 
 Gujarati
 Hebrew 
 Hungarian 
 Italian 
 Japanese
 Lithuanian
 Norwegian bokmål
 Oriya
 Polish 
 Russian 
 Serbian
 Simplified Chinese
 Slovak 
 Slovenian
 Spanish 
 Tamil
 Vietnamese

Overview of changes from GLib 2.29.18 to 2.29.90
================================================

* API/ABI changes:
 - unix signal watches now match the API of all of the other sources
 - revert the addition of g_date_time_source_new () from last release

* networking and other fixes for Solaris
 - we no longer support symbolic port names (ie: from /etc/services)
 - check if -lsocket is needed
 - fix g_socket_details_from_fd()
 - avoid getmntinfo
 - fix some harmless warnings

* GDateTime improvements:
 - generally improved standards compliance (with C99)
 - support C99-specified format strings: %g, %G, %V, %c, %C, %w
 - consult the locale for the preferred 12-hour time format (%r)
 - drop support for non-standard %N and broken %W
 - better support for formatting non-POSIX (eg: Arabic) numerals
 - locale-related test case fixups, and fix some leaks

* GTlsInteraction: add interaction method invocation guarantees

* gdbus-codegen: post-process all interfaces when parsing >1 file

* make GMainLoop, GMainContext and GSource boxed types

* fix a race condition in the first use of g_get_monotonic_time()

* lots gtk-doc cleanups

* better intltool compatibility when generating pot file

* avoid GCC-specific compiler options when not using GCC

* Translation updates:
 Belarusian
 Brazilian Portuguese
 Canadian English
 Galician
 Indonesian
 Korean
 Lithuanian
 Norwegian bokmål
 Portuguese
 Spanish
 Swedish

Overview of changes from GLib 2.29.16 to 2.29.18
================================================

* GDateTime is now respecting LC_TIME when formatting

* GTimeZoneMonitor has been removed again

* A new API for wallclock functionality has been added:
  g_date_time_source_new(). This API is still experimental
  and may be changed or removed before 2.30.

* Bugs fixed:
 628904 Add credential support for FreeBSD and fix a socket issue
 650763 gdbus-codegen is broken with python 2.7
 655129 GDateTime could provide api for implementing wall clocks
 656341 gtlsconsoleinteraction.c uses getpass() which isn't avail...
 656387 GCancellable can be used concurrently
 656443 Make GTlsInteraction ask_password cancellable
 656675 void functions should not return in glib 2.29.16
 656772 g_variant_compare for uint64 incorrect
 656914 Load GIO_EXTRA_MODULES first, and ignore duplicates
 657083 The header langinfo.h is not available on all systems
 657084 gfileutils: fix docs/annotations for temp file methods
 657138 Some files missing in POTFILES.in
 657206 GInputStream leaked in g_file_icon_load_async()
 657243 g_cancellable_set_error_if_cancelled() documentation
 657274 Use detected PYTHON variable as shebang for gdbus-codegen
 657336 Speling fixes for glib found with codespell
 657452 plural forms needed
 657454 Translation comment needed
 657540 Print out file:// URL to coverage HTML report after building
 657593 g_test_trap_fork calls close(-1)
 646082 Addresses from GSocket should be normalized before returning
 657517 fix gio/tests/gdbus-peer on bsd

* Translation updates:
 Brazilian Portuguese
 Galician
 Norwegian bokmål
 Punjabi
 Russian
 Serbian
 Spanish
 Swedish
 Traditional Chinese
 Uighur


Overview of changes from GLib 2.29.14 to 2.29.16
================================================

* GTlsDatabase: an abstract class that provides support
  or certificate and key lookup. An implementation will
  be provided in glib-networking

* GHmac: Support or HMAC digests

* Misc new API:
 - g_ptr_array_add_full: creates a GPtrArray with
   a preallocated size and a destroy function
 - g_desktop_app_info_get_show_in: checks if a GDesktopAppInfo
   should be shown in a given desktop environment
 - g_mkdtemp, g_mkdtemp_full, g_dir_make_tmp: create
   temporary directories

* Unify thread wakeup implementations of GMainContext
  and GCancellable, and use eventfd for it when available

* Show mounts in $XDG_USER_DIR in addition to /media and $HOME

* Bugs fixed:
 636572 GTlsCertificateDB
 644601 Some tests need a running dbus session
 652284 deal with small key lengths
 652827 glib-2.29.8 no longer builds with mingw.org's toolchain
 653063 PEM parser fails parsing private key when put first
 654078 Fail to static linking with Glib library
 654450 New functions: g_ptr_array_new_full()
 654793 Add G_VALUE_INIT
 655044 GDesktopAppInfo: Add g_desktop_app_info_get_show_in()
 655148 gdbusconnection is broken when compiling with mingw
 655241 glocalfile.c no longer compiles with MinGW GCC
 655598 g_cancellable_get_fd: silently return -1 for NULL cancellable
 655664 gdbus should not abort if no dbus session is available
 655769 Use ZLIB_CFLAGS when compiling gio
 656031 Improve GVariant annotations
 656048 glib-codegen requires Python >= 2.5
 656151 configure test logic inverted, doesn't match comments
 656152 GCC only syntax used, yet other compilers allowed by configure.
 656162 allow use of lcov 1.9 for coverage
 656282 GDBusProxy: uninitialized local variables can be freed
 656283 Failing tls connection cause assertion
 118563 Add g_mkdtemp in the spirit of g_mkstemp
 636405 Add g_return_if_fail() to g_settings_bind_with_mapping()
 656039 race condition between GDBusProxy signals and public API
 656492 g_io_channel_new_file failure (open(2) behavior wrt POSIX)

* Translation updates:
 Bulgarian
 Esperanto
 French
 Galician
 German
 Hebrew
 Indonesian
 Italian
 Norwegian bokmål
 Russian
 Spanish
 Swedish


Overview of changes from GLib 2.29.12 to 2.29.14
================================================

* Unicode improvements
 - add g_unicode_script_{to,from}_iso15924
 - add G_UNICODE_SPACING_MARK define
 - more normalisation improvements
 - stop using deprecated g_unicode_canonical_decomposition()

* GParamSpec:
 - mark the 'name' field as 'const' and add a comment to the header to
   help avoid future problems caused by bad hacks

* Merge some (modified) patches from Debian:
 - 03_blacklist-directories.patch
   - add some blacklisted mount directories
 - 60_wait-longer-for-threads-to-die.patch
   - sleep longer in a test case, if needed to avoid failing

* Units policy change: prefer use of SI units
 - deprecate g_format_size_for_display, add g_format_size(_full)

* GSettings: don't call g_error() when the schema is missing

* GVariant support for arrays of object paths:
 - new g_variant_{new,get,dup}_objv API
 - support for g_variant_{new,get} '^ao' and '^a&o' similar to '^as'

* GDBus:
 - use new improved array-of-objects support and pass 'ao' as char**
   instead of GVariant*
 - improve handling of 'h' type (Unix file descriptor index)

* GIO:
 - fix compilation without USE_STATFS and USE_STATVFS

* Documentation fixes

* Bugs fixed:
 622921 Migrate from dbus-glib to glib's GDBus
 648271 Add g_unicode_script_to_iso15924()
 654948 Stop using deprecated g_unicode_canonical_decomposition()
 654988 g_atomic_int_add should document behaviour change
 655025 #define G_UNICODE_SPACING_MARK G_UNICODE_COMBINING_MARK
 655076 normalization misses some Full_Composition_Exclusion=True. 

* Translations updated:
 Spanish

Overview of changes from GLib 2.29.10 to 2.29.12
================================================

* Add new API to do Unicode (de-)composition in atomic steps,
  for use in Harfbuzz.

* Bugs fixed:
 615895 (indirectly) support non-NULL-terminated regexes in GRegex
 617949 glib trunk fails to compile on Solaris w/ Studio 12...
 620423 Document the possibility to unset attributes
 627974 Floating reference headaches
 644687 Not finding cross-links in current doc set
 649246 g_output_stream_splice() cannot be used on 32-bit machines...
 653841 a helper script to build glib from git master on win32
 653935 g_slist_free_full/g_list_free_full iterates twice in the list
 654017 tests: fix glib_translations_work() in gsettings unit test
 654085 Don't needlessly use "echo -e" when creating .def files
 654195 Add g_unichar_compose() and g_unichar_decompose()
 654232 GCancellable eventfd problems
 654394 suspicious use of floating references in GDBusInterfaceSkeleton
 654536 GSettings: lift key name length restriction to 64
 654627 GParamSpec: intern property names
 654651 Better g_unicode_canonical_decomposition()
 654917 Make g_cclosure_marshal_generic the default signal handler

* Translation updates:
 Belarusian
 Finnish
 Korean
 Latvian
 Lithuanian
 Norwegian bokmål
 Turkish


Overview of changes from GLib 2.29.8 to 2.29.10
===============================================

* New features:
 - g_desktop_app_info_get_nodisplay: a function that is required
   to port gnome-menus to GDesktopAppInfo
 - g_hash_Table_iter_replace: new function to replace a value
   while iterating over a hash table
 - g_utf8_substring: convenience API to extract substrings from
   UTF-8 strings
 - g_action_group_add_entries: convenience API for creating lots
   of actions quickly
 - Use eventfd instead of pipes for waking up main contexts and
   for cancellation when available
 - GMatchInfo is now a refcounted boxed type

* API changes in GAction:
 - the 'set_state' entry in the GActionInterface vtable has been
   renamed to 'change_state
 - g_action_set_state has been renamed to g_action_change_state
 - the 'state' property has been changed to read-only
 - GSimpleAction can no longer be subclassed

* Bug fixes
 647796 g_variant_new_variant is not marked as constructor
 652072 gmain: make use of signalfd()
 652168 Crosscompiling Fails if build<=2.24 and host >2.24
 652750 make dist fails
 652758 GDataInputStream: Clarify g_data_input_stream_read_line docs...
 652822 Add a g_hash_table_iter_replace
 652897 tiny docs clarification for g_utf8_to_ucs4_fast
 653140 gmain: use Linux eventfd() for main context wake up
 653429 drop AM_MAINTAINER_MODE or enable it by default
 653484 GAsyncCallbacks should default to allow-none
        Add missing fundamental types to the generic marshaller

* Translation updates
 Belarusian
 Galician
 Russian

Overview of changes from GLib 2.29.6 to 2.29.8
==============================================

* Bug fixes
 646608 export_symbols variable for gio dynamic library is wrong
 646635 Fix introspection of GLib
 647930 Documentation: GDataInputStream _read_upto() version
 651745 Switch to _ prefixing rather than G_GNUC_INTERNAL
 651920 Improve qsort_r detection
 651959 gbitlock: "asm goto" is not available in gcc < 4.5
 651998 gdbus-codegen: Use relative Python imports
 652000 Fix for gatomic.c on Windows/MSVC
 652002 Proposal to clean up gvaluetransform.c for MSVC
 652025 g_dbus_connection_register_object: error is not set...
 652081 Typos in a GBinding warning message
 652197 Improper handling of double values in GDBusMessage
        Fix a deadlock in gobject finalization

* Translation updates:
 Czech
 Galician
 German
 Hebrew
 Norwegian bokmål
 Spanish
 Uighur


Overview of changes from GLib 2.29.4 to 2.29.6
==============================================

* Atomic operations have been rewritten from scratch to make use
  of gcc builtins where possible. As a side-effect of this, calls
  to g_atomic_ API with explicit casts may now be problematic; if
  that happens to you, try first to remove the casts. Another
  side-effect of the rewrite is that g_atomic_int_exchange_and_add
  has been deprecated in favor of g_atomic_int_add.

* A full set of atomic operations on pointers has been added,
  including bit locks in pointer-size locations.

* Access to quarks is now lockless

* GObject data scalability has been greatly improved

* g_data_time_format now supports alternative digits and padding

* Introspection improvements:
 - Add a boxed type for GVariantBuilder
 - Annotation fixes in GDBus, GVariant, g_base64_

* Bugs fixed:
 502560 g_rand_double_range returns 'inf'
 612729 g_mkdir_with_parents can fail if the directory already exists
 617491 g_once() implementation is inefficient
 619418 Add a performance test for UTF-8 decoding functions
 619435 Make g_utf8_to_ucs4_fast() yet faster
 626549 G_STATIC_ASSERT_EXPR
 631231 bitlock: Fix detection and usage of futexes with Bionic
 632294 g_queue_remove() should return a boolean
 640518 GMainLoop has quadratic complexity when all pollfd's...
 642026 Race condition in g_static_private_free
 646635 Fix introspection of GLib
 648678 g_date_time_format(): support %O flags for localized numbers
 649480 Use MSG_CMSG_CLOEXEC in recvmsg in gio/gsocket.c
 649506 GTestFunc et al lacking Since tag
 649657 Don't return gboolean for functions that throw
 649775 glib-gio-gdbuscodegen-Makefile.patch
 649915 gsettings accepts unquoted strings longer than two characters
 649973 gthread: build unix tests only on unix
 649988 gdbus-codegen: Drop dependency on argparse
 650078 forkbomb building glib/tests/protocol
 650211 Optimization in key file parsing
 650236 Application over DBus implements action state incorrectly
 650345 g_key_file_has_key_full: New function to fix g_key_file_has_key...
 650458 reduce overhead in g_object_set/get_data
 650459 hash table consistency while calling destroy notify funcs
 650688 enforce rules about hash table modification
 650823 expand the set of atomic ops
 650874 codegen chokes on docs
 650882 use stdout instead of stderr for informational messages
 650884 fix compilation with gcc2
 650885 implement glib credentials on OpenBSD (hackish)
 650935 G_GNUC_MAY_ALIAS and atomic ops
 651009 minor documentation fix
 651034 Regarding g_cond_wait after g_thread_pool_push in gthreadedresolver
 651133 race condition in GDBusConnection's emit_signal_instance_in_idle_cb
 651141 hashtable infinite loop
 651219 fix path to true(1) on OpenBSD
 651223 Fix some compile warnings on OpenBSD
 651327 Minor fixes for the gsocket API
 651467 Add pointer sized bitlocks
 651650 gdbus: Avoid busy wait loop
 651725 gmain: Cleanups and a new test case
 651745 Switch to _ prefixing rather than G_GNUC_INTERNAL

* Updated translations:
 Catalan (Valencian)
 Esperanto
 Hebrew
 Hungarian
 Russian
 Spanish


Overview of changes from GLib 2.29.2 to 2.29.4
==============================================

* GDBus:
 - Includes several new types to support modeling D-Bus
   objects and interfaces more fully, and also introduces
   an 'object manager' pattern:
   GDBusInterface, GDBusObject, GDBusObjectManager
   These interfaces have client-side implementations:
   GDBusProxy, GDBusObjectProxy, GDBusObjectManagerClient
   And server-side implementations:
   GDBusInterfaceSkeleton, GDBusObjectSkeleton, GDBusObjectManagerServer
 - The new gdbus-codegen utility uses these new classes
   to generate C code and documentation from D-Bus interface
   descriptions in XML

* GTest:
 - There is now a g_test_fail() function to mark
   tests as failed

* GDesktopAppInfo
 - Now has a binding-friendly filename property
 - Other new API to more fully expose desktop file contents:
   g_desktop_app_info_get_categories(),
   g_desktop_app_info_get_generic_name()

* GHashTable:
 - Several optimizations to reduce space consumption of
   large hash tables, in particular tables that are used
   to store sets.

* Unix-specific APIs:
  GLib now installs a separate header, glib-unix.h, that is
  meant to collect Unix-specific APIs. For now, it contains
  g_unix_open_pipe(), g_unix_set_fd_non_blocking() for dealing
  with pipes and fds, as well as APIs to create mainloop
  sources which can trigger callbacks on certain Unix
  signals (SIGTERM, SIGHUP, SIGINT).

* Bugs fixed:
 631379 GDBus nonce-tcp test failing
 632631 GLib-CRITICAL **: g_variant_new_string: assertion `g_utf8_validate (string, -1, NULL)' failed
 635694 gdbus aborting due to unauthorized socket in DBUS_SESSION_BUS_ADDRESS
 637561 Crash when using G_DBUS_SERVER_FLAGS_RUN_IN_THREAD
 642935 g_date_time_format() prints wrong value for %z and timezone -0800
 643134 g_dbus_message_copy
 644941 glib-unix: New Unix-specific API
 646013 g_hash_table_remove_all_nodes optimization
 646309 glib cannot be cross-compilled for mingw32
 646435 GTimeZone doesn't seem to be thread-safe
 646957 GIO chained calls don't work with a thread default context
 647594 README link to mailing list is broken
 647602 Cannot connect to remote message bus via TCP
 647746 The GSocketService documentation is incomplete.
 647826 API: gtester: Add g_test_fail()
 647903 GDesktopAppInfo: Add g_desktop_app_info_get_categories()
 648416 g_app_info_create_from_commandline ignores SUPPORTS_STARTUP_NOTIFICATION
 648423 Support G_DEBUG=trap-warnings
 648425 GDesktopAppInfo: Add "filename" property for bindings
 648966 Update g_unichar_iswide and g_unichar_iswide_cjk

* Updated translations
 Norwegian bokmål
 Spanish
 Turkish
 Uighur


Overview of Changes from GLib 2.28.0 to 2.29.2
==============================================

* GApplication
 - The documentation has been enhanced and clarified
 - An opt-out for uniqueness has been added: G_APPLICATION_NON_UNIQUE
 - GApplication now syncs settings before g_application_run() returns

* GDBus
 - Interface lookups are now happening in constant time
 - Signature checking and handling of various unexpected
   situations has been improved

* GVariant
 - The format accepted by the GVariant parser has beend documented
 - GVariant accepts G_VARIANT_TYPE_VARDICT for a{sv}

* GDateTime:
 - The return value of g_datetime_compare() has been fixed to
   match strcmp() semantics
 - In order to handle problems with changing timezones, a GTimeZoneMonitor
   has been added to GIO, and g_time_zone_refresh_local() can be
   called to update the cached information about the local timezone

* GOption now uses /proc/self/cmdline to set the program name instead
  and only falls back to "<unknown>" if that is unavailable

* GSettings:
 - The schema compiler now warns about references to non-existing schemas

* Commandline utilities are now fully translated

* Signals can now indicate that collecting their arguments must
  always happen, even in the absence of connected signal handlers,
  using the G_SIGNAL_MUST_COLLECT flag.

* Bugs fixed:
 635099 Memory leak in gdbus introspection when parsing xml
 640489 $ and ^ do not match lines if G_REGEX_MULTILINE|G_R...
 642042 Overriding GDBus org.freedesktop.DBus.Properties im...
 642052 g_timeout_add(_seconds) cannot handle large intervals
 642490 notify_desktop_launch() "g_variant_new_bytestring:...
 613269 g_type_get_qdata() doesn't work as I expected on subtypes
 624943 G_VALUE_NOCOPY_CONTENTS is undocumented
 637738 object_interface_check_properties never actually executes
 638185 GIOCondition should be annotated as "flags"
 639478 GDBusServer's g_dbus_server_new_sync() function should just...
 641755 Add g_settings_get/set_uint() helpers
 641768 dconf gsettings backend silently drops writes if it can't...
 642797 g_app_info_get_default_for_type() broken for subtypes
 642825 Unnecessary assertion failure in g_option_context_parse()
 642944 NULL key lookup using g_hash_table_lookup_extended()
 643074 Incorrect documentation for g_socket_receive() and g_socket...
 643197 g_application_id_is_valid docs imply no valid ids
 643468 GApplication docs: Warn that handling "command-line" means...
 643478 GApplication::local_command_line vfunc documentation seems wrong
 643624 Can g_variant_unref() on an already free'd variant
 643649 g_application_run() should say that argc/argv can be NULL
 643780 shouldn't need to create an action group to use actions...
 643795 g_timeout_add_seconds fires with intervals 1 second longer...
 644309 Program name is not set when using GtkApplication
 644428 Crash in failure section of g_markup_collect_attributes()
 644465 undefined reference to `_usleep'
 644552 g_timeout_add_seconds(1, ...) may have a latency of up to 2...
 644607 Correct internal definition of C_()
 645789 annotations for g_file_*_contents
 646039 g_settings_list_children() returns child that cannot be opened
 646310 Accept range with only min or max
 646420 g_dbus_method_invocation_get_parameters() docs should say...
 646843 occasional abort on autologin
 646985 add G_APPLICATION_NON_UNIQUE flag
 647579 gsettings: Implement reset-recursively
 647600 gsettings description has typo

* Translation updates
 Afrikaans
 Bulgarian
 Bengali India
 British English
 Bulgarian
 Catalan
 Czech
 Danish
 French
 Galician
 German
 Greek
 Gujarati
 Hebrew
 Hungarian
 Italian
 Japanese
 Korean
 Lithuanian
 Polish
 Portuguese
 Romanian
 Serbian
 Simplified Chinese
 Spanish
 Swedish
 Traditional Chinese
 Uighur
 Vietnamese


Overview of Changes from GLib 2.27.93 to 2.28.0
===============================================

* Bugs fixed:
641363 GInitable documentation isn't clear about that finalize...
641395 Add more data about the origin application to the "Lau...
641411 gdesktopappinfo signals lost if it's the session bus...
641477 glib-mkenums uses unportable #! line
641572 Add @EXEEXT@ to pkgconfig binary name
641688 glib installs GSettings.html and gsettings.html

* Translation updates:
 Galician
 Italian
 Korean
 Punjabi


Overview of Changes from GLib 2.27.92 to 2.27.93
================================================

* Bugs fixed:
 637013 gio/gdbusmessage.c fails to compile on Solaris
 640192 Error creating a Gio.Settings object through py...
 640261 Minimum version for external pcre needs to be..
 640262 GActionGroup contains redundant TYPE macros
 640436 Make load_user_special_dirs() resistant to non...
 640695 g_key_file_load_from_file() mishandles a CR-LF...
 640724 can't compile gio due to format string issues
 640725 can't compile tests due to format string issue
 640807 improve GVariant behaviour with invalid pointers
 640823 wrong documentation for g_source_add_child_source

* Translation updates:
 Bulgarian
 Galician
 Hebrew
 Norwegian bokmål
 Spanish
 Traditional Chinese


Overview of Changes from GLib 2.27.91 to 2.27.92
================================================

* Update to Unicode 6.0

* Update PCRE to 8.12

* Bugs fixed:
 637696 g_unix_connection_send_fd() doesn't work
 638872 null settings backend bug
 640042 GtkApplication's warning about not connecting...

* Translation updates:
 Arabic
 Basque
 Estonian
 Greek

Overview of Changes from GLib 2.27.90 to 2.27.91
================================================

* Bugs fixed:
 638838 gdesktopappinfo: Don't crash if we don't have a desktop filename
 638894 Splitting on \s* gives no result
 639064 Update gschema.dtd
 639084 Copy/paste error in GSettings::writable-changed signal
 639177 SIGSEGV for GApplications with G_APPLICATION_IS_SERVICE

* Translation updates:
 Estonian
 Galician
 Indonesian


Overview of Changes from GLib 2.27.5 to 2.27.90
===============================================

* Test reports created by gtester-report can now
  include revision information

* The g_desktop_app_info_launch_* family of functions
  now emit a DBus signal when an application is launched.
  Additionally, there is a new variant
  g_desktop_app_info_launch_uris_as_manager(), which
  gives more control over the launched process.

* The memory and null GSettings backends are now available
  as public API

* g_get_locale_variants() is a new function that returns a
  list of variants of a locale identifier

* Bugs fixed:
 587898 I/O timeouts for GSocket
 606960 gio: Add extension point for informing parties...
 631980 Handle an optional <revision> node in the report...
 634569 Document that g_variant_builder_add_value consumes...
 635998 Make _g_compute_locale_variants public
 636806 Add g_{memory,null}_settings_backend_get_default
 637262 Need a binary DER version of ::accepted-cas
 637544 Skip fsync() on btrfs
 637720 void functions should not return a value.
 637738 object_interface_check_properties never actually...
 637759 GIOChannel: fix a crash in g_io_channel_read_chars()
 637852 Updates to glib.vsprops file for MSVC 2008 builds...
 637858 Updates to test/testglib.c...
 638349 parameter name of g_variant_new_* may conflict...

* Translation updates:
 Hebrew
 Norwegian bokmål
 Simplified Chinese
 Spanish
 Swedish
 Uyghur
 Vietnamese


Overview of Changes from GLib 2.27.4 to 2.27.5
==============================================

* Network support:
 - Add g_tls_certificate_verify() to verify a certificate
 - Add GTlsConnection:use-system-certdb
 - Other TLS api additions

* GIO:
 - Add g_io_stream_splice_async()/_finish() to splice two iostreams
 - Add g_emblemed_icon_clear_emblems() and make GEmblemedIcon derivable
 - Remove GPeriodic; it did not receive the necessary review and
   integration work to declare it stable

* GSequence:
 - New methods g_sequence_lookup() and g_sequence_lookup_iter()

* Bugs fixed:
 617254 Missing g_sequence_lookup
 632544 g_dbus_connection_send_message can not send a locked message...
 633350 g_hostname_to_ascii() ignores non-ascii dots
 634583 Better error reporting for g_variant_parse()
 635007 gsetting enum rule don't work for out-of-srcdir builds
 635626 GDBus message idle can execute while flushes are pending
 636100 Can't read GSettings:backend property
 636305 Typo on g_queue_remove_all() function description
 636311 appinfo: tweak application positioning for content-types
 636351 g_simple_async_result_is_valid lacks a version tag
 636387 gdb autoload files shadow the "dir" builtin
 636673 g_simple_async_report_error_in_idle should allow object...
 637147 Add a "delay-apply" property to GSettings
 637171 emblemedicon: add g_emblemed_icon_clear_emblems()
 637237 gapplication: plug a memory leak

* Translation updates:
 Estonian
 Galician
 Hebrew
 Norwegian bokmål
 Simplified Chinese
 Spanish
 Traditional Chinese
 Vietnamese


Overview of Changes from GLib 2.27.3 to 2.27.4
==============================================

* GIO
 - Mounts are treated as hidden if they have a path element
   that starts with a dot
 - GAppInfo gained API to differentiate between recommended
   and fallback mime handlers
 - g_cancellable_create_source: creates a GSource that triggers
   when the GCancellable is canceled
 - GPollableInput/OutputStream: Interfaces for pollable streams
 - TLS support has landed, with an extension point that is
   implemented in glib-networking

* GLib
 - Mainloop sources can now have 'child sources'
 - g_get_runtime_dir: New function to return the XDG_RUNTIME_DIR

* Bugs fixed:
 530786 GFileMonitor "changed" signal underdocumented
 588189 TLS support for GSocket*
 630357 g_object_new_valist uses uninitialized memory
 630559 typo in public string in gsocks: 'The SOCKSv5 require...
 632445 Documentation refers to removed GNOME 2.0 porting guide
 634239 Child GSources
 634241 Add pollable input/output streams
 634504 allow passing a NULL emblem to g_emblemed_icon_new()
 634613 unsufficient g_get_user_runtime_dir() documentation
 635640 schema should inherit gettext-domain from schemalist
 635768 Protect g_file_monitor_set_rate_limit() against negative...
 635882 Fix the wrong-category schema test
 635187 Wrong type of GVariant received in an action...

* Updated translations:
 Galician
 Italian
 Norwegian bokmål
 Uyghur


Overview of Changes from GLib 2.27.2 to 2.27.3
==============================================

* The GTimeSpec type that was introduced in the 2.27.2 has been
  dropped again in favour of APIs that return microseconds as
  64-bit integer.
  Affected functions:
  g_source_get_time
  g_periodic_unblock
  g_get_monotonic_time
  g_get_real_time
  The similar GTimeVal struct is still around, but its use is
  discouraged.

* GTimer is now using monotonic time unconditionally

* There are some new functions to facilitate error reporting
  in async GIO APIs:
  g_simple_async_result_take_error
  g_simple_async_result_new_take_error
  g_simple_async_report_take_gerror_in_idle

* There is new convenience API to us GVariant dictionaries:
  g_variant_lookup

* It is now possible to delay sending match rules to the
  D-Bus daemon in GDBus:
  G_DBUS_SIGNAL_FLAGS_NO_MATCH_RULE

* Support has been added for XDG_RUNTIME_DIR:
  g_get_user_runtime_dir

* Various fixes for Win64/MSVC builds have been committed

* Bugs fixed:
 620263 Add g_clear_object, g_clear_pointer, g_clear_boxed
 633075 update Project Files and sources for MSVC 2008/C89
 633381 gsettings Makefile rules should handle empty list...
 633685 Use g_simple_async_result_{new_,}take_error
 633686 Add g_simple_async_report_take_gerror_in_idle

* Translation updates:
  Belarusian
  Galician
  Hebrew
  Punjabi
  Spanish


Overview of Changes from GLib 2.27.1 to 2.27.2
==============================================

* GApplication
 - Export actions over DBus and support activating them from remote instances
 - Support environment passing

* GSettings
 - The gsettings utility has a list-recursively command
 - The gsettings utility has commandline completion for enum values

* GLib is now linked against librt and uses monotonic time for
  timeouts and GPeriod sources. GSource has a new g_source_get_time()
  which returns monotonic time, and g_source_get_current_time() has
  been deprecated

* Bugs fixed:
 158725 free linked list with data
 626320 GVariant: Avoid locking in g_variant_get_child_value() if possible
 629247 add gsimpleasyncresult methods to take over a GError
 629274 GNetworkService does not do fallback when there is no SRV record
 631264 gsettings-tool choice/range support
 631482 g_date_time_from_instant: 1000000000000000000
 632169 docs for manual use of gsettings-data-convert
 632571 Add equivalent to gconftool-2's -R option
 633115 GSettings m4 doesn't fail the build for broken schemas
 633206 Default g_application_local_command_line() doesn't set exit_status...
 633339 support more complex gapplication setups
 633356 Make timeout G_MAXINT mean "no timeout"

* Translation updates:
 Catalan (Valencian)
 Indonesian
 Japanese


Overview of Changes from GLib 2.27.0 to 2.27.1
==============================================

* GDateTime now has full week number support.
  New API: g_date_time_get_week_numbering_year

* The GSettings schema compiler will now skip over
  broken .xml schema files instead of aborting altogether

* GSettings now works properly on bigendian systems

* GSettings has more complete support for ranges
  New API:
    g_settings_get_range
    g_settings_range_check
  The gsettings commandline tool supports ranges too.

* GApplication has been rewritten; see the API docs for details
  and examples. The action support is not complete yet.

* The GLib mainloop has gained 'dispatch to context' functionality,
  which can replace manually created idles in many cases.
  New API:
    g_main_context_invoke
    g_main_context_invoke_full

* The gio-desktop-app-info-lookup extension point has been
  removed from GIO. GIO now uses x-scheme-handler mimetypes when
  looking for default applications.

* On win32, make g_get_user_data_dir() return the CSIDL_LOCAL_APPDATA
  folder on Windows, and not CSIDL_PERSONAL. This matches what Qt does,
  and has been widely requested. Also make g_get_user_config_dir() return
  this and not the (roaming) CSIDL_APPDATA folder.

* A periodic event clock has been added in GIO: GPeriodic. Note that this
  API is still experimental and expected to undergo changes before it
  will be incorporated into a stable GLib release. Use at your own risk.

Bug fixes:
 613822 gobject signal connect/disconnect not thread safe
 618737 "dispatch to context" functionality
 620710 g_get_user_data_dir() uses CSIDL_PERSONAL and not CSIDL_APPDATA
 623400 acquire context before dispatching
 627126 gsettings schema files don't get installed on FreeBSD
 627171 g_socket_new_from_fd() doesn't set the right protocol
 628876 Wrong error description
 628937 gracefully handle broken schemas
 629274 GNetworkService doesn't fallback when there is no SRV record
 629289 g_error() used wrong, produces core dump
 629687 leaks class refcount in gsocketcontrolmessage
 629849 GLib-CRITICAL **: g_source_get_context: assertion `!SOURCE_...
 629945 GDBus deadlock in g_bus_get_sync()
 630000 g_date_time_difference
 630077 GDateTime week number support
 630185 Allow NULL strings in g_quark_try_string()
 630797 docs mention non-existent g_object_dispose()
 630968 gschema-compile problems on power g5
 631263 GSettings needs range/choice APIs
 631264 gsettings-tool choice/range support
 631379 GDBus nonce-tcp test failing
 631410 Port gapplookupgconf.c to using x-scheme-handler/
 632884 Possible deadlock in g_object_remove_toggle_ref()

Transation updates:
 Basque
 Brazilian Portuguese
 British English
 Bulgarian
 Czech
 Dutch
 Estonian
 French
 Galician
 German
 Greek
 Hebrew
 Hungarian
 Japanese
 Lithuanian
 Polish
 Portuguese
 Romanian
 Simplified Chinese
 Slovenian
 Spanish


Overview of Changes from GLib 2.25.15 to GLib 2.27.0
====================================================

Build:
  - massive restructuring to reduce #include abuse
  - tweaks to silence some harmless compiler warnings
  - rename gschema-compile.c to glib-compile-schemas.c
  - Windows fixes
  - fix building with zlib < 1.2.4 on win32

GDateTime:
  - better msgctxt for translating month and weekday names
  - API is changed quite a lot, implementation is improved
  - GTimeZone is now exposed

GObject:
  - make ordering for overridden interface properties consistent
  - ->priv structures are limited to 64k but this was not documented,
    and exceeding this limit produced bad results.  Add docs and enforce
    the limit properly.
  - add g_object_class_install_properties() to install multiple
    properties in one go
  - improve debugging output for GValue containing G_TYPE_STRV

GIO:
  - fix priority sorting of GIO extensions
  - add GCredentials support on FreeBSD
  - fix support for IPv6 addresses in URI parsing functions
  - GSocketClient fixes for when g_socket_connect succeeds immediately
  - clarify string encoding for GFile constructors in docs
  - new functions g_data_input_stream_read_upto{,async,finish}
  - tweak confusing documentation for g_output_stream_write()

GDBus:
  - GDBusMessage can now be locked and copied (like in libdbus)
  - GDBusConnection filter function API has changed again
  - GDBusServer: ::new-connection now declares if the connection was claimed
  - add a partial workaround for GObject bug 627724.
  - very many memory leaks fixed

GVariant:
  - check for size == 0 in g_variant_get_bytestring to avoid a crash
    when attempting to get_bytestring() from an empty array
  - improve gobject-introspection annotations

GSettings:
  - add GSettings Windows registry backend
  - some internal tweaks to the backend API
  - remove g_settings_list_items
  - add g_settings_list_children and _list_keys to replace it
  - add schema compiler restrictions for dealing with lists
  - don't automatically emit value changed signals on writability
    changes

Other:
  - constify the 'parser' vtable param to g_markup_parse_context_push()
  - plug many memory leaks in test cases

Bugs closed:
  50076 Time API to go with date API
 584284 g_data_input_stream_read_until_async different from sync version
 624546 Modification of GDBusMessage in filter function
 626919 Let g_object_class_install_property() return the installed GParamSpec*
 628029 GDateTime missing get_week_of_year method
 628253 Interface properties not listed in a consistent order
 628331 Plug lots of mem leaks in gio test suite
 628345 Plug a mem leak
 628436 Plug a mem leak
 628505 Fix building with zlib < 1.2.4 on win32
 628839 [PATCH] datetime: Rename shadowing variables
 628904 [PATCH] Add credential support for FreeBSD and fix a socket issue
 628952 incorrect glib_major_version and other variables on cygwin.
 629192 g_strdup_value_contents(): dump GStrv more usefully
 629251 g_socket_client_async_connect_complete: assertion failed
 629259 Failed to connect to "::1"
 629328 g_markup_parse_context_push doesn't respect const structs
 629429 month "May" short and full form same with "GDateTime" msgctxt
 629689 GDBusConnection leaks its GCredentials
 629698 Segfault in g_variant_get_bytestring() 

Updated translations:
  Arabic
  Armenian
  Basque
  British English
  Czech
  Finnish
  Galician
  German
  Hungarian
  Indonesian
  Japanese
  Lithuanian
  Norwegian bokmål
  Polish
  Portuguese
  Punjabi
  Simplified Chinese
  Slovenian
  Spanish
  Swedish
  Swedish
  Traditional Chinese

Overview of Changes from GLib 2.25.14 to GLib 2.25.15
=====================================================

 * GIO
  - Memory leak fixes
  - The GZip(De}Compressor can now process header information
  - Support for network proxies has been added, with the GProxy
    interface and the gio-proxy-resolver extension point. GIO
    includes SOCKSv4 and SOCKSv5 implementations, and libproxy
    is also going to provide an implementation of this extension
    point.
  - There are GAction and GActionGroup interfaces now, which will
    be used in GApplication in the near future.

 * GObject
  - There are now convenience macros for defining boxed and
    pointer types

 * GDBus
  - Memory leak fixes
  - GDBusProxy for well-known names can now auto-restart
    the service if the name owner disapperas
  - Filter functions are now allowed to modify messages

 * GLib
  - GDateTime is a replacement for GDate that supports time
    and timezone information.

 * Bugs fixed:
  50076 Time API to go with date API
 449565 Add G_DEFINE_BOXED_TYPE()
 617691 Add GZIP header processing to GZlibCompressor/GZlibDecompressor
 622184 add g_memory_output_stream_steal_data
 624546 Modification of GDBusMessage in filter function
 627088 Build failure in gdbus-peer.c on FreeBSD
 627181 save a memdup
 627182 Plug a mem leak in the gdbus-connection test
 627187 Plug some gdbus mem leaks
 627188 gdbus-non-socket test occasionally fails
 627252 G_OPTION_FLAG_NO_ARG is only for callback options
 627392 gdbus commit 8a3a4596 breaks win32 compile
 627407 FTBFS on !linux UNIX platforms
 627604 String error: 'that' twice in a row
 627969 ABR in g_file_open_tmp
 628084 gdbus-peer fails with assertion
 628193 Miscellaneous string fixes
 628296 abort() in gsocketconnection.c
 628309 Plug a mem leak in GConverterOutputStream
 628317 GEmblemedIcon:equal implementation is buggy
 628323 Fix invalid reads
 628327 Plug a mem leak
 628328 Plug a mem leak
 628329 Don't leak the FD list
 628324 Invalid reads in gdbus-export test

 * Updated translations:
  British English
  Danish
  Galician
  Hebrew
  Punjabi
  Serbian
  Spanish
  Traditional Chinese


Overview of Changes from GLib 2.25.13 to GLib 2.25.14
=====================================================

* GDBus
 - Make the closure variants of GDBus apis work
 - Make error unregistration work
 - Use async IO in the IO thread (626748)

* GIO
 - Make g_simple_async_result_is_valid work without source (626208)
 - GSocketClient: add a timeout property
 - Fix memory leaks in GSocketClient
 - Handle async vs. sync correctly in GSocketConnection stream (616458)
 - Declare stream base classes as abstract
 - Clarify semantics of g_output_stream_write() (627071)

* Other
 - Improve test coverage for GDBus, GRegex, GAsyncResult
 - Drop dead code in pcre, xdgmime
 - Fix a race condition in gtester (578295)
 - Avoid an extra allocation in GAsyncQueue (626704)
 - Add test case for non-socket GIOStream (626841)
 - More explicit GVariant docs (622770)
 - Imroved docs for GAsyncInitable and GSimpleAsyncResult (602417)

* Translation updates:
 - Galician
 - Norwegian bokmål
 - Punjabi
 - Simplified Chinese
 - Swedish


Overview of Changes from GLib 2.25.12 to GLib 2.25.13
=====================================================

+-------------------------------------------------------------------+
|   WARNING: There have been no breaks in API or ABI.  Weird, eh?   |
+-------------------------------------------------------------------+

The primary purpose of this release is to fix a serious problem with
glib 2.25.12: glibconfig.h (as generated on a Fedora amd64 system) was
being distributed in the tarball.  It was being used to build some parts
of glib on other systems (eg: 32bit ones).  This was causing some very
serious problems.

There have been many other improvements, however:

 Build and testing:
  - vastly improved test coverage
  - old tests moved to the gtester framework
  - gtester Makefile modified so that the tests only run once
  - cleanup of how we handle includes while building glib

 GVariant:
  - add a g_return_if_fail (utf8) to g_variant_new_string()

 GDBus:
  - perform extra sanity checks when serialising messages
  - add API to query and set the byteorder of a GDBusMessage
  - improve debug output, add some extra options
  - if exiting due to the bus disconnecting us, print an error message
    explaining why
  - sort property names correctly
  - don't bother sending RemoveMatch when we will close the connection
    anyway
  - use effective uid/gid for credential passing

 GSettings:
  - add G_SETTINGS_BIND_INVERT_BOOLEAN for inverting boolean bindings
    without mapping functions
  - mark all strings in the schema compiler for translation

 Binding:
  - improve closure support for bindings
  - copy GSettings INVERT_BOOLEAN flag

 Other:
  - fix another complicated GCancellable deadlock possibility

Bugs closed:
 599590 glib build doesn't look for correct pkg-config
 619026 avoid warning in gutils.h when using gcc with -Wconversion
 624739 Please fix POTFILES.in
 625472 Valgrind claims uninitialized bytes used
 625500 g_date_set_time_val documentation doesn't mention local time
 625628 GDBusProxy: wrong property name sorting
 625753 Incorrect flags used in g_dbus_connection_call_sync()
 625827 Expand documentation about error quark naming
 625988 builddir != srcdir issues
 626107 glibconfig.h is being disted

Updated translations:
 French
 Galician
 Hebrew
 Norwegian bokmål
 Spanish


Overview of Changes from GLib 2.25.11 to GLib 2.25.12
=====================================================

+-------------------------------------------------------------------+
| WARNING: There have been many API changes in GDBus -- sending     |
| messages, subscribing to signals, closing connections and         |
| registering subtrees are affected.  The ABI for GSettingsBackend  |
| has also been changed.  For both reasons, a new dconf release is  |
| required (and will be along soon).                                |
+-------------------------------------------------------------------+

Build:
  - cleanup automake setup
  - rename configure.in to configure.ac
  - various docs fixups
  - move glibconfig.h to glib/
  - disable dtrace support on Mac OS (which has incompatible 'dtrace')

GSettings:
  - add support for vendor override files (to change the default values
    in a schema)
  - change GSettingsBackend vtable
  - add g_settings_reset()
  - support binding to G_TYPE_STRV properties

GDBus:
  - many bug fixes, including a serialisation fix
  - stop handling incoming connections as soon as stop() is called
  - proper support for file descriptor passing
  - new flags parameter for sending messages
  - new flags parameter for subscribing to signals
  - always reset the message serial when sending a message unless
    G_DBUS_SEND_MESSAGE_FLAGS_PRESERVE_SERIAL is given
  - constness fixes for introspection structures
  - clean ups to subtree registration API

Other:
  - fix divide by zero bug in g_malloc_n functions
  - GIO: don't blindly assume that SOCK_CLOEXEC is supported
  - make GObject property notify freezes threadsafe
  - GIO: clean up credentials passing
  - GApplication: make default-quit not apply if register=FALSE
  - GIO: add annotations for gobject-introspection

Bugs closed:
 166020 use GAtomic for refcounting
 617483 Credentials passing
 622005 [GApplication] no way to modify the "default-quit" property
 623293 vendor override files
 623810 Message serialization bug
 623815 Don't check sender for GDBusProxy objects where name is not set
 624473 GDBusSubtreeIntrospectFunc return type
 624483 GDBusSubtreeEnumerateFunc clarification
 624484 GDBusSubtreeDispatchFunc clarification
 624754 gdbusaddress.c missing sys/wait.h
 624968 div by zero in g_malloc_n family
 624991 GSettings mapping for G_TYPE_STRV 
 625383 Add missing GI annotations

Updated Translations:
 Armenian
 Galician
 German
 Hebrew
 Kazakh
 Romanian
 Simplified Chinese
 Spanish

Overview of Changes from GLib 2.25.10 to GLib 2.25.11
=====================================================

+-------------------------------------------------------------------+
| WARNING: There have been minor API changes in GDBus and GVariant. |
| These API changes will not affect many users, but they do require |
| a new version of GTK+ to be installed.                            |
+-------------------------------------------------------------------+

Build:
  - add a --disable-Bsymbolic configure flag to disable linking with
    -Bsymbolic-functions
  - this release sees the complete removal of the old 'g*alias' hacks
  - honour the NOCONFIGURE environment variable from autogen.sh
  - use proper feature test macros for isnan
  - use pkg-config to check for zlib
  - add ACLOCAL_AMFLAGS to Makefile.am

GDBus:
  - hide Class and instance structures for all GDBus types except
    GDBusProxy.  This breaks API by preventing subclassing, but probably
    nobody was doing that.
  - add new GDBusConnection call to support flushing all pending
    outgoing messages
  - change the register_object API to add a reference to the
    GDBusInterfaceInfo object so the caller need not keep it alive
    themselves
  - don't rewrite the serial number when sending messages that already
    have a serial number
  - better error checking for DBUS_SESSION_BUS_ADDRESS environment
    variable
  - switch to g_parse_debug_string for G_DBUS_DEBUG and add a lot of new
    flags
  - add support for temporarily freezing a freshly created
    GDBusConnection.  Do this until after the ::new-connection signal
    has finished running on GDBus services.
  - never require non-closed connections (the user is incapable of doing
    this due to the obvious race)
  - remove weird/misleading redundant check on NameOwnerChanged signal
  - emit GDBusProxy::g-properties-changed on NameOwnerChanged

GVariant:
  - the 'g_variant_{new,get}_byte_array' APIs have been removed
  - g_variant_{new,get,dup}_bytestring has been added, with different
    arguments and different behaviour
  - g_variant_{new,get,dup}_bytestring_array has been added, doing
    essentially the same thing as the 'strv' functions, but with byte
    strings instead of utf8 strings
  - G_VARIANT_TYPE_BYTESTRING ('ay'), BYTESTRING_ARRAY ('aay') and
    STRING_ARRAY ('as') constants have been added
  - the undocumented behaviour that g_variant_get_strv() deserialised
    arrays of object paths or signature strings has been dropped
  - additional varargs support for converting bytestrings or bytestring
    arrays with ^ay ^aay ^&ay and ^a&ay
  - improved gobject-introspection annotation
  - fix a problem with GBuffer calling g_slice_free for the wrong type
  - fix leaks in the type inferencing code of the parser

GSettings:
  - improved documentation
  - updated schema XML DTD, now xincluded into the docs
  - added support for schemas that extend other schemas (using the
    'extends=' attribute).  Values of keys in the base schema can be
    overridden using <override>.
  - added theoretical support for lists (using the 'list-of=' attribute)
  - lots of new tests
  - add support for flags (implemented similarly to enums)
  - add support for generating .enums.xml files to gsettings.m4:
      gsettings_ENUM_NAMESPACE = org.example.myapp
      gsettings_ENUM_FILES = ../path/to/*.h
    will generate org.example.myapp.enums.xml with mappings for all
    enums and flags in the specified .h files.
  - warn with g_message() if the 'memory' backend is used by default
    (ie: because no other GSettings backends are installed)
  - fix get_property() for GSettings::schema
  - command line tool: fix a bug that prevented non-basic values from
    being set due to a premature free
  - command line tool: bash completion support
  - chain up in _finalize
  - add a new g_settings_get_mapped API to read settings that require
    post-processing
  - retry with the translated or schema default value if the
    GSettingsBindGetMapping function fails
  - schema compiler: never fail due to empty schema directories (but
    warn)
  - peek rather than ref/unref the GEnumClass in the mapping function
  - schema compiler: compile *.enums.xml before *.gschemas.xml to ensure
    that we have all the enums that the schemas may reference
  - schema compiler: improve accuracy of line numbers in error reports
  - fix crashes in the keyfile backend caused by invalid group names in
    the keyfile

Other:
  - always intern GBinding prop names
  - base64: remove asserts preventing conversion of empty strings
  - document NULL special-cases for GValueArray
  - GNode docs improvements
  - improve detection of 'system internal' mounts
  - fix leaks in the inotify GFileMonitor implementation
  - annotate all custom GIO GSources to improve debugging (e.g. using
    SystemTap)

Tests:
  - Turn on glibc malloc checking features for make check
  - improvements for GSettings tests, plus new tests
  - improved tests for GKeyfile
  - new tests for GDir, GSList, GSList, GAppLaunchContext,
    CharsetConverter, GIcon, ...
  - move some tests to GTester (tree tests, uri tests)
  - generally, really an awful lot of new tests
  - don't try to allocate 2gigs of memory anymore for the array test

 552363 g_value_array_{insert,prepend,append}'s special cases for NULL
 561248 Improve return value description from g_node_prev/next_sibling()
 570036 Add ACLOCAL_AMFLAGS to Makefile.am
 576833 g_sprintf add a reference to g_strdup_printf
 576854 g_strconcat() documentation should provide a hint about bad l10n
 582227 reference: add other URI functions to 'URI Functions' section
 599223 should provide g_spawn_* variants that take a GAppLaunchContext
 610784 array test failing
 613057 Leak in inotify GFileMonitor implementation
 620536 Annotate all custom GIO GSource using g_source_set_name
 620913 More control with G_DBUS_DEBUG
 622124 implement flags
 622127 GSettings extended key validation
 622128 retry with default value for failed mapping
 622294 More annotations for GVariant
 622565 glib-compile-schemas fails when no schemas
 622600 Fix missing prototype warning
 622813 gsettings mapping & enum buglet
 623142 Ensure ::new-connection runs before processing D-Bus messages
 623143 Never require non-closed connections
 623319 use g_parse_debug_string for dbus debug flags
 623401 process enums first
 623402 schema compiler reports wrong line numbers
 623407 g_keyfile_settings_backend_new crashes with the key "/"
 623473 zlib should be checked with pkg-config
 623537 GDBusProxy has weird checking on NameOwnerChanged
 623538 GDBusProxy::g-properties-changed emission for corner cases
 623692 directory with file at multiple MLS levels may display empty
 623720 gschema.dtd does not contain enum definitions
 623770 quoting of expand_macro in gdesktopappinfo.c
 623772 gdesktopappinfo.c, function child_setup
 623780 g_unix_is_mount_path_system_internal
 623954 g_settings_finalize
 623955 Dubious return values

Updated translations:
 Galician
 Hebrew
 Norwegian bokmål
 Spanish

Overview of Changes from GLib 2.25.9 to GLib 2.25.10
====================================================

+----------------------------------------------------------------+
| WARNING: There have been API changes in GDBus. Users of these  |
| APIs will need to be adapted.  In particular, a new release of |
| dconf is required to go along with this one.  There has also   |
| been a change in the GSettings backend API used for keyfiles.  |
+----------------------------------------------------------------+

* GDBus:
 - add direction parameter to filter functions (API change)
 - allow calling other interfaces with a GDBusProxy
 - padding added to class struct fields (ABI change)
 - fixes for closures-based functions

* GVariant:
 - new is_floating() call
 - add g_value_take_variant() call (required for marshallers)

* GSettings:
 - support for binding GParamSpecEnum properties
 - ifelse-style condition support for GLIB_GSETTINGS m4 macro
 - remove gsettings-schema-convert tool (now in GConf)
 - allow introspection of all installed schemas
 - allow introspection of the keys in a schema
 - rewrite keyfile backend (API change)

* GNIO:
 - don't implicitly close GSocket until it is destroyed
 - windows fixups

* Other:
 - allow GChecksum to take (NULL, 0) for data/length
 - GRelation and GCompletion are now deprecated
 - introduce G_PARAM_DEPRECATED and G_ENABLE_DIAGNOSTIC
 - add working directory to GApplication platform data
 - lots of documentation cleanups
 - PCRE updated to 8.02

* Build:
 - the IA__g_* style symbol aliasing has been disabled and replaced with
   the -Bsymbolic-functions linker flag on platforms that support it.
   Please be on the watch for portability issues and report them to us.
 - many test cases have been moved to the GTester framework
 - lcov support has been added for tests
 - many windows fixes

* Bugs fixed:
 501057  lcov coverage suite and GLib integration
 551271  deprecate GRelation
 601686  Implement diagnostic mode
 603309  GSocketOutputStream broken on Windows (?)
 616718  GLIB_GSETTINGS macro can't be used conditionally
 616855  GSocketConnection: don't close the socket if it's still reffed
 618866  g_ptr_array_remove_index_fast memory leak
 619878  keyfile backend calls keys_changed with invalid argument
 619879  keyfile backend doesn't make use of expected_type
 621092  Add with_closures() variants for bindings
 621172  Cross compiling fails
 621838  Actually add cwd to platform data
 621945  Filter outgoing messages in GDBusConnection
 621947  add g_value_take_variant
 622038  GSettings: "It is a programmer error" documentation is unclear
 622154  [patch] update documentation for g_application_new
 622281  binding: Add SYNC_CREATE to the flags
 622480  Improve documentation for g_strcmp0()
 622554  g_error called if schema not installed
 622601  Return interned strings from g_settings_list_keys

* Translation updates:
 - Galician

Overview of Changes from GLib 2.25.8 to GLib 2.25.9
===================================================

+----------------------------------------------------------------+
| WARNING: There have been API changes in GDBus, GSettings and   |
| GApplication. Users of these APIs will need to be adapted. In  |
| particular, a new release of GTK+ is required to go along with |
| this one.                                                      |
+----------------------------------------------------------------+

* GDBus
 - Use Gio's default async implementation
 - Fix proxy construction for objects with no properties
 - Fix error handling in synchronous initialization
 - Do not dispatch calls to unregistered objects
 - Add _with_closures alternative functions
 - Allow constructing GDBusProxy with well-known names
 - Remove GType parameters from GDBusProxy constructors
 - Nuke g_bus_watch_proxy API
 - Add --xml to gdbus-tool to print raw introspected XML

* GSettings
 - schema file format change: store (default, options) in gvdb
 - Add g_settings_sync()
 - Add support for enums and ranges
 - 'context' support has been replaced by direct use of
   GSettingsBackend

* GApplication
 - Switch to using variants for timestamps
 - Use GInitable

* GObject
 - Introduce g_object_notify_by_pspec
 - Add GBinding
 - The GVariant gtype G_TYPE_VARIANT was changed from boxed
   to fundamental. We believe there were no existing users
   of the boxed type, so this should not cause any applications
   to break.

* Test framework
 - Add package and version to the test report XML
 - Use optparse to parse gtester-report commandline
 - Add subunit support to gtester-report
 - Prevent division by zero if no tests

* Bugs fixed:
 621782 Crash using gbinding
 619945 GConverterOutputStream triggers assertion and corrupts data
 621319 more leaked GVariants in GSettings
 621168 GKeyFile memory leak on Windows platform
 621002 Switch to using variants for timestamps, split out signals
 620953 tiny docs addition
 618904 Lies in gunixmounts documentation
 621702 Correctly initialize GError
 611778 minor cleanup of gtester-report
 621213 GDBusProxy and well-known names
 621034 Rewrite apps test to ensure children are killed
 620954 gapplication gvariant simplifications
 611869 add subunit out feature to gtester-report
 621119 GDBusProxy and objects with no properties
 620990 Use Gio's default async implementation again
 620952 g_application_register_with_data is an ugly API
 621252 GSettings leaks context
 618715 fork() in GSettings test cases is problematic 618715
 621905 Assume a ref when doing async work
 621266 GSettings "context" clarification

* Translation updates:
 Chinese


Overview of Changes from GLib 2.25.7 to GLib 2.25.8
===================================================

* Initial support for dtrace and systemtap profiling:
 - mainloop sources can be named
 - probes for memory allocation with g_malloc and gslice
 - gquark name tracking
 - type creation
 - object life-cyle (creation, finalization, ref, unref)
 - signal creation and emission

* GVariant
 - has been fixed to work with the FreeBSD malloc
 - added introspection annotations
 - new function: g_variant_builder_add_parsed

* GSettings:
 - g_settings_set/get_strv functions have lost their length parameter
 - g_settings_set_strv accepts NULL
 - added introspection annotiations

* GPermission: an abstract interface for representing permissions,
  with a minimal implementation named GSimplePermission

* GApplication: a basic application support class, with a D-Bus based
  implementation

* Bugs fixed:
 619585 glib-compile-schemas asserts on FreeBSD
 620384 Annotate GVariant and GSettings _strv() functions
 606044 Add support for dtrace/systemtap static markers
 620350 add g_variant_builder_add_parsed() API
 620349 utf8ify GVariant printer
 620767 Typo in GSettings documentation: "INTLTOOL_NOMERGE_RULE"
 620312 Fix g_settings_[gs]et_strv() API
 620519 GPermission
 620582 GPermission needs a simple implementation
 620496 GSettings schema compiler should reject invalid paths
 620173 missing single header inclusion guards
 620265 g_assertion_message_error should take const GError *

* Translation updates:
 Esperanto
 Galician
 Hebrew
 Indonesian
 Norwegian bokmål
 Slovenian
 Spanish


Overview of Changes from GLib 2.25.6 to GLib 2.25.7
===================================================

* NOTE: API/ABI breaks since 2.25.6 release:
  - g_dbus_connection_sync{,_sync} takes a new 'reply_type' argument
  - GSettingsBackendClass 'list' virtual function changed

  GSettings backends and things using GDBus may need to be rebuilt.

* GDBus: many build-related fixes

* GDBus (service): return a DBus error when receiving a method call for
  an unknown interface.

* GSettings: fix 'make install' bug in gsettings.m4 for generated schema
  files

* GSettings: avoid non-portable use of LC_MESSAGES

* better approach to handling man pages


* Bugs fixed:
 619527 please improve docs on g_file_make_symlink
 619391 send-with-reply should have expected result signature
 618616 Use stack-allocated GVariantBuilders
 617004 Build with "--disable-nls" fails under MinGW/Win32
 619142 Build fixes (GDBus)

* Updated translations:
 Estonian
 Galician
 Norwegian bokmål

Overview of Changes from GLib 2.25.5 to GLib 2.25.6
===================================================

* GDBus: introspection improvements
* GDBus: build fixes

* GSettings: GSettingsBackend ABI changed               **** NOTE ****
* GSettings: --uninstall option for schema compiler
* GSettings: new m4 macro with more power
* GSettings: thread support

* rework of file notification on Solaris
* fixes for gold linker

* Bugs fixed:
 619038 increase gsettings.m4 power
 619031 method-calls-in-thread test failing
 618839 Typo at translation message
 616864 GSETTINGS_CHECK_RULE doesn't work with multiple files
 618730 gunixcredentialsmessage.c doesn't compile on GNU/kfreebsd
 616314 Make GSettings (partially) threadsafe

* Updated Translations:
 Indonesian
 Galician
 Spanish

Overview of Changes from GLib 2.25.4 to GLib 2.25.5
===================================================

* GDBus: Fix serialization of empty arrays

* GDBus: Plug various memory leaks

* GSettings: Fix problems with GSETTINGS_CHECK_RULE

* Bugs fixed:
 616731 GSETTINGS_CHECK_RULE doesn't work in non-srcdir builds
 616864 GSETTINGS_CHECK_RULE doesn't work with multiple files
 618615 mem leaks in parse_value_from_blob
 618622 Plug some mem leaks in gdbus
 618650 Plug a mem leak in gdbusauth
 618663 Plug mem leaks in gdbus tests & examples

* Updated translations:
 Spanish


Overview of Changes from GLib 2.25.3 to GLib 2.25.4
===================================================

* GDBus D-Bus support has been merged. This provides an API
  to replace dbus-glib

* GVariant no requires strings to be UTF-8. You can use byte
  arrays for non-UTF-8 strings.

* GSettings allows to bind string properties to byte arrays

* The schema compiler supports range restrictions

* Bugs fixed:
 618051 socket-server|client.c fail to compile under AIX...
 616102 GSettings ignores <choice> and <range>
 616720 Chunked quark allocation
 616877 Several issues with g_socket_receive_message
 616892 gio: Add a boxed type for GFileAttributeMatcher
 616967 Add g_regex_get_compile_flags() and g_regex_get_match_flags()
 617767 g_settings_[gs]et_strv() 'length' argument has missing docs...
 617914 gtester-report: cope with binaries with no test cases
 617937 output_stream_close vs output_stream_close_async semantics
 615494 Connction timeouts produce partially invalid error messages
 617823 glib-compile-schemas problems with an out of source build
 617947 glib-mkenums: add @valuenum@ support

* Translation updates:
 Galicaian
 Norwegian bokmål
 Shavian
 Spanish


Overview of Changes from GLib 2.25.2 to GLib 2.25.3
===================================================

* New macro: G_GNUC_DEPRECATED_FOR, a variant of G_GNUC_DEPRECATED
  that lets you add replacement information (requires gcc 4.5)

* Rename AM_GSETTINGS autoconf macro to GLIB_GSETTINGS

* Rename gschema-compile utility to glib-compile-schemas

* Add support for timeouts in GSocket

* Bugs fixed:
 589989 Compilation error on Solaris 9
 616648 Change AM_GSETTINGS macro to GLIB_GSETTINGS
 587898 I/O timeouts for GSocket
 614541 Add G_TYPE_ERROR boxed type for GError


Overview of Changes from GLib 2.25.0 to GLib 2.25.2
===================================================

* Include a 'gsettings' utility, for commandline access to GSettings

* Install a AM_GSETTINGS autoconf macro similar to AM_GCONF

* GSettings can bind the writability of a key explicitly

* There is now a predefined boxed type for GError

* Bugs fixed:
 615379 g_new macros crash if sizeof(struct_type) == 0
 616312 Add m4 rule equivalent to GCONF_SCHEMAS_INSTALL
 616295 mapping bug for uint64
 616216 glib compile from remote directory fails
 615960 Fix size passed to connect() for abstract sockets
 616432 Crash in gschema-compile
 616331 gsettings-schema-convert uses imaginary types
 616309 gsettings-schema-convert should output gettext-domain
 616384 Add mention of GConfBridge in conversion docs
 616311 gschema-compile outputs in current directory
 616276 simplify gschema-compile test setup
 616156 keys with unnecessary empty options arrays
 616405 gsettings missing g_return_if_fail's
 616245 Use G_DEFINE_INTERFACE macro
 614541 Add G_TYPE_ERROR boxed type for GError

* Updated translations:
 Catalan (Valencian)
 Galician
 Kannada
 Spanish


Overview of Changes from GLib 2.24.0 to GLib 2.25.0
===================================================

* The GSettings framework has been merged. This provides the API to
  replace GConf. DConf will provide a backend implementation for it.
  GConf will also provide a backend implementation to ease the
  transition. We provide utilities to assist with schema conversion
  and data migration, as well as a porting guide.

* Translation updates:
 Bengali
 Catalan
 Danish
 Gujarati
 Marathi
 Thai
 Traditional Chinese


Overview of Changes from GLib 2.23.6 to GLib 2.24.0
===================================================

* Bug fixes:
 613601 buglet in dup_close_on_exec_fd
 584284 g_data_input_stream_read_until_async behaves confusingly
 613748 Write errors in middle of copy cause hang
 613923 splice_stream_with_progress: wrong error handling
 613667 Typo in GObject documentation
 613618 gvariant format string docs unclear

* Translation updates:
 Basque
 Ukrainian
 Vietnamese


Overview of Changes from GLib 2.23.5 to GLib 2.23.6
===================================================

* Class private data:
  - support for private data associated with a GTypeClass

* GVariant merge is now complete:
  - loading functions and parser merged

* Windows improvements:
  - socket fixes
  - various build improvements
  - removal of GCC/C99isms in favour of portable code
  - drop unmaintained Visual Studio 8 support

* Minor API addition:
  - g_desktop_app_info_get_filename()

* Bugs fixed:
 521707 Class private data
 612502 build fails on glib/tests/gvariant.c
 612832 [GDesktopAppInfo] New function g_desktop_app_info_get_filename
 612702 [PATCH] Fix GSocket-related crash on Windows
 612736 Improve the documentation about single include
 610858 gvariant test fails sometimes
 612327 uninitialized variable

* New translations:
 Afrikaans
 LowGerman

* Updated translations:
 Czech
 Finnish
 Galician
 Greek
 Punjabi
 Romanian
 Serbian


Overview of Changes from GLib 2.23.4 to GLib 2.23.5
===================================================

* New API addition: g_malloc_n() and friends used to implement an
  overflow-safe family of g_new() macros.

* GVariant:
 - GVariantBuilder and GVariantIter are now merged.
 - The variable arguments API is now merged.
 - The parser will be in a future release.

* GIO:
 - Remove GUtf8InputStream (which never appeared in a stable release)
   for now since it doesn't satisfy the needs of its main intended use
   case.  We hope to reimplement this feature in a better form in a
   future release.

* Bugs fixed:
 609531 missing licence headers
 612107 Missing G_FILE_ATTRIBUTE_TRASH_ORIG_PATH
 611897 g_io_modules_scan_all_in_directory leaks
 608196 Overflow-safe g_new family
 611696 gio uses GetAddrInfo which requires special handing on windows 2k
 605667 Don't use G_PARAM_SPEC_VALUE_TYPE when we know the pspec is valid
 610860 test_g_file_open_readwrite fails if $HOME is unwritable
 552912 glib-2.18 /live-g-file/test_copy_move failed when run as root
 609813 Renaming a file discards file notes

* Updated translations:
 Basque
 Brazilian Portuguese
 British English
 Bulgarian
 Catalan
 Danish
 Estonian
 French
 German
 Hungarian
 Italian
 Lithuanian
 Norwegian bokmål
 Portuguese
 Russian
 Slovenian
 Spanish
 Swedish
 Traditional Chinese


Overview of Changes from GLib 2.23.3 to GLib 2.23.4
===================================================

* GVariant: The core of GVariant has been merged now, with some
 API still to follow.

* GIO:
 - There is a new interface GFileDescriptorBased for file descriptor
   based IO. GLocalFile{Input,Output}Stream implement it
 - Use splice(2) to transfer data between file descriptors without
   extraneous copies
 - Add a way to request move events from file monitors

* Bugs fixed:
 609143 *result_uncertain is never assigned in g_content_type_guess
 604086 Use splice(2) when doing local file copies
 547890 No move events for GFileMonitorEvent?
 568760 nautilus freezes due to a bug in garray.c:322
 609962 Add info about the use of G_DEFINE_INTERFACE
 609564 g_base64_encode_close docs should mention outbuf size...
 610484 g_variant_equal bug
 610131 libasyncns does not compile on Solaris 8
 609530 missing single header include guards

* Updated translations:
 Czech
 Estonian
 Galician
 German
 Korean
 Polish
 Slovenian
 Spanish
 Traditional Chinese


Overview of Changes from GLib 2.23.2 to GLib 2.23.3
===================================================

* GLib now has a facility for locks that consume only one bit of
  storage inside an integer: g_bit_lock()

* GVariant: The serializer has been merged, with more API to follow

* Bugs fixed
 548967 1 bit mutex lock
 604967 2.22.3 libasyncns build fails on HP-UX 11.11
 608602 G_VALUE_COLLECT_INIT variables shadow those in G_VALUE_COLLECT
 608743 Crash in g_hostname_to_ascii visiting certain website in epiphany
 599197 array ref and unref functions crash on NULL array.
 608159 mem leak in g_io_modules_scan_all_in_directory

* Translation updates
 Brazilian Portuguese
 Czech
 French
 Norwegian bokmål
 Slovenian
 Spanish
 Thai


Overview of Changes from GLib 2.23.1 to GLib 2.23.2
===================================================

* We are now using gcc builtins for atomic operations when available

* g_assert() grew the ability to store assertions in core dumps

* GIO supports lazy loading of GIO modules, and there is a new
  gio-querymodule utility that goes along with this.
  Packagers will need to adapt to this.

* Threading changes:
 - The requirements for g_thread_init() have been relaxed slightly,
   it can be called multiple times, and does not have to be the first
   call.
 - GObject now links to GThread and threads are enabled automatically
   when g_type_init() is called.
 - Thread-safety issues with boxed types in GObject have been fixed.

* GObject:
 - Another bunch of performance work has landed

* GVariant:
 - GVariantType has been merged, with the rest of the GVariant
   API to follow.

* Bugs fixed:
 568760 nautilus freezes due to a bug in garray.c:322
 602417 Document lifecycles of GSimpleAsyncResult and friends
 604824 crash in Epiphany: Selecting my Slashdot bo...
 448888 don't init g_slice for always-malloc
 531902 Use GCC atomic buildins for g_atomic*
 554887 boxed type registration is not thread safe
 586150 unresolved symbols when building glib 2.21.2 on OS X Tiger
 589176 row gvalue transform array exponentially
 594872 Support storing assertion messages into core dump
 602240 Upgrade libasyncns to 0.8
 603590 Speed up G_VALUE_COLLECT
 604457 gutf8inputstream.c: increasing unknown size pointer
 605686 GCharsetConverter doesn't flush
 605733 g_memory_output_stream_new violates GObject standards
 605883 g_object_new() processes varargs even when there are none
 605977 invalid utf-8 conversion in g_local_file_get_parse_name(...
 606775 Enable threads by default in gobject

* Translation updates:
 Asturian
 Basque
 Bengali
 Bulgarian
 Estonian
 Norwegian bokmål
 Spanish
 Thai
 Ukrainian


Overview of Changes from GLib 2.23.0 to GLib 2.23.1
===================================================

* GObject performance work has landed:
 - Construction of simple objects is much faster
 - Interface lookup is lock-free and constant-time now
 - Reduced locking overhead when dealing with types

* GType now has a G_DEFINE_INTERFACE convenience macro

* GIO gained GUtf8InputStream, an input stream that
  performs utf-8 validation

* GLib now has byte-swap macros for gsize and gssize

* Bugs fixed:
557151 Determining the newly_constructed boolean in gobject.c...
557100 Performance improvements for GObjectClasses that don't...
501166 Warning message says IA__g_type_init instead of g_type_init
585375 Performance and Contention problems with g_type_class_ref...
587892 Race in GType when instantiating the same class for the...
603270 Input Stream validating utf8
603476 gioenums.h:62: error: comma at end of enumerator list
603540 g_time_val_from_iso8601 uses uninitialised variable
603982 Stack overflow when reading file async with filter
604645 G_DEFINE_INTERFACE_* documentation is not generated
604875 Use of sa_len conflicts with system header
320482 provide G_DEFINE_TYPE like macros for interfaces

* Updated translations:
 Estonian
 Hebrew
 Norwegian bokmål
 Vietnamese
 Welsh


Overview of Changes from GLib 2.22.x to GLib 2.23.0
===================================================

* GIO:
 - GConverter: a generic interface for stateful conversions of data,
   suitable for charset conversion, compression, decompression, regexp
   replacement. Concrete implementations are GCharsetConverter,
   GZlibCompressor and GZlibDecompressor. GConverterInputStream,
   GConverterOutputStream are stream implementations that convert data
   while loading or saving it.
 - GMounts can now have a 'default location': a path that reflects
   the main entry point for the user (e.g. the home directory).
 - As a consequence of the compression support, GIO depends on zlib now.

* GObject:
 - G_IMPLEMENT_INTERFACE_DYNAMIC: a convenience macro for adding
   interfaces to dynamic types.

* GModule:
 - The -pthread flag has been added to all gmodule .pc files, because
   it is not generally permissible to load modules that are linked
   against libpthread if the program has not been compiled with threading
   support.

* Bugs fixed:
 601637 GUnixFDMessage should contain a GUnixFDList
 585566 GSocketListener API issues
 572252 Bug in g_file_test() function.
 600550 g_app_info_create_from_commandline doesn't treat arguments properly
 541236 not detecting exact content type
 350200 [PATCH] GTypeModule derived class unref does not unload plugin
 589631 Please enclose literal values with double quotes
 577711 cross compile check for g++ broken
 600620 Support X-GNOME-FullName in GAppInfo
 598899 GWin32DirectoryMonitor is broken
 593809 Nautilus does not restore the position of the icons on the desktop...
 563627 g_get_prgname() threadsafety
 600141 Add -pthread to gmodule pkg-config
 593856 file and directory monitors don't work when glib is compiled...
 324930 Nautilus should disallow copying of symlink to FAT drive early
 587300 Deadlock when calling g_cancellable_disconnect in a...
 595138 GFile not robust with invalid input
 591216 Warning building resolver.o
 590016 Does not compile under MinGW32 + Wine
 591214 Warnings building gcancellable.o
 561998 Have specific entry points (paths) for mounts...
 508157 Add G_IMPLEMENT_INTERFACE_DYNAMIC
 535159 g_file_has_parent

* Updated translations:
 Brazilian Portuguese
 Catalan
 Estonian
 Galician
 Norwegian bokmål
 Shavian
 Slovenian
 Spanish
 Swedish


Overview of Changes from GLib 2.22.1 to GLib 2.22.2
===================================================

* GIO:
 - Support case-sensitive globs in the shared mime database,
   including support for the newer cache format that allows these.
   Case-sensitive globs have been introduced in shared-mime-info
   version 0.70

* GObject:
 - Speed up creation of simple objects

* Bugs fixed:
 597194 Typo in _G_TYPE_CVH macro

* Updated translations:
 Russian


Overview of Changes from GLib 2.22.0 to GLib 2.22.1
===================================================

* Bugs fixed:
 596064 Test file marked for translation
 595972 possibly invalid search in mime_info_cache_dir_add_...
 596561 C99 style of declaration of variable in gmessages.c
 596314 g_utf16_to_utf8 returns an invalid UTF8 string
 596748 g_async_result_get_source_object returns a new ref
 593809 Nautilus does not restore the position of the icons...
 593775 uses inotify_init1 unconditionally

* Updated translations:
 Bengali
 Hebrew


Overview of Changes from GLib 2.21.6 to GLib 2.22.0
===================================================

* Add gdb python macros to make gobject debugging more pleasant

* Bugs fixed:
 579050 Allow making selected critical and warning messages non-fatal
 594759 g_socket_send_message fails due to invalid sendmsg params
 593941 GNetworkAddress skipping addresses when enumerating
 594597 Fix build with srcdir != builddir
 595619 Include gdb pretty printers

* Changes that might affect bindings:
 - The error parameter of g_simple_async_result_set_from_error has been
   made const.

* Updated translations:
 Assamese
 Bengali India
 British English
 Bulgarian
 Catalan
 Czech
 Danish
 Finnish
 Galician
 Greek
 Gujarati
 Hindi
 Japanese
 Kannada
 Malayalam
 Marathi
 Norwegian bokmål
 Oriya
 Polish
 Punjabi
 Romanian
 Serbian
 Simplified Chinese
 Slovenian
 Spanish
 Tamil
 Telugu
 Thai
 Traditional Chinese
 Ukrainian
 Vietnamese


Overview of Changes from GLib 2.21.5 to GLib 2.21.6
===================================================

* Minor API additions:
  g_mkstemp_full is a variant of g_mkstemp that allows to specify flags
  and permissions

* Bugs fixed:
 593232 g_rand_new: read no more than requested from /dev/urandom
 591995 use saved errno
 589491 g_time_val_from_iso8601 doesn't handle some cases
 593406 Permissions set to 777 after copying via Nautilus
 594034 Add g_mkstemp_full()

* Updated translations:
 Assamese
 Basque
 Brazilian Portuguese
 Czech
 Estonian
 French
 German
 Hungarian
 Italian
 Kannada
 Malayalam
 Marathi
 Norwegian bokmål
 Oriya
 Portuguese
 Swedish
 Tamil
 Turkish


Overview of Changes from GLib 2.21.4 to GLib 2.21.5
===================================================

* A performance problem with trashing of many files has been fixed

* GResolver now invalidates the libc resolv.conf cache as needed

* Minor api additions:
 - g_cancellable_make_pollfd returns a boolean now. And there is a
   new function g_cancellable_release_fd that can be used to released
   the resources used by a GCancellable.

* Bugs fixed:
 589988 Compilation error on Solaris 9 (missing stdint.h)
 588901 gtcpconnection.c won't compile
 584246 GResolver needs to call res_init() when network state changes
 591714 Figure out failure handling for g_cancellable_make_pollfd()
 591532 redundent '/' returned from g_file_resolve_relative_path
 591378 Use MSG_NOSIGNAL in GSocket if it's available
 589649 API documentation migration for Base64 Encoding
 591840 configure fails with autoconf 2.64

* Updated translations:
 Basque
 Brazilian Portuguese
 Bulgarian
 Danish
 Estonian
 Finnish
 Galician
 Gujarati
 Hndi
 Irish
 Japanese
 Korean
 Norwegian bokmål
 Polish
 Portuguese
 Punjabi
 Spanish
 Swedish
 Telugu
 Traditional Chinese
 Thai


Overview of Changes from GLib 2.21.3 to GLib 2.21.4
===================================================

* GTree is now refcounted

* Bugs fixed:
 587938 Undocumented limitation for g_str_equal
 587773 refcounts for GTree

* Updated translations:
 French
 Hebrew
 Norwegian bokmål
 Spanish
 Swedish
 Traditional Chinese
 Ukrainian


Overview of Changes from GLib 2.21.2 to GLib 2.21.3
===================================================

* GMappedFile is refcounted now

* Mainloop: It is now possible to set per-thread default contexts,
  with g_main_context_push_thread_default.

* glib-mkenums supports a @basename@ substitution, in addition
  to @filename@.

* GIO:
 - Vfs implementations can support storing of per-file metadata.
 - GCancellable can now be subclassed.
 - Unmount and eject methods now optionally allow interaction, via
   variants that take a GMountOperation object.

* Bugs fixed:
 556706 Inconsistent help arguments -h, -?
 579449 FileChoosers no longer work if an idle handler is active
 579933 mainloop FD_CLOEXEC has a race condition
 579984 alternate GMainContext support
 585937 gio/gsocket.c (glib 2.21.2) does not compile (Windows/mingw)
 586675 Runtime library location
 586797 Add GCancellables to GSocket ops
 586868 g_filename_complete_get_completions doesn't always return...
 587415 g_resolver_lookup_by_name_finish returns a freed list
 587434 regression tests fail, at least on x86_64
 586928 Avoid g++ warning in g_error()

* Updated translations:
 Estonian
 Hebrew


Overview of Changes from GLib 2.21.1 to GLib 2.21.2
===================================================

* GIO:
  - g_socket_speaks_ipv4 is a new function to check if a socket can
    speak IPv4.
  - g_socket_listener_add_address gained a new effective_address out
    parameter.
  - GIO now returns special icons for XDG user directories, by the
    name folder-music, folder-documents, etc.
  - GIO gained support for starting/stopping of drives, which can be used
    in connection with external hard disk enclosures, disk arrays, iSCSI
    devices, etc. See g_file_start/stop_mountable.

* GLib:
 - g_reload_user_special_dirs_cache is a new function to force GLib to
   reload the XDG user directory mapping from disk.

* Bug fixes:
 584574 glib compile failure on Mac OS X with gunixresolver.c and...
 585566	GSocketListener API issues
 584255	Incorrect freeing of thread pool in GThreadedSocketService
 585088	g_string_chunk_insert_len stops at nul bytes
 585360	Monitor fontconfig configuration files using gio causes m...
 580103	Terminal starts on Display :0.0 when started on :0.1 in D...
 580301	network: a few issues on old darwin
 583398	SRV weight sorting is incorrect
 584176	build fixes on FreeBSD
 585189	g_cancellable_reset() must be called in same thread as g_...
 585280	compilation dies on gio/gsocket.c, needs sys/uio.h to con...
 585281	gio/gunixfdmessage.c needs sys/types.h for platforms that...
 585478	don't leak the inotify fd
 585575	g_socket_listener_add_inet_port() doesn't do the right thing
 585599	g_socket_listener_add_socket() consumes the socket
 585676	GEmblem doesn't reference its 'icon' if that is set as a ...
 585717	"bytes" nautilus translation to french is not shown in th...
 541276	XDG directories should have their own icons
 585726	Grammatical error in GList documentation
 585520	Wrong warning option in documentation
 585673	GNOME Goal: Remove deprecated glib symbols
 585591	Starting/stopping drives

* Updated translations:
 Bengali India
 Norwegian bokmål


Overview of Changes from GLib 2.21.0 to GLib 2.21.1
===================================================

* GIO:
 - Support for network IO has been added, including a low-level
   socket API and a high-level API for network connections and
   services.
 - Support for read-write access with GIOStream and its subclasses.
 - GMount gained a pre-unmount signal.

* Bug fixes:
 576104Implement GMount::pre-unmount
 578769 implement GWinHttpFileInputStream::close_fn
 582856	gsocket.c doesn't compile on Solaris
 569375	g[u]intptr undocumented
 573246	[FIX] g_desktop_app_info_dup() can access NULL pointer
 575013	g_cancellable_push_current() does not allow NULL
 577884	live-g-file.c:461: error: format ‘%d’ expects type ...
 578499	g_output_stream_splice and stream closing with gnio strea...
 579558	Application employing gvfs crashes with only libgvfscommo...
 583001	SIGPIPE (grr!)
 583061	Please add convenience function to connect to machines by...
 583198	typo in error message
 583206	use g_set_error_literal where appropriate
 583229	void function g_async_initable_init_async returns value
 583324	locking problem in g_main_context_iterate()
 583408	void function g_socket_control_message_serialize returns ...
 578786	wrong and confusing error message
 583205	g_inet_address_to_bytes has no length outparam
 583196	mem leak in keyfile test
 583663	GSocketType enum ends with a comma
 569024	Make g_error_new_valist public
 569376	missing G_G[U]INTPTR_FORMAT
 580347 off-by-1 bug in GWinHttpFile

* Updated translations:
 Oriya
 Spanish
 Valencian-Catalan


Overview of Changes from GLib 2.20.x to GLib 2.21.0
===================================================

* GIO:
 - New helper functions g_cancellable_connect/disconnect to avoid
   race conditions when connecting to the "cancelled" signal on
   GCancellable.
 - New types and methods for dealing with IPv4 and IPv6 addresses (and
   UNIX domain socket addresses under UNIX). This does not include code
   for actual socket I/O.
 - GResolver provides asynchronous and cancellable APIs for resolving
   hostnames, reverse lookup of IP addresses and resolving SRV records.

* Glib now provides hash and comparison functions for int64 and double
  types, suitable for use with GHashTable.

* GArray, GPtrArray and GByteArray can be ref counted now, and have
  boxed types.

* Bugs fixed:
 572844 Helper for GCancellable::cancelled connect/disconnect
 578363 goption docs should be improved
 548466 async/cancellable DNS resolver
 579830 param spec strings should use P_()
 579862 requesting xattr::foo ends up calling getxattr(..., user...
 580453 Hash and equal functions for gint64 and gdouble
 580450 Reference counting and boxed types for arrays
 580194 gresolver doesn't build on Solaris
 580301 network: a few issues on old darwin
 580299 network: include sys/types.h before sys/socket.h to insur...
 572508 gmarkup speedup
 580546 g_strtoull() referenced in documentation...
 580656 g_key_file_set_string_list erroneously asserts list != NULL
 579272 leaks in g_simple_async_result_set_op_res_gpointer


* Updated translations:
 Catalan (ca)
 Pashto (ps)
 Spanish (es)


Overview of Changes from GLib 2.20.0 to GLib 2.20.1
===================================================

* Bug fixes:
 575555 Use fsync() when replacing files to avoid data loss on
 575708 runaway inotify madness
 575270 GVolumeMonitor::mount-pre-unmount not being emitted
 577128 glib make check Failed to execute child process...
 573673 Always show "backup" directories
 578369 g_time_val_from_iso8601() parses timezones incorrectly
 578002 Fix a small typo in GFile docs
 578017 G_DEFINE_TYPE_EXTENDED docs

* Updated translations:
 Arabic
 Assamese
 Basque
 Bularian
 Brazilian Portuguese
 British English
 Catalan
 Danish
 French
 Galician
 German
 Greek
 Hungarian
 Italian
 Japanese
 Kannada
 Lithuanian
 Malayalam
 Norwegian bokmål
 Oriya
 Polish
 Punjabi
 Russian
 Simplified Chinese
 Slovenian
 Spanish
 Swedish
 Tamil


Overview of Changes from GLib 2.19.9 to GLib 2.20.0
===================================================

* Base64 support: Avoid integer overflows. CVE-2008-4316

* Bugs fixed:
 574019 GChecksum: document and guarantee hex characters in lower case
 573454 Unable copy/move files to directories symlinked to gvfs share
 561172 gnome-open fails on local URIs with anchors
 573970 crash in gunixvolumemonitor:update_mounts when unmounting
 573843 g_get_current_dir returns non-absolute path

* Updated translations:
 Assamese (as)
 Bengali (bn_IN)
 Czech (cs)
 Hindi (hi)
 Italian (it)
 Japanese (ja)
 Lithuanian (lt)
 Malayalam (ml)
 Marathi (mr)
 Oriya (or)
 Polish (pl)
 Romanian (ro)
 Telugu (te)


Overview of Changes from GLib 2.19.8 to GLib 2.19.9
===================================================

* GMarkup:
 - Considerable speedup

* GIO
 - Add G_FILE_CREATE_REPLACE_DESTINATION flag to allow replacing
   the destination of a copying operation as if it did not exit before.
 - Be more careful when classifying files as desktop files
 - Support desktop file key X-GIO-NoFuse which disables the use
   of fuse pathnames for %u and %U arguments

* Bugs fixed:
 572672 glib/gthread.c: argument is different type
 572464 Doc for g_file_get_contents
 572151 “it's” and “its” confused in docs and comments
 570501 g_win32_get_system_data_dirs uses invalid conversion...
 167569 g_string_append_printf crashes on win32 when used...
 572508 gmarkup speedup
 560564 Replacing a symlink with its linked file truncates... 
 549298 impossible to copy files with p (pipe) flag
 543183 Clarify docs for g_file_has_prefix
 540461 g_memory_output_stream_get_data_size() doesn't behave...
 573462 GEmblemedIcon leak
 573421 Clarify message format in GMountOperation
 573658 Deadlock in giomodule.c
 556706 Inconsistent help arguments -h, -?
 573527 Wrong shell to run config.status in Makefile.in.in
 573128 A couple of typos in GObject documentation

* Updated translations:
 Catalan (ca)
 British English (en_GB)
 Spanish (es)
 Basque (eu)
 Finnish (fi)
 French (fr)
 Gujarati (gu)
 Hebrew (he)
 Hungarian (hu)
 Korean (ko)
 Maithili (mai)
 Norwegian bokmål (nb)
 Dutch (nl)
 Portugese (pt)
 Swedish (sv)
 Thai (th)
 Traditional Chinese (zh_HK)
 Traditional Chinese (zh_TW)


Overview of Changes from GLib 2.19.7 to GLib 2.19.8
===================================================

* GIO: Fix missing exports of new API

* Fix strict aliasing warnings and violations to make Glib work
  with gcc 4.4


Overview of Changes from GLib 2.19.6 to GLib 2.19.7
===================================================

* GIO
 - GFile gained an attribute for the actual file size in bytes
 - GMountOperation gained an "aborted' signal that allows to abort
   a mount operation from the backend side

* Bugs fixed:
 523742 Use noinst for non-installable libraries
 566747 URIs opened with firefox %u load as local files
 541225 Can't compile gio on AIX duplicate case value in gioerror.c
 571598 GAsyncResult with NULL gobject
 505042 add file attribute for actually used file size in bytes

* Updates translations:
 Basque (eu)
 Gujarati (gu)
 Italian (it)
 Japanese (ja)
 Norwegian bokmål (nb)
 Dutch (nl)
 Portugese (pt)
 Thai (th)
 Vietnamese (vi)


Overview of Changes from GLib 2.19.5 to GLib 2.19.6
===================================================

* New format macro to print goffset data: G_OFFSET_FORMAT

* GIO: 
 - Add a GFilter{Input,Output}Stream::close-base-stream properties which
   determine whether the base stream will be closed when the filter stream
   is finalized.
 - g_data_input_stream_read_line and ..._read_until have asynchronous
   variants now.

* Bugs fixed:
 568294 A wrong reference in the description of g_bookmark_file_...
 563141 RFE: define G_OFFSET_FORMAT
 569105 g_time_val_to_iso8601() assumes time_t==long
 568394 dropping the last reference to a stream filter closes...
 568741 g_buffered_input_stream_fill_async doesn't work
 568723 g_buffered_input_stream_fill_async doesn't take count == -1
 568575 _async functions for GDataInputStream

* Updated translations:
 Bulgarian (bg)
 Finnish (fi)
 Hungarian (hu)
 Oriya (or)
 Swedish (sv)
 Traditional Chinese (zh_HK)
 Traditional Chinese (zy_TW)


Overview of Changes from GLib 2.19.4 to GLib 2.19.5
===================================================

* Update included PCRE to 7.8

* g_base64_decode_inplace: New function to do base64 decoding in place

* Bugs fixed:
 567138 get_package_directory_from_module() does not free ...
 566569 gregex docs clarification
 566573 g_match_info_fetch_pos docs
 564728 Add function to decode base64 encoded data in place
 567838 G_STRUCT_OFFSETOF fails to compile under icc 9.1
 567977 textdomain() macro should not return NULL ...
 512779 --disable-regex breaks compilation
 566770 error code 0 for Too many open files is useless
 565484 g_content_type_guess passes non-UTF8 text to XDG ...

* Updated translations:
 Catalan (ca)
 Spanish (es)
 Italian (it)
 Swedish (sv)

 
Overview of Changes from GLib 2.19.3 to GLib 2.19.4
===================================================

* GIO:
  - Use O_NOATIME when sniffing mimetypes
  - Add a convenience method to check if a GSimpleAsyncResult
    is valid

* Bugs fixed:
 560676 function access for g_threads_supported
 565905 There is no g_context_group_set_translation_domain
 564210 SUN Studio 12 has supported visibility attribute
 565136 GObject's "notify" signal parameters are wrong in gtk-doc
 565831 error in interface creation sample
 566348 g_file_open_tmp uses the wrong g_mkstemp on win32
 566064 Add NOATIME flag to query_info_flags
 566170 g_async_result_verify_source_object

* Updated translations:
 Spanish (es)
 Norwegian bokmål (nb)
 Brazilian Portugese (pt_BR)
 Simplified Chinese (zh_CN)


Overview of Changes from GLib 2.19.1 to GLib 2.19.3
===================================================

* Bugs fixed:
 508021 Add support for the CRIS and CRISv32 architectures
 526320 should not list mounts that the user doesn't have permission to use
 558458 Cannot build gio tests on Solaris using SUN cc
 555465 GUnix{Input,Output}Stream lacks fd/close_fd_at_close property
 558298 Hide ecryptfs mounts
 515777 incorrect date&time on copy
 562452 Ensure we return G_IO_ERROR_CANCELLED if cancelling
        g_simple_async_result_run_in_thread
 473150 g_type_module_use inconsistently increases the use
        counter in case of error
 563150 G_GU?INT*_MODIFIER/FORMAT docs
 563156 Document printing and scanning gunichar values

* Updated translations:
 Hebrew (he)
 Italian (it)
 

Overview of Changes from GLib 2.19.0 to GLib 2.19.1
===================================================

* GIO: 
  - g_icon_to_string, g_icon_new_for_string: GIcon serialization support
  - G_FILE_ATTRIBUTE_PREVIEW_ICON: new file attribute for preview images
  - g_app_info_get_commandline: new function to get the full commandline
  - g_mount_shadow, g_mount_unshadow, g_mount_is_shadowed: New functions 
    to 'shadow' mounts (i.e. hide them from the UI when they already
    have a different representation, like a bookmark) 

* Bugs fixed:
 556186 gpoll.h breaks gmain.h inclusion
 557087 mem leak in g_content_types_get_registered
 556921 gpoll.h breaks hal compilation
 557210 g_compute_checksum_for_* asserts with less than 2 bytes
 558381 Add support for compile time assertions
 558185 'parent' variable in g_local_file_get_child_for_display_name()
        hits g_object_unref(NULL) assertion
 558513 g_warn_if_fail FIXME in gtestutils
 558672 NULL key lookup using g_hash_table_lookup_extended() 
 555740 gicon serialization
 557182 preview functionality
 528320 Incorrect icons displayed for files with custom mimetype icons
 556910 Memory leak: sub
 557592 Missing include in gwinhttpfile.c
 556415 Crash on Windows 2000 in g_winhttp_vfs_init()
 555935 Clarify the mechanism of overwriting properties
 552776 ac_cv_func_posix_getgrgid_r not mentioned
 559448 GObject Reference Manual (typo)
 561212 GFileReadMoreCallback API doc refers to non-existant function
 560569 gkeyfile doesn't use the set list_separator in some cases
 560568 gkeyfile docs buglet
 559413 g_option_group_set_error_hook docs buglet
 562378 callback return value not respected for callback option
        with no arg
 559110 Do not include libintl.h after glibintl.h
 557603 carbon check output misplaced
 562544 g_key_file_get_string and g_key_file_get_value
        documentation does not explain the difference
 547264 Missing "no flags" flag
 562638 GDebugKey key member should be const
 562639 g_parse_debug_flags() parsing "help"
 562549 g_byte_array_free should tell how free data
 559452 GObject Reference Manual (typo)
 559462 GObject Reference Manual (typo)
 559517 GObject Reference Manual (typo)
 562538 GObject interface tutorial shouldn't finalise with
        "Please forget everything"
 561352 Leak of icon description
 561375 Leaks mountpoint description
 561807 inotify_sub.c: dup_dirname() fails to remove trailing '/'
 562393 g_buffered_input_stream_read_byte broken if data available
 541715 win32 : patch for warnings and signature problems in recent code
 547481 g_data_input_stream_read_line behaves not as stated in the docs
 548163 Nautilus displays wrong error message for too long file names
 559633 gtk_image_new_from_gicon does not always work for .desktop files
 555486 – No way to recover command line from GAppInfo

* Translation updates:
 Spanish (es)
 Ukrainian (uk)


Overview of Changes from GLib 2.18.1 to GLib 2.19.0
===================================================

* Rewrite GHashTable to use open addressing with quadratic probing instead 
  of chaining. This has the potential to reduce memory fragmentation 
  significantly, while being slightly faster due to better locality and 
  no need to call alloc/free functions for nodes. Benchmarks suggest it 
  also uses less memory overall.

* Make g_poll available as public api

* New macros g_assert_error and g_assert_no_error to assert 
  that a GError is set or unset

* g_cancellable_make_pollfd: New method to make a GPollFD for a cancellable

* g_app_info_can_delete, g_app_info_delete, g_app_info_reset_type_associations:
  New functions to clean up app infos and content types

* When launching applications, always pass fuse file:// uris when possible,
  and let gio convert such uris back to gio uris.

* Bugs fixed:
 505361 gunixinputstream.c assumes poll() available
 509446 portable blocking gio cancellation
 553820 gpoll.c: undeclared identifier
 553724 python interpretter path not patched in correctly
 553857 gbacktrace.h requires signal.h
 553447 g_assert_no_error()
 554092 glib doesn't return G_FILE_ERROR_NOENT et al on OS X
 528670 Always pass file:/// uri's in GAppLaunchContext
 555224 Improve g_format_size_for_display doc
 555309 giochannel breaks on error
 554790 g_convert() misbehaves with winiconv versions
 555314 mem leak in gmarkup
 555313 GFileAttribute boxed type get_type function should...
 552861 glib-2.0.m4 calls system(3) without storing its result
 554557 Patch to fix gcc warnings about missing format specifiers
 552107 Small libtool fixes
 551355 Make glib build with libtool 2.2
 555311 format not a string literal and no format arguments
 556101 static mutex yields warnings with g++
 556186 gpoll.h breaks gmain.h inclusion
 526456 Open addressing in GHashTable
 553426 cancellable clarifications
 545350 GAppInfo deletion
 545351 Reset associations for content type
 552168 volume's mount not mounted after g_volume_mount_finish
 554970 segfault when update-desktop-database is not available...
 554745 GFileAttributeInfoList should be boxed
 555121 Improved build-time handling of gio module-dir
 555711 Wrong fallback order of mimetype icons
 555331 Deprecate adoption of mounts
 556335 make check fails in abicheck.sh
 556334 Warning when building without selinux support
 556422 g_file_enumerator_next_file: unclear...

* Updated translations:
 Arabic (ar)
 Danish (da)
 Polish (pl)
 Brazilian Portugese (pt_BR)
 Romanian (ro)
 Russian (ru)


Overview of Changes from GLib 2.18.0 to GLib 2.18.1
===================================================

* Bugs fixed:
 550433 g_test_init doesn't recognize --help
 523463 Core dump in gmain.c:2482:IA__g_main_context_check
 551228 G_STRFUNC on recent Sun compiler should be expanded...
 551410 gtestutils.c: using printf without prototype
 551731 g_date_set_time[_t] docs should mention what timezone
 548321 <string.h> is not included in gi18n-lib.h
 551149 xdgmime mem leak
 550647 synchronous pipe I/O when reading mount reply
 551887 Docs for g_desktop_app_info_new_from_filename aren't...
 551681 g_content_type_guess() too naive with filenames
 552352 g_app_info_launch doesn't work if "Path" key...
 551408 gmodule.def generated to builddir...
 552359 g_file_info_get_icon should return GThemedIcon, and...

* Updated translations:
 Arabic (ar)
 Bengali India (bn_IN)
 British English (en_GB)
 Hindi (hi)
 Croatian (hr)
 Korean (ko)
 Oriya (or)
 Turkish (tr)
 Telugu (te)


Overview of Changes from GLib 2.17.7 to GLib 2.18.0
===================================================

* Win32:
  - rework the g_poll() implementation to match poll() semantics more closely

* Bugs fixed:
 324234 Using g_io_add_watch_full() to wait for connect() to return...
 548278 Async GETs connections are always terminated unexpectedly...
 500246 Bug fixes for giowin32
 523939 Example program for GValue
 550096 GBookmarkFile parser is not forward compatible
 550040 Move GString, rand and printf tests to the unit test framework
 550104 trivial documentation fix for g_get_home_dir
 548988 g_file_replace fails on Windows when the target file exists
 550059 Wrong docs for g_emblemed_icon_add_emblem
 548800 Missing a g_object_get_type function
 550056 Missing documentation for g_emblemed_icon_get_emblems

* Updated translations:
 Bulgarian (bg)
 Czech (cs)
 German (de)
 Estonian (et)
 Basque (eu)
 French (fr)
 Hebrew (he)
 Hungarian (hu)
 Italian (it)
 Japanese (ja)
 Lithuanian (lt)
 Maithili (mai)
 Dutch (nl)
 Swedish (sv)
 Thai (th)
 Ukrainian (uk)
 Vietnamese (vi)


Overview of Changes from GLib 2.17.6 to GLib 2.17.7
===================================================

* More fixes for 64-bit Windows

* GIO
 - Add a vfs implementation for HTTP and HTTPS URIs on Windows

* Bugs fixed:
 546329 API docs for g_utf8_normalize() are incorrect
 546876 Modify GMarkup parser to accept &#x1; .. &#x1f;
 547200 g_utf8_find_next_char() issues
 547637 unconditional #include of sys/statfs.h in configure
 547337 G_DISABLE_DEPRECATED breaks tests build
 547832 gtk+-2.12.11 fails to build - AC_PROG_MMAP too strict
 502498 Test framework assertion failures should follow gcc
 546371 Improve docs re g_file_monitor
 546483 GThemedIcon:use-default-fallbacks is not readable without...
 546132 GFileIcon is bindings-unfriendly
 542156 zfs mount in home directory shown on nautilus desktop 
 535124 umask 002 not being applied for new directories...
 547080 g_file_copy leaks expected errors
 546582 Callbacks from GFileMonitor present a GFile...
 547262 Missing link in the docs

* Updated translations:
 Arabic (ar)
 Catalan (ca)
 Spanish (es)
 Basque (eu)
 Finnish (fi)
 Galician (gl)
 Hebrew (he)
 Marathi (mr)
 Norwegian bokmål (nb)
 Portugese (pt)
 Brazilian Portugese (pt_BR)
 Swedish (sv)
 Thai (th)


Overview of Changes from GLib 2.17.4 to GLib 2.17.6
===================================================

* Fix problems on 64-bit Windows

* g_markup_context_get_user_data: New function to access
  the user_data outside of callbacks

* GIO
 - g_mount_guess_content_type_sync: synchronous version of
   g_mount_guess_content_type
 - GEmblem: A GIcon implementation that adds emblem-related
   metadata to icons
 - GEmblemedIcon: A GIcon implementation that can add emblems
   to icons

* Bugs fixed:
 544088 option_test_LDADD is left in tests/Makefile.am
 544465 gmarkup makes it hard to use pre-rolled parsers
 545485 Implicit declaration of utime()
 545798 "Since: 2.18" mark is missing in g_set_error_literal...
 544140 fam-helper 64-bit issue
 529694 SELinux context setting support
 545157 wrong/no list of "open with" applications for .cc...
 545203 gfile.c: argument is different type
 545457 gdmsetup crashed with SIGSEGV in g_unix_mount_guess...
 544177 Fix trivial cut and paste error in documentation
 545395 Language tweak for g_value_set_string* docs
 541036 Gnumeric crashes when trying to open Desktop...
 546079 leak in xdgmime
 545395 Language tweak for g_value_set_string* docs
 546017 Don't copy attributes when copying a symlink

* Updated translations:
 Arabic (ar)
 Estonian (et)
 Galician (gl)
 Italian (it)
 Japanese (ja)
 Korean (ko)
 Norwegian bokmål (nb)
 Pashto (ps)
 Portugese (pt)


Overview of Changes from GLib 2.17.3 to GLib 2.17.4
===================================================

* GIO:
 - New API to handle content types: g_mount_guess_content_type,
   g_content_type_guess_for_tree.
 - Export the eject-button signal on the volume monitor class
 - New API to enable out-of-process volume monitors: 
   g_volume_get_activation_root

* GObject:
 - New API to handle signals without slots in the class structure:
   g_signal_new_class_handler, g_signal_override_class_handler   

* Internationalization:
 - Add an NC_ macro that is a no-op equivalent of C_

* GMarkup:
 - Add two new functions g_markup_parse_context_push,
   g_markup_parse_context_pop to support "subparsers"

* Bugs fixed:
 541208 Functions to easily install and use signals without...
 541507 Ambiguous description of assigned characters in the...
 543040 async reading on dummy file will crash on GIO_USE_VFS=local
 543560 enable gio-FEN back-end warnings on Solaris will crash...
 528317 GRegex does not allow recursion limit
 337518 GMarkup: Subparser support
 541794 drive-eject-button signal
 541793 activation root for volumes
 467707 test_iconv_state() in tests/convert-test.c fails on AIX 5.3
 428048 2 of 51 tests fail on Solaris
 542332 small fix for error message in GMarkup
 482413 get_contents_stdio -- overflow and memory corruption
 406120 g_ascii_strtod
 334234 "printf" format error
 536996 Missing noop i18n macro equivalent to C_
 540616 mem leak in filechooser button
 539229 gobject-query calls itself query
 521589 [RFC] gobject documentation should mention Vala
 543168 Description of G_SLICE=debug-blocks discourages its use
 543220 Case collision on gio-extension-points.html
 530759 update the gobject tutorial to the XXI century
 535223 gbookmark file inefficiency ...
 543504 crash in Epiphany Web Browser: Opening local file

* Updated translation:
 German (de)
 Estonian (et)
 Pashto (ps)
 Albanian (sq)
 Thai (th)
 Traditional Chinese (zh_HK)
 Traditional Chinese (zh_TW)


Overview of Changes from GLib 2.17.1 to GLib 2.17.3
===================================================

* PCRE
 - fix for CVE-2008-2371 

* Bugs fixed:
 538119 glib's mainloop leaks a pipe to sub-processes
 537635 Corrections and improvements to g_time_val_{to,from}_iso8601
 539067 The document g_io_channel_win32_new_fd() says...
 535949 annotate g_strip_context and g_dpgettext with G_GNUC_FORMAT
 539123 annotate g_d[n]gettext with G_GNUC_FORMAT
 539074 Cannot get exit status with g_spawn_command_line_sync
 316221 G_LOCK warns about breaking strict-aliasing rules
 539770 migrate gstrfunc unit tests to gtest
 539626 Update docstrings for g_object_freeze_notify and g_object_thaw_notify
 538044 unconditional use of LC_MESSAGES
 540545 Monotonic time and timer offset
 535947 want g_set_error_literal
 539999 glibconfig.h: add GLIB_USING_SYSTEM_PRINTF 
 536252 GFileEnumerator should allow access to the containing GFile
 538362 Get Win32 icons back in the file chooser
 540802 g_list_prepend doesn't concat lists
 540423 unrecoverable error after g_seekable_truncate
 538836 make check failure on PPC and ALPHA: pltcheck.sh on g_atomic_pointer_get
 539090 g_content_type_from_mime_type() should unalias
 540331 g_file_append_to () documentation: can return NULL
 534639 add g_desktop_app_info_new_from_keyfile
 536733 gio build failure on Irix
 536160 Add g_file_monitor()
 538127 FileChooser broken on win32
 531476 /live-g-file/test_traverse_structure test fails on Mac HFS+
 538564 gio should have gio-types.h
 540047 glib-genmarshal.c: '#include <io.h>' is too before

Updated translations:
 Korean (ko)
 Occitan (oc)


Overview of Changes from GLib 2.17.0 to GLib 2.17.1
===================================================

* New function: g_utime(), a gstdio wrapper for utime()

* New functions: g_dgettext() and g_dngettext(), wrappers
  for corresponding gettext functions with added functionaliy

* Support the latest version of the shared-mime spec, including
  icons for mime types 

* New function: g_themed_icon_prepend_name()

* Bugs fixed: 
 535418 Please document which glib version defines goffset
 528715 Misprint in the description of the interface g_type_class_add_private
 528714 Misprint in the description of the interface g_param_spec_flags
 537260 Doc bug in G_TYPE_INSTANCE_GET_CLASS()
 530527 Misprint in the description of the interface 
        g_cclosure_marshal_VOID__FLAGS
 530526 Misprint in the description of the fields 'class_init' and 
        'class_finalize' of the structure GTypeInfo
 528719 Improvement to the documentation of the "g_object_connect" interface
 528172 gtk_signal_handlers_unblock_* functions return value
        amount of matched signals, not amount of actually unblocked
 528717 Misprint in the description of the parameter 'type_id' for 
        the interface g_type_register_fundamental
 528716 Misprint in the description of the parameter 'iface_data' for 
        the callback types GInterfaceInitFunc and GInterfaceFinalizeFunc 
 537555 GObject instantiation not thread safe
 537546 'desktop' shortcut in file chooser looks like a generic folder
 537392 Additional colon in xattr name
 536641 Filesystem querying in gio does not list AFS and autofs file systems
 528600 g_dummy_file_get_parent("scheme://example.com/")
 503071 Application direction changes to right to left even if theres no 
        translation
 502511 g_assert_cmphex prints invalid message
 338162 Use po/LINGUAS
 314453 Nautilus crashes in Solaris when browsing the attached file
 529321 make check fails in glib/pcre
 455215 g_get_user_special_dir: no reference about G_USER_DIRECTORY_DOWNLOAD 
        fallback to $HOME/Desktop if xdg-user-dirs is not in use
 498732 g_key_file_to_data cannot fail
 511367 add g_file_make_directory_with_parents
 531900 Use __builtin_offsetof for G_STRUCT_OFFSET if building with 
        gcc 4.0 or newer
 536158 also bump GHashTable version when a node is removed via
        g_hash_table_iter_remove()/g_hash_table_iter_steal()
 531403 g_utf8_collate broken on Mac
 535628 test/patterntest.c still includes gpattern.h directly
 535625 alias.h:2648: error: 'utime' undeclared here (not in a function)

* Translation updates:
 Arabic (ar)
 German (de)
 Italian (it)
 Norwegian bokmål (nb)
 Thai (th)


Overview of Changes from GLib 2.16.x to GLib 2.17.0
===================================================

* Update to Unicode 5.1

* Update included libcharset to the one shipped with libiconv 0.12

* Update included PCRE to 7.7

* Enforce that only toplevel headers are directly included.
  This is turned on by default for GObject and GIO. To turn
  it on for GLib, define G_DISABLE_SINGLE_INCLUDES.

* Fix library version of GIO.  GLib 2.16 shipped with libgio-2.0.so.0.0.0

* On Solaris, use FEN for file monitoring in GIO

* Use the GIO_EXTRA_MODULES environment variable to find
  additional GIO modules 

* G_GNUC_ALLOC_SIZE: New macro that wraps the gcc alloc_size
  function attribute

* g_checksum_reset: New function to reset the state of a GChecksum 

* g_unix_mount_monitor_set_rate_limit: New function to limit the 
  rate at which events are reported

* g_file_query_file_type: New utility function to query the type of
  a file

* g_memory_output_stream_get_data_size: New function to obtain the
  size of the written data.

* Bugs fixed:
 522292 Gives warnings in glib/gutils.h with GCC in C99 mode
 523298 win_iconv can't convert from UTF-8 to GB18030 (or vice versa)
 518160 replace two g_strdup_printf calls in GBookmarkFile
 523877 gbookmarkfile: avoid using g_string_append_printf() and
        other optimizations 
 525192 100% CPU if run main loop with no IO sources
 315437 extern inline -> static inline
 524314 g_convert() on Win32 implicitly converts full width
        alphanumerics into half width
 525732 Error in documentation for g_list_first
 525674 A typo in gmarkup.c
 448943 g_timeout_add_seconds() problems
 525972 UCS-4 not in the new win_iconv implementation
 526619 make test-report crash
 491554 Update to Unicode 5.1.0
 519137 g_slice_dup macro needs cast for 64-bit platform
 528752 Win32 build and SSL not working
 530457 G_USER_DIRECTORY_DOWNLOAD folder improperly mapped
 528667 Typos in testing module documentation
 459905 Bug in wcwidth data
 534085 g_unichar_iswide_cjk() has a totally wrong table
 501651 Update glib/libcharset
 519026 G_STMT_START/G_STMT_END test a non-existent preprocessor symbol
 534319 GLib's .pc files could use Libs.private
 534137 Typo in g_spawn_async_with_pipes doc
 517419 gio win32 directory monitor
 526796 Wrong order of arguments in g_file_copy's fallback
 530196 _g_local_file_has_trash_dir() doesn't handle st_dev == 0
 532965 Should not return filesystem::free for certain file systems
 525553 fix typo and nitpicking in GArray documentation
 526572 Missing * in declaration of parent_class in Object
        Destruction section of GObject Reference Manual
 528648 Extra >s in Object Construction section
 535021 g_param_spec_internal documentation should
        describe purpose of nick and blurb
 521513 Firefox crash when using file picker
 528433 gdesktopappinfo snafu ...
 533369 API g_file_info_get_attribute_string () unables to get "...
 521045 glib f_fstypename miscellany
 521672 compile error
 521946 control rate limit on GUnixMountMonitor
 522335 Fails to build: glib/gtester.c:276: error: 'ARG_MAX' unde...
 523015 Implement sliding window based upload operation
 523019 Use new GCC 4 feature
 523338 list nfs4 as a nfs mount type
 524350 Make glib build without NLS again
 524579 g_file_copy reports wrong total on progress callback for ...
 524742 A typo in gtestutils.c.
 524950 Minor documentation typos.
 525866 the user directory should not be considered as a mount to...
 526320 should not list mounts that the user doesn't have permiss...
 527132 nautilus crash when making ftp connection
 532852 CRITICAL **: totem_pl_parser_parse_with_base: assertion `...
 534759 Build failure in gio
 534764 Typo in error produced by g_file_make_directory
 521851 Redudant tests in gunixmounts.c
 524344 glib/gthread.h still use G_GNUC_PRETTY_FUNCTION
 525060 glib fails to build with -DG_DISABLE_ASSERT in CPPFLAGS o...
 534177 Invalid description of the interface g_cclosure_marshal_S...
 520715 Add GFile method g_file_query_file_type
 523039 nautilus can't access to trash/computer/network if gvfs i...
 
* Updated translations:
 Arabic (ar)
 Bulgarian (bg)
 Catalan (ca) 
 Czech (cs)
 Greek (el)
 Candian English (en_CA)
 British English (en_GB)
 Spanish (es)
 Estonian (et)
 Basque (eu)
 Galician (gl)
 Hebrew (he)
 Hungarian (hu)
 Japanese (ja)
 Lithuanian (lt)
 Norwegian bokmål (nb)
 Dutch (nl)
 Occitan (oc)
 Portugese (pt)
 Russian (ru)
 Slovak (sk)
 Albanian (sq)
 Swedish (sv)
 Turkish (tr)
 Vietnamese (vi)


Overview of Changes from GLib 2.16.0 to GLib 2.16.1
===================================================

* Fix a crash in g_themed_icon_new

* Update the included PCRE to 7.6


Overview of Changes from GLib 2.15.6 to GLib 2.16.0
===================================================

* Fix the definition of G_INLINE_FUNC to work with gcc 4.3.0

* GIO:
 - Add missing GMountMountFlags argument to g_unix_volume_mount
 - Fix the adopt_orphan_mount vfunc to take a volume monitor 
   reference
 - Add properties to GThemedIcon for bindings sake

* Bugs fixed:
 520484 gvfsd-trash crashed with SIGSEGV in g_path_is_absolute()
 510855 g_checksum_update(): Take -1 for length.
 517676 g_themed_icon_new*() do more than call g_object_new().
 518816 should handle rmdir returning EEXIST correctly
 519352 g_[s]list_delete_link() docs
 519489 Fixes for sparse warnings in gio
 520169 add monitor argument to vfunc for GVolumeMonitor
 520700 Add type check in g_file_query_exists
 521145 FILE_READ_ONLY_VOLUME not present on Mingw32
 518720 No MIME type for empty files
 521013 in documentation, goffset doesn't say "Since 2.x"
 521028 Missleading error messages from g_io_channel_set_encoding()
 517484 GMainLoop could set the thread "Alertable" for APCs to be... 

* Updated translations:
 Assamese (as)
 Bengali India (bn_IN)
 Czech (cs)
 German (de)
 Spanish (es)
 Estonian (et)
 Finnish (fi)
 French (fr)
 Gujarati (gu)
 Italian (it)
 Lithuanian (lt)
 Malayalam (ml)
 Marathi (mr)
 Norwegian bokmål (nb)
 Romanian (ro)
 Russian (ru)
 Slovak (sk)
 Ukrainian (uk)

 
Overview of Changes from GLib 2.15.5 to GLib 2.15.6
===================================================

* GIO:
 - New file attributes: trash::item-count, filesystem::use-preview
 - Rename g_file_contains_file to g_file_has_prefix
 - g_file_query_filesystem_info grew async variants
 - g_themed_icon_append_name: new convenience function
 - g_content_type_get_icon is implemented now
 - Only show mounts in /media and ~
 - g_file_contains_file has been renamed to g_file_has_prefix

* Win32:
 - g_win32_get_package_installation_directory_of_module: new function
   which supersedes g_win32_get_package_installation_directory
 - Use alertable wait functions so that I/O completion routines or 
   user-mode Asynchronous Procedure Calls can be run
 - Fix race conditions in g_spawn implementation on win32

* Other:
 - g_uri_get_scheme has been renamed go g_uri_parse_scheme

* Updated translations:
 Arabic (ar)
 Belarusian Latin (be@latin)
 Catalan (ca) 
 British English (en_GB)
 Finnish (fi)
 Galician (gl)
 Hebrew (he)
 Italian (it)
 Kannada (kn)
 Norwegian bokmål (nb)
 Dutch (nl)
 Brazilian Portugese (pt_BR)
 Vietnamese (vi)


Overview of Changes from GLib 2.15.4 to GLib 2.15.5
===================================================

* Update the included PCRE to 7.6

* GIO:
 - g_volume_should_automount: new function to determine if a volume
   should be mounted automatically
 - g_file_query_default_handler: new convenience function to get
   the default handler for a file
 - g_app_info_launch_default_for_uri new convenience function to
   launch the default handler for a URI
 - Use mimeapps.list and defaults.list as discussed on xdg list
   recently
 - g_app_info_get_default_for_uri_scheme has a real implementation
   now (gvfs provides a GConf-based implementation)
 - There is the beginning of a test suite
 - standard::description:  new file attribute
 - GMountMountFlags flags argument added to mount calls

* GObject:
 - class initialization is now threadsafe

* Updated translations:
  Arabic (ar)
  Catalan (ca)
  Spanish (es)
  Basque (eu)
  Italian (it)
  Japanese (ja)
  Kannada (kn)
  Korean (ko)
  Macedonian (mk)
  Occitan (oc)
  Portugese (pt)
  Brazilian Portugese (pt_BR)
  Swedish (sv)
  Thai (th)


Overview of Changes from GLib 2.15.3 to GLib 2.15.4
===================================================

* G_GNUC_PRETTY_FUNCTION has been deprecated

* GIO:
 - g_file_copy has an async variant now
 - Drives and volumes now have API to get identifiers
   like Hal UDIs or UUIDs.
 - There is now a registration API to let modules register
   extensions they provide, such as volume monitor implementations

* Bugs fixed:
  511807 g_time_val_to_iso8601() uses MT-unsafe gmtime() function
  316260 [patch] Doc patches for gnode (2.8.1)
  385132 solaris gettext support fix
  484261 ./configure check for system PCRE unicode support fails w...
  510292 GOption main help not shown
  511580 Implement g_file_copy_async
  511654 Compile errors due to C99 constructs
  487909 g_utf8_strreverse and combining marks
  512381 unused variable 'is_main_group' 

* Updated translations:
  Arabic (ar)
  Belarusian (be)
  Czech (cz)
  Spanish (es)
  French (fr)
  Galician (gl)
  Portugese (pt)
  Russian (ru)
  Swedish (sv)
  Thai (th)


Overview of Changes from GLib 2.15.2 to GLib 2.15.3
===================================================

* GChecksum:
 - g_checksum_update can accept nul-terminated strings
 - The MD5 implementation works correctly on buffers 
   that are longer than 64 bytes

* GIO:
 - Don't include a copy of the inotify headers, rely on system headers
 - g_file_find_enclosing_mount has an async variant now
 - Reduntant seek API on file streams has been removed

* Bugs fixed:
  508602 gmemory{in|out}putstream.c: unknown pointer size
  508771 There is no g_file_test/exists() for GFile
  508773 g_uri_escape_string() documentation unclear.
  509465 AM_PATH_GLIB_2_0 doesn't support gio
  509626 async functions: Document allowed NULL callback?
  509990 GSeekable documentation unclear
  510448 No inotify support on ARM or SH5
  510855 g_checksum_update(): Take -1 for length. 

* Updated translations:
  Basque (eu)
  Marathi (mr)
  Swedish (sv)
  Ukrainian (uk)


Overview of Changes from GLib 2.15.1 to GLib 2.15.2
===================================================

* GIO:
 - Mount operation API change: unhandled methods get reported via 
   the reply, rather than by the signal emission return value
 - File monitor API change: Add a GError argument to g_file_monitor_file
 - g_unix_mount_guess_should_display(): new function

* Bugs fixed:
  508224 [PATCH] FAM backend crashes due to double free
  508074 GAsyncResult documentation suggests g_freeing it.
  508108 GFile documentation slightly unclear.
  508309 rpc_pipefs mount points should be hidden
  508378 GFileInfo documentation implies that it changes attribute...
  508719 g_file_get_relative_path fails if parent is root
  508773 g_uri_escape_string() documentation unclear.

* Updated translations:
  Arabic (ar)
  Spanish (es)
  Hebrew (he)
  Italian (it)
  Korean (ko)
  Turkish (tr)


Overview of Changes from GLib 2.15.0 to GLib 2.15.1
===================================================

 * Portability fixes:
 - Assertion functions are marked as noreturn again
 - Handling of inline functions has been fixed to work with gcc 4.3
 - C99 comments have been removed from headers
 - The nonportable sed -i option is no longer used

 * GIO:
  - Clarified the semantics of g_app_info_get_all()
  - API for memory input and output streams has been changed a bit
  - GDirectoryMonitor has been removed; GFileMonitor can monitor
    files and directories now

 * Bugs fixed:
   504829 Invalid environment passed to g_spawn_async in g_desktop_...
   505258 crash in Users and Groups: Adding a user
   505815 g_content_types_get_registered should not g_free keys
   491218 g_timer_new() doesn't initialize timer->end
   315437 extern inline -> static inline
   476856 Inconsistency between standard and implementation of the ...
   480122 g_module_open fails to open modules with ".la" extension
   495589 gspawn.c failing to set FD_CLOEXEC
   500273 doesn't build with --disable-visibility
   504142 Do not show empty groups in --help output
   504879 giofam incorrectly linked
   505042 add file attribute for actually used file size in bytes
   505058 xattr namespace docs
   505674 Misprint in the definition of the macro G_CCLOSURE_SWAP_DATA
   505730 Fails to build on OSX 10.4: _NSGetEnviron not declared
   505887 older darwin lacks lchown
   506374 gmemoryinputstream api
   506461 Conversion of g_assert_not_reached() and friends into fun...
   503051 Small bug in glib interface
   506395 Updates to GIO documentation
   507628 Missing .pc entry for gio linking against glib
   505195 [patch] typo in g_try_new0 docs 
   507822 g{file,directory}monitor changes signal problem
   506377 gmemoryoutputstream write implementation
   507835 bug in gunixinputstream 

 * Updated translations:
   Arabic (ar)
   Belarusian Latin (be@latin)
   Spanish (es)
   Basque (eu)
   Irish (ga)
   Hebrew (he)
   Occitan (oc)
   Vietnamese (vi)


Overview of Changes from GLib 2.14.x to GLib 2.15.0
===================================================

Major new features:

 * GIO: a VFS API, designed to replace GnomeVFS. The GIO implementation 
   in GLib has support for local filesystems. The new, separate gvfs 
   module contains various backend implementations (cifs, ftp, sftp,
   http, ...)

 * GChecksum: provides various hash algorithms, such as MD5, SHA-1
   and SHA-256
 
 * GTest: a test framework 
 
Smaller additions:

 * GHash:
 - GHash has iterators, as an alternative to g_hash_table_foreach

 * GMarkup: 
 - g_markup_parse_context_get_element_stack: New function to
   get the stack of open elements
 - G_MARKUP_PREFIX_ERROR_POSITION: New flag to improve error
   reporting
 - g_markup_collect_attributes: Convenience function for handling
   attributes

* GKeyFile: 
 - Functions that take a GError now return a boolean to indicate 
   success, instead of void
 - Various performance improvements

* GAsyncQueue:
 - g_async_queue_new_full: new function that allows to specify
   a free function for leftover elements
 
* GError:
 - g_prefix_error and g_propagate_prefixed_error: New functions
   to ease error propagation

* Internationalization:
 - C_: A new 2-argument variant of the Q_() macro 
 - Use native character set conversion API on Windows

* GLib builds with automake 1.10

* Bugs fixed:
 455725 specific combination of g_utf8_strlen and g_pattern_match...
 467537 g_convert_with_iconv() not resetting iconv() state correc...
 497033 Commandline option parser should warn about missing optio...
 504527 gchecksum: Conditional jump or move depends on uninitiali...
 445362 Non-numeric local labels in gatomic.c are causing linker ...
 482313 gregex: no way to tell why compilation failed
 317775 main loops continues to run after g_main_loop_quit() has ...
 418778 Insufficient pkg-config version requirement
 436293 g_option_context_new() doc should mention that the string...
 466557 glib-mkenums shifts ARGV[0] to undefined
 468882 GKeyFile doesn't accept "True" as a true boolean value
 469551 application --help messages are garbaged on none UTF-8 lo...
 479724 Memory leak upon calling "g_main_loop_run" in the seconda...
 490061 outptrs uninitialized after g_parse_long_long
 490637 gobject documentation patch
 495294 glib-genmarshal prints warnings but returns 0
 496046 option to prefix location of errors for GMarkup
 498113 tests/regex-test fails on 64bit environment
 500506 Fails to build on OSX 10.4
 500638 gkeyfile speedup ...
 500875 Make check fails as there is no "test" target for "build"...
 502511 g_assert_cmphex prints invalid message
 502927 g_array_index triggers cast aligment warning
 503029 g_time_val_from_iso8601 parse non-ISO8601 dates
 503222 Need context to translate
 503420 gkeyfile leaks a hash table
 503470 Fix build when builddir != srcdir
 504227 Inverse variant for g_test_trap_assert_stdout, g_test_tra...
 71704 	file include order
 491957 Misprint in the specification of the interface "g_main_co...
 491959 Misprint in description of the structure "GThreadPool"
 491965 Mistype in the specification of the function "g_hook_list...
 491966 Misprint in the specification of the interface "g_main_co...
 491968 The documentation does not mention the restriction for th...
 491970 The documentation for the interface "g_date_clamp" is inc...
 491974 The documentation of the interface "g_main_context_iterat...
 491975 The documentation for the interfaces "g_io_channel_read_u...
 491979 Misprint in the description of the interfaces g_key_file_...
 491982 Misprint in the description of the interface "g_key_file_...
 501107 EXTRA_DIST automake warnings
 501997 g_utf8_normalize() returns NULL on invalid string
 502590 C_/g_dpgettext efficiency
 464259 g_set_application_name() docs should say "Since 2.2"
 496518 gbase64.c API doc clarification
 498728 g_key_file_get_*_list should set length to 0 when returni...
 500361 Improve docs for g_array_free() and g_ptr_array_free()
 501853 g_checksum_get_digest docs
 503862 Allow NULL strings in g_parse_debug_string()
 142676 Q_
 367550 Add g_async_queue_new_full() with GDestroyNotify function
 375651 Minor enhancements to GKeyFile API
 443648 MD5 digest support
 449937 Upgrade auto* sources to be clean under automake1.9
 452887 gmarkup context "get element" function is useless when ca...
 491549 [PATCH] Eliminate libiconv dependency on Windows
 500507 GHashTableIter API 

* Translation updates
 Belarusian Latin (be@latin)
 Czech (cs)
 German (de)
 Spanish (es)
 Esperanto (et)
 French (fr)
 Korean (ko)
 Marathi (mr)
 Norwegian bokmål (nb)
 Brazilian Portugese (pt_BR)
 Slovenian (sl)
 Swedish (sv)


Overview of Changes from GLib 2.14.2 to GLib 2.14.3
===================================================

* Update PCRE to 7.4

* Bugs fixed:
 487491 Fix some warnings from sparse
 488068 Small (one-time) memory leak in glib_gettext initialization
 493688 TYPE macro "_get_type ()" is documented wrong

* Updated translations:
 Arabic (ar)
 Belarusian Latin (be@latin)
 Estonian (et)
 Irish (ga)
 Slovenian (sl)

 
Overview of Changes from GLib 2.14.1 to GLib 2.14.2
===================================================

* Bugs fixed:
 476849 Invocation of the interface "g_hook_free" fails in certai...
 359165 marshallers can throw warnings with -Wunused
 477957 more discussion on g_value_set_object vs. g_value_take_ob...
 478459 G_DEFINE_DYNAMIC_TYPE_EXTENDED doesn't work with G_IMPLEM...
 483337 inline is disabled for MSVC when compiling C code
 478349 Broken link to gettext website
 469231 g_spawn optimization for setting all open fds to CLOEXEC 

* Updated translations:
Arabic (ar)
Galician (gl)
Hebrew (he)
Korean (ko)


Overview of Changes from GLib 2.14.0 to GLib 2.14.1
===================================================

* Bugs fixed:
 476840 Invocation of the interface "g_utf8_strreverse" crashes f...
 444765 Fix FIXME in gregex.c when new pcre is out
 464145 g_markup_escape_text Produces Invalid XML
 465625 g_type_default_interface_ref() does not ensure working g_...
 466768 Clearify that comments can be put anywhere in a Key-file.
 474229 The GError documentation should give convention for the G...
 474899 G_BREAKPOINT() docs inaccurate
 475854 Overuse of -lpcre when using system pcre
 473879 Incorrect includes in gregex.c
 468694 Typoes in documentation
 469051 g_snprintf () talks about characters where it probably me...
 457601 Missing arch specific atomic implementation
 475923 Missing pcre flags when static-linking against glib
 475619 glibthread-2.0.la does not list -lpthread

* Updated translations:
 Bulgarian (bg)
 Catalan (ca)
 Danish (da)
 German (de)
 Canadian English (en_CA)
 British English (en_GB)
 Spanish (es)
 Estonian (et)
 Finnish (fi)
 French (fr)
 Gujarati (gu)
 Hungarian (hu)
 Italian (it)
 Georgian (ka)
 Kannada (kn)
 Lithuanian (lt)
 Makedonian (mk)
 Norwegian (nb)
 Dutch (nl)
 Polish (pl)
 Portugese (pt)
 Brazilian Portugese (pt_BR)
 Romanian (ro)
 Russian (ru)
 Albanian (sq)
 Serbian (sr, sr@Latn)
 Swedish (sv)
 Tamil (ta)
 Thai (th)
 Ukrainian (uk)
 Vietnamese (vi)


Overview of Changes from GLib 2.13.7 to GLib 2.14.0
===================================================

* Last-minute API additions:
 - Make g_unichar_combining_class public
 - Add goffset type, add G_MAXSSIZE and G_MINSSIZE

* Update PCRE to 7.2

* Bugs fixed:
 453998 Make _g_unichar_combining_class() public
 462549 gregex.c: variable is declared at middle of block
 417068 g_file_test doc inconsistency

* Updated translations:
 Assamese (as)
 Basque (eu)
 Kannada (kn)
 Malayalam (ml)
 Dutch (nl)
 Polish (pl)
 Brazilian Portugese (pt_BR)
 Turkish (tr)


Overview of Changes from GLib 2.13.6 to GLib 2.13.7
===================================================

* The memory corruption warning from the slice allocator that
  occurred when threads were initialized after the slice allocator
  has been removed, as the slice allocator now works fine
  in this scenario.

* New functions g_once_init_enter() and g_once_init_leave() make
  it easier to write threadsafe one-time initialization functions 
 
* Bugs fixed:
 454473 Simple XML Subset Parser terminates on invalid XML
 445813 g_module_open error, add file name
 453796 errno gets clobbered by g_filename_display_name
 341988 don't use "-c" with msgfmt in Makefile.in.in
 447048 Please produce slightly more output during long tests
 454785 GModule documentation lists same block of code twice.
 454786 GModule documentation lists same paragraph twice.
 383155 small docs quirks in gobject/closure API documentation
 65041  _get_type() functions aren't thread safe

* Updated translations
 Assamese (as)
 Spanish (es)
 Gujarati (gu)
 Japanese (ja)
 Korean (ko)
 Macedonian (mk)


Overview of Changes from GLib 2.13.5 to GLib 2.13.6
===================================================

* Reintroduce a GType typedef whose removal in 2.13.5
  caused trouble for C++ bindings

* Bugs fixed:
 450216 docs not explicit enough about g_free()
 451459 g_type_register_static_simple calls g_type_register_static

* Updated translations
 Norwegian bokmål (nb)
 Sinhala (si)


Overview of Changes from GLib 2.13.4 to GLib 2.13.5
===================================================

* xdg-user-dirs support: 
 - the Desktop directory is guaranteed to be defined
 - user-dirs.dirs is no longer reloaded on changes

* Slice allocator: 
 - new api to duplicate slices

* Regular expression support:
 - GRegex is a boxed type now

* Bugs fixed:
 44793 make check failing in trunk
 354522 Small problem with PLT hiding 6 symbols
 363986 glib 2.12.4 does not compile with SGI IDO cc
 443869 g_type_class_add_private doesn't warn when adding 0-sized...
 446859 Legitimately return 0 for g_quark_from_string(NULL)
 447534 Small typo in g_timeout_add_seconds() doc
 447583 GStaticRWLock
 447935 g_get_current_dir SIGSEGV on long path
 448260 CLAMP has surprising result if low > high
 57693 	g_string_vprintf()
 442029 add g_slice_dup()
 445065 Add GRegex boxed type
 448819 Add full version of g_timeout_add_seconds()

* Updated translations: 
 Swedish (sv)
 Oriya (or)
 Hebrew (he)
 Spanish (es)
 Estonian (et)

 
Overview of Changes from GLib 2.13.3 to GLib 2.13.4
===================================================

* Bugs fixed:
 444121 g_get_user_special_dir deadlocks
 444161 invalid UTF8 in key name shows up as valgrind error in g_...
 444130 g_option_context_get_help() is broken when there's a desc...


Overview of Changes from GLib 2.13.2 to GLib 2.13.3
===================================================

* GKeyFile:
 - Added defines for easier handling of desktop files

* Unicode support:
 - Update g_unichar_iswide_cjk for Unicode 5.0

* Regular expression support:
 - GRegex structs can now be ref-counted
 - Some new functions for dealing with incremental 
   replacement have been added
 - The GRegexEvalCallback signature has been changed

* g_get_user_special_dir() has been added to support
  xdg-user-dirs

* Bugs fixed:
 419376 Functions using named subpatterns behave inconsistently w...
 434358 g_regex_fetch_named() and g_regex_fetch_named_pos() are b...
 423708 typo in the README.win32 file see patch below
 339225 Add new defines for easier handling of .desktop files 
 442265 API additions/changes for GRegex
 432651 Add a glib-ish xdg_user_dir_lookup

* Updated translations:
 Estonian (et)
 Norwegian bokmål (nb)


Overview of Changes from GLib 2.13.1 to GLib 2.13.2
===================================================

* Unicode support:
 - Add g_unichar_ismark()

* GOption:
 - Allow to use callbacks for remaining args

* Updated translations:
  Belarusian Latin (be@latin)
  British English (en_GB)
  Galician (gl)
  Norwegian bokmål (nb)
  Oriya (or)
  Spanish (es)
  Thai (th)


Overview of Changes from GLib 2.13.0 to GLib 2.13.1
===================================================

* GRegex:
 - Portability fixes
 - Split into immutable GRegex and GMatchInfo
 - Add g_regex_get_max_backref() and g_regex_get_capture_count()
   to obtain information about the compiled regex

* GKeyFile:
 - Fix roundtrip problems
 - Add g_key_file_load_from_dirs()

* Unicode support:
 - Fix corner cases in case conversion routines

* GOption:
  - Add a function to get the formatted help string

* GHash:
 - Add new functions g_hash_table_get_keys() and
   g_hash_table_get_values() to retrieve the keys and
   values in list form

* Updated transations:
  Simplified Chinese (zh_CN)
  Arabic (ar)


Overview of Changes from GLib 2.12 to GLib 2.13.0
=================================================

* Add GSequence, a list that is implemented using
  a balanced binary tree.

* Add GRegex, an implementation of Perl regular expressions,
  based on PCRE.
 
* Use Posix monotonic clocks instead of gettimeofday()
  for GTimer when available.

* Support static initialization of GQeues with G_QUEUE_INIT,
  g_queue_init() and g_queue_clear().

* Add g_string_chunk_clear() for clearing a 
  GStringChunk.

* Add g_unichar_get_script() to obtain Unicode
  script information.

* Add g_unichar_iszerowidth() to obtain information
  about zero-width characters.

* Add G_GNUC_MAY_ALIAS which wraps the gcc may_alias 
  type attribute.

* G_GNUC_INTERNAL has a working definition for the
  Sun Studio compiler. This requires the macro to
  be positioned before the function declaration.

* The slice allocator can produce detailed debugging
  information with G_SLICE=debug-blocks.

* Modules support G_DEBUG flags resident-modules and
  bind-now-modules.

* Add G_DEFINE_DYNAMIC_TYPE() to make it easier
  to define types in modules.

* Bug fixes: too many to list them in detail here.

* New and updated translations (be,bg,bn,ca,cs,de,
  en_CA,en_GB,et,fa,fr,he,hu,it,ja,ku,lt,mg,mk,ml,
  nb,ne,nn,pt,pt_BR,ro,sr,sr@Latn,sv,ta,uk,vi,zh_CN,
  zh_HK,zh_TW)


Overview of Changes from GLib 2.12.1 to GLib 2.12.2
===================================================

* Unicode updates:
 - Normalization is following Unicode TR #29
 - g_unichar_isxdigit() only accept characters
   for which g_unichar_xdigit_value() returns a value
 - g_unichar_toupper and g_unichar_tolower leave
   unconvertable characters in place instead of
   replacing them by NUL

* Bugs fixed
 348491 g_utf8_strup() and g_utf8_strdown() returns 
        string with NUL bytes
 349825	GKeyFile always inserts a newline before a group
 347842	g_unichar_isxdigit() is too general about what 
        it considers a digit
 348694	g_utf8_normalize() hasn't been updated to PR #29
 348785	Hint about G_DEBUG in Message Logging docs
 349792	Wrong english string (UI)
 349952	gparamspecs.c uses gcc feature

* Translation updates (ca,cs,de,dz,es,eu,fi,gu,ko,
  nl,pl,tr,uk,zh_HK,zh_TW)


Overview of Changes from GLib 2.12.0 to GLib 2.12.1
===================================================

* Update to final Unicode Character Database 5.0.0

* Bugs fixed:
 346660 issues with base64 api documentation / g_base64_decode_cl...
 348136 Coverity reports allocation of wrong size CID #2839
 336281 Update to UCD 5.0
 346197 g_date_strftime %F option doesnt work for win32
 348011 Small optimization to real_toupper()
 246494 prototype mismatch in glib/gconvert.c

* New and updated translations (bg,bn_IN,ca,dz,eu,fi,
  fr,he,it,ja,mk,or,pt)


Overview of Changes from GLib 2.11.4 to GLib 2.12
=================================================

* Bugs fixed:
 344905 leap-year bug in g_time_val_from_iso8601 w/o HAVE_TIMEGM

* Updated translations (cy,nb,nl)


Overview of Changes from GLib 2.11.3 to GLib 2.11.4
===================================================

* GBookmarkFile:
 - g_bookmark_file_remove_item returns a boolean
 
* g_mkstemp accepts the XXXXXX in the middle of
  the template
 
* Bugs fixed:
 344868 g_key_file_to_data should separate groups 

* Updated translations (de,es,fr,gu,hi,ko,th)


Overview of Changes from GLib 2.11.2 to GLib 2.11.3
===================================================

* GBookmarkFile:
  - g_bookmark_file_move_item: Return TRUE in case of
    an empty target

* Bugs fixed: 
 343919 gunicollate.c: strxfrm bug on VC8

* Updated translations (fi)

Overview of Changes from GLib 2.11.1 to GLib 2.11.2
===================================================

* Add g_ascii_stroll to parse signed 64bit integers

* GMarkup: add a flag to treat CDATA as text

* GHashTable: add functions to remove all entries

* GMainLoop: add functions to find the currently
  running source, and determine if it is destroyed

* Bug fixes:
 342563  g_atomic_thread_init() needs to be called before 
         other _g_*_thread_init() functions
 343548  Potential use after free in callers of g_string_free() 
 168538  Wish: Clearing contents of GHashTables
 321886  GTK+ cannot be reliably used in multi-threaded 
         applications
 341826  goption.c: 'strtoll' is C99's function
 343899  g_ascii_formatd dosn't work as expected for all 
         format strings
 317793  Make GEnumValue strings const
 337129  Compile warnings in G_IMPLEMENT_INTERFACE
 303622  What is G_TYPE_CHAR?

* Updated translations (bg,dz,eu,gl,ja,ko,nl,th,vi)
 

Overview of Changes from GLib 2.11.0 to GLib 2.11.1
===================================================

* GOption  
  - Support 64-bit integers 
  - Allow optional text before and after the options
    in help output

* Bug fixes:
 340538 gbase64-test writes OOB 
 340816 GKeyFile set_string_list invalid memory reads 
 339105 g_key_file_parse_value_as_double
 340434 convert-test.c fails (function test_one_half)
 311043 Memory leaks (and potential infinite loops) 
        when using G_ERRORCHECK_MUTEXES
 335198 Error checking mutexes are fubar  
 341237 Add a G_OPTION_ARG_INT64
 341192 g_io_channel_set_flags not implemented on win32
 336120 Allow adding description before/after GOption 
        --help output body
 341191 misplaced check in g_relation_delete
 340530 mismatched calloc / g_free in win32 threads

* Updated translation (es)

Overview of Changes from GLib 2.10.x to GLib 2.11.0
===================================================

* GBookmarkFile: a parser for files containing bookmarks
  stored using the Desktop Bookmark specification.

* Base64 encoding support
	
* Unicode 5.0 support

* GOption supports floating point numbers 

* GKeyFile supports floating point numbers

* Bug fixes:
 155884 gatomic.c should be based on new SDK
 157877 update-desktop-database doesn't handle duplicate entries
 164719 keyfile parser doesn't support floats
 327662 Import BookmarkFile from libegg
 329548 Add G_OPTION_ARG_DOUBLE
 329789 option-test.c type confusion
 332841 Segmentation Fault when %llu is passed to vasnprintf and 
        HAVE_SNPRINTF is not defined
 333879 gthread/gthread-win32.c: IsDebuggerPresent needs '#define 
        _WIN32_WINDOWS 0x0401'
 333916 g_timer_elapsed docs should mention that microseconds 
        may be NULL
 334440 dlerror() portability issue causes crash on (old) a.out 
        NetBSD platform
 334646 goption + error out params
 334799 g_remove() must check return value of remove()
 334943 make check FAIL: threadpool-test
 335215 Some breakages with GThreadPool
 336085 g_option_context_new parameter lacks better explanation
 336677 Documentation for g_object_ref_sink() is incorrect
 337027 gbookmarkfile.c: sys/time.h include error
 337553 Wrong escaping of URIs
 338572 Dereferencing NULL value in g_key_file_get_group_comment
 338845 g_completion_complete_utf8 crashes when NULL is passed to it
 339337 g_bookmark_file_set_description
 339338 gbookmarkfile.c, function expand_exec_line
 339340 gbookmarkfile.c, function bookmark_app_info_dump

* Translation updates (bg,en_GB,et,gl,gu,he,hi,ka,nb,nl,nn,
                       or,pt_BR,ro,tr,vi,zh_CN)


Overview of Changes from GLib 2.10.0 to GLib 2.10.1
===================================================

* Bugs fixed:
 314794 Broken pthread detection on Darwin [Gregor Riepl]
 322476 Missing check for .dylib [Vladimir Panov]
 333651 Inconsistent _g_charset_get_aliases prototype [Julio 
        M. Merino Vidal]
 333761 GInitiallyUnowned breaks application code [Sven Herzberg]

* Win32 changes:
 - Fix g_listenv() implementation.
 - Allow up to 100 GPrivate structs

* Translation updates (fr,hu,lt,pl,sv)


Overview of Changes from GLib 2.9.6 to GLib 2.10.0
==================================================

* Bugs fixed:
 328997 64bit pointer trunction in glib slab-allocator
        [Pascal Hofstee]
 331110 g_cond_broadcast(inform_cond) without holding 
        inform_mutex [Chris Wilson, Sebastian Wilhelmi]
 332093 Fix some leaks in the tests [Kjartan Maraas]
 332435 g_utf8_strlen returns wrong value if a maximum 
        number of bytes to check is specified 
        [Matthias Clasen]
 331367 gslice requires more POSIX-like semantics for 
        GPrivate destructors [Tor Lillqvist]

* Documentation improvements [Matthias, Kang Jeong-Hee,
  Tor Lillqvist, Stefan Kost]

* Translation updates (el,eu,ka,uk)

Overview of Changes from GLib 2.9.5 to GLib 2.9.6
=================================================

* Bugs fixed: 
 329124 distclean removes README [Kjartan Maraas, Tim Janik]
 317679 GRelation field type not documented [Behdad Esfahbod]
 329123 Typo in GTime docs [Kjartan Maraas]

* Documentation improvements [Sven Herzberg, David
  Schleef, Kjartan Maraas, Behdad Esfahbod]

* Translation updates (cs,cy,it,ko,pt,sq,sr,sr@Latn,ru

Overview of Changes from GLib 2.9.4 to GLib 2.9.5
=================================================

* Memory management: 
  Runtime debugging support: The slice allocator
  can be turned off by setting G_SLICE=always-malloc
  in the environment. Zeroing of freed memory can
  now be turned on at runtime by setting
  G_DEBUG=gc-friendly in the environment. [Tim Janik]

* Bugs fixed:
 328253 HP-UX/IA-64 uses ".so" as default shared library 
        extension [Albert Chin]
 143380 unicode-encoding test fails converting to UTF-16 
        with libiconv [Marc Moorcroft]
 328254 Build breakage (GSlice) [Jens Ganseuer]
 328705 C99ism in glib/gmem.c [Kazuki Iwamoto]

* Translation updates (da,et,zh_CN)

Overview of Changes from GLib 2.9.3 to GLib 2.9.4
=================================================

* Type system:
  Fix a problem with g_object_compat_control() which 
  can lead to segfaults in GTK+ applications on 64bit 
  platforms. 

* Thread suppport: 
  Unused threads now fall back to the global pool after 
  500 milliseconds, where they wait for another 
  max-idle-time milliseconds. [Sebastian Wilhelmi]

* Fix a memory allocation problem in GKeyFile. [Morten 
  Welinder]


Overview of Changes from GLib 2.9.2 to GLib 2.9.3
=================================================

* GTree:
 - Replace the simple recursive implementation by
   a nonrecursive, threaded one  [Maurizio Monge]

* Change g_filename_display_name and
  g_filename_display_basename to use the Unicode
  replacement character U+FFFD instead of a question
  mark, and don't append "(invalid encoding)"  [Matthias]

* Documentation improvements [Sven Herzberg, Federico
  Mena Quintero, Stefan Kost]

* Bugs fixed:
 323937 gslice.c in glib 2.9.1 doesn't build on Mac OS X 
        [Bogdan Nicula]
 326558 Some test failures on IRIX 6.5 [Daichi Kawahata]
 169285 "threaded" tree implementation for GTree 
        [Maurizio Monge]
 326747 g_filename_display_basename adds (invalid encoding) 
        [Alberto Ruiz]

Other contributors: Christian Kellner, Murray Cumming

New and updated translations (bg,ca,de,es,et,gu,ja,nl,th,vi)


Overview of Changes from GLib 2.9.1 to GLib 2.9.2
=================================================

* Memory management:
 - Add tests for cache colorization [Tim Janik]
 - Minimize space consumption if small amounts of differently
   sized slices are allocated, at a small performance cost.  [Tim]

* Thread support:
 - Add g_atomic_pointer_set() and g_atomic_int_set() [Tim Janik,
   Sebastian Wilhelmi]
 - Add g_thread_pool_set_sort_function() to allow sorting the 
   tasks of a threadpool.  [Martyn Russell]
 - Add g_thread_pool_set_idle_time() to allow unused threads
   to exit after a certain time.  [Martyn]

* Type system:
 - introduce a new type GInitiallyUnowned, which has an initial
   floating reference. [Tim]
 - Add support for GType parameters. [Matthias]

* Main loop:
 - Add g_main_context_is_owner() to determine if the current
   thread is the owner of the context.  [Michael Meeks]

* Provide g_access(), g_chdir(), g_unlink(), g_rmdir() as 
  wrapper functions instead of macros.  [Manish Singh]

* Documentation improvements [Tim, Matthias, Federico Mena Quintero,
  Stefan Kasal, Dan Williams]

* New and updated translations (en_CA,fi,fr,gl,ml,nb,no,zh_HK,zh_TW)

* Bugs fixed:
 324179 g_allocator_new() returns pointer to const dummy which Gtk+ 2.8 
        tries to modify [J. Ali Harlow]
 324332 g_option_context_parse() returns false without setting error 
        [Tim-Philipp Müller]
 324950 GLIB 2.9.1 testcase errors [Dan Yefimov]
 325015 gslice.c: process.h is needed on Windows [Kazuki Iwamoto]
 321978 G_DATALIST_GET_FLAGS() macro is not casting datalist to 
        gpointer [Andrew Paprocki]
 316221 G_LOCK warns about breaking strict-aliasing [Michal Benes, 
        Stanislav Brabec]
 325273 Error in documentation for glib_check_version () [Declan Naughton]
 325310 g_spawn_sync hangs when catching both stdout and 
        stderr [Tor Lillqvist]
 325249 gcc warning when using g_rmdir from <glib/gstdio.h> [Jani Monoses]
 325864 glib/gthreadpool.c:"#define debug(...)" is C99 [Kazuki Iwamoto]
 325874 Should say somewhere that source IDs are > 0 [Dan Williams]
 325438 a typo (compatability) [Stefan Kasal]
 323937 gslice.c in glib 2.9.1 doesn't build on Mac OS X [Bogdan Nicula]


Overview of Changes from GLib 2.9.0 to GLib 2.9.1
=================================================

* Memory management
 - The slice allocator is implemented [Tim Janik]
 - g_slice_free_chain() has been renamed to 
   g_slice_free_chain_with_offset()  [Tim, Behdad Esfahbod]
 - Mem chunks are deprecated [Matthias Clasen]

* Data structures
 - Hash tables are refcounted, and have a boxed type [Tim]

* Thread support
 - Support for Solaris threads has been removed 
   [Sebastian Wilhelmi, Andrew Paprocki]
 - g_async_queue_sort(), g_async_queue_push_sorted() have 
   been added to allow GAsyncQueue to be used as a priority 
   queue, together with the corresponding _unlocked 
   variants  [Martyn Russell]

* GObject:
 - The concept of a floating initial reference has been
   moved from GtkObject to GObject [Tim]

* Win32 changes:
 - Make g_rename() replace existing files [Tor Lillqvist]

* Misc new API:
 - G_GUINT64_CONSTANT macro to define guint64 
   constants [Andrew Paprocki]
 - G_GNUC_WARN_UNUSED_RESULT macro to instruct the 
   compiler to emit a warning if the value returned
   by a function is ignored. [Arjan van de Ven, Alex Larsson]
 - GList and GSList now have sort functions which take an
   extra user data argument [Martyn Russell]
 - g_param_spec_ref_sink() has been added for consistency [Tim]

* $LOGNAME is respected when determining user data. [Laszlo Peter]

* Other changes and bug fixes [Tim, Matthias, Behdad, 
  Christian Persch, Benedikt Meurer, Andrew Paprocki, 
  Kazuki Iwamoto, Alexis S. L. Carvalho, Stanislav Brabec,
  Andreas Schwab, Kalle Vahlman]

* Documentation
 - Deprecation warnings carry version information [Matthias]
 - The slice allocator has been documented [Matthias, Tim]
 - Other improvements [Morten Welinder]

Overview of Changes from GLib 2.8.x to GLib 2.9.0
=================================================
* Unicode support:
 - The Unicode tables have been updated to Unicode 4.1, 
   adding several new values to the GUnicodeBreakType 
   enumeration. This breaks Pango <= 1.10 
   [Behdad Esfahbod]
 - The various Unicode character predicate functions 
   (g_unichar_isalpha, g_unichar_isdigit,...) have
   been optimized
   [Behdad]
 - g_utf8_pointer_to_offset, g_utf8_offset_to_pointer:
   These functions handle negative offsets now, and
   going backwards in g_utf8_offset_to_pointer uses
   "stutter stepping".
   [Larry Ewing, Matthias Clasen]

* Memory management:
 - Mem chunks are no longer used internally in GLib and
   GObject. GMemChunk will be deprecated in GLib 2.10
 - All APIs based on GAllocator (g_list_push/pop_allocator,
   and similar push/pop_allocator functions for other
   data structures) have been deprecated, since they
   never worked as intended.
 - The g_slice_* functions have been added as a 
   new API for fast allocation of small memory blocks. 
   The implementation in GLib 2.9.0 is just a simple 
   wrapper around malloc. GLib 2.10 will have an
   efficient and scalable implementation. 
   [Tim Janik, Matthias]

* Pattern matching:
 - g_pattern_match has been optimized to avoid
   unnecessary recursion.
   [Tim, Matthias]

* g_intern_string, g_intern_static_string: 
 - New functions to intern strings. These are now used 
   by GObject to avoid duplicating static strings 
   [Matthias]

* g_thread_foreach: 
 - New function to iterate over all GThreads 
   [Tim, Matthias]

* g_date_set_time_t, g_date_set_time_val:
 - New functions to set a GDate from a time_t or
   GTimeVal value. g_date_set_time has been deprecated 
   in favor of these.
   [Roger Leigh]

* g_snprintf and g_vsnprintf:
 - These functions are no longer declared in gprintf.h, 
   since they are in glib.h
   [Matthias]

Overview of Changes from GLib 2.8.0 to GLib 2.8.1
=================================================
* Optimize single-character insertions in GString [Ross Burton]
* Fix build problems on OS X
* Fix build problems on Win32 [Tor Lillqvist, Hans Breuer]
* Other bug fixes [Matthew F. Barnes, Stepan Kasal] 
* Documentation improvements [Tristan van Berkom, Behnam
  Esfahbod, Gustavo Carneiro, Stepan Kasal, Matthias]
* New and updated translations (ca,cy,ko,ro,uk)

Overview of Changes from GLib 2.7.7 to GLib 2.8.0
=================================================
* Make g_value_transform() handle enum values
  correctly on ppc64.  [Michael Lorenz]
  (Third-party code accessing enumeration values 
  in GValues should also be changed to access 
  v_long, not v_int, in order to work on bigendian 
  64bit machines.)
* Make g_flags_get_first_value() handle a value
  of 0 meaningfully. [Tim-Philipp Müller] 

Overview of Changes from GLib 2.7.6 to GLib 2.7.7
=================================================
* Make atomic operations on s390 work [Matthias]
* Fix C++ guards in gstdio.h [Tor Lillqvist]

Overview of Changes from GLib 2.7.5 to GLib 2.7.6
=================================================
* Add native implementations of atomic operations 
  on s390 [Matthias]
* Make atomic reference counting of closures
  work on s390 [Matthias]
* Avoid an infinite loop in g_convert_with_iconv().
  [Sebastian Bacher]
* Documentation improvements [Ross Burton]

Overview of Changes from GLib 2.7.4 to GLib 2.7.5
=================================================
* Thread-related changes
 - Fix build issues on HP-UX [Paul Cornett]
 - Threadsafe access to flags stored in datasets [Tim Janik]
 - Fix several issues with atomic refcounting for 
   closures, objects and paramspecs [Tim]
 - Improve tests for atomic refcounting changes [Tim]
* Fix handling of stateful encodings in g_convert_* [Matthias]
* Fix translation of GOption help output [Dan Winship]
* Catch format errors in translations. This may cause 
  "make check" to fail when using older versions
  of gettext [Matthias]
* Win32 bug fixes [Tor Lillqvist]
* Documentation improvements [Ross Burton, Jochen Baier, 
  Matthias, Tim]
* New and updated translations (de,fi,gu,pl,pt,tr,zh_TW)

Overview of Changes from GLib 2.7.3 to GLib 2.7.4
=================================================
* Fix g_atomic_pointer_compare_and_exchange 
  on Sparc64 [Gert Doering]
* Fix a hang in g_thread_pool_free. [Hong Jen Yee]
* Win32 bug fixes [Tor Lillquist]
* Other bug fixes [Benoit Dejean, Manish Singh]
* Documentation improvements [Bryan Silverthorn,
  Callum McKenzie] 
* New and updated translations (de,lt,sq,zh_CN)

Overview of Changes from GLib 2.7.2 to GLib 2.7.3
=================================================
* GOption
 - Allow callbacks with optional arguments [Pawel Sliwowski]
 - Allow to turn off the automatic long option name
   disambiguation  [Adam McLaurin]
 - Only allow printable ASCII as short option names [Matthias]
* Win32
 - Build fixes [Tor Lillqvist]
 - Rewrite iochannel socket implementation [Tor]
* GObject
 - Threadsafety improvements; in particular, refcounting
   of objects is done atomically now. [Wim Taymans, Tim Janik]
* Bug fixes [Morten Welinder, Matthias, Wim Taymans]
* Documentation improvements [Richard Laager, Matthias]
* New and improved translations (bf,cs,hu,nb,nl,no)

Overview of Changes from GLib 2.7.1 to GLib 2.7.2
=================================================
* Win32 build fixes [Hans Breuer]
* Bug fixes [Mikael Magnusson]
* Documentation improvements [Matthias Clasen]
* New and updated translations (en_CA,es,et,ja,sr,sr@Latn,zh_TW)

Overview of Changes from GLib 2.7.0 to GLib 2.7.1
=================================================
* GOption 
 - Allow callback arguments without parameters [Dan Winship]
* GMappedFile: an mmap wrapper [David Schleef, Behdad Esfahbod]
* Misc new functions:
 - g_get_host_name [Tor Lillqvist]
 - g_mkdir_with_parents [Tor]
 - g_build_pathv, g_build_filenamev [Todd A. Fisher, 
   Matthias Clasen]
* Bug fixes [Roger Leigh, Masatake YAMATO, Kjartan Maraas,
  Manish Singh, Tor, Murray Cumming, Kian Duffy, Morten Welinder]
* Documentation improvements [Hong Gang XU, Dan Winship, Matthias]
* New and updated translations (bg,cs,da,en_CA,es,et,nb,nl,no,
  sk,th,zh_TW)

Overview of Changes from GLib 2.6.x to GLib 2.7.0
=================================================
* GKeyFile
 - Add unit tests [Matthias Clasen, Suren A. Chilingaryan]
 - Accept \r\n as line end [Bastian Nocera]
 - Don't interpret leading zeros as octal numbers. [Matthias]
 - Make key and group removal work [David Hoover, Matthias Hasselmann]
* GOption
 - Improve formatting of --help output [Matthias, Noah Levitt]
 - Accept -? [Matthias]
 - Warn about duplicate main groups [Jeff Franks]
 - Treat '-' as non-option argument [Tim Musson, Thomas Leonard]
 - Report missing arguments as errors [Björn Lindqvist]
 - Add a boxed type for GDate [Tim-Philipp Müller]
* GTree
 - g_tree_remove() and g_tree_steal() return status information [Matthew F. Barnes]
* Stdio wrappers
 - Work regardless of large file support [Manish Singh]
 - Add g_access(), g_chmod(), g_creat(), g_chdir [Tor Lillqvist]
* GObject
 - Implement "toggle references" to help language bindings [Owen Taylor]
 - Allow to mark names, nicks and blurbs of pspecs as static [Ben Maurer, Matthias]
 - Make pspec lookup a bit faster [Morten Welinder]
* Add g_listenv() to list all set environment variables [Hans Petter Jansson]
* Add g_file_set_contents() to atomically write a file.  [Søren Sandmann,
  Sven Neumann, Manish, Alexis S. L. Carvalho]
* Add g_try_malloc(), g_try_new(), g_try_new0() and g_try_renew() [Stefan Kost]
* Add g_utf8_collate_key_for_filename() to sort filenames taking
  extensions and numeric suffixes into account.  [Ole Laursen, Alex Larsson]
* Add G_GNUC_NULL_TERMINATED to mark varargs function with 
  NULL-terminated argument lists. [Marc Meissner]
* Win32 changes
 - Improved debugability [Ulf Lamping, Hans Breuer]
 - Make filename handling more robust [Tor, Billy Skaggs]
 - Improve g_get_system_data_dirs() [Tor]
 - Use more precise timers [Tor]
 - Build fixes [Kazuki Iwamoto, Hans, Tor, Robert Ögren]
* Other bug fixes [Roger Leigh, Owen, Matthias, Morten, Kjartan Maraas, 
  Pawel Sakowski, Tor, Simon Budig, Ed Avis, Manish, Nicolas Laurent, 
  Bastien, Fabrício Barros Cabral, Michael Banck, Daniel Atallah, 
  J. Ali Harlow, Tim Janik, Hazael Maldonado Torres, Sven, Jon-Kare Hellan,
  Dave Benson, Tommi Komulainen, Benjamin Otte, Brian Cameron, Changwoo Ryu, 
  Christian Biere, Noah, Benoît Carpentier]
* Documentation improvements [Vincent Untz, Matthias, Tim-Philipp Müller,
  Morten, Matthew, Federico Mena Quintero, Sebastian Bacher, Oliver Sessink, 
  Stefan, Jared Lash, Tor, Owen, Daniel Vaillard, Mathieu Lacage]
* New and updated translations (ca,cs,da,el,en_CA,en_GB,es,et,eu,fa,fr,gl,
  hu,id,it,lt,mn,ne,nl,pl,pt,pt_BR,ro,rw,sk,sq,sr,sr@Latn,tl,uk,xh,zh_CN)

Overview of Changes from GLib 2.6.0 to GLib 2.6.1
=================================================
* GOption
 - Make gtk_init(NULL, NULL) work again [Marcin Krzyzanowski]
 - Improve handling of -- [Matthias Clasen]
 - Don't show G_OPTION_REMAINING in --help output [Matthew F. Barnes]
* g_find_program_in_path() doesn't return directories [Tommi Komulainen]
* Add gmodule-export-2.0.pc [Matthias]
* Win32 changes
 - Improve hangling of UNC paths [Tor Lillqvist]
 - g_getenv(), g_setenv(), g_unsetenv(), g_find_program_in_path()
   take and return UTF-8 now [Tor] 
 - Make g_file_test() work more reliably, and use PATHEXT
   when check for executables [Tor]
 - Build and cross-compilation fixes [J. Ali Harlow]
* Other bug fixes [Jens Hatlak, Morten Welinder, 
  Tor, Kalpesh Shah, Adrian Bunk]
* Documentation improvements [Marcin Krzyzanowski, Tor, Crispin
  Flowerday, Mariano Suárez-Alvarez, Christian Biere, Danny Milo,
  Vincent Untz, Bastien Nocera]
* New and updated translations (cy,de,nl,ru,sq,sv)

Overview of Changes from GLib 2.4.x to GLib 2.6.0
=================================================

* Major new APIs
  - GOption, a commandline option parser
  - GKeyFile, a parser/editor for the .ini like files 
  - Functions to support the XDG basedir specification
  - Wrappers for common POSIX pathname functions to handle filename
    encodings consistently. On Windows, these use UTF-8.

* Miscellaneous new functions
  - g_filename_display_name() converts filenames in displayable UTF-8 strings
  - g_uri_list_extract_uris() splits uri lists
  - g_date_get_iso8601_week_of_year() gets ISO 8601 week numbers
  - g_log_set_default_handler() installs an alternate default log handler
  - g_get_language_names() obtains a list of applicable locale names
  - g_strv_length() calculates the length of NULL-terminated string arrays
  - g_win32_get_windows_version() determines the Windows version 
  - G_GNUC_INTERNAL marks functions as non-exported
  - glib_check_version() checks the GLib version at runtime
  - g_debug() completes the family of logging functions

* Performance improvements
  - Optimize g_utf8_validate()
  - Optimize g_markup_parse_context_parse()
  - Reduce signal connection complexity from O(n) to O(1) 
  - Get rid of many PLT entries for internally used exported symbols
  - Reduce code size by removing literal strings from g_return_if_fail()

* Other changes
  - On Windows, GLib functions that take file name arguments now require
    those to be in UTF-8. Functions that return file names return UTF-8.
  - Use higher precision for mathematical constants
  - Don't convert to/from UTF-8 in g_filename_to_uri/g_filename_from_uri
  - Support ll as printf format modifier for long long on all platforms
  - Clean up the ABI and enforce the list of exported symbols
  - Add a .pc file for using gmodule in libraries
  - Require ngettext

Overview of Changes from GLib 2.5.7 to GLib 2.6.0
=================================================
* GOption: Don't list help options if group-specific
  options have been requested [Glynn Foster]
* Make g_get_language_names() track locale changes [Christian Persch]
* Win32 bug fixes [Tor Lillqvist]
* Bug fixes [Philippe Blain, Owen Taylor, Sebastian Wilhelmi]
* New and updated translations (da,es,ja,lt,zh_CN)
Bugs fixed: 159530,100697,160271,160645,157255

Overview of Changes from GLib 2.5.6 to GLib 2.5.7
=================================================
* Optimize g_utf8_validate() [Owen Taylor, Matthias Clasen]
* Optimize g_markup_parse_context_parse() [Havoc Pennington, 
  Morten Welinder]
* Reduce signal connection complexity from O(n) to O(1) 
  [Sven Neumann]
* Add a .pc file for using gmodule in libraries [Owen]
* Add G_GNUC_MALLOC to mark functions returning newly 
  allocated memory  [Matthias]
* Win32 bug fixes [Hans Breuer, Tor Lillqvist, Robert Ögren,
  Bruce Hochstetler]
* Bug fixes [Kazuki IWAMOTO, Matthias, Manish Singh, Morten,
  Frederic Crozat, Tor]
* Documentation improvements [Matthias, Tor, Owen]
* New and updated translations (cs,da,de,en_CA,en_GB,es,nb,nl,sq,zh_CN)

Overview of Changes from GLib 2.5.5 to GLib 2.5.6
=================================================
* GOption
  - Add G_OPTION_FLAG_REVERSE to allow options 
    which unset a  boolean variable [Tor Lillqvist]
* GChildWatch
  - Use sigaction instead of signal [Jonas Jonnson, 
  Archana Shah]
  - Make the very first SIGCHLD work [Gustavo Carneiro]
* Bug fixes [Morten Welinder, Tor, David MacLachlan,
  Manish Singh, J. Ali Harlow]
* Documentation improvements [Matthias Clasen, Tor]
* Updated translations (da,ja,tr,zh_CN)

Overview of Changes from GLib 2.5.4 to GLib 2.5.5
=================================================
* GKeyFile
  - Cleanups, add more error checking [Ray Strode]
  - Fall back to the untranslated string when getting 
    locale strings [Mark McLoughlin]
* GOption
  - Document GOption [Matthias Clasen]
  - Better support for rest arguments [Owen Taylor, Matthias]
  - Handle conflicts between groups [Matthias]
* Add g_lstat() to the stdio wrappers [Tor Lillqvist]
* Add g_filename_display_name() to convert filenames
  in displayable UTF-8 strings  [Alex Larsson, Matthias]
* Win32 bug fixes [Kazuki IWAMOTO, Hans Breuer, Tor]
* Bug fixes [Christophe Fergeau, Morten Welinder, 
  Owen, Kjartan Maraas, Mark]
* Documentation improvements [Matthias, Tor]

Overview of Changes from GLib 2.5.3 to GLib 2.5.4
=================================================
Add GKeyFile, a parser/editor for the .ini like files used in various
   freedesktop.org specifications. [Ray Strode]
Make the handling of filename encodings consistent across all
   GLib functions, introduce wrappers for common POSIX 
   functions which accept the same filename encoding. [Tor Lillqvist, 
   Owen Taylor]
GOption
 - Rename g_context_option_error_quark() to a more language-binding
   friendly name [Murray Cumming]
 - Accept backslashes in filenames on Win32 [Tor Lillqvist]
* Strip the internal aliasing prefix IA__ from function names in 
  assertions [Matthias Clasen]
* Add a function to split uri lists. [Matthias]
* Win32 bug fixes 
 - Don't open console windows [Tor]
* Other bug fixes [Philippe Blain, Robert Ögren, Hidetaka Iwai, Matthias,
 Morten Welinder, Mats-Ola Persson, Tor, Nickolay V. Shmyrev, Kjartan Maraas,
  Anders Carlsson, Tim-Philipp Müller, Lucas Rocha, Andrea Campi, Manish
  Singh, Thomas Fitzsimmons, Kazuki IWAMOTO]
* Documentation improvements [Matthias, Linus Walleij, Nickolay, Philippe, 
 Adam Hooper, Gustavo Carneiro]
* New and updated translations (cs,en_CA,en_GB,ja,nb,nl,or,sr,sr@Latn,sq)

Overview of Changes from GLib 2.5.2 to GLib 2.5.3
=================================================
* GOption
 - set the program name from argv[0] [Masatake YAMATO] 
 - make contexts work without a main group [Anders Carlsson]
* Performance 
 - Get rid of many PLT entries for internally used exported symbols,
   and clean up the ABI at the same time and make make check check the
   list of exported symbols.  [Matthias Clasen]
* Add API to get ISO 8601 week numbers [Niklas Lundell]
* Add API to install an alternate default log handler [Darin Adler]
* Add API to obtain a list of applicable locale names [Hidetoshi Tajima]
* Reduce code size bloat by removing literal strings from
 the g_return_if_fail() macros [Owen Taylor]
* Add g_strv_length [Tim-Philipp Müller]
* Win32 changes
 - Add API to determine the Windows version [Tor Lillqvist]
* Other bug fixes [Stepan Kasal, Anders, Tor, Kazuki Iwamoto,
  Manish Singh]
* Documentation improvements [Morten Welinder, Matthias]
* New and updated translations (es,nn,ro)

Overview of Changes from GLib 2.5.1 to GLib 2.5.2
=================================================
* Add G_GNUC_INTERNAL macro [Arjan van de Ven]
* Add GOption, a commandline option parser [Anders Carlsson]
* Add glib_check_version [Michael Natterer]
* Add XDG basedir API [Ray Strode]
* Require ngettext [Danilo Segan]
* Bug fixes [Manish Singh, Ray Strode, Vincent Noel, 
  Jon-Kare Hellan, Jody Goldberg]
* Win32 bug fixes [Tor Lillqvist, Hans Breuer, Peter Zelezny]
* Documentation improvements [Matthias Clasen, Vincent Untz, Christian Persch]
* New and updated translations (bs,eu,fi,gu,ne,pa)

Overview of Changes from GLib 2.5.0 to GLib 2.5.1
=================================================

* Bug fixes [Oliver Guntermann, Sven Neumann, James 
  Henstridge, Hiroyuki Ikezoe, Matthias Clasen, Robert 
  Ögren, Tommi Komulainen]
* Documentation improvements [Soeren Sandmann, 
  Christophe Fergeau, Danek Duvall]
* New and updated translations (eu,hi)
  
Overview of Changes from GLib 2.4.1 to GLib 2.5.0
=================================================

* New functions g_debug [Sven Herzberg]
* Use higher precision for mathematical constants [Morten 
 Welinder]
* Don't convert to/from UTF-8 in g_filename_{to,from}_uri 
 [Federico Mena Quintero]
* Win32
 - Handle empty digit string in printf() functions 
   correctly [Tor Lillqvist]
 - Support ll as format modifier for long long [Tor]
 - Be more careful about HOME [Tor, Ivan Wong]
 - Bug fixes [John Ehresman]
* Miscellaneous bug and portability fixes [Danilo Segan, 
 Owen Taylor, Nikolai Weibull, Benoît Carpentier, Morten 
 Welinder, Manish Singh, Sven Neumann, Julio M. Merino Vidal,
 Kaz Sasayama, Murray Cumming, Federico, Mariano Suarez-Alvarez]
* Documentation updates [Matthias Clasen, Crispin Flowerday,
 Tommi Komulainen, Federico Mena Quintero, Ed Griffiths]
* New and updated translations (ja,ne,no,wa)
 
Overview of Changes from GLib 2.4.0 to GLib 2.4.1
=================================================

* Win32 bug fixes [Tor Lillqvist, Roger Leigh, John Ehresman]
* Miscellaneous bug and portability fixes [Owen Taylor,
  Matthias Clasen, Jonas Jonsson, Christian Krause,
  Nickolay V. Shmyrev, Christophe Saout, Philippe Blain,
  Piotr Klaban]
* Documentation updates [Matthias]
* New and updated translations (ca,cs,cy,el,en_CA,en_GB,es,eu,fi,
  fr,gu,he,id,nl,pt,pl,ru,sr,sr@ije,sr@Latn,sv,uk)

Overview of Changes from GLib 2.3.6 to GLib 2.4.0
=================================================

* Handle invalid-UTF-8 in g_log() properly [Matthias Clasen]
* Win32 bug fixes [Tor Lillqvist, Bruce Hochstetler]
* Miscellaneous bug and portability fixes [Olivier Biot, David L. Cooper II, 
  Kjartan Maraas, Frédéric L. W. Meunier, Christof Petig, Manish Singh, 
  Sebastian Wilhelmi]
* Documentation updates [Owen]
* Updated translations (hr,ro)

Overview of Changes from GLib 2.3.5 to GLib 2.3.6
=================================================

* GAtomic bug fixes [Sebastian Wilhelmi, Mark McLoughlin]
* GMain threading fixes and improvements [Sebastian]
* Win32 [Tor Lillqvist]
 - restore some symbols extraneously exported from gobject to maintain ABI compatibility
 - Misc build improvements and fixes [Tor, Cedric Gustin, Hans Breuer]
* Documentation updates [Sebastian, Takeshi AIHANA, Matthias, Sven Herzberg]
* New and updated translations (be,es,fi,ga,pa,sr@ije,zh_CN)

Overview of Changes from GLib 2.3.3 to GLib 2.3.5
=================================================

* Make glib-mkenums parse initializers with macros. [Matthias Clasen, muppet]
* Respect locale era in g_date_set_parse(). [Theppitak Karoonboonyanan] 
* Add atomic operations and use it for the async queue and
  gonce implementation. [Sebastian Wilhelmi]
* Documentation improvements [Sebastian, Matthias, Sven Herzberg]
* Add g_main_depth() for finding the recursion depth of the main
  loop [Owen Taylor, Tim Janik, Stefan Westerfeld]
* Add g_spawn_close_pid(), needed on win32 [J. Ali]
* Win32 fixes. [Hans Breuer, J. Ali Harlow]
* Misc bugfixes [Sebastian, Matthias, Balazs Scheidler, Owen]
* Updated translations (cy,et,ga,sq)

Overview of Changes from GLib 2.3.2 to GLib 2.3.3
=================================================

* Add a native AIX gmodule implementation. [Laurent Vivier]
* Add g_node_copy_deep().  [James M. Cape, Matthias Clasen]
* Extend GQueue API to match the GList API. [Soeren Sandmann]
* Add g_hash_table_find().  [Tim Janik]
* Add a G_MODULE_BIND_LOCAL flag. [David Schleef]
* Inline g_string_append_c() when possible. [Owen Taylor, Tim]
* Wrap waitpid() as a GSource. [Jonathan R. Blandford]
* Add g_completion_complete_utf8(). [Theppitak Karoonboonyanan, 
  Matthias]
* Add g_strsplit_set(). [Soeren]
* Documentation improvements. [Vincent Untz, Sebastian Wilhelmi, 
  Soeren, Matthias]
* Win32 build fixes. [Tor Lillqvist]
* Misc bugfixes [Manish Singh, Noah Levitt, Simon Josefsson, 
  Morten Welinder, Damien Carbery, Julio M. Merino Vidal, Sebastian, 
  Matthias]
* Updated translations (nn,cs,it,ko,sq,ms,az,hr,uk,sr,sr@Latn,sq,ta)

Overview of Changes from GLib 2.3.1 to GLib 2.3.2
=================================================

* Add G_MAXSIZE. [Manish Singh]
* Add g_rand_new_with_seed_array(), g_rand_set_seed_array(),
  implementing the init-by-array functionality of the 
  original mersenne twister. Add g_rand_copy(). Improve seeding. 
  [George Lebl]
* Add a lowercase_name option to glib-mkenums. [Murray Cumming]
* Add g_ptr_array_foreach(). [Matthias Clasen]
* Add g_timer_continue(). [Tim-Philipp Müller]
* Fix a threadsafety issue in mem chunks. [Matthias, Balazs Scheidler]
* Fix g_filename_{to,from}_utf8() on Win32 and improve 
  g_file_test() there too [Hans Breuer] 
* Add a boxed type for NULL-terminated string arrays.  [Matthias]
* Add G_DEFINE_TYPE() plus variants to ease the constuction
  of GObject boilerplate code.  [Tim Janik]
* Support & in password GECOS field [Matthias, Soeren Boll Overgaard]
* Documentation improvements [Matthias, Manish]
* Win32 build fixes [Hans]
* Misc bug fixes [Damien Carbery, Matthias, Manish, Olivier Poncet, 
  Zack Rusin]
* Updated translations (ar,de,fa,ga,mn,nn,no,sq)

Overview of Changes from GLib 2.3.0 to GLib-2.3.1
=================================================

* Add glib/gi18n.h and glib/gi18n-lib.h for common
  gettext support, including a Q_() macro for translation
  with context [Matthias Clasen]
* Add a more flexible G_FILENAME_ENCODING variable
  as a replacement for G_BROKEN_FILENAMES [Matthias]
* Fix the return value g_main_context_iterate() for
  newly ready sources [Padraig O'Briain]
* Handle Hangul composition for normalization [Noah Levitt]
* Add G_{MIN,MAX,MAXU}INT{8,16,32}. [Mark Jones, Matthias]
* Add G_GSIZE_FORMAT/G_SSIZE_FORMAT [Manish Singh]
* Add G_STRFUNC as a portable wrapper for __func__ [Tim Janik]
* Documentation improvements [Matthias]
* GObject [Tim Janik]
 - Support '-' in g_signal_connect()/disconnect() names
   like 'swapped-signal'.
 - Add g_type_class_peek_static() and use to optimize
   g_object_new() for static types [Tim]
 - Allow setting construct-only properties from within
   init() implementations
 - Enforce readability/writeability in g_object_set/get()
* Fix bug with g_ascii_strtod and multi-byte separator.
  [Behdad Esfahbod, Roozbeh Pournader]  
* Misc bug fixes [Matthias, John Ehresman, Andrew Lanoix,
  Tor Lillqvist, Mark McLoughlin, Tim-Philipp Müller, Manish, 
  Morten Welinder]
* Updated translations (ca,cs,da,es,fr,ja,nn,no,pt,ru)

Overview of Changes from GLib 2.2.x to GLib-2.3.0
=================================================

* Replace Trio printf by gnulib vasnprintf [Matthias Clasen]
* Update Unicode data to Unicode 4.0 [Noah Levitt]
* Support XML-safe formatted output with 
  g_markup_[v]printf_escaped [Owen Taylor]
* Add g_file_read_link to read symbolic links [Matthias]
* Add g_unichar_get_mirror_char to obtain the 
  mirrored variant of a character [Noah]
* Support for one-time initialization functions. 
  [Sebastian Wilhelmi]
* Miscellaneous API additions: g_vasprintf
  g_string_chunk_insert_len, g_setenv, g_unsetenv [Matthias]
* Docs improvements [Matthias]
* Add support instance-private data on classed types
  [Mark McLoughlin, Tim Janik, Owen]
* Optimize signal emissions [Soeren Sandmann, Tim]
* Support a "default vtable" per interface [Tim]
* Add support for properties on interfaces [Owen, Tim]
* Miscellaneous API additions: g_value_take_string(),
  g_value_take_param(), g_value_take_object(), 
  g_value_take_boxed(). [Matthias]
* Win32 build fixes [Tor Lillqvist]

Overview of Changes from GLib 2.1.5 to GLib-2.2.0
=================================================

* Fix a problem with g_thread_init() on 64-bit problems
  [Alceste Scalas, Sebastian Wilhelmi]
* Add assembly implementations of byteswap macros
  for ia64 and x86_64. [Manish Singh]
* IOChannel fixes for Win32 [Tor Lillqvist, Thorsten Maerz]
* Updated translations (bg,ca,es,da,fi,lv,ru,sk)

Overview of Changes from GLib 2.1.4 to GLib-2.1.5
=================================================

* Win32 bug fixes [Tor Lillqvist]
* Various post-rewrite fixes for glib-gettext.m4 [Owen Taylor,
  Jody Goldberg, Kjartan Maraas, Johannes Stezenbach]
* Ensure we have a GUINT64_FORMAT by pulling in Trio
  if necessary [Manish Singh]
* Further Trio build fixes [Matthias Clasen, Owen]
* Hack around gcc, libtool issues with -pthread [Owen]
* Docs improvements [Matthias]
* Bug and portability fixes 
* Updated and new translations (bg,de,fi,fr,sq,fr)

Other contributors: Kai Poitschke, Morten Welinder

Overview of Changes from GLib 2.1.3 to GLib-2.1.4
=================================================

* autoconf changes to make it possible to cross compile
  GLib. [Owen Taylor, Dan Kegel, Amy Lin, Dimi Shahbaz, 
  Johannes Stezenbach]
* Use libintl when it has bind_textdomain_codeset() and
  GLib doesn't. [Owen]
* Improve generation of pseudo-random integers [Morten Welinder, 
  Sebastian Wilhelmi]
* Avoid literal UTF-8 in favor of octal escapes [Owen, Tomas Ogren]
* Cleanup include order [Sven Neumann]
* autoconf cleanups and bug fixes [Daniel, Matthias Clasen, Owen]
* Doc fixes and additions [Matthias]

Other contributors: James M. Cape, Frederic Crozat, Martin Gansser,
  Phuc LeHong, Manish Singh, Joshua Weage, Morten Welinder

Overview of Changes from GLib 2.0.x to GLib-2.1.x
=================================================

* Add copy of the Trio library to build and use for printf() when 
  system printf isn't good enough. Add g_printf()/etc. [Matthias Clasen]
* Add g_str_has_suffix()/g_str_has_prefix() [Alex Larsson]
* Add g_markup_parse_context_get_element() [Matthias]
* Add g_utf8_strreverse [Matthias]
* Add g_ascii_strtoull() [Tim Janik]
* Support scanning of 64-bit values with GScanner [Tim]
* Add g_set/get_application_name() [Havoc Pennington]
* Add G_LIKELY()/G_UNLIKELY() macros for hinting branch probabilities. 
  Use for g_return_if_fail(). [Matthias Clasen]
* Add G_GNUC_DEPRECATED macro [Tom Tromey]
* Improve the seeding algorithm of GRandom to avoid problems
  with certain pathological seeds. Support G_RANDOM_VERSION=2.0
  environment variable. [Sebastian Wilhelmi]
* Improve thread configure checks, use -pthread where applicable
  [Sebastian]
* Improve handlng of thread priorities [Sebastian]
* Fix up parameter names that might shadow functions from
  system headers [Soeren Sandmann]
* Clean up usage of deprecated functions [Manish Singh]
* Docs fixes and improvements. In particular, include "Since" information.
  [Matthias, Soeren, Martin Schulze, Daryll Strauss, Bill Janssen, 
  Owen Taylor, Morten Welinder]. 

Overview of Changes in GLib 2.0.7
=================================

* Fix C++ warnings in gtype.h [Dom Lachowicz]
* Fix g_type_fundamental_next() [Tim Janik]
* Fix various missing includes of config.h [Morten Welinder]
* Handle main loop initialization before g_thread_init [Sebastian Wilhelmi]
* Various 64-bit fixes [Manish Singh]
* Fix GPoll on Win32 [Tor Lillqvist, Herman Bloggs]
* Fix bug with buffering on UTF-8 IOChannels [Daniel Elstner]
* Misc bug and build fixes [Soren Andersen, Gustavo Carneiro, Tor,
     Tim, Havoc Pennington,  Matthias Clasen, Sebastian Rittau,
     Masahiro Sakai, Arvind Samptur, HideToshi Tajima, Owen Taylor]
* Updated and new translations (be,cs,de,*fa,it,lv,pt_BR,tr)

Overview of Changes in GLib 2.0.6
=================================

* Fix problem with interface prerequisites [Jon Trowbridge, Dave Camp]
* Clean up debug spew from GObject [Anders Carlsson]
* Compiler warning fixes [David L. Cooper II]
* Fix some problems with g_build_path() [Guillaume Chazarain, Owen Taylor]
* Fixes for --disable-debug [Sebastian Wilhelmi]
* Threading fixes [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann, 
  Rajkumar Sivasamy, Laurent Vivier]
* Documentation fixes [Jacob Berkman, Manuel Clos, Jared Dukat, 
  Sebastian Rittau, Linus Welleij]
* Misc bug fixes [Anders Carlsson, Sam Couter, Morten Welinder, Owen]
* Updated translations (bg,ko,vi)

Overview of Changes in GLib 2.0.5
=================================

* Fix problem with interface prerequisites [Jon Trowbridge, Dave Camp]
* Clean up debug spew from GObject [Anders Carlsson]
* Compiler warning fixes [David L. Cooper II]
* Fix some problems with g_build_path() [Guillaume Chazarain, Owen Taylor]
* Fixes for --disable-debug [Sebastian Wilhelmi]
* Threading fixes [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann, 
  Rajkumar Sivasamy, Laurent Vivier]
* Documentation fixes [Jacob Berkman, Manuel Clos, Jared Dukat, 
  Sebastian Rittau, Linus Welleij]
* Misc bug fixes [Anders Carlsson, Sam Couter, Morten Welinder, Owen]
* Updated translations (bg,ko,vi)

Overview of Changes in GLib 2.0.4
=================================

* Fix some 64-bit problems. (George Lebl, David L. Cooper II)
* Add note about Tru64 iconv to INSTALL. (Manuel Op de Coul)
* Fix problem with timouts > MAXINT. (Tim Janik, Owen Taylor)
* Updated translations (ca,es,fr,ja,gl,ms,nl,pl,pt,ru)

Overview of Changes in GLib 2.0.3
=================================

* Handle sorting 0-length arrays (Ron Arts)
* Threading fixes (Sebastian Wilhelmi)
* Portability fixes (Miroslaw Dobrzanski-Neumann, Jacob Berkman, Gareth Pierce, 
  Sebastian, Qingjiang Yuan)
* Various fixes for glib-2.0.m4. (Jim Gettys, others.)
* Locate right glib-genmarshal when cross-compiling. (Mitch Natterer)
* Win32 fixes (Tor Lillqvist)
* Try to fix g_get_charset() related segfaults. (Owen)
* Fixes for gettext detection. (Dan Winship, HideToshi Tajima, Boyd Lynn Gerber,
  Andrew P. Lentvorski, Jr.)
* Fix g_scanner_unexp_token() (Tim Janik, Sven Neumann)
* g_markup fixes. (Matthias Clasen.)
* Bug fixes and cleanups (Daniel Elstner, Matthias, Laszlo Peter, Morten Welinder,
  Wayne Schuller)

Overview of Changes in GLib 2.0.1
=================================

* Portability fixes for Sun's Forte compiler [Erwann Chenede]
* Performance improvements for GObject parameter lookup, 
  g_filename_to/from_utf8() [Alex Larsson]
* Actually check interface prerequisites [Matthias Clasen,
  Miroslaw Dobrzanski-Neumann]
* Fix problem with glib-mkenums taking huge amounts of stack. [Owen Taylor]
* Fix g_signal_handlers_disconnect_by_func() for C++ [Damien Sandras]
* Fixes for g_log() and threading.
  [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann, Tim Janik]
* Make g_print(), g_printerr(), g_warning(), etc, convert from
  UTF-8 to the encoding of the locale [Sebastian Wilhelmi, Tim]
* Fixes for GIOChannel on windows. [Tor Lillqvist]
* Fix gsize/gint mismatches in giochannel.c [Miroslaw Dobrzanski-Neumann]
* Fix file descriptor leak in g_file_get_contents() [Matthias]
* Workaround iconv() problems on older Solaris [Lauri Alanko]
* Fix warnings with gcc-3.1 about asm const [Cody Russel]
* Minor bug fixes.

Other contributors: Hans Breuer, LEE Sau Dan, Sven Neumann, Salmaso Raffaele,
  Akira Tagoh, Morten Welinder


Overview of Changes in GLib 2.0.0
=================================

* Thread portability fixes [Sebastian Wilhelmi]
* Documentation updates [Owen Taylor]
* Make g_strerror(), g_strsignal() properly return UTF-8,
  call bind_text_domain_codeset() so that error strings
  are in UTF-8 as well. [Owen, Tor Lillqvist]

Overview of Changes in GLib 2.0.0 rc1:
======================================

* Win32 fixes [Tor Lillqvist]
* Portability fixes [Finlay Dobbie, Miroslaw Dobrzanski-Neumann]
* Fix up g_date_strftime [Daniel Elstner]
* Add some structure padding [Tim Janik]
* Make g_get_homedir() prefer the users home directory to $HOME

Other contributors: Matthias Clasen, Paolo Maggi, Christian Rose

Overview of Changes in GLib 1.3.15:
===================================

* Speed up marshalers by using private access to GValue 
  [Anders Carlsson, Tim Janik]
* Reduce GValue to 2 elements [Tim]
* Add G_DEBUG environment variable, G_DEBUG=fatal_warnings [Matthias Clasen]
* Fixes for AIX compilation [Miroslaw Dobrzanski-Neumann]
* Add padding to various structures [Owen Taylor, Tim]
* Win32 fixes [Tor Lillqvist]

Other contributors: James Henstridge, Ryan Lovett, Morten Welinder,
  Daniel Elstner

Overview of Changes in GLib 1.3.14:
===================================

* Register value transformations for gint64, guint64 [Andy Wingo]
* Build with large-file support [Sven Neumann, Owen Taylor]
* Fix handling of hostnames in URI's [Darin Adler]
* Main loop bug fixes [Havoc Pennington, Owen]
* Doc fixes and improvements [Manish Singh, Tim Janik]
* Support ' as attribute delimiters in GMarkup [Matthias Clasen]
* Win32 fixes [Hans Breuer, Tor Lillqvist]
* Threading bug and build fixes [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann]
* Miscellaneous bug fixes

Other contributors: Matthias Clasen, James Henstridge, Mitch Natterer, 
  Morten Welinder.

Overview of Changes in GLib 1.3.13:
===================================

* Fix g_filename_to/from_uri for Win32 [Tor Lillqvist, Darin Adler]
* Miscellaneous win32 fixes [Tor, Hans Breuer]
* Fix thread options for gcc on AIX [Jerome Zago, Sebastian Wilhelmi]
* Documentation improvements [Ron Steinke, Matthias, Sebastian]
* Cache iconv converters as used by g_convert() [Jeffrey Stedfast]
* Bug fixes [Sven Neumann, Owen Taylor, Matthias Clasen, Jeffrey,
  Laszlo Peter, Havoc Pennington, Tim Janik]

Overview of Changes in GLib 1.3.12:
===================================

* Implement closure chaining, fixing up API (Tim Janik)
* Closure chaining test case (James Henstridge)
* Make GType long not int where both are equal width (Tim)
* Win32 fixes and improvements (Hans Breuer, Tor Lillqvist)
* Fixes for NetBSD. (Dan Winship)
* Use snprintf() for g_printf_string_upper_bound() where possible. (Matthias Clasen)
* Save space for GBSearchArray (Tim Janik)
* Documentation improvements. (Matthias, Sven Neumann, Havoc Pennington)

Other contributors: Darin Adler, Chris Blizzard, Anders Carlson, Daniel Elstner, Michael Meeks, 
  Mark McLoughlin, Dave Neary, Manish Singh, Owen Taylor, HideToshi Tajima, 
  Sebastian Wilhelmi.


Overview of Changes in GLib 1.3.11:
===================================

* Win32 fixes [Hans Breuer, Tor Lillqvist]
* Documentation improvements [Matthias Clasen]
* Portable directory handling API [Hans]
* Threading fixes [Sebastian Wilhelmi, Havoc Pennington]
* Fix excess relocations in Unicode tables [Andrew Taylor]
* Fix gpattern for UTF-8 [Matthias Clasen]
* Support overriding class closures [Tim Janik]
* Support for derivation from G_TYPE_POINTER [Owen Taylor]
* Hide pointers to type information inside GType to reduce locking
  [Alex Larsson, Tim]
* Adds check for direct inclusion of gobject/*.h [Owen]
* GObject API cleanups [Tim]

Other contributors: Darin Adler, Jacob Berkman, Daniel Egger, Eric Lemings, 
  Michael Meeks, Mark McLoughlin, Arkadiusz Miskiewicz, Dan Winship


Overview of Changes in GLib 1.3.10:
===================================

* Many Win32 fixes and improvements [Tor Lillqvist]
* Documentation improvements [Matthias Clasen]
* g_string_printfa() renamed to g_string_append_printf()
* Use libcharset from libiconv to implement charset detection
  more portably. [Owen Taylor, Hidetoshi Tajima]
* Add 64 bit type support to GObject [Joshua Pritikin, Mathieu Lacage, Owen]
* Make support for 64 bit integers a requirement [Joshua]
* GPattern improvements [Tim Janik, Matthias]
* Locale independent g_ascii_strtod / g_ascii_dtostr [Alex Larsson]
* Many bug fixes and minor tweaks.

Other Contributors: Darin Adler, Jakub Jelinek, James Antill, Andrew Taylor,
  Ben Gertzfield, Elliot Lee, Manish Singh, Abel Cheung, Laszlo Peter,
  Sven Neumann, George Lebl, Raja Harinath, Sebastian Wilhelmi,
  Jacob Berkman


Overview of Changes in GLib 1.3.9:
==================================

* Fixes for comparison of threads [Sebastian Wilhelmi]
* Use vasprintf() when possible for g_strdup_printf [Matthias Clasen]
* Win32 fixes [Tor Lillqvist, Hans Breuer]
* Add a len argument to g_ascii_strup/strdown
* Bug, portability fixes, cleanups.

Other Contributors: Darin Adler, Katsuhiro Okuno, Joshua N. Pritikin


Overview of Changes in GLib 1.3.8:
==================================

* Documentation updates [Owen]
* Made GType interfaces overridable in derived types
* Many win32 fixes [Tor Lillqvist]
* Miscellaneous cleanups and fixes

Other contributors:
  Darin Adler, Matthias Clasen, Ron Steinke, Hans Breuer, Alex Larsson


Overview of Changes in GLib 1.3.7:
==================================

* Integrate GClosure support into the main loop [Owen Taylor]
* More GSignal convenience functions (macros) [Sven Neumann, Tim Janik]
* Introduced weak references for GObject [James Henstridge, Sven, Tim] 
* Minor hash table optimizations
* Main loop and threading improvements [Sebastian Wilhelmi]
* Added g_ascii_* functions to be used for locale insensitive UTF-8
  compliant code instead of old string functions  [Darin Adler, Alex Larsson]
* Add functions for Unicode case-conversion, normalization, and 
  collation [Owen]* GString improvements [Owen]
* Reworked the GIOChannel code [Hidetoshi Tajima, Ron Steinke]
* Removed glib-config-2.0 in favour of pkgconfig [Sebastian]
* Make code 64bit clean [Mark Murnane]
* More G_CONST_RETURN fixes
* Many improvements to the win32 code [Tor Lillqvist, Hans Breuer]
* Miscellaneous bug and API fixes

Other contributors:
  Michael Natterer, Christopher James Lahey, Padraig O'Briain,
  Matthias Clasen, Josh Pritikin, Steve Baker, Cesar Rincon, Garry R. Osgood,
  Michael Meeks, Laszlo Peter,  Martin Baulig, Kjartan Maraas, Andrew Lanoix,
  Peter Williams


Overview of Changes in GLib 1.3.6:
==================================

* Threads have a "return value" from g_thread_join
* Removed ability to adjust thread stack size
* Prefix warnings with progname/PID by default, change toggle for this to 
  be an env variable G_MESSAGES_PREFIXED not a compile-time option
* GMarkup speedups
* GDate const, convenience fixups
* Include test cases that headers are compilable by C++ compiler
* Add ability to spawn processes with argv[0] != executable path.
* g_strstr_len, g_strrstr, g_strrstr_len
* Add length argument to g_utf8_strchr and g_utf8_strrchr.
* Misc bug fixes


Overview of Changes in GLib 1.3.5:
==================================

* Added an installed glib-mkenums Perl program for parsing enumeration
  declarations from header files.
* Mark some additional deprecated functions.
* Bug and Portability fixes


Overview of Changes in GLib 1.3.4:
==================================

* Efficiency improvements for GThreadPool
* A few bug fixes
* Build fixes
* Documentation improvements


Overview of Changes in GLib 1.3.3:
==================================

GLib:

* More user_data support in various functions.
* Main loop API revamps to support per-thread main loops.
* Unicode handling improvements.
* Implemented debugging traps.
* G_CONST_RETURN specification all over the place.
* Various new small utility functions.
* Random number generator precision improvements.
* New configure option --disable-mem-pools.
* Many Win32 improvements.
* Added g_try_malloc() friends varinats.
* Many documentation improvements.
* Many threading improvements, support for dynamic allocation
  of static mutexes.
* GHookLIst API cleanups.
* Improved format support of GDate parser.
* String function speed improvements with new g_stpcpy().
* Hashtable API additions.
* New GPatternSpec for shell-style pattern matching (from GtkPatternSpec).
* Optimizations, cleanups, bug fixes.

GObject:

* Added many convenience functions.
* GClosure and GParamSpec use float/sink ref-counting scheme now.
* Reworked property change notification.
* Binary searchable array cleanups, so it's widely usable now.
* Added static content keeping for some GValue types.
* Support for statically scoped signal parameters.
* Extinguished property trailer args in set/get interface.
* Added support for abstract types.
* G_CONST_RETURN specification all over the place.
* Split parameter exchange functionality into value transforms
  and parameter conversions.
* Added signal emission hooks and signal accumulators.
* Added interface prerequisites to support is_a (interface, object)
  relations.
* Implemented GValueArray.
* New types, boxed: G_TYPE_VALUE, G_TYPE_CLOSURE, G_TYPE_GSTRING
  GParamSpecs: G_TYPE_PARAM_PARAM, G_TYPE_PARAM_POINTER, G_TYPE_PARAM_CLOSURE,
  G_TYPE_VALUE_ARRAY, G_TYPE_PARAM_UNICHAR, G_TYPE_PARAM_VALUE_ARRAY.
* Varrags value collection improvements.
* Implemented debugging traps.
* Made things thread-safe.
* Many documentation improvements.
* Many cleanups, optimizations and bug fixes.


Overview of Changes in GLib 1.3.2:
==================================

GLib:

* Win32 build improvements  [Tor]
* Improvements to error reporting  
  (g_critical(), g_return_if_reached()) [Darin]
* Add g_strlcpy/g_strlcat  [David Wheeler]
* New IO channel implementation for Win32  [Tor] 
* Make g_array_free, g_string_free return pointer to memory requested
  not to be freed.  [Darin]
* Added GError based error reporting for thread functions.  [Sebastian]
* Moved reference docs into GLib distribution. [Owen]
* Added g_convert() for doing convenient character set conversions based
  on iconv. (GLib now requires libiconv or a native iconv.) [Havoc/Owen]
* Various Unicode handling additions (g_ucs4_to_utf8, g_utf8_validate(),
  g_{locale,filename}_{to,from}_utf8)  [Robert/Havoc/Owen]
* Portability fixes for threading.  [Sebastian]
* Added convenient functions for launching new processes (g_spawn_*),
  and shell quoting/unquoting functions.  [Havoc]
* Split glib.h into many headers.  [Sebastian]
* Added a simple callback-based parser for XML-like files (GMarkup).  [Havoc]
* Fixed confusions between comparison functions that return <0, 0, >0
  and equaility functions that return FALSE,TRUE.  [Sebastian]
* Added safe/portable temporary file manipulation functions.  [Tor]
* autoconf improvements.  [Raja]
* Many documentation improvements.
* Bug fixes.

GObject:

* Added boxed and pointer types.  [Tim/Jonathan]
* Added callback abstraction (GClosure)  [Tim]
* Added signal system (GSignal)  [Tim]
* Make GTypePlugin an interface  [Tim]
* Added GTypeModule - a simple GTypePlugin instantiation  [Owen]
* Bug fixes.


What's new in GLib 1.3.1:
=========================

* New GObject library added including object system based on
  the GTK+ object system. 
* Functions for getting the properties of Unicode characters, 
  computing the canonical decomposition and ordering combining
  characters aand manipulating UTF-8 string manipulation based
  on libunicode.
* GString now properly handles embedded nuls.
* Multiple fixes from the 1.2.x branch.
* Upgrade to libtool 1.3.3
* Full thread support (thread creation and destruction).
* BeOS port, BeOS dynamic modules.
* Many improvements to the Windows ports.
* Improvements to the OS/2 port, OS/2 module support.
* Double ended queue implementation.
* GLib macros for printf() formatting, e.g. G_GULONG_FORMAT = "lu"
* New configure option --enable-msg-prefix to prefix messages, warnings
  et ceteri with the program name and the process id.
* New thread-safe random number generator Mersenne Twister.
* g_strcompress() added, g_strescape() had a slight API change, and
  more tightly defined semantics.
* the g_string(x) macro has been removed, #x may be used instead.
                                

