                Xerces Java Build Instructions
                ------------------------------

Before building Xerces, you need the source package and tools
package available from the Apache XML Project's distribution
web page:

    http://xml.apache.org/dist/xerces-j/

Download both the Xerces-J-src.X.Y.Z.zip and Xerces-J-tools.X.Y.Z.zip 
files for the appropriate Xerces release (where "X.Y.Z" is the version
number) and extract them in the same directory. If you are using Unix, 
download the equivalent .tar.gz files instead of the .zip files.

You also need to have a Java Development Kit (JDK) version 1.2 (or 
higher) installed on your system. Before initiating any part of the 
build, set the JAVA_HOME environment variable to the installation 
directory of your JDK.

The Ant program is used to build everything in Xerces, including
the documentation. This tool, and the others needed (besides the
pre-requisite JDK) are contained within the tools package. To
make building the packages easier, a Windows batch file and a Unix 
shell script are included.

If you only want to compile the source code and make the JAR files,
run the following command on Windows:

    build.bat jars

or from Unix (make sure that build.sh is executable):

    build.sh jars

This will compile all of the source code and generate the JAR
files that are available as part of the binary package. After
building, these files will be located in the build/ directory.

If you want to build everything, including the documentation,
run the build batch file (or shell script) specifying the "all"
target instead of "jars".