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.
