<?xml version="1.0" standalone="no"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- $Id$ -->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "http://forrest.apache.org/dtd/document-v13.dtd">
<document>
  <header>
    <title>Apache FOP: Downloading A Distribution</title>
    <version>$Revision$</version>
  </header>
  <body>
    <section id="dist-type">
      <title>Binary or Source?</title>
      <p>
        Most FOP users will want to download the latest binary distribution, 
        which is ready to run "out of the box." However, a source distribution 
        will be preferable if you fall into one of the following categories:
      </p>
      <ul>
        <li>
          You wish to modify FOP.
        </li>
        <li>
          You wish to use a version more recent than the latest release. For 
          example, if you have read on the user mailing list that a bug has 
          been fixed or a feature added that you are eager to try, you might 
          download a source distribution from the CVS repository so that you 
          don't have to wait for the next release.
        </li>
        <li>
          You wish to build a local copy of the API documentation (javadocs).
        </li>
      </ul>
    </section>
    <section id="binary">
      <title>Binary Download</title>
      <p>
        Binary distributions include "-bin" in their names, and can be downloaded from a
        <link href="http://www.apache.org/dyn/closer.cgi/xmlgraphics/fop">FOP Distribution mirror</link>.
      </p>
    </section>
    <section id="source">
      <title>Source Download</title>
      <p>
        There are several ways to obtain a source distribution. Please note that they 
        are listed from least current to most current:
      </p>
      <ul>
        <li>
          Download a released version from a 
          <link href="http://www.apache.org/dyn/closer.cgi/xmlgraphics/fop">FOP Distribution mirror</link>.
          Source distributions include "-src" in their names.
        </li>
        <!--li>
          Download a CVS snapshot from the cvs files 
          <link href="http://xml.apache.org/from-cvs/xml-fop/">here</link>. 
          These snapshots are built approximately every six hours, and have the GMT of 
          their creation time embedded in their names. Please note that CVS snapshots 
          are made only for the "redesign" branch.
        </li-->
        <li>
          Download directly from the SVN repository.
          Anyone can do this using the 
          <link href="http://xmlgraphics.apache.org/repo.html">Anonymous SVN Server</link>.
          By default, the code in SVN is up-to-the-minute, the same code that the developers 
          are modifying. See the <link href="dev/tools.html#svn">SVN section of Developer Tools</link>
          for more information on using SVN.
        </li>
      </ul>
      <p/>
      <table>
        <tr>
          <th colspan="2">Latest Stable Release</th>
        </tr>
        <tr>
          <td>Repository URL</td>
          <td>
            <link href="http://svn.apache.org/repos/asf/xmlgraphics/fop/tags/fop-0_95/">
              <code>http://svn.apache.org/repos/asf/xmlgraphics/fop/tags/fop-0_95/</code>
            </link>
          </td>
        </tr>
        <tr>
          <td>Web view</td>
          <td>
            <link href="http://svn.apache.org/viewvc/xmlgraphics/fop/tags/fop-0_95/">
              <code>http://svn.apache.org/viewvc/xmlgraphics/fop/tags/fop-0_95/</code>
            </link>
          </td>
        </tr>
        <tr>
          <th colspan="2">Previous Stable Release</th>
        </tr>
        <tr>
          <td>Repository URL</td>
          <td>
            <link href="http://svn.apache.org/repos/asf/xmlgraphics/fop/tags/fop-0_94/">
              <code>http://svn.apache.org/repos/asf/xmlgraphics/fop/tags/fop-0_94/</code>
            </link>
          </td>
        </tr>
        <tr>
          <td>Web view</td>
          <td>
            <link href="http://svn.apache.org/viewvc/xmlgraphics/fop/tags/fop-0_94/">
              <code>http://svn.apache.org/viewvc/xmlgraphics/fop/tags/fop-0_94/</code>
            </link>
          </td>
        </tr>
        <tr>
          <th colspan="2">Trunk</th>
        </tr>
        <tr>
          <td>Repository URL</td>
          <td>
            Main Repository:
            <link href="http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/">
              <code>http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/</code>
            </link>
            <br/>
            European Mirror:
            <link href="http://svn.eu.apache.org/repos/asf/xmlgraphics/fop/trunk/">
              <code>http://svn.eu.apache.org/repos/asf/xmlgraphics/fop/trunk/</code>
            </link>
            
          </td>
        </tr>
        <tr>
          <td>Web view</td>
          <td>
            Main Repository:
            <link href="http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/">
              <code>http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/</code>
            </link>
            <br/>
            European Mirror:
            <link href="http://svn.eu.apache.org/viewvc/xmlgraphics/fop/trunk/">
              <code>http://svn.eu.apache.org/viewvc/xmlgraphics/fop/trunk/</code>
            </link>
          </td>
        </tr>
      </table>
      <p>
        With any source distribution, you will need to 
        build FOP from the source files. For details please see the "Build" page on the documentation tab
        for the version you've downloaded.
      </p>
      <!-- No hopes to reenable them because of problems with long path names on Solaris
      <fixme author="jeremias">Reenable the link to the SVN snapshots once they are available.</fixme>
      -->
    </section>
    <section id="archives">
      <title>Archive Download</title>
      <p>
        FOP Archive distributions are linked from the upper portion of the Apache FOP 
        Download Mirror Page and can be downloaded from the FOP Archives 
        <link href="http://archive.apache.org/dist/xmlgraphics/fop/binaries/">binaries</link> &amp; 
        <link href="http://archive.apache.org/dist/xmlgraphics/fop/source/">source</link> links.
      </p>
    </section>
  </body>
</document>
<!-- Last Line of $RCSfile$ -->
