Overview of Changes in GLib 1.2.5:

* Fixes to g_mem_chunk_*  (also no more 65536 bytes restriction)
* Better libtool 1.3.3 usage

Overview of Changes in GLib 1.2.4:

* Upgrade to libtool 1.3.3.
* Minor portability fixes.

Overview of Changes in GLib 1.2.3:

* Minor fixes.

Overview of Changes in GLib 1.2.2:

* Minor fixes.

Overview of Changes in GLib 1.2.1:

* g_realloc() fix for SunOS (please report further problems).
* Continued the never ending fix vendetta regarding getpwuid(),
  this time AIX has been the culprit.
* Upgrade to libtool 1.2f
* Miscellaneous other buglets fixed.

What's new in GLib 1.2.0 (since GLib 1.0.x):

* GLib is distributed seperatedly from Gtk+
* Win32 Portability
* Threading support
* GModule mechanism (implemented in an extra library) which wraps dynamic
  object code loading facilities in a portable manner
* GIOChannel structure to encapsulate the IPC mechanism
* GQuarks and datasets
* GRelations for n-way mapping of certain data
* An n-way tree implementation
* GDate functionality for calendar date manipulations
* GAllocator type and associated functions
* Added generic callback maintenance functions (ghook)
* Generic functions for TAB completions
* Endian defines (G_*_ENDIAN)
* g_log() mechanism for logging of messages at different log levels
* Generic main-loop mechanism
* New glib-config helper script
* Many more API extensions

Overview of Changes in GLib 1.1.16:

* Allocate smaller pools of memory for glists, gslists, gnodes
* Bug Fixes

Overview of Changes in GLib 1.1.15:

* HPUX 11 thread system detection should now work
* Release the main loop lock around calls to prepare() and
  check() so it is not held over user code
* A few Win32 fixups

Overview of Changes in GLib 1.1.14:

* Check for dlsym() in system libraries and -dl
* FreeBSD portability fixes
* Random bug fixes and autoconf/automake changes

Overview of Changes in GLib 1.1.13:

* Removed alloca() based function and macro variants again.
* Improved thread related configure tests.
* GSource destruction fixups.
* Fixed up idle function removal based on user_data pointer.
* Advanced Win32 portability.
* Enforced GSource's check(), prepare() and dispatch() constrains,
  loop recursions may only happen from dispatch(), and check() as well
  as prepare() are called while the main_loop lock is being held.
* GLib development now requires GNU autoconf 2.13, GNU automake 1.4
  and GNU libtool 1.2d.
* Lots of random portability and bug fixes.

Overview of Changes in GLib 1.1.12:

* Added alloca functions/macros: g_strdup_a, g_strconcat3_a, g_alloca,
  g_new_a, g_new0_a
* New tests structure.  Type 'make check' on your system to run them.
* Avoid unnecessary extra hook referencing in g_hook_list_marshal

Overview of Changes in GLib 1.1.11:

* provide defaults for POLL sysdefs
* g_main_is_running: new function to check whether a main loop has been quitted
* a few other enhancement/fixes

Overview of Changes in GLib 1.1.9:

* Check for pthread_attr_init in all cases, Digital Unix 4 requires this
* For G_LOCK_DECLARE_*, if !G_THREADS_ENABLED, eat trailing semicolon better
* Changed g_main_poll_(add|remove) to g_main_(add|remove)_poll

Overview of Changes in GLib 1.1.8:

* Added threading support
  - The ability to specify a set of functions to be used for
    locking at runtime.
  - Default implementations of locking functions for pthreads,
    Solaris threads, and (experimentally) NSPR.
  - All static variables should now properly locked.
  - Enhancements to the generic main-loop mechanism to be thread-safe.
    (It is used for the main-loop in GTK+ as of GTK+-1.1.8)
* Portability fixes.

Overview of Changes in GLib 1.1.7:

* Removed multiple define from glibconfig.h

Overview of Changes in GLib 1.1.6:

* New GDate functionality for calendar date manipulations (g_date_*)
* New GAllocator type and assocated functions
* New functions g_slist_copy and g_list_copy to duplicate a list with all
  its data pointers.
* New function g_array_insert_vals and new macro g_array_insert_val to
  insert elements at an arbitrary index
* GAllocators used for glist, gslist, gnode node allocations
* Incremental freezing in ghash
* New function g_hook_list_marshal_check to eventually destroy hooks after
  they got marshalled
* Revised GIOChannel to provide generic virtual-function based interface
* Added generic main-loop abstraction
* Removed GListAllocator type and its g_*_allocator_*() function variants
* Bug fixes

Overview of Changes in GLib 1.1.5:

* Win32 portability
* GIOChannel structure to encapsulate the IPC mechanism 
* Reimplemented endian stuff, using inline asm for x86
* New functions:
  - g_strescape: escapes backslashes
  - g_path_is_absolute and g_path_skip_root
  - g_getenv: expands environment variables that contain references 
    to other environment variables
  - g_scanner_sync_file_offset: rewind the filedescriptor to the current
    buffer position and blow the file read ahead buffer
  - g_array_remove_index: remove an entry, preserving the order
  - g_array_remove_index_fast: remove an entry, order might be distorted
  - g_ptr_array_remove: remove an entry, preserving the order 
  - g_ptr_array_remove_fast: remove an entry, order might be distorted
  - g_byte_array_remove_index: wrapper for g_array_remove_index
  - g_byte_array_remove_index_fast: wrapper for g_array_remove_index_fast
  - g_strncasecmp: modeled closely after g_strcasecmp
  - g_list_sort, g_slist_sort: to merge sort GLists and GSLists
* New macros:
  - G_DIR_SEPARATOR, G_DIR_SEPARATOR_S: platform-dependant file name
    syntax elements
  - G_SEARCHPATH_SEPARATOR, G_SEARCHPATH_SEPARATOR_S: platform-dependant
    search path syntax conventions
  - G_STRUCT_OFFSET, G_STRUCT_MEMBER_P, G_STRUCT_MEMBER: for handling
    structure fields through their offsets
* Removed G_ENUM, G_FLAGS, G_NV, and G_SV macros
* Bug fixes

Overview of Changes in GLib 1.1.4:

* Added generic callback maintenance functions (ghook)
* New endian defines (G_*_ENDIAN)
* New string join/split/free routines 
* Fixes

Overview of Changes in GLib 1.1.3:

* New GModule mechanism (implemented in an extra library) which wraps dynamic
  object code loading facilities in a portable manner.
* glib-config features extra "glib" (old behaviour remains) and "gmodule"
  (add libgmodule.so to the --libs output) arguments now. this can also
  be specified as fourth argument to the AM_PATH_GLIB() macro.
* Overhaul of the `inline' autoconfiguration stuff, so inlining should be
  sufficiently supported on all systems that allow inlining now.
* New g_log() mechanism for logging of messages at different log levels,
  associated with certain log domains (define -DG_LOG_DOMAIN for your library).
* New inline functions for bit masks tests.
* GNode macros (and functions) now return the newly allocated node.
* New macro G_VA_COPY() to work around va_list copying oddities on some
  platforms. the non-static g_vsprintf() function vanished in favour of
  a publically exported g_strdup_vprintf().
  People that used the former g_vsprintf() would definitely want to read the
  associated ChangeLog entries (grep for printf).
* New utility functions:
  g_strndup(), g_on_error_query(), g_on_error_stack_trace(), g_strdup_printf(),
  g_strdup_vprintf(), g_printf_string_upper_bound(), g_spaced_primes_closest(),
  g_strnfill(), g_memdup(). 
* Overhaul of the array implementations, this contains some source incompatible
  changes. Again, the ChangeLog is much more informative (grep for garray.c).
* The internals of the g_dataset mechanism are now exported through the
  new g_datalist_* API (this is also the underlying implementation for the
  keyed data of GtkObjects).
* New function g_atexit(), use of the ATEXIT() macro is discouraged.
* Better configure checks for ansi compliance.
* Libtool update to version 1.2b.
* Lotsa bug fixes and cleanups as always ;)

Overview of Changes in GLib 1.1.2:

* Fixed packaging mistake which occured in 1.1.1
* fix 64-bitness in g_prints in glibtest

What is new in GLib 1.1.1:

* An n-way tree implementation is provided now, based on the GNode structure.
* Bugfix for pointer arrays.

What is new in GLib 1.1.0:

* GLib is distributed seperatedly from Gtk+ now and uses a sophisticated
  shared library versioning scheme to deal with interface and binary
  incompatibilities.
* There is a glib-config helper script installed now.
* Fixups all over the place.
* gboolean is now a gint, not a gchar anymore.
* API extensions for GList and GSList.
* New g_str*() functions for simple string handling.
* GScanner extensions for scope, warning and error handling.
* Minor performance improvements for GMemChunks.
* Implementations of GQuarks and datasets (similar to GtkObjects data
  mechansim, but works for generic memory locations).
* More convenience macros for GNU C function arguments.
* Const correction all over the place, including a new pointer type
  gconstpointer.
* Generic functions for TAB completions.
* GRelations for n-way mapping of certain data.
