                                                     -*- coding: utf-8 -*-
Changes with APR-ICONV 1.2.3



Changes with APR-ICONV 1.2.2

  *) Win32: Resolve build issues with modern Visual Studio toolchains.
     Specifically changed the handling of precompiled headers; the .obj
     file which contains a traceable flavor of the intrinsic functions
     is now required.  [William Rowe]

Changes with APR-ICONV 1.2.1

  *) Build schema fixes for win32 including VC8 precompiled header files,
     NT and 9x specific builds, and x86_64 P64 model.  [William Rowe]

  *) Build schema fixes for unix including default --prefix, vpath builds,  
     and decorated lib name.  [Davi Arnaut, William Rowe, Henry Jen]

Changes with APR-ICONV 1.2.0

  *) Install 'iconv' utility as bin/apriconv to avoid colliding with
     system provided iconv, install public headers to include/apr-1/
     per convention.  [William Rowe]

  *) Fixes for Mingw builds and normalize to the APR conventions (e.g.
     apriconv-1.so library name).  [Kouhei Sutou <kou cozmixng.org>]

  *) Fix compiler emits for char <-> 2byte unicode pointer assignments.
     [William Rowe]

  *) Correct from_ucs zero width joiner/byte order mark to be injected
     only at the *start* of stream (when state is still 0).  
     PR 24387 [Kohn Emil Dan <emild cs.technion.ac.il>]

  *) Fix build on GCC 4.0
     [William Barker <william.barker wilshire.com>]

Changes with APR-ICONV 1.1.0

  *) Correctly resolve to APR-1.0, never APR-0.9 in ./buildconf
     [William Rowe]

  *) APR_ICONV1_PATH distinguishes between our apr-iconv 0.9 and 1.x
     flavors (the pool arguments to several internal functions changed
     in 1.0, so the loadable charset modules are not binary compatible.)
     To maintain APR-iconv 1.0 compatibility, first APR_ICONV1 is used,
     if it is set then the older 0.9 flavor APR_ICONV_PATH won't be 
     searched.  apr-iconv 0.9 and 1.0 will only coexist if both the
     APR_ICONV1_PATH and APR_ICONV_PATH variables are both set to their
     respective charset directories.  [William Rowe]

Changes with APR-ICONV 1.0.2

  *) Fix libapriconv.rc for Win32 builds [William Rowe, Justin Erenkrantz]

Changes with APR-ICONV 1.0.1

Changes with APR-ICONV 1.0.0

  *) Add the possiblity of a DESTDIR prefix to Makefile.in to make it
     consistent with the behaviour of apr and apr-util. [Graham Leggett]

Changes with APR-ICONV 0.9.5

Changes with APR-ICONV 0.9.4

  *) Add -v option to iconv program. [Justin Erenkrantz]

  *) Add api_version.h. [Justin Erenkrantz]

  *) A fourth pass at a build system. [Justin Erenkrantz]

  *) A third pass at a build system. [Justin Erenkrantz]

Changes with APR-ICONV 0.9.3

Changes with APR-ICONV 0.9.2

  *) A second pass at a working build system - now builds on linux,
     some namespace protection added.
     [jean-frederic clere <jfrederic.clere@fujitsu-siemens.com>]

  *) A first blush at a working build system.
     [jean-frederic clere <jfrederic.clere@fujitsu-siemens.com>]

  *) First set of changes for APR compatibility (eliminated __inline).
     [jean-frederic clere <jfrederic.clere@fujitsu-siemens.com>]

  *) Source moved from the apr library into it's own repository
     due to size concerns.  Still requires portability overhaul.
