=== PURPOSE ===

This file documents the changes made by the Subversion team, in
addition to changes made by the Apache Software Foundation, to James
Clark's Expat parser.

The ASF version can be found within the Apache HTTP Server
distributions in the src/lib/expat-lite/ directory. The ASF version
details its changes in the CHANGES file (which is also present in the
Subversion repository).

The original Expat distribution can be found at
http://www.jclark.com/xml/expat.html.


=== SUBSET INFORMATION ===

Similar to the ASF, the Subversion team is working with a subset of
the original Expat distribution. See the CHANGES file for more details
on the specific subset.

The Subversion team has also removed the Makefile.in, dllmain.c,
xmlparse.def, xmlparse.dsp, xmltok.def, and xmltok.dsp files. When
Subversion is buildable on the Windows platform, equivalents for these
files will be introduced. It is also possible that SVN's private copy
will disappear by that point in time (and rely on a future version of
Expat).


=== FILES ADDED ===

This file (CHANGES.svn) has been added to document changes from the
ASF expat-lite distribution.

Makefile.am has been created from scratch to provide build
instructions to the Subversion build system.


=== CHANGES TO THE ASF VERSION ===

The files, in their original state from the ASF CVS repository, have
been tagged within CVS with the "CVS_2_0_20000711" tag. That tag may
be used as a reference for changes made by the Subversion team.

The following changes have been made:

August, 2000:
  - .cvsignore was updated to reflect the automake-based system in use
    by Subversion.
