			Xerces Java Build Instructions

Table of Contents

 1. Building Xerces
 2. Building Documentation
 3. Special Instructions
    3.1 Building on Windows Platform
    3.2 Building on UNIX Platform

---------------------------------------------------------------------

1. Building Xerces

   The top level Makefile will build everything, including the
   documentation. If you only want to compile the source code and
   make the JAR files, run the following command from the top of
   the Xerces Java tree:
   
     make jars
     
   If you want to build everything, including the documentation,
   read the following instructions before running make.
   
   When building, all special instructions must be followed.

2. Building Documentation

   You must download the tools required for building the documentation
   from the distribution page (http://xml.apache.org/dist/). Download 
   the following tools ZIP file:

     Xerces-J-tools.x.y.z.zip

   where "x.y.z" is either the exact version or the version just before
   the version of the Xerces-J parser for which you want to build the
   documentation. Extract the tools package in the top directory of the
   Xerces Java tree so that you get something like:

     xerces_a_b_c/tools

   Then, from the top of the Xerces Java tree, type the following
   command to build the documentation:
   
     make docs apidocs

3. Special Instructions

3.1 Building on Windows Platform

    First, you need a copy of Cygnus's Cygwin. See
    http://sourceware.cygnus.com/cygwin.

    If your JDK is properly installed on your system, you do not need 
    to set any CLASSPATH to build Xerces. If you have one, make sure 
    it does not end with a '\' or it will cause the build to fail.

    If you're using JDK 1.1 and want to build the documentation you 
    then need to specify where the JDK 1.2 java and javadoc programs
    are by setting the variable JDK12BIN in your environment with 
    something like:

      set JDK12BIN=C:/jdk1.2.2/bin

    Note the use of forward slashes! Depending on which version of 
    make you are using having blackshlashes there may cause the build 
    to fail.

    Then, if you're not using the Cygwin bash shell, you need to set
    the variable MAKE_MODE in your environment like this:

      set MAKE_MODE=UNIX

    Finally, from the top of the Xerces Java tree, run make.

3.2 Building on Unix Platform

    If your JDK is properly installed on your system, you do not 
    need to set any CLASSPATH to build Xerces.

    If you're using JDK 1.1 and want to build the documentation you 
    then need to specify where the JDK 1.2 java and javadoc programs 
    are by setting the variable JDK12BIN in your environment with
    something like:

      set JDK12BIN "/usr/local/jdk-1.2.2/bin"

    Then, from the top of the Xerces Java tree, run make.

