Overview of changes in GLib 2.68.0
==================================

* Bugs fixed:
 - !1987 build: Drop gconstructor_as_data_h usage from glib-compile-schemas
 - !1989 glib.supp: Generalize some suppressions
 - !1992 gbytesicon: Fix error in g_bytes_icon_new() documentation
 - !1994 glocalfileoutputstream: Tidy up error handling
 - !1995 tests: Fix copy/paste error in queue test

* Translation updates:
 - Czech
 - Finnish
 - Italian
 - Korean
 - Lithuanian
 - Polish
 - Romanian
 - Slovenian
 - Turkish


Overview of changes in GLib 2.67.6
==================================

* Fix a security issue when using `g_file_replace()` with
  `G_FILE_CREATE_REPLACE_DESTINATION` (#2325)

* Disallow operations on the empty path with `g_file_new_from_path()` (#2328)

* Various fixes for GLib when building with clang-cl on Windows (work by
  Aleksandr Mezin) (#2341, #2344)

* Bugs fixed:
 - #2325 file-roller symlink attack
 - #2327 Teach glib-mkenums about GLIB_AVAILABLE_ENUMERATOR_IN_2_68, and start using it
 - #2328 g_file_new_for_path("") yields CWD, which seems wrong
 - #2341 glib-genmarshal output is sometimes empty because output file is not closed
 - #2344 c_std=c11: gbitlock.c: ‘asm’ undeclared
 - !1962 Validate D-Bus machine ID after loading
 - !1976 Use the right permissions for directory watching on Win32
 - !1977 gio/tests/{meson.build,pollable.c}: Determine libutil SONAME at build time
 - !1980 glib.supp: Add another system thread suppression

* Translation updates:
 - Basque
 - Catalan
 - Czech
 - French
 - Galician
 - German
 - Hungarian
 - Indonesian
 - Korean
 - Latvian
 - Portuguese
 - Portuguese (Brazil)
 - Serbian
 - Spanish
 - Swedish
 - Ukrainian


Overview of changes in GLib 2.67.5
==================================

* Fix more issues with `glib_typeof` macro from 2.67.3–2.67.4 (work by
  Iain Lane, Simon McVittie) (#2331, !1975)

* Fix regression with some FD mappings passed to `g_subprocess_launcher_spawnv()`
  caused by changes for #2097 in GLib 2.67.4 (work by Olivier Fourdan,
  Philip Withnall) (#2332)

* Fix detection of `str[n]casecmp()` when building with `clang-cl` (work by
  Aleksandr Mezin) (#2337)

* Use zlib from subproject if configured with `wrap_mode=forcefallback` (work by
  Seungha Yang) (!1959)

* Bump Visual Studio compilation requirement to VS 2012, and Windows 8 SDK for
  GLib 2.67.x onwards (work by Chun-wei Fan) (!1970)

* Bugs fixed:
 - #832 Some tweaks re: GRWLock
 - #2331 glib 2.67.3: <glib.h> can no longer be included in extern "C" blocks
 - #2332 Glib 2.67.4 causes gnome-shell to exit when spawning Xwayland on demand
 - #2333 Missing relation between g_file_info_get_size() and G_FILE_ATTRIBUTE_STANDARD_SIZE attribute in documentation
 - #2337 Linking fails when building with clang-cl because of str[n]casecmp
 - !1936 tests: Fix leak of dlopened module in pollable test
 - !1954 Change SkipAsyncData fields to be gsize (and not gssize)
 - !1956 The ETag returned by various GFile functions is nullable
 - !1959 meson: Use subproject zlib if "wrap_mode=forcefallback" was specified
 - !1961 gkeyfilesettingsbackend: check for errors when creating file monitors
 - !1970 README.win32.md: Mention about Window 8+ SDK requirement
 - !1971 gio/tests/pollable.c: Fix build on non-Linux UNIX
 - !1975 gatomic.h: Make `glib_typeof` API break opt in.

* Translation updates:
 - Basque
 - Danish
 - English (United Kingdom)
 - Galician
 - German
 - Indonesian
 - Lithuanian
 - Portuguese
 - Portuguese (Brazil)
 - Slovenian


Overview of changes in GLib 2.67.4
==================================

* Add a `g_string_replace()` function (work by Joshua Lee) (#225)

* Add `G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER` flag to simplify
  the common case for writing a D-Bus authentication observer, allowing most
  uses of `GDBusAuthObserver` to be dropped (#1804)

* Add a new `g_spawn_with_pipes_and_fds()` variant which supports renumbering
  FDs (#2097)

* Add new g_memdup2() API to replace g_memdup(), which is vulnerable to a
  silent integer truncation and heap overflow problem if not used carefully
  (discovered by Kevin Backhouse, work by Philip Withnall) (#2319)

* Fix various regressions caused by rushed security fixes in 2.66.6 (work by
  Simon McVittie and Jan Alexander Steffens) (!1932, !1941, #2323)

* Fix a silent integer truncation when calling g_byte_array_new_take() for
  byte arrays bigger than G_MAXUINT (work by Krzesimir Nowak) (!1942)

* Fix `g_utf8_strdown()` to fix some issues in Turkish
  (work by Kjell Ahlstedt) (!1930)

* Bugs fixed:
 - #225 GString doesn't have a g_string_replace() function
 - #587 g_input_stream_skip() out-of-bounds behavior is inconsistent between implementations
 - #1804 Add G_DBUS_SERVER_FLAGS_AUTHENTICATION_REQUIRE_SAME_USER flag
 - #2097 GSubprocessLauncher with FD assignment can clash with g_spawn_async internal pipe
 - #2315 httpproxy: Need overflow protection when reading response during connection establishment
 - #2319 CVE-2021-27219 (GHSL-2021-045): integer overflow in g_bytes_new/g_memdup
 - #2322 g_test_dbus: double output when piping
 - #2323 [GLIB 2.66.6] g_io_channel_set_line_term() stopped working with null terminated strings and length -1
 - !1917 Adding a missing test on integer overflow within g_http_proxy_connect()
 - !1918 Fix more warnings
 - !1923 Add support for Tilix and Konsole
 - !1930 guniprop: Fix g_utf8_strdown() for Turkish locale
 - !1932 gtlspassword: Fix inverted assertion
 - !1934 gdbus: Reject attempts to set future connection or server flags
 - !1938 Fix more warnings
 - !1939 ci: Temporarily disable macOS CI job as runner is offline
 - !1940 Fix more warnings
 - !1941 gkeyfilesettingsbackend: Fix basename handling when group is unset
 - !1942 CVE-2021-27218: gbytearray: Do not accept too large byte arrays
 - !1947 Revert "Merge branch 'wip/pwithnall/macos-ci-disable' into 'master'"
 - !1948 tests: Use a more realistic language code than sv_SV
 - !1949 gatomic: Make fallback g_atomic_pointer_get type-safe
 - !1951 Add a test for parsing 0 as double
 - !1955 tests: Add missing NULL terminator to spawn-singlethread test

* Translation updates:
 - Catalan
 - Galician
 - Hungarian
 - Portuguese
 - Romanian
 - Slovenian
 - Spanish
 - Swedish
 - Turkish
 - Ukrainian


Overview of changes in GLib 2.67.3
==================================

* Add new `g_memdup2()` API to replace `g_memdup()`, which is vulnerable to a
  silent integer truncation and heap overflow problem if not used carefully
  (discovered by Kevin Backhouse, work by Philip Withnall) (#2319)

* Add new `g_dbus_object_path_escape()` and `g_dbus_object_path_unescape()` APIs
  to provide one way of escaping arbitrary bytestrings for use in D-Bus object
  paths (work by Lars Karlitski and Frederic Martinsons) (#968)

* Use `bash-completion.pc` (if available) to provide the path to install
  completion files into (work by Frederic Martinsons) (#1054)

* Fix support for public/private trigraphs in `glib-mkenums` (work by Matthias Klumpp) (!1870)

* Add `glib_debug` configure option to allow disabling debug infrastructure in
  builds with debug symbols enabled (work by Ole André Vadla Ravnås) (!1889)

* Fix a regression where `PATH` would always be searched when using `g_spawn()`,
  even when it wasn’t supposed to (work by Simon McVittie and Thomas Haller) (!1902)

* Override `gio-querymodules` in Meson when used as a submodule (work by Xavier Claessens) (!1909)

* Bugs fixed:
 - #344 gdbus(1) command-line completion issues
 - #968 gdbus: add g_dbus_object_path_{un,}escape
 - #1054 Use pkg-config to get path for bash-completion file installation
 - #1180 GUnixInputStream and GUnixOutputStream don't consider TTYs pollable
 - #2011 Add additional unit tests for D-Bus name watching
 - #2226 clang++ compilation fails on clusterfuzz
 - #2292 Cannot find a common ancestor when running CI style check jobs
 - #2299 GObject introspection annotation of g_closure_new_object() is wrong
 - #2305 GIO security hardening causing gnome-keyring to regress when session bus is provided by dbus-launch (dbus-x11)
 - #2314 gdatetime: math library link issue
 - #2319 GHSL-2021-045: integer overflow in g_bytes_new/g_memdup
 - !610 Various memory leak cleanups to GSettings tests
 - !1804 Add more GIR annotations to gparam.c and gsignal.c
 - !1823 Fix more warnings
 - !1843 gfile: Add Linux kernel headers compatibility kludge
 - !1847 Port to QNX
 - !1853 ginetaddress: Handle systems without IPv6 support
 - !1859 docs: update g_action_group_activate_action() remote activation semantics
 - !1860 glocalfile: Fix an uninitialized variable
 - !1865 tests: Add more debug information to gdbus-connection-slow
 - !1868 gdesktopappinfo: Fix validation of XDG_CURRENT_DESKTOP
 - !1870 mkenums: Support public/private trigraph again
 - !1873 Fix possible integer overflow of g_socket_send_message()
 - !1876 Fixing g_socket_send_message() documentation to make it clearer
 - !1877 Fix more warnings
 - !1878 Another fix on g_socket_send_message()
 - !1879 Fix more warnings
 - !1880 GError documentation tweaks
 - !1881 docs: Move ‘Notes’ section from README to NEWS
 - !1883 gutils: Document caching of XDG directory variables
 - !1884 gthread-win32: Use SetThreadDescription Win32 API for setting thread name
 - !1887 ci: Fix msys-mingw32 CI builds due to package rename
 - !1888 docs: Add documentation for GLIB_VERSION_CUR_STABLE and PREV_STABLE
 - !1889 build: Add glib_debug option
 - !1890 gtype: Improve formatting of GType documentation
 - !1891 Fix more warnings
 - !1893 gwin32appinfo: Fix printf length sub-specifier
 - !1894 gsocket: Fix SO_NOSIGPIPE regression on Darwin
 - !1898 gtestutils: Add g_test_get_path() API
 - !1899 m4macros: replace obsolete macros AC_TRY_RUN and AC_TRY_LINK in glib-2.0.m4
 - !1900 [th/gsignal-cleanup] minor changes to GSignal related code
 - !1901 Check if the remote already exists before adding it.
 - !1902 spawn: Don't set a search path if we don't want to search PATH
 - !1903 m4macros: Increment serial number of glib-2.0.m4
 - !1905 Start to ignore known leaks under AddressSanitizer
 - !1906 gdbus-serialization: Don't leak string containing first serialization
 - !1908 Fix straightforward memory leaks in tests
 - !1909 Meson: override gio-querymodules program
 - !1910 gio: Add explicit virtual g-i annotations for undiscovered invoker relationship
 - !1911 Fix more warnings
 - !1915 Mark g_key_file_get_comment() key parameter as nullable
 - !1919 atomic: Fix type check of g_atomic_pointer_compare_and_exchange()
 - !1921 guri: Mark g_uri_get_host as nullable
 - !1925 gapplication: Fix a memory leak

* Translation updates:
 - Czech
 - Friulian
 - Galician
 - Hungarian
 - Portuguese
 - Portuguese (Brazil)
 - Romanian
 - Spanish
 - Ukrainian


Overview of changes in GLib 2.67.2
==================================

* Add `gio launch` command to execute programs (work by Frederic Martinsons) (#54)

* Fix unused parameter warnings in code generated by `gdbus-codegen` (work by Frederic Martinsons) (#1105)

* Officially deprecate `to-pixdata` option for `glib-compile-resources`, in favour
  of simply embedding more modern image formats in linked-in `GResource` files (#1281)

* Support querying and running UWP applications on Windows (work by LRN) (#1991)

* Support `gio trash --restore` and `gio trash --list` commands (work by Frederic Martinsons) (#2098)

* No longer read environment variables for GIO module locations when running as setuid (#2168)

* More progress on fixing compiler warnings (work by Emmanuel Fleury) (!1773 and others)

* `GKeyFile` performance improvements (work by Timm Bäder) (!1829, !1832)

* Improve UDP socket behaviour on Windows (work by Marco Mastropaolo and Ole André Vadla Ravnås) (!1827, !1844)

* Add `-Dtests` meson configure option for disabling tests entirely (work by Ole André Vadla Ravnås) (!1850)

* Bugs fixed:
 - #54 Add `gio launch` command to execute .desktop files
 - #513 GSignal: Impossible to have return values in signals which are G_SIGNAL_RUN_FIRST only
 - #514 GSignal: Only limited usage of accumulator function possible
 - #1105 gdbus-codegen: fix some unused parameter warnings
 - #1188 Crash in gapplication.c:1014 when reading error message if dbus_register returns false without setting error
 - #1281 Update glib-compile-resources and GResource docs to deprecate/remove to-pixdata in stable/master resp.
 - #1283 gvfs-trash error message when unable to create trash directory is unhelpful
 - #1568 GObject tutorial does not mention floating references
 - #1991 W32: Glib cannot run UWP applications
 - #2098 gio trash: restore trashed files to their original location
 - #2168 giomodule: Loads GIO modules even if setuid, etc.
 - #2264 GPtrArray might call qsort() with NULL data
 - #2265 2.67.1 regression: assertion failure starting gnome-terminal
 - #2275 gio/completion/gio: Some variables are not localized
 - #2279 g_source_is_destroyed example uses deprecated GDK API
 - !1304 Extended error
 - !1773 Fix more warnings
 - !1783 gtlsdatabase: remove duplicate precondition check
 - !1784 fuzzing: Add more fuzzing tests for various string parsing functions
 - !1785 glocalfile: Add an assertion to help static analysis
 - !1787 Debuggability improvements in gosxappinfo.m
 - !1788 gdate: Validate input as UTF-8 before parsing
 - !1791 gdatetime: Disallow NAN as a number of seconds in a GDateTime
 - !1794 gio-tool-info: Prevent criticals if mount options are not available
 - !1796 gfileutils: Fix typo in docs
 - !1797 gdatetime: Improve ISO 8601 parsing to avoid floating point checks
 - !1801 glib: Add more missing return value annotations
 - !1802 gobject: More missing return value annotations
 - !1806 tests: Add some rounding tolerance in timeout test
 - !1807 python: Reformat some files to keep style-check-diff happy
 - !1808 tests: Be more lenient with timing checks on asyncqueue pops
 - !1810 gfileinfo: Add missing preconditions to g_file_info_get_attribute_data()
 - !1811 Add more missing nullable annotations
 - !1813 gdbus-codegen: Ignore some flake8 warnings
 - !1815 Fix more warnings
 - !1816 fuzzing: Add more GUriFlags to the URI parsing test
 - !1817 fuzzing: Add more parsing flags to the GKeyFile test
 - !1818 Fix more warnings
 - !1819 Fix more warnings
 - !1821 gdate: Limit length of dates which can be parsed as valid
 - !1822 Fix more warnings
 - !1827 Windows: fix FD_READ condition flag still set on recoverable UDP socket errors.
 - !1829 keyfile: Delay calling g_get_language_names() until it's needed
 - !1830 gsocket: Fix credentials error-handling on Apple OSes
 - !1832 More small GKeyFile performance improvements
 - !1834 Update gvdb
 - !1837 gdatetime.c: Fix MSVC builds for lack of NAN items
 - !1838 Minor improvements to GError documentation
 - !1840 Add nullable annotation for g_file_get_uri_scheme
 - !1841 gthread: Fix incorrect cast
 - !1842 gthread: Port native mutex to Clang
 - !1844 gsocket: Improve default UDP behavior on Windows
 - !1845 gsocket: Fix use-after-close
 - !1848 gwin32: Always use unicode APIs
 - !1850 build: Add option for disabling tests
 - !1855 build: Fix ssize_t detection on older versions of glibc
 - !1856 build: Fix Android system checks
 - !1857 gtestutils: Fix g_assert_not_reached() on MSVC
 - !1861 More GError tests
 - !1863 tests: Ignore -Wformat-nonliteral warning in new GError tests

* Translation updates:
 - Catalan
 - Galician
 - German
 - Lithuanian
 - Romanian
 - Spanish
 - Ukrainian


Overview of changes in GLib 2.67.1
==================================

* Deprecate `g_time_zone_new()` in favour of `g_time_zone_new_identifier()`,
  which makes error checking easier (#553)

* Remove `volatile` from various public APIs, including `G_DEFINE_*`. You should
  adjust your code to not use `volatile` for atomic variables, `GOnce`
  variables, or mostly anything else (see
  http://isvolatileusefulwiththreads.in/c/). (#600)

* Support passing file handles to `gdbus` command line tool (work by
  Norbert Pocs and Tim Waugh) (#961)

* Add `g_assert_cmpstrv()` test convenience function (work by Niels De Graef) (#2015)

* Changes to the behaviour of the `G_URI_FLAGS_SCHEME_NORMALIZE` scheme
  normalization flag in `GUri` (work by Carlos Garcia Campos) (#2257, !1716)

* Add new `--run-prefix` and `--skip-prefix` options to GTest, to allow running
  or skipping test suites by prefix (work by Frederic Martinsons) (!1738)

* Fix thread-safety of `GBinding`; see the updated documentation for
  `g_object_bind_property()` for full details — if your code uses `GBinding`
  across threads, you should re-check it against the latest documentation, use
  `g_binding_unbind()` rather than implicitly dropping the binding with your
  last `g_object_unref()` call, and use `g_binding_dup_source()`/`g_binding_dup_target()`
  instead of `g_binding_get_source()`/`g_binding_get_target()`
  (work by Sebastian Dröge) (!1745)

* Bugs fixed:
 - #553 Improved error-handling when timezone lookup fails
 - #600 Remove "volatile" from G_DEFINE_*
 - #961 gdbus tool: file handle passing doesn't work
 - #994 mark g_assert_* as "noreturn" also on MSVC
 - #1560 Can't get data for empty compressed resources
 - #1592 Main loop ignores GPollFD sources when there is at least one source ready with priority higher than default one
 - #1833 meson: reconsider G_DISABLE_CAST_CHECKS handling
 - #1849 Documentation of g_set_object(): can object_ptr be null?
 - #1963 Follow-up from "gdbusmessage: Limit recursion of variants in D-Bus messages"
 - #2015 Add g_assert_cmpstrv() test utility
 - #2046 Add pylint and shellcheck CI checks
 - #2074 Big dbus writes with a FD list fail
 - #2076 g_type_register_fundamental() and g_type_add_interface_static() should not trigger valgrind leak warnings
 - #2150 Add URI parsing tests from GstURI to GUri
 - #2221 GLib-GIO:ERROR:../gio/tests/gsocketclient-slow.c:99:on_event: 'connection' should be NULL
 - #2223 Documentation of g_strrstr_len is misleading; suggested fix
 - #2233 GSocketClient crashes on connection failure
 - #2236 Docs: gdbus-codegen example links broken
 - #2253 In gspawn.c, use sysconf() system call on Mac OS, instead of default maxfiles limit of 4096
 - #2257 GUri: apply scheme normalization flag consistently
 - !1251 Improve support for interface types
 - !1385 gobject: allocate parameter list for g_object_new_valist() entirely on stack
 - !1629 Add some tracing to GTask
 - !1699 Fix signedness warnings
 - !1701 gio: Fix some remaining DocBook syntax in a documentation comment
 - !1708 gio: Add missing nullable annotations
 - !1716 guri: Normalize uri segments if they are encoded and add a flag to do scheme-based normalization
 - !1722 gio: Fix various typos of the name ‘D-Bus’
 - !1724 glib/tests/fileutils: Fix expectations when running as root
 - !1726 gdbus: Document the intended semantics of handles and fdsTim Waugh
 - !1731 Make more use of g_assert_no_errno()
 - !1733 gdbusauthmechanismsha1: Don’t create keyring dir when running as setuid
 - !1734 glocalfileinfo: Use a single timeout source at a time for hidden file cache
 - !1735 gobject: Standardise on the term ‘instantiatable’
 - !1737 gscanner: Avoid undefined behaviour copying between union members
 - !1738 Extend the usage of -p option for glib test framework
 - !1740 Fix more warnings
 - !1745 Make GBinding thread-safe (alternative approach)
 - !1746 gkeyfilesettingsbackend: improve error-checking
 - !1747 Fix broken link syntax in g_vasprintf docs
 - !1748 Fix minor Coverity return value warnings
 - !1750 Fix warnings
 - !1754 GWin32AppInfo: Use a thread pool for async appinfo tree rebuilds
 - !1755 Minor Coverity fixes
 - !1756 shellcheck fixes
 - !1757 Python formatting improvements
 - !1758 Fix warnings
 - !1765 Fix more warnings
 - !1766 Fix some gdatetime annotations
 - !1767 tests: Fix GDateTime tests on FreeBSD
 - !1769 gfileicon: Fix unused-but-set variable with G_DISABLE_ASSERT
 - !1770 Minor scan-build fixes
 - !1771 macos: fix frexpl checks in cross-compilation
 - !1776 gio: ‘security_context_t’ is deprecated
 - !1780 Minor Coverity fixes
 - !1781 gspawn: Handle ENOSYS from close_range()
 - !1782 ghostutils: Abandon hostname conversion early if it’s too long

* Translation updates:
 - Czech
 - Spanish
 - Ukrainian


Overview of changes in GLib 2.67.0
==================================

* Important and time-critical fix to DST transitions which will happen in Europe
  on 2020-10-25 on distributions which use the ‘slim’ tzdata format (which is
  now the default in tzdata/tzcode 2020b) (work by Claudi M., LRN) (#2224)

* Further timezone handling changes to improve performance of `GTimeZone` (work
  by António Fernandes, Sebastian Keller) (#2204)

* Fix deadlock on Windows when `G_SLICE` is set in the environment (diagnosis by
  Christoph Reiter) (#2225)

* Fix UTF-8 validation when escaping URI components (thanks to Marc-André Lureau) (!1680)

* Security fix for incorrect scope/zone ID parsing in URIs (!1669)

* Add `g_log_writer_default_set_use_stderr()` API for printing log messages to stderr (work by Simon McVittie) (#2087)

* Improve connection error reporting when IPv6 is available and disabled (work by Michael Catanzaro, debugging by Konstantin Kharlamov and Milan Crha) (#2211)

* Fix definition of `G_MSVC_SYMBOL_PREFIX` for ARM (work by Wolfgang Stöggl) (!1187)

* Add `GStrvBuilder` convenience API for building `NULL`-terminated string arrays (work by Robert Ancell) (!1417)

* Support appinfo verbs other than ‘open’ on Windows (work by LRN) (!1502)

* Expose node-based `GTree` APIs (work by Maciej S. Szmigiero) (!1509)

* Add `G_DBUS_METHOD_INVOCATION_HANDLED`/`_UNHANDLED` convenience constants (work by Simon McVittie) (!1603)

* Set `IP_BIND_ADDRESS_NO_PORT` on sockets when binding to local addresses (work by Cristian Rodríguez) (!1598)

* Add Meson option for libelf support (work by Niklas Gürtler) (!1650)

* Add support for PKCS #11-backed TLS certificates (work by Patrick Griffis) (!1663)

* Add `g_subprocess_launcher_close()` API to make `GSubprocessLauncher` more usable in bindings (work by Sergio Costas) (!1677)

* Bugs fixed:
 - #1233 GType for GTree
 - #2077 Invalid Pointer Arithmetic in g_path_get_basename
 - #2087 Respecting G_MESSAGES_DEBUG in a custom log writer should be easy to do
 - #2164 GDBus DBUS_COOKIE_SHA1 mechanism may use too old a key
 - #2194 gtk3/glib crash on gimp
 - #2203 fstatat is available only on macOS 10.10+
 - #2204 Time zone cache is constantly invalidated if TZ is NULL
 - #2209 gthreadedresolver: faulty logic in parse_res_txt
 - #2210 g_private_replace ordering issue
 - #2211 "Network is unreachable" error returned when IPv6 is disabled and network is reachable using IPv4
 - #2215 DST incorrectly ends on wrong dates
 - #2224 top bar time is incorrect, timezone map in control center is broken
 - #2225 Setting G_SLICE makes Windows programs hang since 2.66
 - !1187 Define G_MSVC_SYMBOL_PREFIX correctly for ARM
 - !1417 gstrvbuilder: Add a new object to make NULL-terminated string arrays.
 - !1449 gio: Expose g_file_query_info_for_copy()
 - !1502 GWin32AppInfo: Support verbs other than "open"
 - !1509 GTree: add an ability to iterate over a tree and a node-based API
 - !1575 Use C++11 decltype where possible
 - !1598 gsocketclient: set IP_BIND_ADDRESS_NO_PORT if binding to local address
 - !1603 GDBus: Add G_DBUS_METHOD_INVOCATION_HANDLED, _UNHANDLED
 - !1643 Minor Coverity fixes
 - !1645 Fix various signedness warnings
 - !1647 Fix warnings (keep going)
 - !1648 glocalfile: Never require G_LOCAL_FILE_STAT_FIELD_ATIME
 - !1650 Make libelf dependency optional via meson feature
 - !1652 trash portal: Handle portal failures
 - !1654 gio-tool-trash: Prevent recursion to speed up emptying trash
 - !1657 glist: Clarify that g_list_free() and friends only free an entire list
 - !1658 utils: Limit the scope of the variable `max`
 - !1661 Lookup fallback time zones in the cache to improve performance
 - !1663 gtlscertificate: Add support for PKCS #11 backed certificates
 - !1665 Fix g_module_symbol() under Windows sometimes not succeeding
 - !1669 guri: Fix URI scope parsing
 - !1670 GSubprocessLauncher: Move cleanup to dispose()
 - !1671 gdatetime: Avoid integer overflow creating dates too far in the past
 - !1673 CI: Re-enable code coverage reporting for MSYS2 builds
 - !1674 Add version macros for 2.68
 - !1675 Make static assertions about standard types
 - !1677 gsubprocesslauncher: Allow to close FDs
 - !1678 gmessages: Document that using a custom log writer basically disables fatal handling
 - !1679 gmain: Fix minor typo in documentation
 - !1680 guri: Fix UTF-8 validation when escaping URI components
 - !1681 gspawn: Handle error opening /dev/null
 - !1686 Various improvements in GSocketClient
 - !1687 uri: add missing (not)nullable annotations
 - !1688 gspawn: Use close_range() if available to close FDs between fork/exec
 - !1691 gmain: Fix possible locking issue in source unref
 - !1692 gsignal: Plug g_signal_connect_object leak
 - !1695 gfile: Clarify refcount handling for g_file_replace_contents_bytes_async()
 - !1696 Fix various minor scan build warnings
 - !1706 Add various missing nullable annotations
 - !1712 Revert "Use C++11 decltype where possible"
 - !1714 gmacros: Use __typeof__ when compiling with Clang
 - !1718 gtrace: Add G_GNUC_PRINTF annotation

* Translation updates:
 - Chinese (Taiwan)
 - Danish
 - Greek, Modern (1453-)
 - Hebrew
 - Latvian
 - Portuguese
 - Russian
 - Slovak
 - Ukrainian


Overview of changes in GLib 2.66.0
==================================

* Bugs fixed:
 - #2200 missing tab in makefile rule
 - !1639 guri: Fix user passed to g_uri_split_with_user() not being NULL'd

* Translation updates:
 - Croatian
 - Hungarian
 - Italian
 - Serbian
 - Slovak
 - Swedish


Overview of changes in GLib 2.65.3
==================================

* Fixes to the new `statx()` calls — note that since GLib 2.65.2 uses `statx()`
  (if available) instead of `stat()`/`fstat()`/`lstat()`/`fstatat()`, syscall
  sandboxing for third party applications might need to be updated

* Bugs fixed:
 - #2189 g_file_query_info on ro file system: Numerical result out of range
 - #2191 Calling nice(20) can lead to thread related warnings
 - #2197 Segfaulting Integer Overflow in g_option_group_add_entries
 - !1025 Big o notations
 - !1626 gio: Document g_settings_new() missing schema behaviour
 - !1627 gthread: Add a sysprof mark for thread creation
 - !1628 Replace a bunch of fallthrough comments with an attribute
 - !1631 Fix splice behavior on cancellation
 - !1632 Fixing signedness warning in glib/gfileutils.c
 - !1635 gcancellable: Mark a variable as unused if built with G_DISABLE_ASSERT

* Translation updates:
 - Basque
 - Catalan
 - Chinese (China)
 - Czech
 - English (United Kingdom)
 - Friulian
 - German
 - Japanese
 - Kazakh
 - Korean
 - Lithuanian
 - Polish
 - Portuguese (Brazil)
 - Slovenian


Overview of changes in GLib 2.65.2
==================================

* Support `statx()` and `G_FILE_ATTRIBUTE_TIME_CREATED` (work by Andre Miranda) (#1970)

* Fix deadlock in `g_subprocess_communicate_async()` (work by Alexander Larsson) (#2182)

* Add `%f`/microsecond placeholder support to `g_date_time_format()` (work by Johan Bjäreholt) (!1605)

* Bugs fixed:
 - #5 g_new0 performance
 - #1970 Make G_FILE_ATTRIBUTE_TIME_CREATED support stx_btime
 - #2176 Inconsistent introspection annotations for g_input_stream_read and g_socket_receive
 - #2182 g_subprocess_communicate_async() can deadlock when writing
 - !1593 CI support for Coverity Scan
 - !1605 gdatetime: Add %f format specifier and microsecond precision to g_date_time_format_iso8601
 - !1613 gfile: Document TOCTTOU avoidance using g_file_delete()
 - !1615 docs: glib-compile-resources: json-stripblanks
 - !1616 gioerror: Map WSAENETRESET on Windows to G_IO_ERROR_CONNECTION_CLOSED
 - !1619 Minor Coverity fixes
 - !1620 gvariant: Ensure GVS.depth is initialised
 - !1622 gdatetime: Widen a variable before multiplication
 - !1623 gcancellable: Assert that make_pollfd() call succeeds
 - !1624 gdbusaddress: Drop an unnecessary NULL check
 - !1625 gdbusmessage: Drop redundant uint ≥ 0 checks

* Translation updates:
 - French
 - Galician
 - Greek, Modern (1453-)
 - Indonesian
 - Romanian
 - Spanish
 - Turkish
 - Ukrainian


Overview of changes in GLib 2.65.1
==================================

* Add `GUri` API for parsing, building and representing URIs according to
  [RFC 3986](https://tools.ietf.org/html/rfc3986) (work by Marc-André Lureau) (#110)

* Fix handling of xattr data with embedded nuls (#422)

* Add `g_file_set_contents_full()` which gives more control over fsyncs (#1302)

* Fix cross-compilation on iOS (work by Nirbheek Chauhan) (#1868)

* Add a `x-gvfs-notrash` option to disable trash on certain mounts (work by Ondrej Holy) (!1549)

* Support ‘slim’ TZif files generated with `zic -b slim` (work by Paul Eggert) (#2129)

* Support emitting profiling marks from `GMainContext` to sysprof capture files (!1551)

* Accept IPv6 zone IDs in `g_hostname_is_ip_address()` (work by Marc-André Lureau) (!1604)

* Bugs fixed:
 - #4 Include a UTF-8 safe escaping function
 - #110 Basic URI operations
 - #137 display_name should be always available
 - #250 GTestCase's setup/teardown functions appear pointless
 - #272 allow thread pools to adjust the number of threads to the number of cpu's/cores
 - #422 Wrong assumption in libgio GFileInfo on xattr/acl string: it may contain binary data.
 - #858 glib2 @2.40.0 issues a "Got weird mach timebase info" error (Macports, PPC)
 - #1022 g_object_new Should Mention That it Zeroes Out Private Struct
 - #1200 Make g_assert_null/nonnull clang static analyzer friendly
 - #1203 Add a variant of g_file_set_contents() which accepts file mode
 - #1288 gmacros: Introduce non-public G_CLANG_ANALYZER_NORETURN macro
 - #1302 g_file_set_contents() can fill target with NUL bytes if it did not previously exist
 - #1670 ThreadSanitizer data races
 - #1764 cancellable test: on_mock_operation_ready: assertion failed (iterations_requested > iterations_done): (10 > 10)
 - #1868 iOS cross compile impossible due to frexpl check not supporting cross compilation
 - #1869 iOS doesn't have Cocoa, which thankfully isn't a requirement of this code that supposedly requires it
 - #1982 GSocketAddressEnumerator documentation is inconsistent with existing usage
 - #2127 Spurious GIO module initialization on Fedora Silverblue (and other ostree-based systems?)
 - #2129 date_time bugs after 2038, or with today's date and 'zic -b slim' TZif files
 - #2132 Valgrind reports "still reachable" after g_thread_pool_new/free
 - #2136 Valgrind reports "still reachable" after g_option_context_parse
 - #2140 calling malloc in fork child is undefined-behaviour
 - #2141 g_value_copy is was recently broken
 - #2149 Make G_URI_FLAGS_PARSE_STRICT the default
 - #2156 Merge _g_uri_parse_authority() into GUri
 - #2159 Thread-unsafe initialization in gportalsupport.c
 - #2160 More guri regressions
 - #2165 More guri breakage
 - #2166 g_uri_build() functions should accept a NULL scheme
 - !1328 guri: new URI parsing and generating functions
 - !1527 Add g_tls_connection_get_channel_binding_data call and enums
 - !1534 Various GLocalFile fixes related to the filesystem::remote attribute
 - !1546 tree: Fix various ableist language
 - !1549 Add support to ignore trash for certain mounts
 - !1551 Add initial sysprof support
 - !1553 gtestutils: Mark that g_assert_whatever() macros do not normally return
 - !1554 GUri build fixes
 - !1555 Remove c-format from the string that is not c-formatted
 - !1556 fuzzing: Another fix for g_uri_parse() test
 - !1557 A few g_uri_parse_params() improvements
 - !1559 Fix buffer read overflows in GUri
 - !1561 gconvert: Use a pointer array in extract_uris
 - !1563 gdesktopappinfo: Fix unnecessarily copied and leaked URI list
 - !1564 tests: limit number of threads to something reasonable.
 - !1570 Reduce CI bandwidth requirements
 - !1572 Add GUriParamsIter
 - !1576 gtask: Only override g_task_set_source_tag() for GLib ≥ 2.60
 - !1577 uri: add illegal_characters argument to unescape_bytes
 - !1578 tests: Add tests for RFC 8536 v3 parsing of time zones
 - !1579 glib: Use g_getenv everywhere instead of getenv
 - !1582 appinfo: Add properties
 - !1583 gio: Remove broken support for XP
 - !1590 Use CI schedules and DAGs
 - !1591 gfileutils: Fix O_NOFOLLOW handling on BSD systems
 - !1594 GFile: Document that G_FILE_CREATE_REPLACE_DESTINATION can only be used with...
 - !1595 uri: add ENCODED_PATH & ENCODED_FRAGMENT flags
 - !1599 uri: do not add ipv6 brackets on non-ip host
 - !1600 uri: do not encode ':' and ';' from userinfo
 - !1601 timezone: Fix an uninitialized use
 - !1602 Revert "Merge branch 'appinfo-properties' into 'master'"
 - !1604 Make g_hostname_is_ip_address() accept ipv6 zoneid
 - !1609 Fix multiple typos in guri.c
 - !1611 guri: Always prepend `//` to the host when building a URI
 - !1612 guri: Document and check restrictions on path prefixes

* Translation updates:
 - Catalan
 - Kazakh
 - Lithuanian
 - Romanian
 - Slovenian
 - Spanish
 - Ukrainian


Overview of changes in GLib 2.65.0
==================================

* Fix memory monitor tests to only be installed if installed-tests are enabled,
  and to be skipped if GObject-Introspection is too old (!1407)

* Stability improvements for various unit tests

* D-Bus credentials support on macOS (#507)

* MSVC support for the files generated by `glib-compile-resource` and `gdbus-codegen` (#1215, !1452)

* Year 2038 fixes involving new API in `GBookmarkFile` (#1931)

* SOCKS5 proxy authentication fixes (#1986, #1988)

* Support for more than `MAXIMUM_WAIT_OBJECTS` FDs for `g_poll()` on Windows (#2107)

* Add `g_assert_no_errno()` test macro for testing POSIX-style functions (!1204)

* Update Unicode Character Database to version 13.0.0 (!1422)

* Support storing interned strings in `GValue`s efficiently, via `g_value_set_interned_string()` (#2109)

* Bugs fixed:
 - #2 g_filename_from_utf8() should normalize?
 - #176 the behaviour of constructors for GLib data types is not specified if memory allocation fails
 - #480 /gdbus/connection/signals test intermittently fails: assertion failed (count_name_owner_changed == 2): (1 == 2)
 - #507 GDBus credentials don’t work on OS X
 - #602 GLib.Thread not usable from GObject-Introspection
 - #1154 Missing documentation how to set a value in a GArray
 - #1215 MSVC cannot build glib-compile-resource's output resource file
 - #1323 meson, autotools: figure out if mem barrier is needed for arm64 host variant aarch64
 - #1398 gdate: Add error handling for GetDateFormatW calls
 - #1841 Signal handler disconnection race when finalising GCancellableSource
 - #1851 Meson Build Failure on Windows: Undefined Reference to libiconv
 - #1911 Memory leak in g_param_spec_flags and/or g_param_spec_enum
 - #1931 GBookmarkFile API involves time_t
 - #1954 gdbus-server-auth intermittent failure
 - #1957 gdbus-connection test failure on FreeBSD
 - #1986 Socks5 Proxy: Authentication seems broken
 - #1988 Socks5 Proxy: Wrong error returned when using no authentication
 - #2038 Bindings: g_tls_connection_set_database() does not allow None as argument
 - #2051 GUnixOutputStream can block on close()
 - #2057 Call malloc_trim() under memory pressure
 - #2067 Glib uses _Static_assert in C++17 mode
 - #2081 gdbus error messages contains mixed up body and head signatures
 - #2082 AM/PM - specific variation support needed to Hebrew language
 - #2083 Memory monitor tests fail if dbusmock isn't installed
 - #2092 FreeBSD CI timing out in gdbus-connection filter test
 - #2094 Deprecation warnings when compiling with -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_28 -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_28
 - #2106 Duplicated if - else if conditions in gtranslit.c
 - #2107 g_poll() implementation on Windows stall when more than MAXIMUM_WAIT_OBJECTS FDs have passed
 - #2109 GValue: Add support for interned string
 - #2124 g_file_info_get_content_type() may return NULL
 - #2132 Valgrind reports "still reachable" after g_thread_pool_new/free
 - #2134 Valgrind reports "still reachable" after `g_uuid_string_random()`.
 - #2135 Valgrind reports "still reachable" after g_key_file_new/free
 - #2136 Valgrind reports "still reachable" after g_option_context_parse
 - !1204 gtestutils: Add a new g_assert_no_errno() test macro
 - !1302 gobject: new g_param_is_valid_property_name() function.
 - !1329 Support nanoseconds in stat timestamps on Windows
 - !1341 MUI capabilities for GWin32RegistryKey
 - !1360 CI: Show execution environment before we start
 - !1395 tests: Move memory_monitor_tests under installed_tests_enabled
 - !1396 macros: Define G_GNUC_FALLTHROUGH for more compilers
 - !1397 tests: Skip MemoryMonitor test if GObject-Introspection is too old
 - !1398 gcontenttype: Fix crash in _get_generic_icon_name()
 - !1402 ci: Update Android Docker image for aarch64 CPU naming change
 - !1405 tests: Disable link-time warning for mem-overflow
 - !1406 Replace fallthrough comments with G_GNUC_FALLTHROUGH
 - !1408 tests: Don't compare strings by pointer
 - !1409 gdummytlsconnection: Add missing overrides for ALPN properties
 - !1413 gapplication: Fix a minor typo in the documentation
 - !1414 gstrutils: Set locale explicitly for search-utils test
 - !1415 meson: Don't use assert in test code
 - !1418 ginetaddress, ginetsocketaddress: Add missing (nullable) annotations
 - !1422 glib: Update Unicode Character Database to version 13.0.0
 - !1423 gobject: Clarify assertion failure on ref-after-finalize
 - !1424 docs: Fix configuration with gtk_doc=true and installed_tests=false
 - !1425 gdbusconnection: GDBusSignalCallback can have a NULL sender_name
 - !1426 gunidecomp: Update and reformat Unicode version support history
 - !1427 gicon: Clarify GVariant refcounting in docs
 - !1428 Add missing 'extern' to the dllexport version of GLIB_VAR/GOBJECT_VAR
 - !1429 Fix arch detection ifdefs in glib/valgrind.h
 - !1430 Use __builtin_trap() on Clang on any platform
 - !1431 glib-unix.c: fix heap corruption in g_unix_get_passwd_entry
 - !1432 docs: Mention new gio tool options
 - !1433 meson: Fix buildtype usage
 - !1434 gdbusconnection: Clarify nullability of SignalInstance.sender
 - !1436 glib: Update internal copy of valgrind.h from Valgrind 3.15 release
 - !1437 gmarkup tests: tab character escape/unescape
 - !1439 Don't misdetect stpcpy on windows platforms on clang
 - !1440 Silence clang errors about -Wformat-nonliteral due to missing intermediate attributes
 - !1441 Meson: Override every dependency glib provides
 - !1442 gfile: Fallback to fast-content-type if content-type is not set
 - !1443 gio: use TAPTestRunner in the memory monitor tests
 - !1444 Meson: Add glib-checks and glib-asserts options
 - !1452 Make symbols generated by gdbus-codegen exportable on Visual Studio-style builds
 - !1455 gdesktopappinfo: Note that search results are not filtered
 - !1456 GCredentials documentation fixes
 - !1458 meson: Exclude gosxutils.m when building for iOS
 - !1459 meson: Fix the gnulib checks for isnan* functions
 - !1460 glib: Sync the local modification to glib/valgrind.h to what was upstreamed
 - !1462 gvariant-core: Add a note about memory safety of children
 - !1463 gdesktopappinfo: Add several nullable annotation to GAppInfo getters
 - !1464 Update Fedora CI
 - !1466 CI: Switch to new Windows runners
 - !1469 goption: Treat an empty option context parameter string as NULL
 - !1475 Improve documentation of g_tls_database_verify_chain()
 - !1476 tests: Fix remaining race in gdbus-connection filter test
 - !1479 Improve documentation of client connection validation flags
 - !1480 CI: Make sure we use meson 0.49.2 in MSYS2
 - !1481 array: fix corrupt state of GPtrArray after g_ptr_array_extend_and_steal()
 - !1482 [th/g-ptr-array-variable-cleanups] minor cleanup of variables for GPtrArray
 - !1487 glib: annotate static inline functions with G_AVAILABLE-type macros
 - !1488 Rebuild Fedora CI image
 - !1491 gdatetime: update annotations
 - !1492 glib-mkenums: allow optional 'since' tag
 - !1493 meson: Remove stray ] in O_DIRECTORY check
 - !1496 Fix GLIB_UNAVAILABLE_STATIC_INLINE declaration
 - !1498 array: add internal ptr_array_new() helper for creating GPtrArray
 - !1503 docs: Add indexes for symbols added in 2.66
 - !1505 gobject: Handle runtime checks as such
 - !1506 tests: Speed up the cancellable test
 - !1508 tests: Speed up the file test and make it more reliable
 - !1512 Various fixes when building for iOS
 - !1513 Initialize the visited time of a new GBookmarkFile
 - !1515 meson: check for stpcpy using cc.links()
 - !1516 gthreadedsocketservice: Mark source_object of run signal as nullable
 - !1517 GWin32RegistryKey: Move assertions
 - !1518 strfuncs: Use a GPtrArray in strsplit()
 - !1522 meson: Fix gnulib printf checks
 - !1524 meson: Fix gnulib build where isnan*() is needed
 - !1525 Normalize C source files to end with exactly one newline
 - !1528 gtlsconnection: Improve documentation of peer-certificate[-errors]
 - !1530 tree: Fix various typos and outdated terminology
 - !1531 gvariant: Fix documentation for g_variant_get_string() to match reality
 - !1532 win32: spelling fix
 - !1535 glib.supp improvements

* Translation updates:
 - Bokmål, Norwegian
 - Catalan
 - Catalan (Valencia)
 - Chinese (Taiwan)
 - Dutch
 - French
 - Galician
 - German
 - Hebrew
 - Indonesian
 - Italian
 - Japanese
 - Latvian
 - Lithuanian
 - Malay
 - Romanian
 - Serbian
 - Slovak
 - Slovenian
 - Spanish
 - Turkish
 - Ukrainian


Overview of changes in GLib 2.64.0
==================================

* Use `posix_spawn()` to speed up launching test D-Bus instances (!1388)

* Bugs fixed:
 - #1783 Document using glib-mkenums with meson
 - #2049 Crash in g_array_copy
 - !1384 Some minor clang warning fixes
 - !1386 docs: Document generated headers caveats for genmarshal
 - !1387 ci: Correctly propagate exit status in run-style-check-diff.sh
 - !1388 gtestdbus: Use posix_spawn() to spawn dbus-daemon
 - !1389 Update GError docs to use G_DEFINE_QUARK

* Translation updates:
 - Czech
 - Danish


Overview of changes in GLib 2.63.6
==================================

* Fix potential relative read when calling g_printerr(), which could lead to a
  denial of service from a setuid-root process being used to block access to the
  TTY for another user (#1919)

* Fix SOCKS proxy resolver sometimes not being used when resolving addresses
  via Happy Eyeballs (CVE-2020-6750) (#1989)

* Several other Happy Eyeballs fixes for address resolution (#1871, #1872, #1902)

* Various race fixes in `GDBusConnection` and its unit tests (#1515)

* Fix a race condition with D-Bus name ownership (#1517)

* Drop `gio-launch-desktop` helper application in favour of calling `sh` directly (#1633)

* Fix win32 exception handling with C# exceptions (#2025)

* Fix thread safety of `GUnixMountMonitor` (#2030)

* Additional fixes to new thread pool attribute behaviour from GLib 2.63.4 to
  check if sched_setattr() is allowed by system policies before depending on it (#2039, !1356)

* Fix memory leaks and corruption when freeing `GSource`s while freeing a `GMainContext` (!1353)

* Drop inappropriate installation of object manager example documentation (!1359)

* Bugs fixed:
 - #938 gdbus call -a doesn't support message bus connections
 - #1515 gio/gdbus-threading test sometimes fails in CI
 - #1517 g_bus_own_name does not always call name_lost_handler when _REPLACE and _ALLOW_REPLACEMENT are set
 - #1633 should not install gio-launch-desktop into PATH
 - #1919 read from relative path in g_printerr() in 2.58.3
 - #1995 Tracker issue for Happy Eyeballs regressions
 - #2002 g_io_channel_read_line does not honour the line_term symbols set
 - #2025 W32 exception handling misbehaves when C# exceptions are thrown when running inside the Visual Studio debugger
 - #2030 Random nautilus test suite failures involving GUnixMountMonitor
 - #2039 sched_setattr() still can cause EPERM through natural causes
 - #2043 Low memory monitor test failed in CI
 - #2044 GApplication docs suggest invalid GVariant type
 - !1185 gtimezone: Tidy up UTC timezone creation
 - !1281 ci: Update Docker packages
 - !1283 gmodule: change _g_module_close to only take a handle.
 - !1298 tests: Speed up the GIO actions test
 - !1299 gapplication: Fix a minor typo in the documentation
 - !1339 gsocketclient: Refactor g_socket_client_connect_async()
 - !1353 GMainContext - Fix memory leaks and memory corruption when freeing sources while freeing a context
 - !1354 GThreadPool - Add test for !1340
 - !1355 glist: Add docs examples of how to combine with g_steal_pointer()
 - !1356 GThread - Check if sched_setattr is allowed by the system policies before depending on it
 - !1359 docs: Don’t install object manager example separately
 - !1363 Make tests pass if we are euid != 0 with capabilities
 - !1366 Fix oss-fuzz coverage link
 - !1372 gobject: Fix strict aliasing warnings with g_set_object()
 - !1376 gitlab-ci: 64-bit ARM is aarch64, not arm64
 - !1381 ghash: Document the iteration order over a hash table is not defined
 - !1382 tests: Bump the refcount timeout in gdbus-threading
 - !1383 ci: Enable parallelisation when running installed tests

* Translation updates:
 - Basque
 - English (United Kingdom)
 - French
 - Galician
 - German
 - Greek, Modern (1453-)
 - Hungarian
 - Indonesian
 - Japanese
 - Korean
 - Lithuanian
 - Polish
 - Portuguese (Brazil)
 - Spanish
 - Swedish
 - Turkish


Overview of changes in GLib 2.63.5
==================================

* Fix behaviour of `g_file_move()` fallback code to not follow symlinks (#986)

* Rename `--glib-min-version` argument of `gdbus-codegen` to `--glib-min-required`
  (this is not an API break as `--glib-min-version` was added earlier in the
  2.63 cycle) (#1993)

* Add gtk-doc checks to CI and fix a number of documentation issues
  (thanks to Xavier Claessens) (!978)

* Add `G_SIZEOF_MEMBER()` macro (!1333)

* Add a debug message if `g_setenv()` or `g_unsetenv()` are used after any
  threads have been spawned — this will be upgraded to a warning in future (!1337, #715)

* Skip memory monitor tests if xdg-desktop-portal or dbusmock are not available (!1296, !1338)

* Change the `libmount` configure option from a boolean to a Meson `feature` (!1344)

* Do not return `target-uri` from `g_file_peek_path()` when called on trash/recent files (!1346)

* Drop new TLS certificate API for PKCS #11 backed certificates, as the implementation
  is not ready yet (this is not an API break as the API was added earlier in the
  2.63 cycle) (!1347)

* Bugs fixed:
 - #986 g_file_move: remove G_FILE_COPY_NOFOLLOW_SYMLINKS section
 - #1551 CI: Add checks for `TODO` in MRs
 - #1925 Large number of routes installed into kernel cause high cpu usage
 - #1993 Rename gdbus-codegen --glib-min-version argument to --glib-min-required and add --glib-max-allowed
 - #2012 spawn_thread_queue not initialised in GThreadPool
 - #2020 g_network_monitor_base_add_network() improperly unrefs GInetAddressMask
 - !978 Various fixes to make gtkdoc-check pass on glib
 - !1018 docs: tag enclose 'all' and 'help' values
 - !1170 Avoid C++20 deprecated assignment to volatile
 - !1296 tests: Skip GMemoryMonitor tests if the dbusmock template is not available
 - !1307 Remove global declaration of GMemoryMonitor
 - !1322 gmain: Mark G_SOURCE_FUNC as available in 2.58
 - !1333 Add and use G_SIZEOF_MEMBER() macro
 - !1337 genviron: Message if g_setenv()/g_unsetenv() are used after threads spawned
 - !1338 tests: Skip GMemoryMonitor tests if xdg-desktop-portal is not available
 - !1344 meson: libmount autodectection
 - !1345 gio-tool-info: Print unix mount information where available
 - !1346 gfile: Do not return target-uri from g_file_peek_path()
 - !1347 Revert "gtlscertificate: Add support for PKCS #11 backed certificates"
 - !1348 ghash: Clarify that g_hash_table_add() always consumes the key
 - !1349 doc: Clarify that _locker_new() does not actually allocate memory
 - !1351 glib.supp: update g-threaded-resolver-getaddrinfo-config

* Translation updates:
 - Japanese
 - Lithuanian
 - Malay
 - Portuguese (Brazil)
 - Swedish


Overview of changes in GLib 2.63.4
==================================

* Fix various race conditions on signal emission in GDBus (#604, #978, #1232)

* Change thread pools so that thread attributes (in particular, priority) are
  inherited from the thread which created the `GThreadPool` initially, rather
  than from the thread which is pushing a new job into the pool (#1834, #2007)

* Expand support for running Windows apps with
  `g_app_info_launch_default_for_uri()` using rundll32 on Windows (#1932)

* Support multiple directories in `GSETTINGS_SCHEMA_DIR` environment variable (#1998)

* Support full Julian day range in `TZ` environment variable (#1999)

* Apply recursion depth limits to variants in D-Bus messages (!1201)

* Support adding call flags and timeouts to method calls generated by
  `gdbus-codegen` through the new `--glib-min-version` option (!1286)

* Fully deprecate TLS rehandshakes; they are now ignored due to TLS protocol
  changes (!1305)

* Bugs fixed:
 - #198 g_fopen and friends: should also state how to close a stream
 - #604 GDBus name watching dispatch is buggy/excessively-complicated
 - #833 g_object_set: document the need to cast varargs
 - #978 SIGSEGV in on_name_lost_or_acquired
 - #1232 Insufficient thread safety around GDBusObjectManagerClient
 - #1416 Re-add macOS CI
 - #1834 Unwanted priority/etc inheritance with GThreadPool and GThread and the POSIX implementation
 - #1932 Windows: Gio.AppInfo.launch_default_for_uri seems not to work for local files/folders
 - #1983 glib:gio / dbus-appinfo test fails: GLib-GIO:ERROR:../../../../Projects/glib/gio/tests/dbus-appinfo.c:326:on_flatpak_open: 'g_file_equal (files[0], f)' should be TRUE
 - #1997 Base64 encoding with "break_lines" claims to wrap at 72 characters but seems to wrap at 76
 - #1998 support multiple directories in GSETTINGS_SCHEMA_DIR
 - #1999 GTimeZone fails to accept full Julian day range when parsing the direct $TZ string format
 - #2007 Thread scheduler attributes fail under valgrind
 - !388 ci: Avoid downloading subprojects for each job
 - !1111 gio: test that launch_uris() exports files with the document portal when launching a flatpak
 - !1201 gdbusmessage: Limit recursion of variants in D-Bus messages
 - !1279 tests: Fix an error message set by foo_set_property()
 - !1286 gdbus-codegen: Add a GDBusCallFlags arg to method calls
 - !1291 gio-tool-list: Add an option to print display names
 - !1294 GMemoryMonitor docs fixes
 - !1295 gio: Fix socket test
 - !1301 GThread - Inherit parent thread priority by default for new Win32 threads
 - !1303 gvariant-core: Don't pass NULL second argument to memcpy
 - !1305 Fully deprecate TLS rehandshakes
 - !1308 gsocketclient: run timeout source on the task's main context
 - !1309 Fix crash in gutils when application is prevented access to passwd file
 - !1317 gfdonotificationbackend: remove notifications when bus name vanishes
 - !1320 subprojects: Temporarily avoid using wrapdb while it’s down
 - !1324 ci: Add some documentation to the style check CI test
 - !1325 Check for SYS_sched_getattr before using it unconditionally
 - !1330 W32: Correctly set st_ino when doing private stat()
 - !1334 gthread: Ensure GThreadSchedulerSettings is always defined

* Translation updates:
 - Catalan
 - Galician
 - Hungarian
 - Indonesian
 - Polish
 - Portuguese (Brazil)
 - Spanish


Overview of changes in GLib 2.63.3
==================================

* Add a `--glib-min-version` argument to `gdbus-codegen` which controls breaks in the API of generated code (#1726)

* Add `g_clear_list()` API to clear `GList`s to `NULL` (#1943)

* Add a `GMemoryMonitor` API to be notified of memory pressure situations using the low-memory-monitor project (!1005)

* Add support for dispose functions for `GSource` implementations (!1175)

* Tighten up validation of GObject signal and property names, allowing performance improvements (!1224)

* Fix installation path of GIO modules on MSVC to be the bindir (!1254)

* Bugs fixed:
 - #650 g_signal_lookup gives too many warnings
 - #1011 GListStore, easily find if the item is already inserted
 - #1130 gdbus-codegen: Add an option to strictly generate markdown in source comments
 - #1687 glocalvfs.c uses non-thread-safe getpwnam()
 - #1726 Warn when method/signal uses type 'h' but lacks GDBus.C.UnixFD annotation
 - #1935 Assert in _kqsub_free seems to be too strict
 - #1943 Consider g_clear_list()
 - #1947 Documentation clarification for g_uuid_string_random()
 - #1953 Documentation for g_type_init() and others missing from online gtk-doc documentation
 - #1961 A typo in the comment of `g_settings_schema_get_path`: threfore -> therefore
 - !1005 gio: Add GMemoryMonitor to monitor for low-memory
 - !1172 gptrarray: Add an example to the g_ptr_array_steal() docs
 - !1175 Implement a dispose function for GSource
 - !1223 Add additional valgrind suppressions
 - !1224 Signal name handling improvements
 - !1230 ci: Run installed-tests on Fedora
 - !1235 Add sudo to Fedora docker image
 - !1239 tests: Run "timeout tests" sequentially
 - !1248 ci: Update all Debian CI runners to use v5 of the Dockerfile
 - !1249 gio-tool-mount: Allow mounting by the given UUID
 - !1252 ci: Fix running all jobs on merge requests
 - !1253 gthread: Fix "zero as null pointer" warning
 - !1254 giomodule: gio modules are no longer installed in bindir on MSVC
 - !1255 ci: Build Docker images rather than OCI images if using podman
 - !1256 gdate: Add autoptr support
 - !1258 Minor CI fixups
 - !1261 gtk-doc: Ensure we have recent enough version
 - !1262 tests: Add tests for the gdbus-codegen executable
 - !1265 build: don't check for protected visibility
 - !1267 Revert "doc: Workaround gtkdoc-scan bug leading to undocumented symbols"
 - !1268 ci: Work-around successful installed tests having no logs
 - !1269 gvariant: Add guard to g_variant_get()
 - !1271 tests: Enable GDBus debug for a number of unreliable tests
 - !1274 trash portal: Don't follow symlinks
 - !1275 Small doc correction
 - !1277 Various gtk-doc improvements
 - !1278 Update installed tests CI
 - !1280 clang-format-diff: Output diff for multiple files, not just one
 - !1282 Revert "Revert "docs: remove GDBusObjectManager example""
 - !1284 Update POTFILES.in 191212
 - !1287 atomic/tests: test g_atomic_pointer_compare_and_exchange() with const pointers
 - !1289 gtype: Define auto-cleanup functions for Module class

* Translation updates:
 - Spanish


Overview of changes in GLib 2.63.2
==================================

* Use `lldb` rather than `gdb` on macOS for debugging (#1004)

* Switch the atomic builtins from `__sync_fetch_*()` to the slightly more modern
  `__atomic_*()` (#1750)

* Fix calculation of `gsize` width on various platforms (including OpenBSD) (#1777)

* Fix undefined behaviour causing brokenness in `g_utf8_find_prev_char()` when
  compiling with GCC ≥ 8 (#1917)

* Revert UNIX mode changes in `G_FILE_ATTRIBUTE_ID_UNIX_MODE` which broke OSTree (#1934)

* Slightly improve performance for signal emissions when no handlers are connected (!1083)

* Add `g_task_return_value()` and `g_task_propagate_value()` APIs to allow
  `GTask` to be used from language bindings more easily (!1216)

* Fix a file monitoring crash on kqueue-based systems (BSD) (!1221)

* Bugs fixed:
 - #1004 [PATCH] Make gbacktrace use lldb on Mac OS X
 - #1552 CI: Add code style checks
 - #1750 Switch from  __sync_fetch_*() to __atomic_*() in glib/gatomic.h
 - #1777 gsize: improper typedef on (at least) OpenBSD
 - #1895 Regression: glib does not compile on centos 6: "objcopy: unrecognized option '--add-symbol'"
 - #1917 Test utf8-pointer fails with static build, LTO, optimisations, and new GCC
 - #1930 glib/tests/bookmarkfile.c:385:test_modify: assertion failed: (stamp == now)
 - #1934 ostree tests broken since bfdc5fc4fc84ef8518d2d1a328c8482cf5a38e98: File '/tmp/test-tmp-libostree_test-basic-user.sh.test-QB4SA0/diff-test2' is not empty
 - #1938 GDateTime doesn't support leap seconds
 - #1940 atomics test fails on FreeBSD CI since !1123
 - !1039 Improve documentation for footgun function g_tls_client_connection_copy_session_state()
 - !1083 Use the GObject hole on 64bit arches for some flags to improve performance
 - !1202 CI updates after !1177
 - !1208 gutils: Slightly improve docs formatting for g_get_os_info()
 - !1209 Make ld executable configurable
 - !1210 gdbus-server-auth test: Include gcredentialsprivate.h
 - !1213 gsocket: Improve diagnostics on bind() failure
 - !1214 gvariant, gbytes: Avoid memcmp (NULL, ., 0) or memcmp (., NULL, 0)
 - !1216 Make GTask more binding-friendly
 - !1218 gdb: Fix GHashTable pretty printer off-by-one error
 - !1220 gparam: fix memory leak in g_param_value_defaults()
 - !1221 Add NOTE_REVOKE to the list of the monitoring events
 - !1225 gtlsconnection: clarify handshake() documentation
 - !1227 Deprecate old GTlsConnection functionality even harder!
 - !1231 Fix build on old libc that does not define _SC_HOST_NAME_MAX
 - !1238 gstrfuncs: use gsize type internally for strv functions
 - !1242 gfileinfo: Clarify the documentation for G_FILE_ATTRIBUTE_UNIX_MODE
 - !1243 docs: Fix "occurred" typos in API documentation

* Translation updates:
 - Spanish


Overview of changes in GLib 2.63.1
==================================

* Several usability improvements to command line `gio` tool (!1153)

* Add `g_array_steal()`, `g_ptr_array_steal()` and `g_byte_array_steal()` APIs (#285)

* Add `g_get_os_info()` API (!1063, !1160)

* Add `g_warning_once()` API (!1028)

* Always resolve `localhost` to loopback address in `GResolver` (!616)

* Add `GMainContextPusher` API (!983)

* Limit recursion in `g_variant_parse()` (!1173)

* Fix crash in `g_spawn()` with high FD numbers due to use of `select()` rather
  than `poll()` (#954)

* Allow passing empty `GValue`s to `g_param_value_set_default()` (!1186)

* Escape header guards generated by `gdbus-codegen` better (#1379)

* Bugs fixed:
 - #285 [PATCH] add array steal and memdup functions
 - #954 The g_spawn_sync() function uses select() which has limitations
 - #1318 rare failure in gdbus-peer test: invalid uninstantiatable type '(null)' in cast to 'GDBusServer'
 - #1379 gdbus-codegen generates invalid header guards when build directory contains a + character
 - #1622 NULL pointer derefs on g_vasprintf() failure
 - #1813 g_option_context_add_main_entries() is missing array annotation for entries parameter
 - #1831 No reply on private socket due to auth problem
 - #1836 gobject.c uses undefined annotation “(not optional)”
 - #1858 docs/reference/gobject/tut_gobject.xml: object properties example uses deprecated API
 - #1877 g_cancellable_source_new annotated with 'skip'
 - #1896 Use after free when calling g_dbus_connection_flush_sync() in a dedicated thread
 - #1897 glib 2.62.0 fails test 'test_writev_no_vectors' wih gcc7
 - #1903 use-after-free in mimeapps test causes intermittent segfault during testing
 - #1906 test_os_info fails on FreeBSD
 - #1916 objcopy not used from cross-compilation file in GIO tests
 - #1923 Recent Versions of GLib Break Dolphin File-Manager's Thumbnailing when Using 'gtk2' Style
 - !616 Always resolve localhost to loopback address
 - !983 gmain: Add GMainContextPusher convenience API
 - !1014 tests: Add a test for g_assert_finalize_object()
 - !1028 gmessages: Add g_warning_once()
 - !1035 Switching from C gnu89 to C gnu99 standard
 - !1063 gutils: Add g_get_os_info()
 - !1082 gdatetime: Document RFC 3339 extensions when parsing ISO 8601
 - !1105 syscall flood on every time*() function call
 - !1120 Update documentation with FreeBSD build instructions
 - !1135 gmain: use atomic operation instead of GMutex to access g_main_context_default()
 - !1146 Solaris build fixes
 - !1147 gmodule: fix typo in doc comment
 - !1148 gio/gfileinfo: fix parameter references
 - !1149 gio/gfile: fix parameter reference for value_p
 - !1150 gio/gfile: fix parameter references to @contents
 - !1151 gio/gfile: fix typo in doc comment
 - !1152 gwinhttpvfs: Handle g_get_prgname() returning NULL
 - !1153 Several gio-tool bash completion fixes and improvements
 - !1155 Strict-aliasing fixes to new atomic built-ins
 - !1157 Fix various compiler warnings on Android
 - !1160 Add Windows support to g_get_os_info()
 - !1161 hash: Remove an assertion from the hot path
 - !1163 gcharset: Expand the documentation for g_get_locale_variants()
 - !1165 Use uname as a fallback to get OS info
 - !1167 Fix some minor leaks in testfilemonitor
 - !1168 Fix gdatetime tests on toolbox
 - !1171 Revert "gdbus-codegen: emit GUnixFDLists if an arg has type 'h'"
 - !1173 gvariant: Limit recursion in g_variant_parse()
 - !1177 ci: Add libdbus development files to CI Docker images
 - !1179 Improve GPtrArray doc-comments
 - !1180 array: Avoid use of memcpy(dest, NULL, 0)
 - !1181 gmain: Clarify thread safety of some common GSource functions
 - !1182 gio: Fix typo in URL
 - !1186 Allow using an empty GValue with g_param_value_set_default()
 - !1189 gparamspecs: Fix type class leaks on error handling paths
 - !1197 Fix GDBus test failures on non-Linux (in particular FreeBSD)
 - !1200 Minor fixes from a scan-build run

* Translation updates:
 - Catalan
 - Chinese (Taiwan)
 - Spanish


Overview of changes in GLib 2.63.0
==================================

* Add g_fsync() API (#35)

* Fix regression in g_file_copy() when passing
  `G_FILE_COPY_TARGET_DEFAULT_PERMS` flag; the destination permissions would be
  private rather than following the process’ umask (!1142)

* Several `GDateTime` parsing fixes (!1127)

* Always build the tests if installed-tests are enabled, so that the tests can
  actually be installed (!1141)

* Rework atomic function implementations to use memory barrier in the correct
  place (when compiler intrinsics aren’t providing the atomics), and fix
  signedness issues (#1449, #1565)

* Use the OS’ `fdwalk()` function (if safe) to speed up `g_spawn_*()` on BSD (#1638)

* Remove the macOS `dyld` `GModule` implementation in favour of `dl` instead (!1093)

* Bump Python requirement to ≥ 3.5, which we implicitly relied on anyway through
  our Meson dependency (!1132)

* Bugs fixed:
 - #35 add g_fsync to API
 - #174 g_file_copy always preserves  permissions, even if G_FILE_COPY_ALL_METADATA flag is not set
 - #259 docs: fix a misunderstanding in g_type_add_interface_*
 - #767 g_signal_lookup fails if class is not referenced
 - #1052 g_io_write_chars calls abort when given a null byte as input
 - #1449 glib fallback atomic int/ptr get/set have memory barrier in wrong place
 - #1565 Signedness of atomic operations
 - #1638 g_spawn_*() is extremely slow under certain circumstances
 - #1809 Provide API for working with PKCS11 backed certificates
 - #1843 TSAN false positive with g_atomic_pointer_get/g_atomic_pointer_set under Clang
 - #1865 g_variant_get_data_as_bytes fails after serializing a variant
 - #1875 Segfault and Overflow in __gio_xdg_cache_mime_type_subclass() with Wps-Office installed
 - #1887 glib 2.62.0 breaks loading dylibs as modules
 - #1888 2.62: docs build on Windows broken
 - #1897 glib 2.62.0 fails test 'test_writev_no_vectors' wih gcc7
 - !1020 docs: Remove priv pointers from the tutorial example
 - !1062 gtype: mark the inline functions in G_DECLARE_*_TYPE() as UNUSED
 - !1080 tests: Fix skipping mkdir-with-parents-permission test
 - !1088 Various small scan-build fixes
 - !1090 giochannel: Clarify type of GSource callback in documentation
 - !1093 gmodule: remove macOS dyld implementation
 - !1095 Define G_IOV_MAX to 512 on macOS/iOS
 - !1099 gmem: clarify that g_malloc always uses the system allocator
 - !1109 doc: fix typo in gio/gsettings.c
 - !1110 gio: Add missing "gio remove" option to bash completion script
 - !1112 Add version macros for GLib 2.64
 - !1115 gdatetime: Fix error handling in g_date_time_new_ordinal()
 - !1116 gmarkup: Add a limit on the number of attributes in an element
 - !1119 Annotate the return value of various utility functions
 - !1124 docs: Fix typo in GConverter{Input,Output}Stream section titles
 - !1125 gdatetime: Fix error handling in g_date_time_new_week()
 - !1126 fileinfo: Mention that usec mtimes are set
 - !1129 gdate: Fix tautological comparison warnings on Android
 - !1130 Improve GLIB_DEPRECATED_MACRO_FOR output
 - !1131 gio/gfileinfo: fix param reference in doc comment
 - !1132 build: Bump Python requirement to ≥ 3.5
 - !1137 gregistrysettings: bump key name length to 2048
 - !1138 Always build tests if we enabled installed-tests
 - !1139 g_file_info_get_modification_date_time: Calculate in integer domain

* Translation updates:
 - Danish
 - Italian
 - Panjabi
 - Serbian
 - Turkish


Overview of changes in GLib 2.62.0
==================================

* Fix new `GFileInfo` APIs to work when `G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC`
  was not queried (!1087)

* Bugs fixed:
 - #487 Add valgrind test runs to CI
 - !1084 garray: Fix reference to GLIB_SIZEOF_INT
 - !1086 glib.supp: make gobject_init() calloc also of the possible kind
 - !1087 fileinfo: ignore USEC if not available

* Translation updates:
 - Friulian
 - Portuguese (Brazil)


Overview of changes in GLib 2.61.3
==================================

* Support setting thread name on BSD systems (#1761)

* Install previously-uninstalled headers for public `GNativeSocketAddress`
  object (#1854)

* Very initial support for Windows apps (UWP) (!1057)

* Add various new valgrind suppressions to `glib.supp` (#1879, !1075)

* Bugs fixed:
 - #83 Optimisation for g_nearest_pow() in garray.c
 - #512 GSignal: accumulator function not called to accumulate G_SIGNAL_RUN_CLEANUP object handler return values
 - #873 allow NULL arguments to parse_strv
 - #905 Patches from static analysis run on 2.40
 - #1057 goption: add sanity check to input parameters
 - #1309 GSettings object stops emitting "changed" signal on g_settings_reset after call to g_settings_delay
 - #1620 GDBus criticals from GVfs with GLib master
 - #1761 Setting thread-name on BSD systems
 - #1803 GDK_SCALE=X is not respected when using "gio open"
 - #1819 Invalid characters in Open Location dialog crashes GIMP
 - #1852 Regression: g_mkdir_with_parents() returns 0 on failure
 - #1854 glib/gio: GNativeSocketAddress headers not installed.
 - #1860 g_clear_handle_id does not trigger GLIB_VERSION_MAX_ALLOWED warning
 - #1863 Potential invalid writes on g_utf8_strreverse
 - #1867 A couple of en_GBisms
 - #1870 GSettingsBackend watches not thread-safe
 - #1879 Incomplete valgrind suppressions - 16 KiB leak reported by valgrind from loading libglib-2.0.so
 - #1880 glib/gbacktrace.c: If dup2 happened to return -1, don't call dup2 with same value
 - #1881 GIO_USE_VOLUME_MONITOR and GIO_USE_FILE_MONITOR do not work as documented
 - !1002 Remove mentions of mailing lists from the documentation
 - !1011 gapplication: Fix a leaking GRemoteActionGroup member
 - !1015 Post-release version bump
 - !1016 gnetworkmonitornm fixups
 - !1017 Improve ISO 8601 parsing by GDateTime
 - !1023 g_object_get_property: Improve documentation for use of G_VALUE_INIT
 - !1026 gutf8: Assert that written memory stays in bounds
 - !1027 gfileutils: Fix error propagation for other than ENOENT
 - !1031 meson: build gnulib if printf isn't good enough
 - !1032 meson: small printf check cleanups
 - !1033 win32: don't assume the format specifier for the stdlib printf/scanf like functions
 - !1034 glib/tests/fileutils: Add a reproducer for #1852
 - !1036 cond test: Don't make assumptions about struct sigaction member order
 - !1037 Meson: Override glib-compile-resources/schemas
 - !1044 Relax use of g_test_bug() to not require g_test_bug_base() to be called first
 - !1049 minor typos in the documentation
 - !1050 tests: Fix a pragma warning on FreeBSD
 - !1054 gerror: Add a docs paragraph about not displaying errors verbatim in UI
 - !1057 Some (probably) easy uwp patches
 - !1059 Update win32 readme, add myself to codeowners
 - !1066 libffi.wrap: Meson port has moved to FDO gitlab
 - !1068 gsubprocesslauncher.c: fix documentation
 - !1071 meson: Move libdl_dep to the top level
 - !1074 Adjust README formatting
 - !1075 glib.supp: add suppression for g_type_class_ref()

* Translation updates:
 - Basque
 - Catalan
 - Czech
 - English (United Kingdom)
 - French
 - Galician
 - German
 - Hungarian
 - Indonesian
 - Korean
 - Lithuanian
 - Polish
 - Romanian
 - Spanish
 - Swedish


Overview of changes in GLib 2.61.2
==================================

* Add various new array functions (#236, #269, #373)
 - `g_array_copy()`
 - `g_ptr_array_copy()`
 - `g_ptr_array_extend()`
 - `g_ptr_array_extend_and_steal()`
 - `g_array_binary_search()`

* Add `g_assert_finalize_object()` helper function for writing tests (#488)

* Rework how D-Bus connections are closed/unreffed when `g_test_dbus_down()` is
  called. Tests which leak a `GDBusConnection` may now time out and abort,
  rather than silently leaking. (#787)

* Add a deprecation macro for GLib macros, and use it; third-party uses of
  long-deprecated GLib macros may now start causing warnings. (#1060)

* Deprecate `GTime` and `GTimeVal`, and various functions which use them.
  Use `GDateTime` and `guint64` UNIX timestamps instead. (#1438)

* Stop using `G_DISABLE_DEPRECATED` to allow disabling deprecation warnings;
  third-party code should now be using
  `GLIB_VERSION_{MIN_REQUIRED, MAX_ALLOWED}` to control symbol usage (!871)

* Improve support for running `ninja test` when GLib is built statically (#1648)

* Improve `GNetworkMonitor` detection of offline states (#1788)

* Fix build failure on macOS related to missing `_g_content_type_get_mime_dirs`
  function (#1791)

* Add various installed utilities’ paths to `gio-2.0.pc` (#1796)

* Fix keyfile `GSettings` backend and portal (especially relevant to any version
  of GLib included in a flatpak runtime) (#1822, !985)

* More IPv6 ‘Happy Eyeballs’ fixes in `GNetworkAddress` (!865)

* Fix CVE-2019-12450, wide permissions of files when copying using GIO (!876)

* Bump the Meson dependency from 0.48.0 to 0.49.2; we won’t depend on anything
  higher than this for a while, as Debian 10 ships 0.49 (!924)

* Various test fixes for Windows (!930, !931)

* Initial support for Universal Windows Platform (UWP): certification, and use
  of packaged libraries (!951)

* Add experimental clang-cl support on Windows, allowing `g_autoptr()` support
  on Windows (!979)

* Bugs fixed:
 - #77 G_STDIO_NO_WRAP_ON_UNIX wraps
 - #236 Add a function to copy an array
 - #269 Additional convenience functions for g_ptr_array
 - #373 GArray could use a binary search function
 - #436 running tests leaves lots of coredumps
 - #453 find-enclosing-mount docs confusing
 - #488 Add g_object_assert_last_unref() helper macro to detect object leaks in tests
 - #590 A reader lock can be obtained even if a writer is already waiting for a lock
 - #638 g_atexit is defined when not declared
 - #737 Initialize GValue in g_object_get_property()
 - #787 gtestdbus: Properly close server connections
 - #804 gdbusproxy prefixes unstripped error
 - #870 Fix and enhance GDatetime for Windows
 - #872 ucs4 functions have wrong return transfer
 - #887 gdusmessage.c mishandles bounds of GDBusMessageType and related enums
 - #894 gvalue: Avoid expensive checks where possible
 - #940 Docs for g_socket_listener_set_backlog are not very helpful
 - #943 G_DEFINE_TYPE_WITH_PRIVATE docs not helpful
 - #1018 Allow guid key in dbus addresses
 - #1060 Add deprecation macro for macros
 - #1169 Tools can display gibberish messages from translations
 - #1270 g_get_charset always returns 8-bit codepage on Windows, crippling UTF-8 output
 - #1438 Deprecate GTimeVal- and GTime-based APIs
 - #1635 g_socket_join_multicast_group iface parameter fails on win32/64
 - #1648 2.58.2: Assorted asserts fail in Arch Linux when built statically
 - #1729 g_content_type_guess segfaults when passed an empty data buffer on Mac OS
 - #1788 GNetworkMonitor claims I am offline
 - #1790 documentation on g_file_info_get_attribute_as_string
 - #1791 _g_content_type_get_mime_dirs missing from libgio-2.0.0.dylib on MacOS
 - #1792 glib-genmarshal generated valist marshal does not respect static scope for some types
 - #1793 glib-genmarshal generates wrong code for va marshaler for VARIANT type
 - #1794 API Proposal: g_timer_is_active
 - #1796 Add gio-querymodules variable to pkg-config file
 - #1797 glib/tests/win32 test failing on 64-bit Visual Studio builds
 - #1798 /contenttype/tree reliably fails on FreeBSD since !863
 - #1807 g_dbus_server_new_sync() documentation references nonexistent function
 - #1808 Stopping a GDBusServer should clean up Unix socket paths (if not abstract) and nonce-tcp nonce files
 - #1811 Introspection info for g_unichar_compose's 3rd arg should be OUT
 - #1822 keyfile gsettings backend not loading
 - #1823 Documentation for disabling selinux is incorrect
 - #1825 GKeyFileSettingsBackend created without filename construct property and unchecked assertion
 - #1828 Small typo in gio manpage
 - #1837 Specify for each (optional) parameter, whether it is OUT or INOUT
 - #1838 Reword documentation for G_DECLARE_FINAL_TYPE
 - #1847 Setting GLIB_VERSION_{MIN_REQUIRED, MAX_ALLOWED} to before 2.56 triggers warnings
 - !533 docs: Document pitfall of deprecation pragmas
 - !563 ci: Add scan-build job in a new ‘analysis’ pipeline stage
 - !678 glib-compile-schemas: Improve translatable strings
 - !817 gdate: Officially mark GTime as deprecated
 - !851 gsettings: Document that lists are returned in no defined order
 - !853 gobject: Fix apostrophe usage in a few small bits of documentation
 - !859 gobject: Add a g_assert_finalize_object() macro
 - !863 gunicollate/cygwin: Don't use __STDC_ISO_10646__ for wchar_t related checks
 - !865 gnetworkaddress: fix "happy eyeballs" logic
 - !867 Post-release version bump
 - !871 Drop G_DISABLE_DEPRECATED
 - !873 Use atomic reference counting for GSource
 - !874 Clamp number of vectors to IOV_MAX / UIO_MAXIOV for GOutputStream writev()...
 - !875 CI/msys2: disable coverage reporting, lcov doesn't support gcc9 yet
 - !876 CVE-2019-12450: gfile: Limit access to files when copying
 - !877 gio: specify proper c_marshaller and va_marshallers
 - !883 tests: Fix small race in GSubprocess tests
 - !884 garcbox.c: Fix typo atomit => atomic
 - !885 goption: Clarify G_OPTION_ARG_FILENAME documentation
 - !889 Include <sys/filio.h> for FIONREAD
 - !901 gmain: Clarify that g_source_destroy() doesn’t drop a reference
 - !904 Add glib-genmarshal tests and fix some valist marshaller bugs
 - !906 property action: Add state hints
 - !908 Improve testfilemonitor test repeatability and debuggability
 - !909 D-Bus auth mechanism improvements
 - !914 ci: Run scan-build in a different build directory
 - !915 docs: fix typo on arrays examples in gvariant-text
 - !917 docs: Fix name of IRC channel in CONTRIBUTING.md
 - !919 glib/tests/refcount.c: Fix tests on non-GCC-isque compilers
 - !920 gmacros: Only use deprecated attributes on enumerators with GCC ≥ 6.5
 - !923 Check if compiler symbols are defined before using them
 - !924 Bump the required version of Meson
 - !930 glib/tests/convert.c: Skip tests that aren't meaningful for Windows
 - !931 glib/tests/fileutils.c: Fix stdio Wrapper Test on Windows
 - !934 build: Increase the slow test timeout to 180s
 - !935 Ignore */__pycache__/* directories
 - !937 Fix module tests on Visual Studio builds
 - !939 gstdio: minor cleanups
 - !941 list model: Expand items-changed docs
 - !944 gutils: Don't limit the length of the host name to 99
 - !945 Avoid overrunning stack at the end of the varargs.
 - !947 gobject/tests/signals.c: Fix tests on Windows
 - !948 GObject: Fix mkenums.py and genmarshal.py tests on Windows
 - !950 ci: Enable CI on FreeBSD 12
 - !951 Preliminary patches for Universal Windows Platform support
 - !952 gio: Make minor docs improvements
 - !953 g_utf8_normalize: Doc comment return missing nullable annotation
 - !954 Fix the ISO 15924 code for Manichaean
 - !955 gmacros: Use _Static_assert when C11 is available
 - !958 gthread: fix minor errno problem in GCond
 - !961 gmain: Fix g_main_context_prepare priority annotation
 - !962 gmacros: Use _Static_assert only for non-expr static assert
 - !964 gmacros.h: Use static_assert on MSVC if possible
 - !968 Fix typo in request handle
 - !970 gdatetime: Unset LC_ALL for the test as well
 - !971 docs.c: Forward link from g_auto* → G_DEFINE_AUTO*
 - !973 doc: fix typo in gio/gresource.c
 - !979 Experimental clang-cl support
 - !980 gmacros.h: Add better support for clang-cl
 - !981 gio: fix typo in g_settings_reset documentation
 - !982 Various doc fixes
 - !985 Keyfile portal fixes
 - !987 gio/tests: Remove code and comments referring to libtool
 - !991 fix atomic detection on older gcc versions
 - !992 docs: Add example to g_test_summary() documentation
 - !994 gio: Fix minor docs mistakes
 - !996 Small array test fixes
 - !997 gdbusaddress: Add missing transfer annotation
 - !1007 Resubmission of !832 “Try to create the complete path right away and fall back”
 - !1009 gapplication: remove inactivity_timeout source on finalize

* Translation updates:
 - Hungarian
 - Indonesian
 - Portuguese (Brazil)
 - Spanish


Overview of changes in GLib 2.61.1
==================================

* `g_unichar_isxdigit()` and `g_unichar_xdigit_value()` now handle full-width
  characters (U+FF21–U+FF26 and U+FF41–U+FF46) (#58)

* Deprecate `gtester` utility and its test reporting format and enable TAP
  output by default instead — the `--tap` option to tests is now a no-op
  (#1441, #1619)

* Add `g_test_summary()` to allow test authors to programmatically summarise
  what each unit test in a test suite does (#1450)

* Upgrade to Unicode Character Database v12.1 (#1713, !822)

* More IPv6 Happy Eyeballs fixes to `GNetworkAddress` and `GSocketClient`
  (#1747, #1771, #1774)

* Fix valgrind and gdb support for the new `GHashTable` changes (#1749, #1780)

* Fix GTask wait times growing faster than the number of task threads (#1683)

* Change `GApplication` to ignore `-psn_*` arguments on the macOS command line,
  as they are irrelevant (#1784)

* Add `g_autoqueue()` helper macros, similar to `g_autolist()` (!474)

* Add pre-allocated link helpers for `GList` and `GQueue`:
 - `g_list_insert_before_link()`
 - `g_queue_insert_before_link()`
 - `g_queue_insert_after_link()`

* Improve network availability detection with NetworkManager to treat lower
  levels of connectivity as having reduced availability (!781)

* Add `g_clear_signal_handler()` to allow disconnecting from a `GObject` signal
  and clearing the signal handler ID to zero in a single call (!819)

* Add `g_autoptr()` support for `GRWLock` (!825)

* Define `G_OS_UNIX`, not `G_OS_WIN32`, when GLib is built agains Cygwin (!862)

* Bugs fixed:
 - #29 GScanner: should explicitly document modifiable fields (value, next_value, ...)
 - #58 g_unichar_isxdigit() and g_unichar_xdigit_value() should deal with full-width a-fA-F
 - #106 Boxed types should be documented better
 - #135 g_unichar_totitle(0) returns 0x00001F88 instead of 0
 - #429 g_format_size() is broken on Windows
 - #1441 Deprecate gtester
 - #1450 Add API for tests to describe what they're checking
 - #1619 GTest should have a way to default to TAP
 - #1683 GTask: task_wait_time is increased constantly when the number of running thread is greather than 10
 - #1713 Upgrade to Unicode Character Database v12
 - #1739 meson build failure libdl
 - #1747 Critical in g_socket_client_async_connect_complete
 - #1749 New GHashTable implementation confuses valgrind
 - #1753 Remove memory leaks from gio/test/resolver.c
 - #1755 Please revert #535 gmacros: Try to use the standard __func__ first in G_STRFUNC
 - #1759 test_month_names: assertion failed
 - #1760 Document for g_resolver_lookup_records why it returns a list of list of gchar*.
 - #1763 tests: -p runs tests in the reverse of the specified order
 - #1768 g_strlcat(): Possible buffer overflow in implementation
 - #1771 GNetworkAddressAddressEnumerator unsafely modifies cache in GNetworkAddress
 - #1774 Leaks in gsocketclient.c connection code
 - #1776 glib/date test fails
 - #1780 GDB pretty-printer for GHashTable no longer works
 - #1782 Error in documentation for cross-compile.
 - #1784 MacOS adds a -psn_X_XXXXXX parameter to the command line
 - !474 Add g_autoqueue
 - !476 Add pre-allocated link helpers for GList and GQueue
 - !556 gtestutils: Make --tap compatible with -p and --GTestSkipCount
 - !732 gsocket: Clarify in docs that `flags` arguments can be platform specific
 - !766 W32: swap special g_get_prgname() for platform_get_argv0()
 - !774 Only build tests if certain conditions are met.
 - !780 Add copyright and licensing terms to test report generator
 - !781 gnetworkmonitornm: Fix network available detection
 - !782 build: Fix check for RTLD_NEXT
 - !785 Remove monitor test
 - !787 build: Remove */.gitignore files
 - !791 glib/gconstructor.h: Include stdlib.h for MSVC builds
 - !792 general: Remove a few unhelpful references to ‘master’
 - !795 gdesktopappinfo: Add support for MATE and Xfce4 terminals
 - !802 gio: tests, don't check for libdl on OpenBSD
 - !806 Get to 100% coverage on GQueue tests
 - !808 Update the Docker images used for CI
 - !809 Modified version of !784 — Adding tests cases for a better coverage of glib/tests/strfuncs.c
 - !813 gappinfo: Add precondition checks to GAppLaunchContext env methods
 - !814 gschema.dtd: Add target attribute to alias
 - !819 Clear signal handler
 - !820 ci: Keep JUnit report script working on Debian stable
 - !821 Various minor cleanups to autoptrs
 - !822 glib: Update Unicode Character Database to version 12.1.0
 - !825 Add autoptr support for GRWLock
 - !831 build: (Long time after) post-release version bump
 - !835 Fix typo in German translation
 - !836 Document the best practices for binding GInitiallyUnowned
 - !862 build: define G_OS_UNIX, not G_OS_WIN32 under cygwin

* Translation updates:
 - Basque
 - Catalan
 - German
 - Indonesian
 - Spanish


Overview of changes in GLib 2.61.0
==================================

* Changes to `iconv` configure options, including the default iconv
  implementation on macOS — distributors may need to check their configure
  scripts (#1557)

* Build fixes when building GLib with `G_DISABLE_ASSERT` defined (#1708)

* Fix documentation for `gdbus-tool wait` to use correct units (#1737)

* Improvements to symlink handling on Windows (!269)

* Add exception handling for crashes on Windows (!582)

* Set `G_WITH_CYGWIN` again when GLib is built on Cygwin (this was a regression
  from the autotools build) (!736)

* Use `GCocoaNotificationBackend` by default on macOS, rather than
  `GGtkNotificationBackend` (!745)

* Use Windows symbol visibility when GLib is built on Cygwin, as PE binaries
  are subject to W32 visibility mechanics — this affects the definition of
  `_GLIB_EXTERN` (!752)

* Add coloured output support to `gdbus introspect` (!761)

* Bugs fixed:
 - #682 docs: advise not to use non-literal strings as qdata keys
 - #1177 gparted crashes due to g_quark_from_static_string used in global initialization
 - #1258 the buffer written to by g_input_stream_read is not marked as an out parameter
 - #1557 By default glib tries to use libc instead of native iconv on OSX
 - #1566 Meld Windows shows error on startup "There was a problem starting c:\Program"
 - #1614 GIO tests fail on FreeBSD CI with: Unexpected error from C library during 'pthread_mutex_lock': Invalid argument
 - #1708 Building GLib with G_DISABLE_ASSERT fails
 - #1709 GResource generation test incompatible with stable LLVM on Linux
 - #1710 Crash in g_cancellable_cancel
 - #1712 gdbus-proxy test is flaky
 - #1724 unconditional check in fuzzing/meson.build
 - #1725 gosxappinfo.h is not installed on macOS
 - #1727 Cannot use trash folder with an NFS mount using automount / autofs
 - #1728 GSocket does not support ENOTSOCK
 - #1732 Win32: lookup_by_name_async segfaults for not available domains
 - #1737 gdbus-tool wait command timeout argument incorrect unit reference
 - !67 glib: update internal gnulib from upstream
 - !269 Win32 symlink code refactoring
 - !493 tests: Check that cancelling g_file_replace don't overwrite existing file
 - !582 Basic W32 exception handling for glib
 - !680 Fix warnings glib
 - !690 Fix thread safety issues
 - !694 gvariant-parser: Fix pattern coalesce of M and *
 - !706 Fix data races in task test and gmenumodel test
 - !709 Bump release version for 2.62 series
 - !710 socket: Fix annotation for flags in g_socket_receive_message
 - !712 gwin32: Fix comment for g_win32_veh_handler
 - !716 Various minor documentation fixes
 - !717 Improve formatting of GCC attribute documentation
 - !718 GSocketClient - Free last error if a connection attempt fails and on retry the...
 - !719 Handle an UNKNOWN NetworkManager connectivity as NONE
 - !721 codegen: Fix use of uninitialised variable
 - !723 Provide examples for GNUC attribute macros
 - !724 meson: do a build-time check for strlcpy before attempting runtime check
 - !728 gsocket: Remove (type) annotation from flags arguments
 - !730 Improve gdbus-address parsing tests
 - !735 docs: Use the right g_autoptr function when using an auxiliary function
 - !736 Set G_WITH_CYGWIN again
 - !737 gresolver: Don’t use gai_strerror() on Windows, as it isn’t threadsafe
 - !741 Fix use-after-free triggered by gnome-session-binary
 - !745 gcocoanotificationbackend: give more priority than the gtk one
 - !749 gio: Add missing autocleanup definition for GSettingsSchema{Key,Source}
 - !750 Check for RTLD_NEXT
 - !752 Use W32 visibility for Cygwin
 - !754 Check for /proc/self/cmdline
 - !757 Fix gnulib build on older Visual Studio builds
 - !760 Properly ensure the cocoa notification backend type
 - !761 RFC: gdbus-tool: Add --color option for introspect
 - !762 gutils: Add (nullable) annotation to g_get_prgname()
 - !765 gslice: Use a convenience macro
 - !769 ci: Generate a cover report for the test suite
 - !772 tests: Check that option-argv0 test succeeds on Linux
 - !776 tests: Only run --external-data test on GNU ld/objcopy
 - !779 Fix 2.62 documentation symbols

* Translation updates:
 - Dutch


Overview of changes in GLib 2.60.0
==================================

* Further fixes to the Happy Eyeballs (RFC 8305) implementation (#1653, #1679, #1693)

* Add support for the XDG trash portal (#1676, !276)

* Bugs fixed:
 - #1653 gsocketclient-slow test is flaky
 - #1658 keyfile settings backend: Consider tightening permissions
 - #1668 Fill in CODE-OWNERS file
 - #1675 glib-compile-resources: c_name generation issue
 - #1676 Trash portal tries to open files as read-only but D-Bus API documents against that
 - #1679 socket-service test is flaky
 - #1693 Happy Eyeballs failure in gsocketclient-slow test
 - #1697 gthreadresolver: do_lookup_records does res_ninit with an uninitialized state
 - #1698 g_base64_encode(NULL, 0) causes critical warnings
 - !276 Support the trash portal
 - !639 gvariant-parser: Fix error handling when type coalescing fails
 - !666 Socket fixes to W32 test suite
 - !674 Update gvdb submodule
 - !676 Initialize a variable
 - !677 gerror: Add a missing precondition assertion in documentation
 - !686 gio: Also support modules built with MSVC
 - !688 gsocketclient: Fix critical on cancellation
 - !689 glib-compile-resources: Fix a minor leak
 - !691 gtask: Separate GTask fields memory locations to avoid data races
 - !692 glib.supp: Add more variations of existing suppressions
 - !696 Move closures refcount test to gobject/tests/
 - !698 gthreadedresolver: Remove unused thread pool
 - !699 tests: Fix closure-refcount to preserve old semantics
 - !702 Rename gobjectenumtypes.[ch] to glib-enumtypes.[ch]
 - !703 Clean up gmarshal.[ch]

* Translation updates:
 - Catalan
 - Czech
 - French
 - Friulian
 - German
 - Italian
 - Korean
 - Romanian
 - Serbian


Overview of changes in GLib 2.59.3
==================================

* Fix support for g_get_user_special_dir() on macOS, including support for the Downloads directory (#1048)

* Ensure that cancelling a GTask cannot cause its callback to be called synchronously (in the same call chain as the original *_async() call) (#1608)

* Further fixes to the Happy Eyeballs (RFC 8305) implementation (#1644, #1680)

* Various fixes for installation of installed tests (thanks to Iain Lane) (!649, !651)

* Various fixes for tests when run on Windows (thanks to LRN) (!665, !667)

* Bugs fixed:
 - #535 gmacros: Try to use the standard __func__ first in G_STRFUNC
 - #875 gio-gvfs on Windows: Don't mishandle other non-native URIs in gwinhttpvfs.c
 - #1048 "Desktop" shortcut appears twice in file chooser sidebar on OSX
 - #1608 Cancellation might not be asynchronous under certain circumstances
 - #1644 network-address test failure in CI: IPv6 Broken (g-io-error-quark, 24)
 - #1680 Regression: g_socket_client_connect_to_host_async() sometimes gets "Connection refused" when connecting to localhost
 - #1686 gdbus-peer test is sometimes timing out
 - !613 Use win32 io channel on windows for the protocol test
 - !634 Win32: gio/gsocket.c: Set WSAEWOULDBLOCK on G_POLLABLE_RETURN_WOULD_BLOCK
 - !638 gvariant-parser: Fix parsing of G_MININT* values in GVariant text format
 - !640 tests: Tag socket-service test as ‘flaky’
 - !641 Minor typo fixes to GSpawn documentation
 - !645 gsocketlistener: Fix multiple returns of GTask when accepting sockets
 - !647 gsocketclient: Ensure task is always returned on cancel
 - !648 gio/tests/task: Run the worker indefinitely until it's cancelled
 - !649 gio tests: Install test1.overlay file when building installed tests
 - !650 gstring: fully document semantics of @len for g_string_insert_len
 - !651 tests: Install the slow-connect-preload.so library and use it
 - !667 GSubprocess fixes for W32 test suite
 - !668 tests: Mark gdbus-peer test as flaky
 - !669 GWin32VolumeMonitor: Sort the volumes correctly
 - !670 gpollableoutputstream: Fix the description of the interface
 - !672 Fix some tests when running as root

* Translation updates:
 - Catalan
 - Danish
 - French
 - Indonesian
 - Kazakh
 - Portuguese (Brazil)
 - Slovenian
 - Turkish


Overview of changes in GLib 2.59.2
==================================

* Fix check on GDBusMessage size when reading it. (#1642)

* Add async GIO API: g_file_query_default_handler_async(), g_app_info_launch_uris_async() (#1249, #1347)

* Fix some bugs in the Happy Eyeballs implementation. (#1646, #1649)

* Install a new generated header with enum types for Unicode enums. (!481)

* Support the XDG trash portal. (!276)

* Bugs fixed:
 - #1224 TSAN patches
 - #1249 xdg-open/gnome-open doesn't work if service isn't started
 - #1347 g_app_info_launch_default_for_uri_async  is not really async
 - #1376 gmarkup: Optimize g_markup_escape_text()
 - #1642 minor mismatch between error and code in g_dbus_message_bytes_needed
 - #1646 Criticals in g_socket_client_enumerator_callback()
 - #1649 Critical in g_socket_client_connected_callback
 - #1673 G_MININT constants broken in g-i
 - !276 Support the trash portal
 - !481 Define enum types for Unicode enums
 - !585 gio: do not pass O_PATH file descriptors to portal APIs
 - !593 Don't fail trash test if ~/.local doesn't exist or mount points can't be determined (master)
 - !609 Make `g_app_info_launch_uris_async()` really asynchronous
 - !619 gvariant: Fix a mistake in docs
 - !622 Fixing warnings
 - !626 gdbus: Avoid printing null strings
 - !627 gsocketclient: Fix criticals
 - !629 Various memory leak cleanups to GSettings tests (subset)
 - !630 docs: Ignore more version macros

* Translation updates:
 - Galician
 - Hungarian
 - Lithuanian
 - Polish
 - Spanish


Overview of changes in GLib 2.59.1
==================================

* Autotools support is gone. (!580)

* g_format_size() now uses a no-break space to separate digits and units;
  translations will need to be updated accordingly. (#1625)

* New g_queue_clear_full() API. (#1464)

* Fix argument quoting on win32 when spawning subprocesses. (!419)

* Allow polling more than 64 handles on win32 using g_poll(). (#1071)

* Tag various tests as ‘flaky’. These are no longer run routinely on our
  upstream CI machines, and downstream packagers may want to not run them (or
  not treat those test failures as package build failures) on their test
  machines either. They are in the `flaky` test suite. (!579)

* Add overlay support to g_resources_get_info(). (#1445)

* Support defaults and locks in the keyfile GSettings backend. This will be
  used for flatpaks. (!450)

* Accept unquoted strings in the keyfile GSettings backend to simplify things
  for sysadmins. (!603)

* Update our contribution guidelines (`CONTRIBUTING.md`). (!590)

* Add writev() and writev_all() APIs to GOutputStream and GPollableOutputStream,
  and provide implementations of them for many subclasses. (#1431)

* Bugs fixed:
 - #424 Add 'proxy' debugging support
 - #1055 Provide alignment macros
 - #1071 Eliminate MAXIMUM_WAIT_OBJECTS limitation in g_poll() on Windows
 - #1445 g_resources_get_info doesn't respect resource overlays
 - #1464 Add g_queue_clear_full() API
 - #1500 GListStore needs double checking on some warnings
 - #1623 xdg-open: file with colon results in “The specified location is not supported”
 - #1625 Unbreakable space needed when showing size of folder/file
 - #1636 GTask getters don’t return TRUE/FALSE after bitfield changes
 - #1637 EXCEPTION_ACCESS_VIOLATION in g_clear_pointer
 - #1639 GListStore implementation of g_list_model_get_item() returns wrong results on integer overflow
 - #1655 gvariant-parser warnings
 - #1663 G_MININT32 triggers compiler warning C4146 with Visual C++
 - #1666 `G_DEFINE_DYNAMIC_TYPE_EXTENDED` causes warnings with -Wcast-function-type
 - !319 giomodule: Print the type of each default GIO module
 - !333 Add writev() API to GOutputStream and GPollableOutputStream
 - !419 gspawn, win32: qouted args - escape end backslash
 - !450 Settings portal
 - !512 gtype: Clarify type of GInterfaceInitFunc
 - !516 gthread: Add g_private_set_alloc0() convenience API
 - !535 win32 gpoll: overcome the 64 handles limit
 - !545 goption: Fix an annotation on g_option_context_parse_strv()
 - !560 docs: Fix dconf GSETTINGS_BACKEND name in gio overview
 - !564 gtype: Document type for iface_default_init() function
 - !568 Add separate definitions of g_assert_[non]null() for C++
 - !571 docs: Add note on how to check a gboolean condition
 - !575 gio: Update bad cert error in accept-certificate and GTlsError docs
 - !579 Temporarily disable flaky tests
 - !580 Drop autotools support
 - !583 gmacros: MSVC supports the noreturn function attribute
 - !587 Remove unused .pc.in files
 - !588 MSVC: Move dirent implementation to glib/dirent/
 - !590 Update contribution documentation
 - !591 gfileinfo: Fix annotation for g_file_info_set_attribute_stringv
 - !592 Remove leftover build/ directory
 - !595 gtestutils: pass open file descriptors to subprocess
 - !597 tests: Tag gsocketclient-slow test as ‘flaky’
 - !598 gdbus-proxy test fails with GLib-GIO:ERROR:glib/gio/tests/gdbus-proxy.c:832:fail_test: code should not be reached
 - !599 gdtlsconnection: do not return on a void method
 - !601 gio: Support "help" in extension point env vars
 - !602 Update POTFILES.in
 - !603 keyfile settings: Accept unquoted strings
 - !608 build: Add -Wno-pedantic flag to compiler arguments
 - !611 gnetworkaddress: fix use-after-free for network address
 - !612 gdir: shutup a warning when building with msvc
 - !615 Fix a couple of wrong compiler warnings

* Translation updates:
 - Spanish
 - Swedish


Overview of changes in GLib 2.59.0
==================================

* This will be the last development release with autotools support. As our
  Meson support has been around since 2.56.x, and was used to release tarballs
  in 2.58.x, the next development release (2.59.1) will drop autotools as used
  to build GLib. The macros installed for other packages to use will remain.

* Add `G_TEST_OPTION_ISOLATE_DIRS` to redirect `XDG_*_HOME` to a temporary
  directory for each unit test. (#538)

* Support `Property.EmitsChangedSignal` annotations in `gdbus-codegen`. (#542)

* Add `g_assert_cmpvariant()` API for unit tests. (#1191)

* Hide bind mounts from GIO mount listings. (#1271)

* Automatically realign data passed to `g_variant_new_from_bytes()` or
  `g_variant_new_from_data()` if it is not correctly aligned. This prevents
  misaligned accesses on architectures which don’t support them. Callers should
  still aim to correctly align data to get higher performance. (#1342)

* Support `ld -b binary` (on platforms which support it; i.e. Linux) to provide
  large pre-compiled `GResource` resources with a fast compilation time. (#1489)

* Unconditionally install GLib m4 macros, so that projects which depend on GLib
  and which still build using autotools can continue to build even once GLib has
  ported entirely to Meson. (#1520)

* Various fixes to the Meson build.

* Drop Python 2 support and require Python 3.4+. See discussion on
  https://mail.gnome.org/archives/desktop-devel-list/2018-July/msg00004.html.
  (!196)

* `GHashTable` performance and memory improvements for common cases. See
  https://hpjansson.org/blag/2018/07/24/a-hash-table-re-hash/. (!208)

* Add flags that allow a `GApplication` to signal and replace a currently
  running other instance of the same `GApplication`. This will be used for app
  upgrades with flatpak. (!250)

* Autostart xdg-desktop-portal when using the network monitor and proxy monitor
  portal backends. (!317)

* Add a g_task_set_name() API to allow `GTask`s to be described; useful for
  debugging. (!384)

* Enable FreeBSD CI on every commit for upstream GLib. (!387)

* Various GVariant, GMarkup and GDBus fuzzing fixes, including buffer overflow
  fixes. (!411)

* Various fixes to eliminate thread races, found by thread sanitizer (tsan).

* Deprecate TLS/DTLS rehandshaking, as it has been removed from the protocol in
  TLS 1.3. (!478)

* Support reading arguments from a file with `glib-mkenums`, which is useful
  for long argument lists due to having deeply nested build directories, on
  systems with a low limit on the command line length. (!489)

* Make `g_environ_*()` case-insensitive on Windows, as the environment itself
  is case-insensitive on Windows. (!500)

* Add Application Layer Protocol Negotiation (ALPN) support to `GTlsConnection`
  and `GDtlsConnection`, so that higher layer protocols can be negotiated when
  setting up a TLS connection, without additional round trips and latency. This
  is needed for eventual HTTP/2 support. (!520)

* Add support for TPM keys in PEM files when loading TLS certificates. (!522)

* Add a `GRecMutexLocker` auto-pointer wrapper for `GRecMutex`. (!528)

* Bugs fixed:
 - #107 The "g_key_file_get_comment" interface returns comment with unexpected new line symbol at the end
 - #179 g_object_unref assert in debug code
 - #277 'destroy_data' in g_cclosure_new is registered as finalize notifier instread invalidate.
 - #538 Add helpers to redirect XDG_*_HOME to a temp dir for unit tests
 - #542 gdbus-codegen does not honor "Property.EmitsChangedSignal" annotations
 - #656 check for -Werror=format-security broken
 - #734 Provide a way to instantiate a GDBusProxy-derived class from a GDBusConnection and a object path without blocking
 - #827 gmain: Clarify that g_source_set_callback() is safe on attached sources
 - #1055 Provide alignment macros
 - #1119 GVolumeMonitor: Results don't reflect current state but state when application was launched
 - #1191 add g_assert_equal_variants
 - #1261 Add option to leave <default> in gschema empty
 - #1271 fstab binds appear as mounts (x-gvfs-hide is being ignored)
 - #1310 gdbusproxy: make g-name-owner property useful with unique names
 - #1313 Meson: Rework the config.h generation
 - #1342 Automatically realign data passed to g_variant_new_from_bytes() or g_variant_new_from_data()
 - #1343 g_date_set_parse: Parses "September" in Polish incorrectly
 - #1362 Incorrect documentation about GSettings child add/remove notifications
 - #1452 GFileInfo: unable to retrieve correct modification time of links and mounted volumes on Windows
 - #1471 Incorporate oss-fuzz fuzz targets into GLib
 - #1489 Use `ld -b binary` to speed up GResource generation for linking
 - #1498 distcheck fails in distclean
 - #1506 error: redefinition of typedef 'GKqueueFileMonitor'
 - #1509 test_timeval_to_iso8601_overflow: 'out' should be NULL
 - #1513 GIcon regression?
 - #1514 gio/appinfo test sometimes fails in CI
 - #1518 /network-monitor/create-in-thread fails in (LXC) containers on glib-2-56
 - #1520 Change conditions for installing m4 macros
 - #1522 Trash not working on NTFS folder accessed from symlink
 - #1523 GIO NetworkMonitor doesn't reflect the current network state
 - #1525 GTask allows (buggy) application code to cause callback to be called twice, without warning
 - #1527 Meson doesn't install data for installed-tests
 - #1528 Meson tests are hard to debug in an autobuilder environment
 - #1530 tests/mainloop-test appears to be flaky
 - #1535 meson: installed-test metadata not run in TAP mode
 - #1536 meson: spurious dependencies on convenience libraries in .pc files
 - #1537 meson: absolute paths to ${builddir} included in gtk-doc HTML
 - #1538 meson: G_HAVE_GROWING_STACK defined differently
 - #1539 meson: Some files are unnecessarily installed executable
 - #1541 meson: timeloop-closure test not installed
 - #1542 meson: /usr/lib/glib2.0/installed-tests/glib/gdbus-peer: error while loading shared libraries: libgdbus-example-objectmanager.so: cannot open shared object file: No such file or directory
 - #1544 meson: gtester-report #! not replaced with ${PYTHON}
 - #1546 Cross-compilation fails in 2.58
 - #1556 build: Too long file path issue with meson on Windows
 - #1562 GDate test suite fails with latest glibc
 - #1570 ghash.c:694:27: left shift of 1 by 31 places cannot be represented in type 'int'
 - #1572 Flags validation fails
 - #1575 g_date_time_format() should have format attribute
 - #1576 Fails to build with Meson on Debian armel (armv5te EABI softfloat little-endian)
 - #1580 glib-compile-resources using strings breaks building e.g. GTK+ on MS Visual C, which limits strings to 65535 chars
 - #1581 Memory used for reference counted data might be misaligned.
 - #1588 Moving a bookmark item to the same URI causes a crash
 - #1589 g_log_writer_is_journald memoizes a single result, even though it accepts a parameter
 - #1590 tests: g-file-info-filesystem-readonly fails if run more than once with fuse & bindfs installed
 - #1594 Return value of g_dbus_connection_get_unique_name not annotated as nullable
 - #1600 g_timeout_source_new_seconds overflows when given interval > (G_MAXUINT / 1000)
 - #1601 appinfo test fix is defective
 - #1605 g_date_time_format fails when used with non ASCII format string on POSIX locale
 - #1615 gdbus-codegen not generating nullable annotation
 - !196 [RFC] build: Drop Python 2 support and require Python 3.4+
 - !200 Add a new GTlsError to indicate protocol downgrade attacks
 - !208 GHashTable improvements
 - !219 glocalfilemonitor: Fallback to poll file monitor for NFS
 - !238 W32 GFileInfo improvements
 - !250 Application replace
 - !264 glib-compile-resources: encode data as string
 - !268 build: simplify alloca checks. See #1313
 - !272 dtrace: Add missing const attributes to types in glib_probes.d
 - !273 gtlsbackend: add support for setting the default TLS database
 - !277 Use "command -v" instead of "which"
 - !282 meson: Add macOS libtool versioning for ABI compatibility
 - !286 gspawn: Fix build on systems without O_CLOEXEC
 - !287 glib-compile-resources: Fix generated code compiling with C++ compilers
 - !289 tests: Add more tests to finish branch coverage of GHashTable
 - !290 build: fix installation dir of glib-gettextize
 - !292 Remove all ChangeLog files
 - !293 Document new volume class `loop`
 - !294 portal network monitor: Always emit changed signal on changed
 - !295 meson: fix typo
 - !296 Add G_GNUC_FALLTHROUGH for __attribute__(fallthrough))
 - !297 build: Drop AC_C_CONST from configure.ac
 - !302 Document that GTimeVal is subject to the year 2038 problem on 32-bit systems
 - !303 liststore: Simplify code
 - !304 Add more GListStore/GListModel tests
 - !309 codegen: Change pointer casting to remove type-punning warnings
 - !312 Enable GIO tests on Windows
 - !316 gdbus: Improve error when well-known name is unowned
 - !317 Autostart xdg-desktop-portal if needed
 - !322 gnetworkmonitornm: Set a GError properly on an error handling path
 - !332 gmarkup: Make the documentation even more explicit about untrusted input
 - !334 gio: automake: Add libgmodule dependency
 - !338 gcharset: fix leaking g_get_language_names_with_category
 - !339 Add g_desktop_app_info_get_string_list(); fix g_key_file_free()
 - !340 tests: Mark two more tests as slow
 - !345 Fix build failure on systems without POSIX spawn
 - !347 Use Meson 0.48.0 for CI
 - !348 Documentation tweaks for g_array_free
 - !353 Meson: Do not run tests/refcount with --tap
 - !354 Fix spelling mistakes detected by Debian's Lintian tool
 - !358 Autotools: Move libmount from Libs.private to Requires.private
 - !360 CI: Test static build on installed glib
 - !363 Tests: Mark printf wrappers with G_GNUC_PRINTF
 - !364 ci: Enable FreeBSD CI
 - !366 gunixmounts: Mark mounts as system internal instead of filtering out
 - !372 gmacros: Fix G_[UN]LIKELY to not mask -Wparentheses
 - !374 gthreadpool: Include prgname in thread name
 - !375 m4macros: Allow information from pkg-config to be overridden
 - !376 gthread: Clarify priority handling in GRWLock
 - !379 Ignore g_return_*if_fail() branches in lcov coverage report
 - !381 Add UTF-8 communication tests for GSubprocess
 - !384 gtask: Add a g_task_set_name() method
 - !387 ci: Enable FreeBSD CI in the official repository
 - !396 m4: Fix AM_PATH_GLIB_2_0 macro
 - !400 grefcount: add missing gatomic.h
 - !403 build-sys: Pass CFLAGS to $(DTRACE)
 - !405 ci/msys2: fix path to the lcov config file
 - !406 meson: Mark 1bit-emufutex test as slow
 - !407 meson: Increase test timeouts
 - !410 gfileutils: Add examples to g_path_get_dirname() documentation
 - !411 Various GVariant, GMarkup and GDBus fuzzing fixes
 - !412 Enable compile time check of g_date_time_format() format
 - !413 Add support for g_auto(s)list to G_DECLARE'd types
 - !414 gio, tests: ensure objectmanager sources are generated
 - !415 gseekable: fix 'attmepting' typo
 - !416 gdbus-peer: Make sure to not include objectmanager-gen.c source
 - !417 Fix ^*ay handling in g_variant_iter_loop()
 - !418 Meson: Cleanup a FIXME now that we have dict addition
 - !420 gdbus-codegen: add autocleanup for FooObject
 - !422 GMarkup buffer overflow fixes for error handling, round 2
 - !423 gutils: Check whether getauxval function exists
 - !424 ci: Fix Docker image version
 - !425 gdate: Reinitialize using_twodigit_years and locale_era_adjust.
 - !435 gdatetime: Fix formatting of time zones offsets in range -01:00 to +00:00
 - !436 valgrind: Add glib_init()-related suppressions
 - !440 Fix minor memory leaks in tests
 - !443 tests: Avoid multithreaded use of g_test_rand_int_range
 - !444 gvarianttypeinfo: Consistently use atomics to access ref_count
 - !446 gmain: Fix data races in GUnixSignalWatchSource and GChildWatchSource
 - !451 closures test: Avoid timeout on ARM64 CPUs
 - !452 Atomic reference count in GVariant, ContainerInfo and GDBus introspection
 - !453 tests: Fix some data races in tests
 - !454 gdbusproxy: make g-name-owner property useful with unique names
 - !458 glib-compile-resources: Fix size allocation for compressed streams
 - !460 gatomicrefcount: Make g_atomic_ref_count_init non-atomic
 - !461 Meson: Fix build error in gdbus-example-objectmanager
 - !462 meson: add aarch64 memory barrier handling
 - !463 gio, tests: fix leak of dbus connection.
 - !467 Update documentation of g_tls_connection_handshake() again
 - !469 docs: add index of new symbols for gio > 2.52
 - !470 docs: Clarify return/error behaviour of D-Bus signal subscriptions
 - !472 gdbusmessage: Gracefully handle message signatures with invalid types
 - !477 gthread: Remove unsynchronized access to g_once_init_list from assertion
 - !478 Deprecate TLS rehandshaking
 - !480 docs: add a missing semicolon
 - !482 Check for 'z' library before fallbacking to subproject
 - !483 meson: Turn selinux into a meson feature and make it auto by default
 - !484 Meson: Add 'nls' option to disable translation
 - !485 gdbus-codegen: Tag interfaces and properties so annotated with G_PARAM_DEPRECATED
 - !486 Check for zlib header
 - !489 glib-mkenums: Support reading @rspfiles for arguments
 - !490 gspawn: Fix g_spawn deadlock in a multi-threaded program on Linux
 - !491 Meson: Add missing include_directories when using glib as subproject
 - !492 g_value_get_variant: return value is transfer-none not transfer-full
 - !494 Resolve "Follow-up from "gunixmounts: Stop considering cifs/nfs as system file systems""
 - !500 genviron: make g_environ_* case-insensitive on Windows
 - !504 tests: Unset LANGUAGE when running gdatetime tests
 - !505 Support isolating directories for unit tests
 - !508 ci: Install additional locales used during tests
 - !510 Add new Linux Testing project version number to configure script
 - !511 gvariant: Fix error handling for parsing Unicode escapes
 - !514 fix gdbus-codegen --interface-info-{header,body}
 - !515 binding: Clarify the use of g_object_unref() to remove a binding
 - !517 Meson: Fix deprecation warning with upcoming 0.49.0 release
 - !518 Meson: Fix declare_dependency() calls
 - !520 GTlsConnection: add ALPN support
 - !521 tests: Rename macro to avoid conflict with encoding prefix
 - !522 gtlscertificate: Add support for TPM keys in PEM files
 - !524 gdatetime: Fix typo in the comment
 - !528 Add GRecMutexLocker
 - !530 tests: Minor improvements to mkenums.py and taptestrunner.py used by it
 - !534 gtlscertificate: Fix bug in PEM private key parser
 - !536 Various minor docs fixes
 - !541 gtimezone: Fallback to /etc/timezone on Gentoo
 - !546 spawn: add shebang line to script
 - !547 Do not check for NULL when calling free()
 - !549 Improve documentation of g_assert_error()
 - !551 Revert "tests: Fix GOptionContext leak in GSubprocess tests"
 - !554 Only subscribe to owner-changed signals on message bus connections
 - !555 Suppress -Wint-in-bool-context warning with G_DEFINE_INTERFACE and g++

* Translation updates:
 - Brazilian Portuguese
 - Czech
 - Danish
 - Greek
 - Hungarian
 - Lithuanian
 - Norwegian bokmål
 - Polish
 - Slovak
 - Slovenian
 - Spanish
 - Swedish
 - Turkish


Overview of changes in GLib 2.58.0
==================================

* Tarball built with `ninja dist`, so if you want to build this release with
  autotools (which is supported), you will need to re-run autogen.sh. This
  release, and all micro releases in the 2.58.x series, support being built
  with Meson or autotools. See:
  https://mail.gnome.org/archives/gtk-devel-list/2018-June/msg00012.html

* Fix cancellation of g_subprocess_communicate_async() calls. See !266.

* Drop support for the __int64 type, which further breaks compilation on old
  MSVC versions (before VS2013). See #1313.

* Expose GSettings schema directory in gio-2.0.pc as `schemasdir`. See !274.

* Support v3 of the xdg-desktop-portal network monitor API. See !265, !279.

* Fix G_MODULE_SUFFIX on macOS when GLib is built with Meson — it should be `so`
  rather than `dylib`. Projects that use Meson and the `g_module_build_path()`
  API such as glib-networking should pass `name_suffix:` to `shared_module()` to
  ensure that plugins continue to be called libfoo.so on macOS. See !280.

Bugs fixed:
 !280 meson: Always set G_MODULE_SUFFIX to `so` on macOS
 !266 subprocess: Fix communicate_cancelled signature
 !279 Revert "Add a gnet utility" (see !265)
 !265 Network monitor again
 !274 gio: Provide schemas directory information in pkg-config file
 !239 gvariant: Fix more bounds checking in GVariant text format parser
 !195 garray: add overflow checks before expanding array
 #1497 g_strdup_printf warns on invalid format specifier with G_GUINT64_FORMAT on Win32
 !270 autotools: remove support for the __int64 type. See #1313
 !267 ci: Add an autotools job

* Translation updates:
 Czech
 Galician
 Indonesian
 Italian
 Kazakh
 Korean
 Turkish


Overview of changes in GLib 2.57.3
==================================

* G_GNUC_MALLOC’s definition has been tightened up to match an updated
  definition from GCC. Many uses of G_GNUC_MALLOC which were previously
  appropriate may cause miscompilation with newer GCC versions. Check your uses
  of it against the updated documentation. See #1465.

* Many minor documentation fixes.

* Fix for gint64 and int64_t compatibility on macOS and BSD. See #972.

* Fix free space metadata on some file systems (notably FAT). See #328.

* Support installed-tests with our Meson build system. See #1444.

* Forbid @filename@/@basename@ in glib-mkenums templates, which is a change to
  its long-standing behaviour (which was long-standing nonsensical). See !241.

* Various stat() fixes on Windows. See #1452, #1476.

* MinGW-w64 ABI warning: In case you build 64 bit glib without LFS support by
  passing --disable-largefile (not the default) and use GStatBuf, you need to
  rebuild your application as the size of GStatBuf has changed for this case.
  See #1476.

* Improve TAP compatibility of g_test_incomplete(). See #1474.

* Change fallback preferences when loading icons. See !72.

Bugs fixed:
 !263 build: Clean files left behind after gio/tests/gresource.c test
 !262 gmem: Only evaluate pointer argument to g_clear_pointer() once
 #1465 Many uses of G_GNUC_MALLOC are incorrect
 #1448 g_error does not abort() as documented
 #1494 g_clear_pointer may not use the correct calling convention with its callback
 #972 Mismatch between gint64 and int64_t on 64-bit macOS/BSD
 !251 gtestdbus: Fix watcher crash on FreeBSD
 #1492 gcc-8: -Wcast-function-type: new warnings for g_list_copy_deep()
 !252 tests: fix gnotification tests broken due to the recent icon name fallback changes
 #328 filesystem::{free,size,used} not set for full FAT fs
 !248 network monitor portal: update properties initially
 #1373 Incorrect transfer annotation for g_binding_unbind.
 #1444 the meson build doesn't support installed tests
 #1027 Fix trashing on overlayfs
 #1454 gvdb does not treat corrupt files as empty as promised; dconf suffers
 !243 tests: Explicitly set TZ=UTC for g_time_val_from_iso8601() testing
 #1488 ‘O_CLOEXEC’ undeclared (first use in this function)
 !241 glib-mkenums: forbid @filename@/@basename@ in fhead and ftail
 !240 gtimer: Ensure arithmetic is correctly signed for ISO 8601 parsing
 #1452 GFileInfo: unable to retrieve correct modification time of links and mounted volumes on Windows
 !234 DOC: Documentation fix in GTask description
 #1363 Meson: Review cross compilation properties
 !225 gtimer: Add overflow checks to g_time_val_from_iso8601()
 !230 gbookmarkfile: Fix some more minor leaks when metadata elements are repeated
 !229 Fix up g_bytes_compare() documentation
 #1476 g_stat - possbile memory corruption causing SEGFAULT
 !199 Update TLS documentation
 #1474 g_test_incomplete() makes test_case_run() return FALSE
 #1475 glib/tests/atomic.c test_types() trips -Werror=bad-function-cast on Debian armel
 #1472 Test for BROKEN_IP_MREQ_SOURCE_STRUCT is broken on Windows / Mingw
 !220 date test: Use g_test_skip(), not g_test_incomplete()
 #1467 malloc difference causes refstring test to fail on FreeBSD
 !230 gbookmarkfile: Fix some more minor leaks when metadata elements are repeated
 #1466 Not Able to Build glib 2.57.2 in Mingw-w64 x64 bits
 #1433 test_posix_parse: assertion failed (g_time_zone_get_abbreviation (tz, 0) == "UTC"): ("LMT" == "UTC")
 #1446 Follow-up from "Document difference between g_assert() and g_assert_*() wrt G_DISABLE_ASSERT"
 !206 grefstring: Avoid an unnecessary NUL assignment
 #1458 g_volume_get_mount returns NULL value after g_volume_mount_finish is called with no error
 !72 gio: icons should fallback to non-preferred style appropriately.

* Translation updates:
 Brazilian
 Chinese (Taiwan)
 French
 German
 Lithuanian
 Polish
 Romanian
 Turkish


Overview of changes in GLib 2.57.2
==================================

* Require pcre 8.31
* Require meson 0.47.0

* Bugs fixed:
 742456 Add g_steal_pointer() convenience function to mark ownership...
 795569 MinGW CI: fix tests
 796341 gmem.h: Use typeof() in g_steal_pointer() macro
 #1013 Support for per-session overrides
 #1360 glib-mkenums breaks if option specified but no nick
 #1175 Add names and tags to various GSources and GTasks constructed in GLib
 #903 g_main_context_wait() not deprecated in API, but emits a g_critical()...
 #786 Fix memory leaks in libgio tests
 #927 gio/gresource.c:do_lookup check for terminating "/"
 #976 Document difference between g_assert() and g_assert_*()...
 #1447 glib 2.57.1: test_month_names: assertion failed...
 #1407 Update to Unicode Character Database 11
 #1455 glib python tools have full python path in shebang, limits to 128 characters
 #1459 Missing g_return_val_if_fail in g_async_queue_timeout_pop

* Translation updates:
 Friulian
 German
 Romanian
 Spanish


Overview of changes in GLib 2.57.1
==================================

* New api:
 - g_hash_table_steal_extended
 - G_GNUC_NO_INLINE 

* Bug fixes:
 668132 Use libmount and expose mount options on GUnixMountEntry type
 736741 Update private copy of valgrind.h
 748620 g_regex_* utf-8 validity requirements are not stated clearly
 784995 meson: some Windows improvements
 788771 NODELETE missing when built with meson
 788773 meson does not install correct pc files
 789968 Add g_autoptr() support for GTypeClass
 794325 Various fixes to compile on OSX
 795152 gdesktopappinfo: Mark GDesktopAppInfo constructors as nullable.
 795165 Add g_date_time_get_timezone() and g_time_zone_get_identifier()
 795180 Investigate performance impacts of recent compiler features on hot functions
 795302 Add g_hash_table_steal_extended() API
 795376 Add g_ptr_array_steal()
 795544 Add binary/textfile/zero size detection
 795569 MinGW CI: fix tests
 795636 gitlab-ci: generate test coverage reports
 795735 Fix comparison for GVariant property values
 795802 gdbus-codegen doesn't accept --output-directory with --output for --body and --header
 795849 gwin32: Fix detection of MinGW32 vs MinGW-w64
 795876 meson: Fix checks for posix_memalign and stpcpy
 795960 g_format_size_for_display() is deprecated since 2.30
 796085 Meson: Many apps breaks on non-glibc because of missing libintl
 796138 Fix typo in g_file_info_set_attribute docs
 796139 Add g_autoptr() support for GParamSpec
 796164 Fix atomic ops check in meson.build
 796186 Typo: "instead off" in gsignal.c
 796213 Meson: Fail to build on macosx
 796220 meson: do not run atomic test with msvc
 796264 Add android CI
 796325 meson: Add exception for atomic ops test for Android
 796328 gengiotypefuncs.py: Read and parse files in binary mode 

* Translation updates:
 Czech
 Indonesian


Overview of changes in GLib 2.57.0
==================================

* Bug fixes:
 739424	Rewrite kqueue GFileMonitor backend to drop threading
 751826	Use g_get_language_names() for other locale categories
 788773	meson does not install correct pc files
 793400	g_application_id_is_valid() not strict enough
 793578	gdatetime tests depend on Japanese translation of month names
 793645	test_month_names: Updated translations needed for el_GR, hr_HR, ru_RU
 793729	gitlab-ci: Add Windows MinGW support
 793994	GUnixVolumeMonitor doesn’t show user mounts when run as root
 794170	gdbus: hexdecode() and hexencode() do not return/use decoded/encoded s...
 794194	gobject_gdb.py: 'address' is a property of gdb.Value not a function
 794207	leak: g_socket_listener_add_inet_port increases ref-count on socket-li...
 794284	Support whitespace stripping for JSON resources
 794285	glib-compile-resources should not noisily g_printerr() when xmllint is...
 794473	Remove duplicated option in gio.xml
 794506	glib-mkenums: Enters infinite loop if using typedef enum SomeIdentifier
 794528	Fix segfault caused by use-after-free in GPollFileMonitor
 794555	glib meson build fails on MinGW due to misdetected functions
 794557	gtkdoc-scangobj fails on gio in meson builds
 794606	glib-2.56.0 fails to compile when res_nquery is not available
 794635	gmacros: Don't define bogus __has_* macros
 794636	G_HAVE_GNUC_VISIBILITY is defined in meson MinGW builds
 794686	Date (except weekday) displayed in English
 794732	Fix various compiler warnings 

* Translation updates
 Hungarian
 Slowak
 Slovenian
 Spanish


Overview of changes in GLib 2.56.0
==================================

* Bugs fixed:
 672777 Error in gdummyfile.c
 732184 GObject: warn on use of deprecated properties
 733338 Don't segfault in GNetworkMonitor when IPv6 support is unavailable
 742124 g_data_input_stream_read_upto()'s documentation should say that the...
 749206 GDateTime: month names in the genitive case
 768507 simplify qguark functions
 791457 Slow transfer rate when writing to smb/cifs
 793272 fix GCC 8.0's -Wcast-function-type warnings
 793300 g_hash_table_add() return value change in 2.40 not mentioned in docs
 793399 Fix some cases of -Wduplicated-branches
 793555 -Wimplicit-function-declaration when using g_abort()
 793565 GLib does not compile on macOS 10.13 due to .m file naming
 793597 gdbus-tool: Make --dest optional for emit again
 793635 Enable CI for GLib
 793880 gnetworkmonitor: Minor fixes based on code review 
 793578 gdatetime tests depend on Japanese translation of month names 
 794180 test_month_names fails unless installed

* Translation updates:
 Brazilian Portuguese
 British English
 Catalan
 Czech
 Danish
 Dutch
 Finnish
 French
 Friulian
 Galician
 German
 Hungarian
 Indonesian
 Italian
 Kazakh
 Korean
 Lithuanian
 Polish
 Scottish Gaelic
 Serbian
 Serbian Latin
 Spanish
 Swedish
 Turkish


Overview of changes in GLib 2.55.2
==================================

* GFile now has API to get the path without copying

* A network monitor implementation for Windows has been added

* Bugs fixed:
 520116 g_utf8_strlcpy()
 584284 g_data_input_stream_read_until_async behaves confusingly different f...
 605700 request for g_key_file_get_locale()
 658713 ngettext (plural forms) needed for "Message has %d file descriptors ...
 685442 windows GNetworkMonitor implementation
 723003 gsettings list-recursively reports some keys multiple times
 749583 GSequence performance improvements
 757284 Move G_DIR_SEPARATOR* and G_SEARCHPATH_SEPARATOR* into glibconfig.h
 760324 [PATCH] gkeyfile.c: find_file_in_data_dirs fails to return the path ...
 761102 Increase performance for main loop
 767976 GFile: Add g_file_peek_path()
 770335 gdbus-codegen: generated getter for 'ao' property is actually (trans...
 772989 Totem allows invalid urls that might cause segfault that's irrecover...
 790698 convert: test failure on NetBSD
 791015 gdbus-codegen: Split generation of header and source
 791622 Disable strict-aliasing in GLib
 792050 GResolver is not thread-safe
 792217 Deprecate GTlsClientConnection:use-ssl3
 792338 meson, autotools: figure out if mem barrier is needed for arm64 host...
 792351 gbookmarkfile: check length before dereferencing groups
 792364 gdbus-threading test method-calls-in-thread: assertion failed (elaps...
 792370 GNetworkMonitor: Rename "network-changed" signal argument
 792410 GDateTime new_from_iso8601 test broken in 2.55 on i386
 792432 flush stdout after logging (debug) messages
 792455 Improve docs of GSequence
 792499 deadlock on startup with TCP session bus
 792516 gconvert: More consistent handling of embedded NUL bytes
 792777 g_notification_set_urgent() unconditionally sets G_NOTIFICATION_PRIO...
 792780 gbytes should reference toplevel bytes when slicing with g_bytes_new...
 792856 off64_t isn't a part of C standard
 792862 gpollableoutputstream: document side effects of WOULD_BLOCK on D/TLS
 792903 Clarification between g_try_.. functions and their counterparts
 793006 High CPU load for GUnixMountsMonitor consumers
 793026 possible mem leak in g_mutex_impl_new
 793074 g_message() does not get -Wformat warnings when compiling with G_LOG...

* Translation updates:
 Hungarian
 Indonesian
 Polish


Overview of changes in GLib 2.55.1
==================================

* Build:
 - The --enable-rebuilds configure option has been removed
 - The --with-charsetalias-dir configure option has been added

* GList and GSList now have autoptr support

* The gsettings list-schemas command has gained a --print-paths option

* Bugs fixed:
 346816 Refactor LIBDIR in libcharset Makefile
 508976 Does g_slist_sort preserve the order of equal elements?
 562334 2.18.2 break libglade on Solaris
 662802 systemtap multiarch issue
 684282 Add support static link of GIO modules
 692034 Install an invalidation notifier for GClosure in g_source_set_closure()
 694723 Get rid of REBUILD stuff in configure.ac
 697715 floating point precision problem in check test gst/gstvalue
 701156 testgobject assumes that the priv data follows the instance data
 720380 Segfault when using GDBusMenuModel on a peer-to-peer connection
 724383 glib: document restrictions on various foreach() functions
 724412 GLib mappedfile.c test uses g_get_user_runtime_dir instead of a tempo...
 724794 Fix "on on" typo in tap-driver.sh comment
 732003 gnode: Eliminate implicit signed-to-unsigned integer conversion
 734479 G_VALUE_HOLDS etc. cause -Wcast-qual warnings for a const GValue *
 737677 gmain: Make GSourceCallback thread-safe
 741167 gdbus-codegen fix for boxed out parameters
 748534 gtest: if a subprocess assertion fails, print its stdout and stderr
 749527 add weak pointer helpers similar to g_set_object
 749652 compilation errors with gcc 4.8
 754634 Update the list of Linux filesystem magic numbers used in get_fs_type
 756011 Fix up annotations for GBookmarkFile
 761102 Increase performance for main loop
 773980 GIR scanner doesn't interpret array type properly
 776147 gio/glocalfilemonitor.c doesn't handle case G_FILE_MONITOR_EVENT_MOVE...
 776195 -z nodelete configure check does not work on Solaris
 777075 Potential leak of memory pointed to by 'list'
 779413 Translated X-Geoclue-Reason string not used in a dialog window
 780309 gio/tests/appinfo build fails: gdesktopappinfo.c skipped on OS X
 780893 Reword licensing header for gdbus-codegen
 782057 Unit tests fail in run-assert-msg-test.sh
 784995 meson: some Windows improvements
 786796 gtk-doc build fails with meson
 788806 Impossible to build static glib via meson
 788936 Show mime type icons on OS X
 790416 g_date_time_format returns empty string on %r with German locale
 790588 Generated file missing from .gitignore
 790697 g_object_ref API should propagate parameter type
 790785 glib-tap: Add missing mkdir for .test generation rule
 790829 glib-genmarshal --body must not generate alias implementations
 790830 Mismatch between number of interface methods in text and example code
 790837 Meson: missing many configure options
 790839 GApplication command line: lacks parameter_string, summary and descri...
 790877 fix non-portable check in G_GNUC_CHECK_VERSION
 790894 Do not connect to the session bus when trying GProxyResolverPortal io...
 790896 docs/reference/README has broken link to http://www.gtk.org/rdp/
 790914 gdesktopappinfo: Downgrade a warning to a debug message
 790934 gtester doesn't handle skipped tests
 790948 GSourceFuncs documentation is confusing: when will dispatch be called?
 791036 Guard for g_output_stream_vprintf makes no sense
 791128 C runtime complains about bad arguments on each g_log() call
 791221 po/README.translators has no useful information in 2017
 791235 Fix gschema.dtd regarding flags.
 791267 Make gschema.dtd usable.
 791296 gtester-report: fix range usage when running as python3 app
 791318 GBytes: Improve documentation
 791325 Gio handling of thumbnail:: attribute namespace causes inconsistent b...
 791334 gbinding.c:898: The target object of type GNetworkAddress has no prop...
 791337 Crash opening URIs with g_desktop_app_info_launch_uris_with_spawn()
 791342 Add autoptr support for lists
 791460 meson: fixes for OSX
 791532 Implicit declaration of function ‘memcmp’ in gtestutils.h
 791622 Disable strict-aliasing in GLib
 791720 Criticals in gio/xdp-dbus.h leading to crash under flatpak
 791744 gmenumodel test sometimes fails: assertion failed (items_changed_coun...
 791745 not immediately clear whether g_test_slow() is in effect by default
 791906 GSocketListenerClass.event has wrong signature
 792064 gsettings list-schemas --print-paths
 792098 Binding: bind_property’s @notify func is nullable
 792099 gdbus-test-codegen: Cast to void* to printf "%p"
 792129 meson: skip optional linux/unix deps that default to true when buildi...
 792322 GLib-GIO:ERROR:gschema-compile.c:51:test_schema: child process (/gsch...
 792324 gkeyfile: Document need for KEEP_TRANSLATIONS with get_locale_string()

* Translation updates
 Hebrew
 Indonesian


Overview of changes in GLib 2.55.0
==================================

* New API:
  - g_clear_handle_id, to simplify removing sources from the default mainloop
  - g_file_load_bytes, to make it more convenient to load files into GBytes

* Bugs fixed:
 330458 Sample code for the GLib Key-value parser
 483341 g_error and friends create warnings when not used in MSVC
 569375 g[u]intptr undocumented
 573251 documentation for g_seekable_truncate() needs some love
 629347 Missing annotations in GFile (was: Perf throws an exception in cur...
 630983 [PATCH] Type accuracy for result of strlen() in string utilities.
 632953 Clarify documentation of GValueTransform.
 636210 Document that pre-unmount is not guaranteed and backend-dependant
 656502 type information for GSettings::backend missing from .gir
 661442 Nautilus crashes when refreshing home folder after modifying ~/.co...
 668035 gtester-report broken with python 2.7.2 and glib 2.30.1
 670139 gbytes.c:try_steal_and_unref nit
 677233 (transfer full) annotation not correct for g_closure_new_simple re...
 679347 glocalfile seems to leak 'fstype'
 679467 Mention translation in g_warning() documentation
 689323 Variable scoping in gunixmounts.c
 691436 glib-mkenums output arch dependent
 695681 gsettings bash completion put error messages
 705331 AM_PATH_GLIB_2_0 macro fails with -Wstrict-prototypes -Werror
 706667 Fix permission denied error when installing from an nfs directory
 711809 gdbus-proxy: Fix erroneous timeout during following tests
 722256 gslist: Simplified node removal and got rid of some code duplication
 723655 Socket source is left in the poll after the socket is closed
 723743 g_child_watch_add() doesn't check for non-pids
 725014 g_settings_schema_source_ref should check for NULL pointer
 727346 docs: Escape some backslashes for markdown
 730296 gsignal: Fix a potential NULL pointer dereference
 731625 Improve test for darwin printf format-strings
 731705 gio/tests/desktop-app-info assumes /bin/true
 737278 Clarify relationship of g_application_quit() to hold count
 738176 Skip GSpawnChildSetupFunc closures in introspection
 740223 source_object for GAsyncResult should be nullable
 740791 gio: cannot specify the source when joining a multicast group (IGM...
 740826 glib doesn't know fuse filesystems
 742548 configure.ac: stay out of autoconf's namespace
 742997 Don't skip invalid enum values in schemas
 745723 -Wunused-but-set-variable work-around no longer sufficient
 749371 Use a GHashTable as a set when possible
 751738 Unused-variable warnings in glib/tests/autoptr.c
 752239 Missing dependency for python files in build file
 752240 Add DTLS support to GIO
 753459 GDateTime: Add conversion functions from/to ISO 8601 strings
 753521 g_subprocess_launcher_set_environ misses argument annotations
 754026 gfileutils: add some sanity checks
 756009 'const gchar* const *' gets incorrectly defaulted to utf8
 756103 Skip g_base64_decode_step() in introspection
 756128 Fix up annotations in gconvert
 756430 g_rw_lock_reader_lock() can return without locking, or error
 756470 Fix up annotations in gdataset.c
 756588 Fix up annotations on data/qdata API of GObject
 760022 Memory leak in gvariant-parser.c
 760109 [PATCH] Invalid GDate can't be g_boxed_copy()'d
 760716 Fix documentation regarding <glib/gprintf.h>
 765063 Update annotations for gio
 765552 Please set serial in .m4 files to prevent autoreconf failure on up...
 767215 GCC version number is interpreted as start of a list in docs for g...
 767239 Tautological comparisons in convert tests
 769674 some GIO tests' arbitrary timeouts are too short
 769846 gmessages: Add timestamp to g_log_writer_format_fields()
 770459 Tutorial article is slightly wrong
 773355 Incorrect documentation about stopping a signal emission from a hook
 774083 spelling mistakes in glib: charater
 776562 Add Intel C Compiler support for G_GNUC_BEGIN/END_IGNORE_DEPRECATI...
 777308 GModule win32: disable error dialog popup
 777310 gio/gasynchelper.c: fix cast from pointer to smaller int type on w...
 777956 gmessages: Update advice for G_LOG_DOMAIN
 779182 xdg-open fails with gio open for some uris
 779501 Type of GIConv given wrongly on web
 780202 introspection: Don't expose GValueArray.free
 780296 xdg-open/gnome-open doesn't work if service isn't started
 781598 gstdio.h should #include what it needs to work
 781867 various gvfsd-* wants to look in /boot/efi, causes unnecessary/ina...
 783210 build: Switch to sassc for generating style
 783270 Improve Visual Studio support for Meson builds
 783825 Suggest that asynchronous operations should invoke the callback in...
 786737 No g_variant_get() example for dicts
 786785 Commit #fe2a9887a8 breaks gdbus-codegen, cannot find its module so...
 787271 Make GListModel usable from G-I bindings
 787485 g_tls_backend_supports_dtls () returns true when the backend doesn't
 787551 Factor out some duplicated code in GParamSpec validation
 787581 tests: Add tests for g_slist_copy() and g_slist_copy_deep()
 787671 meson: Fix permissions of installed scripts
 787731 g_file_query_filesystem_info() wrongly reports "filesystem::readon...
 788138 glib-compile-resources: Fix leak of a GHashTable
 788180 G_FILE_ATTRIBUTE_ID_FILE is useless on W32
 788270 gmodule - failed to load symbol on Android 64bit
 788368 Race condition in GDbusObjectManagerClient
 788384 gtypes: Fix signedness of __builtin_bswap() usage
 788385 gtestutils: Explicitly cast args to g_assertion_message_cmpnum()
 788401 PATCH: MacOS build cannot detect content type from content - xdgmi...
 788467 Fatal errors and warnings should be reported as TAP
 788488 GFile-based API for g_build_filename()
 788489 gmain: add g_clear_source API
 788561 Document how to integrate GTest into your project
 788594 gdbus-tool doesn’t handle non-message-bus connections correctly
 788705 Allow building GLib on older Linux platforms
 788766 fixed a doc-typo in socket_get_remote_address
 788772 meson installs gdb scripts incorrectly
 788863 Add more filename type annotations for strings which can contain f...
 788880 gunixmounts: Update list of virtual file systems to ignore
 788927 Expose better API for detecting ‘system’ mounts
 788936 Show mime type icons on OS X
 788948 Document Autotools best practices for genmarshal/mkenums
 788975 Meson + Visual Studio: Can't find zlib.h with subprojects/zlib
 788978 Document XML has a syntax error
 788989 Use subdir-objects with Autotools
 788990 Include licensing information in output from glib-mkenums, glib-ge...
 789087 gint and guint misrepresented as functions
 789170 GFormatSizeFlags should have a value for bits
 789245 g_settings_bind() not conforming to lifecycle specification
 789444 Fix handling of length in g_utf8_make_valid
 789637 glib-mkenums: Fails when --ouput file does not exist
 789681 meson: Libmount support not built
 789723 [PATCH] gdbus-codegen: Call abspath() earlier
 789755 g_get_host_name: ensure return value is always UTF8 encoded
 789820 GPollFileMonitor is not cleaning up correctly
 790015 docs: Various linking and syntax fixes
 790030 GResource/GVariant fails to load from non-pointer aligned memory
 790093 gio-tool: fix inverted logic in monitor tool
 790126 gengiotypefuncs.py is missing from tarballs
 790147 build: Drop data-to-c.pl in favour of data-to-c.py
 790157 gmessages: Give examples of G_DEBUG with gdb in the documentation
 790272 file: add g_file_load_bytes()
 790275 avoid temporary string allocations in g_resources_enumerate_children
 790310 speedup path canonicalization in GResourceFile

* Translation updates:
 Catalan (Valencian)
 Czech
 German
 Nepali
 Norwegian bokmål
 Slovak
 Slovenian
 Spanish


Overview of changes in GLib 2.54.0
==================================

* Bugs fixed:
 780861 Crash in GnomeWallClock
 786983 Please make the output of gio-querymodules deterministic
 787109 Valgrind false positive in ioctl() in btrfs file copy
 787123 glib: Slighty update GIOChannel documentation
 787146 GMainLoop: match of parameter pair of LOCK_CONTEXT/UNLOCK_CONTEXT

* Translation updates:
 Basque
 Catalan
 Romanian
 Swedish


Overview of changes in GLib 2.53.7
==================================

* Bugs fixed:
 736710 remove unnecessary executions of libtool from configure
 785260 gio/tests/appmonitor fails if local dir not writeable
 786456 g_subprocess_wait[_check]_async() breaks when cancelled...
 786555 g_array_free() is not thread safe w.r.t. g_array_unref()
 786580 gdesktopappinfo.c: Add Tilix as a fallback terminal
 786807 g_uuid_string_random undefined when built with meson

* Translation updates:
 Brazilian Portuguese
 Catalan
 Czech
 Danish
 Finnish
 French
 Friulian
 German
 Italian
 Kazakh
 Korean
 Latvian
 Nepali
 Polish
 Spanish
 Turkish


Overview of changes in GLib 2.53.6
==================================

* Bugs fixed:
 766358 glib doesn't respect XDG_* envvars on W32, ever
 783270 Improve Visual Studio support for Meson builds
 785955 pthread_setname_np misdetected with meson
 786060 Sequences documentation does not make it clear...
 786360 gobject: add autoptr support for GClosure
 786452 crash on Linux without stderr stream
 786460 gio-tool: Unify buffer sizes
 786462 Use g_output_stream_write_all instead of while
 786463 gio-tool-save: Prevent overwriting error

* Translation updates:
 Catalan
 Galician
 Hungarian
 Indonesian
 Lithuanian
 Nepali
 Serbian


Overview of changes in GLib 2.53.5
==================================

* Bugs fixed:
 695573 Untranslatable strings in glib-compile-schemas
 725950 GApplication: call dbus_unregister only once, and before destruction
 731703 giomodule test misbuilds its test modules as libraries
 769135 External control for g_test_add/g_test_run
 779332 Rewrite mkenums in Python
 779607 Race between mounts-changed signal and g_unix_mounts_get() function
 784000 Improve strerror_r() detection
 784815 Map G_NOTIFICATION_PRIORITY_HIGH to NOTIFY_URGENCY_NORMAL
 784965 Use the glib preset for i18n in Meson
 784995 meson: some Windows improvements
 785113 glib-mkenums Python port fixes
 785130 G_LOG_DOMAIN shouldn't be left undefined for applications
 785438 Spurious -Wmaybe-uninitialized in gdatetime.c
 785468 glib/gpoll: Unnecessary if conditional included in the poll_rest() function
 785520 Replace advice to use removed gdk_spawn functions
 785577 clobbers errno while setting GError

* Translation updates:
 Slovenian
 Spanish


Overview of changes in GLib 2.53.4
==================================

* Unicode support has been updated to Unicode 10.0.0

* glib-genmarshal and glib-mkenums have been rewritten in python.
  Every effort has been made to keep compatibility. Please report
  problems related to these tools

* GLib can now be built with meson. autotools are still supported

* Bugs fixed:
 722047 drop makefile.msc?
 733821 g_strerror() uses strerror(3) instead of strerror_r(3)
 773842 g_utf8_find_next_char() won't signal the end of a NUL-terminated string
 779332 Rewrite mkenums in Python
 780095 g_utf8_get_char_validated() stopping at nul byte even for length specified...
 780634 Remove remaining old codepage ABI comapt code
 783841 test_GDateTime_new_from_timeval_overflow fails on 32 bit systems
 784000 Improve strerror_r() detection
 784020 GKeyFile – Add array length annotations to to_data(), get_keys() and get_g...
 784037 gio: Mention the ALL_METADATA flag in g_file_copy()
 784433 gdbus-codegen with variant type parameters result in nested variant
 784456 Update to Unicode 10.0.0
 784528 Rewrite glib-genmarshal in Python
 784579 Calling g_dir_open on Missing Directory When Executable File Path Contains...
 784581 docs: Fix cut'n'paste error in g_resources_get_info() doc
 784739 Minor typo in configure error message
 784792 Just fixing a little typo in comments

* Translation updates:
 Hebrew


Overview of changes in GLib 2.53.3
==================================

* Bugs fixed:
 658446 Add translation comment for wrong password notice string
 661926 Improve the default logging setup in GLib
 674885 type initialisation deadlock in GObject
 775593 GIO cannot write symlinks on FreeBSD and NetBSD
 776169 Various gio-tool fixes
 776333 Fix annotation on g_file_copy_async()
 776504 Upgrade license from LGPLv2+ to LGPLv2.1+
 777307 race condition between gdbus signal callback and g_bus_unwatch_name...
 778422 gsubprocesslauncher: Clarify the behavior of set_environ()
 781301 Stack pointer corrupted by incorrect call of NtNotifyChangeMultipleKeys
 782336 Add additional documentation of the GResource XML format
 782996 build: Use AM_TESTS_ENVIRONMENT rather than TESTS_ENVIRONMENT
 783061 GApplication: Remove some unused members
 783130 Make dbus activation sandbox-aware
 783193 Adapt to OpenURI api change
 783201 gdbus-codegen: Apply --output-directory to generated docs as well
 783340 win32: port monotonic times to use QPC
 783350 length parameter can be NULL g_data_input_stream_read_line
 783392 incorrect (out) annotation for g_dbus_interface_info_generate_xml
 783593 GGtkNotificationBackend should use /org/freedesktop/DBus to call Ge...

* Translation updates:
 Esperanto
 German
 Indonesian
 Kazakh
 Spanish


Overview of changes in GLib 2.53.2
==================================

* A few new number parsing functions have been added:
  - g_ascii_string_to_signed
  - g_ascii_string_to_unsigned
  These have better error handling than the existing ones.

* glib-mkenums now supports /*< private >*/ and /*< public >*/

* GSettings now consider XDG_DATA_HOME in addition to XDG_DATA_DIRS.

* Bugs fixed:
 674885 type initialisation deadlock in GObject
 698064 Add g_ptr_array_contains()
 732000 gdatetime: Remove an unnecessary NULL pointer check
 734946 Implement GContentType on OSX
 741335 Possible differences in use of XDG_DATA_DIRS versus XDG base directory specification
 748263 Use-after-free in g_dbus_connection_call_internal()
 776876 gmodule – Various Android bug-fixes
 777030 build error where minor() and major() cant be resolved in gio/gdbusmessage.c
 780300 gio/gosxappinfo.c uses deprecated LSFindApplicationForInfo
 780309 gio/tests/appinfo build fails: gdesktopappinfo.c skipped on OS X
 781755 Avoid compiler warnings in generated marshallers code
 781826 portal support: Read /.flatpak-info
 781830 Fix some typos and errors in GVariant documentation
 781847 Use-after-free under send_message_with_reply_cleanup():gdbusconnection.c:1792
 781867 various gvfsd-* wants to look in /boot/efi, causes unnecessary/inappropriate auto...
 782068 doc: Trivial typo fixes
 782075 gtimer: Handle gmtime() failure in g_time_val_to_iso8601()
 782089 gdatetime: Fix overflow checks when constructing from timestamps
 782162 Support public/private trigraph in glib-mkenums
 782237 make check error
 782311 inode/directory is treated as a subclass of application/octet-stream
 782628 libmount build dependency check not requiring the right version?

* Translation updates:
 Hungarian
 Indonesian
 Spanish


Overview of changes in GLib 2.53.1
==================================

* The gdbus tool gained a wait command

* g_unix_signal_source_new support SIGWINCH now

* There are now g_enum_to_string and g_flags_to_string functions

* A new function to instantiate objects: g_objet_new_with_properties

* GParameter and related APIs have been deprecated

* Bug fixes
 447907 enum/flags from string + type transform + tests
 668962 GUnixMountPoint/GUnixMountEntry not usable through gobject-introspection
 669355 gdbus-codegen output contains stray semicolons at file scope (forbidden in C99)
 674885 type initialisation deadlock in GObject
 698064 Add g_ptr_array_contains()
 709865 Add boxing to GParameter
 725894 build: Include gettext libraries for static compilation on Mac OS X
 734946 Implement GContentType on OSX
 741229 gio: Handle NULL cached properties in NetworkManager monitor
 745971 gdbus-tool: Add a command to wait for a well-known name on the bus
 755046 gfileutils: Add precondition checks to g_file_test()
 761102 Increase performance for main loop
 761889 GDateTime: %p does not always print AM/PM string
 766660 Please clarify the extent to which GInitable, GAsyncInitable must be idempotent
 769534 g_unix_signal_source_new does not support SIGWINCH
 772221 Take advantage of Unicode
 775879 g_log_default_handler should not check G_MESSAGES_DEBUG
 776169 various gio-tool fixes
 777961 Documentation for g_app_info_equals() could be clearer
 778049 race in gsource detected by TSan
 778207 gio-querymodules: fix memory leak
 778287 G_MODULE_EXPORT and -fvisibility=hidden
 779409 Fix false positive g_warning() in remove_filter()
 780066 g_base64_encode_close() in glib/gbase64.c produces invalid base64 encoding
 780095 g_utf8_get_char_validated() stopping at nul byte even for length specified buffers
 780306 Unused function in gunicollate.c for CARBON
 780310 g_tls_database_verify_chain doesn't set the GError for failures other than cancell...
 780384 gio/tests/contenttype fails on OS X: "public.directory" != "public.folder"
 780441 Make the portal implementation of g_app_info_launch() synchronous
 780634 Remove remaining old codepage ABI comapt code
 780908 gobject: remove duplicate GType sanity check
 780924 Memory leak in gdbusmethodinvocation.c
 781125 gio-tool: Fix errors format string
 781234 the buffer written to by g_input_stream_read is not marked as an out parameter
 781298 gfileutils.c:330:3: error: ISO C90 forbids mixed declarations and code

* Translation updates
 Catalan
 Friulian
 German
 Hebrew
 Indonesian
 Polish
 Russian


Overview of changes in GLib 2.52.0
==================================

* Bug fixes:
 779799 gdatetime test fails with tzdata 2017a
 780032 Add missing attributes to two functions
 780144 gio/fam: Remove leftover debug print

* Translation updates:
 French
 Friulian
 Latvian


Overview of changes in GLib 2.51.5
==================================

* OS X implementations of GContentType and GAppInfo
  have been added

* Bugs fixed:
 673047 gunicollate is broken on OS X (patch included!)
 734946 Implement GContentType on OSX
 747146 Implement GNotification on OSX
 769983 glib-mkenums generates non-reproducible Makefile snippets
 777203 gnulib license information is not correct in glib2.0
 778515 Crash in the gio kqueue backend
 779456 Make g_utf8_make_valid optionally take a length

* Translation updates:
 Danish
 Friulian
 German
 Hungarian
 Korean
 Lithuanian


Overview of changes in GLib 2.51.4
==================================

* Memory leak fixes
* Fix the released tarball


Overview of changes in GLib 2.51.3
==================================

* Bugs fixed:
 771997 gchecksum: Add SHA-384 support
 778422 gsubprocesslauncher: Clarify the behavior of set_environ()
 778581 gdbus-codegen: Fix -Wconversion warning
 778801 gdbus-codegen: Add --outdir flag
 778991 Plug a mem leak in gdbusauth
 779183 g_io_extension_point_get_extensions should check for NULL pointer

* Translation updates:
 Basque
 Chinese (Taiwan)
 Danish
 Indonesian
 Italian
 Serbian


Overview of changes in GLib 2.51.2
==================================

* Minimal support for UUIDs has been added

* A new file attribute, G_FILE_ATTRIBUTE_RECENT_MODIFIED has been added
  to improve sorting of recent files

* Bugs fixed:
 639078 UUID support feature request
 777135 gkeyfile: Be more specific about error codes in documentation
 777307 race condition between gdbus signal callback and g_bus_unwatch_name...
 777481 goutputstream: docs: fix typos
 777493 g_mkdtemp() not introspectable
 777507 Recent view sorting incorrectly
 777592 Add minor examples to GDBus and GVariant documentation
 778002 race in gdbusprivate.c detected by the ThreadSanitizer
 778096 race in gdbusconnection reported by TSan

* Translation updates:
 Norwegian bokmål
 Polish
 Simplified Chinese
 Slovak
 Spanish
 Swedish


Overview of changes in GLib 2.51.1
==================================

* glib-compile-resources grew a --generate-phony-targets flag

* GLib now installs a valgrind suppressions file for GLib and GIO

* Bugs fixed:
 666114 should have infrastructure to run its tests under valgrind
 729730 GDBusMessage: Fix segfault if DEBUG_SERIALIZER is enabled
 730932 statically assert that reasonable assumptions about enums are true
 735731 gobject: Document behaviour of GType checking macros on NULL
 736810 gdbus: Fix leak in g_dbus_message_print()
 762283 GSocket – Fix race conditions on Win32 if multiple threads are waiting on cond...
 767609 Test suite problems
 767952 g_dbus_method_invocation_return_*, g_dbus_method_invocation_take_error: They d...
 769672 Assert threads for testcase 642026 are sucessfully created
 769745 gtask: Add guards for public functions
 770175 Add command line argument to mkenums and genmarshal to write output to a file
 770646 glib: Namespace global tapset variables by soname
 772160 Add g_unix_mount_for() support
 772989 Totem allows invalid urls that might cause segfault that's irrecoverable
 773823 gio: Bump copy buffer size to 256k by default
 774086 fix g_main_context_check declaration
 774368 Dependency file output of resource scanner breaks Ninja
 774421 Two minor patches
 774520 GSocket allocates and processes control messages even if not requested
 775309 Crash in gdbusauth
 775468 Improve log write supports color method on windows
 775510 testing with -fsanitize=undefined reports various undefined behaviour
 775517 Password input is echoed in the terminal
 775621 gmessages: Fix compilation on Android
 775765 FDO notification withdrawal backend sends wrong ID to the server
 775913 subprocesslauncher: potential infinite loop in verify_disposition()
 776198 Stray semicolon after g_variant_print() function in gvariant.c
 776586 License headers cleanup
 777077 Use of memory after it is freed

* Translation updates:
 Brazilian Portuguese
 Czech
 Galician
 German
 Hebrew
 Kazakh
 Lithuanian
 Spanish
 Swedish


Overview of changes in GLib 2.51.0
==================================

* glib-genmarshal and glib-mkenums have gained --output options
  for better build system integration

* New API: g_utf8_make_valid

* Bugs fixed:
 591603 Make _g_utf8_make_valid public
 610969 Nice to have g_utf8_make_valid as public
 767882 Bit shift overflow (-Wshift-overflow) warning in gparam.h
 769135 External control for g_test_add/g_test_run
 769630 gfile: G_FILE_MONITOR_WATCH_MOVES was actually introduced in 2.46
 772160 Add g_unix_mount_for() support
 772221 Take advantage of Unicode
 773303 GApplication leaks option_strings 

* Translation updates:
 French
 Galician
 German
 Hungarian
 Lithuanian
 Norwegian bokmål
 Occitan
 Polish
 Slovak
 Turkish


Overview of changes in GLib 2.50.1
==================================

* Update Unicode support to Unicode 9.0.0

* Bugs fixed:
 662946 gunixmounts monitoring doesn't work correctly with libmount
 771591 Update to Unicode 9.0.0
 772054 glib/gspawn-win32-helper.c: unexpected behavior re CommandLineToArgvW()
 772255 gresolver: Mark GResolver as an abstract class
 772269 Add --version options to glib-compile-resources and glib-compile-schemas
 772297 completion: Complete gsettings describe
 772511 g_log_default_handler crashes windows apps with "Unspecified fatal err...

* Translation updates:
 Brazilian Portuguese
 Catalan
 Croatian
 Czech
 Danish
 Hungarian
 Italian
 Latvian
 Polish
 Swedish


Overview of changes in GLib 2.50.0
==================================

* Bugs fixed:
 771438 Turn on libmount by default on linux
        Fix the annotation for g_log_variant

* Translation updates:
 British English
 French


Overview of changes in GLib 2.49.7
==================================

* Add g_log_variant, binding-friendly api for structured logging

Bugs fixed:
 646926 arg_data invalid after g_option_context_parse() fails

* Translation updates:
 Danish
 Finnish
 Galician
 German
 Hebrew
 Kazakh
 Korean
 Latvian
 Lithuanian
 Polish
 Portuguese
 Serbian
 Slovak
 Spanish
 Swedish
 Thai


Overview of changes in GLib 2.49.6
==================================

* The gsettings commandline tool now has a describe command

Bugs fixed:
 745754 Add gcc-style dependency output to glib-compile-resources
 769076 Fix warning: attempt to override closure->va_marshal with new marshal
 770372 gdbus-codegen: Strip @since parameters before comparison

Translation updates:
 Brazilian Portuguese
 Czech
 German
 Hungarian
 Polish
 Portuguese
 Spanish


Overview of changes in GLib 2.49.5
==================================

* Structured logging:
 - drop libsystemd dependency
 - document that g_test_expect_message does not work with structured logs

* Use libmount for unix mount support

* Add an async variant of g_app_info_launch_default_for_uri

Bugs fixed:
 522053 GUnixMountMonitor needs to use /proc/self/mountinfo on recent Linux
 682794 Add usage guidance to logging documentation
 744456 Structured logging API
 766370 Add a macro for initializing g_auto(GVariantBuilder)
 767240 Regex failures with pcre 8.38
 768198 Can't build glib with systemtap enabled
 768453 Gdbus test: compilation fails due to -Werror=format-y2k errors
 768752 Add async variant of g_app_info_launch_default_for_uri
 769027 Docs misleadingly imply G_CHECKSUM_SHA512 is available since 2.16
 769029 gmessage: compiler complains about -Wformat-nonliteral
 769042 'O_CLOEXEC' undeclared (first use in this function)
 769087 gmessages: support NULL log domain
 769089 Fix gsettings uint64 testcase
 769104 Build failure when using _GLIB_CHECKED_ADD_U32 with the Intel compiler
 769139 g_log_writer_journald uses non-standard 'htole64' function
 769238 memory increases every time I umount and mount my secondary hard disk.
 769245 is_valid_heap_iter define misses NULL pointer check
 769507 gmessages: Don’t require is_journald() call before writer_journald()
 769785 gmessages: Expand documentation further for structured logging
 769995 gdbus-codegen: Allow '@since: UNRELEASED' in documentation comments

Translation updates:
 Catalan
 Hebrew
 Lithuanian
 Slovak
 Spanish


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
==================================

 * 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.

 * 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
==================================

* GTask no longer imposes a fixed limit on the number of tasks that
  can be run_in_thread() simultaneously, since doing this inevitably
  results in deadlocks in some use cases. Instead, it now has a base
  number of threads that can be used "for free", but will gradually
  add more threads to the pool if too much time passes without any
  tasks completing.

  The exact behavior may continue to change in the future, and it's
  possible that some future version of GLib may not do any
  rate-limiting at all. As a result, you should no longer assume that
  GTask will rate-limit tasks itself (or, by extension, that calls to
  certain async gio methods will automatically be rate-limited for
  you). If you have a very large number of tasks to run, and don't
  want them to all run at once, you should rate-limit them yourself.

* 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.

* g_test_run() no longer runs tests in exactly the order they are
  registered; instead, it groups them according to test suites (ie,
  path components) like the documentation always claimed it did. In
  some cases, this can result in a sub-optimal ordering of tests,
  relative to the old behavior. The fix is to change the test paths to
  properly group together the tests that should run together. (eg, if
  you want to run test_foo_simple(), test_bar_simple(), and
  test_foo_using_bar() in that order, they should have test paths like
  "/simple/foo", "/simple/bar", "/complex/foo-using-bar", not
  "/foo/simple", "/bar/simple", "/foo/using-bar" (which would result
  in test_foo_using_bar() running before test_bar_simple()).

  (The behavior actually changed in GLib 2.36, but it was not
  documented at the time, since we didn't realize it mattered.)

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
==============================================

* It is no longer necessary to call g_type_init().  If you are
  loading GLib as a dynamic module, you should be careful to avoid
  unloading it, then subsequently loading it again.  This never
  really worked before, but it is now explicitly undefined behavior.
  Note that if g_type_init() was the only explicit use of a GObject
  API and you are using linker flags such as --no-add-needed, then
  you may have to artificially use some GObject call to keep the
  linker from optimizing away -lgobject. We recommend to use
  g_type_ensure (G_TYPE_OBJECT) for this purpose.

* 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.

* The 'flowinfo' and 'scope_id' fields of GInetSocketAddress
  (introduced in GLib 2.32) have been fixed to be in host byte order
  rather than network byte order. This is an incompatible change, but
  the previous behavior was clearly broken, so it seems unlikely that
  anyone was using it.

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
===============================================

* GIO now looks for thumbnails in XDG_CACHE_HOME, following a
  recent alignment of the thumbnail spec with the basedir spec.

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

* 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
===============================================

* It is no longer necessary to use g_thread_init() or to link against
  libgthread.  libglib is now always thread-enabled. Custom thread
  system implementations are no longer supported (including errorcheck
  mutexes).

* The thread and synchronisation APIs have been updated.
  GMutex and GCond can be statically allocated without explicit
  initialisation, as can new types GRWLock and GRecMutex.  The
  GStatic_______ variants of these types have been deprecated.  GPrivate
  can also be statically allocated and has a nicer API (deprecating
  GStaticPrivate).  Finally, g_thread_create() has been replaced with a
  substantially simplified g_thread_new().

* The g_once_init_enter()/_leave() functions have been replaced with
  macros that allow for a pointer to any gsize-sized object, not just a
  gsize*.  The assertions to ensure that a pointer to a correctly-sized
  object is being used will not work with generic pointers (ie: (void*)
  and (gpointer) casts) which would have worked with the old version.

* It is now mandatory to include glib.h instead of individual headers.

* The -uninstalled variants of the pkg-config files have been dropped.

* For a long time, gobject-2.0.pc mistakenly declared a public
  dependency on gthread-2.0.pc (when the dependency should have been
  private).  This means that programs got away with calling
  g_thread_init() without explicitly listing gthread-2.0.pc among their
  dependencies.

  gthread has now been removed as a gobject dependency, which will cause
  such programs to break.

  The fix for this problem is either to declare an explicit dependency
  on gthread-2.0.pc (if you care about compatibility with older GLib
  versions) or to stop calling g_thread_init().

* g_debug() output is no longer enabled by default.  It can be enabled
  on a per-domain basis with the G_MESSAGES_DEBUG environment variable
  like
    G_MESSAGES_DEBUG=domain1,domain2
  or
    G_MESSAGES_DEBUG=all

* 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
================================================

* GObject includes a generic marshaller, g_cclosure_marshal_generic.
  To use it, simply specify NULL as the marshaller in g_signal_new().
  The generic marshaller is implemented with libffi, and consequently
  GObject depends on libffi now.

* 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
===============================================

* The GApplication API has changed compared to the version that was
  included in the 2.25 development snapshots. Existing users will need
  adjustments.

* 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
===================================================

* It is now allowed to call g_thread_init(NULL) multiple times, and
  to call glib functions before g_thread_init(NULL) is called
  (although the later is mainly a change in docs as this worked before
  too). See the GThread reference documentation for the details.

* GObject now links to GThread and threads are enabled automatically
  when g_type_init() is called.

* GObject no longer allows to call g_object_set() on construct-only properties
  while an object is being initialized. If this behavior is needed, setting a
  custom constructor that just chains up will re-enable this functionality.

* GMappedFile on an empty file now returns NULL for the contents instead of
  returning an empty string. The documentation specifically states that code
  may not rely on nul-termination here so any breakage caused by this change
  is a bug in application code.

* 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
===================================================

* Repeated calls to g_simple_async_result_set_op_res_gpointer used
  to leak the data. This has been fixed to always call the provided
  destroy notify.

* 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
===================================================

* The functions for launching applications (e.g. g_app_info_launch() +
  friends) now passes a FUSE file:// URI if possible (requires gvfs
  with the FUSE daemon to be running and operational). With gvfs 2.26,
  FUSE file:// URIs will be mapped back to gio URIs in the GFile
  constructors. The intent of this change is to better integrate
  POSIX-only applications, see bug #528670 for the rationale.  The
  only user-visible change is when an application needs to examine an
  URI passed to it (e.g. as a positional parameter). Instead of
  looking at the given URI, the application will now need to look at
  the result of g_file_get_uri() after having constructed a GFile
  object with the given URI.

* 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
===================================================

* The recommended way of using GLib has always been to only include the
  toplevel headers glib.h, glib-object.h and gio.h. GLib enforces this by
  generating an error when individual headers are directly included.
  To help with the transition, the enforcement is not turned on by
  default for GLib headers (it is turned on for GObject and GIO).
  To turn it on, define the preprocessor symbol G_DISABLE_SINGLE_INCLUDES.

* 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
===================================================

* GLib now includes GIO, which adds optional dependencies against libattr
  and libselinux for extended attribute and SELinux support. Use
  --disable-xattr and --disable-selinux to build without these.

* 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
==================================================

* The functions g_snprintf() and g_vsnprintf() have been removed from
  the gprintf.h header, since they are already declared in glib.h. This
  doesn't break documented use of gprintf.h, but people have been known
  to include gprintf.h without including glib.h.

* The Unicode support has been updated to Unicode 4.1. This adds several
  new members to the GUnicodeBreakType enumeration.

* The support for Solaris threads has been retired. Solaris has provided
  POSIX threads for long enough now to have them available on every
  Solaris platform.

* 'make check' has been changed to validate translations by calling
  msgfmt with the -c option. As a result, it may fail on systems with
  older gettext implementations (GNU gettext < 0.14.1, or Solaris gettext).
  'make check' will also fail on systems where the C compiler does not
  support ELF visibility attributes.

* The GMemChunk API has been deprecated in favour of a new 'slice
  allocator'. See the g_slice documentation for more details.

* A new type, GInitiallyUnowned, has been introduced, which is
  intended to serve as a common implementation of the 'floating reference'
  concept that is e.g. used by GtkObject. Note that changing the
  inheritance hierarchy of a type can cause problems for language
  bindings and other code which needs to work closely with the type
  system. Therefore, switching to GInitiallyUnowned should be done
  carefully. g_object_compat_control() has been added to GLib 2.8.5
  to help with the transition.

* 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
=================================================

* GLib 2.6 introduces the concept of 'GLib filename encoding', which is the
  on-disk encoding on Unix, but UTF-8 on Windows. All GLib functions
  returning or accepting pathnames have been changed to expect
  filenames in this encoding, and the common POSIX functions dealing
  with pathnames have been wrapped. These wrappers are declared in the
  header <glib/gstdio.h> which must be included explicitly; it is not
  included through <glib.h>.

  On current (NT-based) Windows versions, where the on-disk file names
  are Unicode, these wrappers use the wide-character API in the C
  library. Thus applications can handle file names containing any
  Unicode characters through GLib's own API and its POSIX wrappers,
  not just file names restricted to characters in the system codepage.

  To keep binary compatibility with applications compiled against
  older versions of GLib, the Windows DLL still provides entry points
  with the old semantics using the old names, and applications
  compiled against GLib 2.6 will actually use new names for the
  functions. This is transparent to the programmer.

  When compiling against GLib 2.6, applications intended to be
  portable to Windows must take the UTF-8 file name encoding into
  consideration, and use the gstdio wrappers to access files whose
  names have been constructed from strings returned from GLib.

* Likewise, g_get_user_name() and g_get_real_name() have been changed
  to return UTF-8 on Windows, while keeping the old semantics for
  applications compiled against older versions of GLib.

* The GLib uses an '_' prefix to indicate private symbols that
  must not be used by applications. On some platforms, symbols beginning
  with prefixes such as _g will be exported from the library, on others not.
  In no case can applications use these private symbols. In addition to that,
  GLib+ 2.6 makes several symbols private which were not in any installed
  header files and were never intended to be exported.

* To reduce code size and improve efficiency, GLib, when compiled
  with the GNU toolchain, has separate internal and external entry
  points for exported functions. The internal names, which begin with
  IA__, may be seen when debugging a GLib program.

* On Windows, GLib no longer opens a console window when printing
  warning messages if stdout or stderr are invalid, as they are in
  "Windows subsystem" (GUI) applications. Simply redirect stdout or
  stderr if you need to see them.

* The child watch functionality tends to reveal a bug in many
  thread implementations (in particular the older LinuxThreads
  implementation on Linux) where it's not possible to call waitpid()
  for a child created in a different thread. For this reason, for
  maximum portability, you should structure your code to fork all
  child processes that you want to wait for from the main thread.

* A problem was recently discovered with g_signal_connect_object();
  it doesn't actually disconnect the signal handler once the object being
  connected to dies, just disables it. See the API docs for the function
  for further details and the correct workaround that will continue to
  work with future versions of GLib.

* 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.
                                

