<?xml version="1.0" standalone="no"?> 
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * 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.
-->
<s1 title="Installing &xslt4c;">

<ul>
  <li><link anchor="SourcePkgs">Install Source Packages</link></li>
  <li><link anchor="BinaryPkgs">Install Binary Packages</link></li>
  <ul>
    <li><link anchor="InsWin">Install Windows Packages</link></li>
    <li><link anchor="InsUnx">InstallUNIX Packages</link></li>
    <li><link anchor="InsPkgs">Other Packages</link></li>
  </ul>
  <li><link anchor="XalanDocPkg">Install Documentation Packages</link></li>
  <ul>
    <li><link href="DocWebPkg">Xalan-C User Guide</link></li>
    <li><link href="DocApiPkg">Xalan-C API Reference</link></li>
  </ul>
</ul>

<p>A pre-requisite for using the Xalan-C/C++ XSLT library is to
  have a working Xerces-C/C++ XML Parser library.  Xerces-C/C++
  must be of version 3.0 or newer.  Xerces-C/C++ Version 3.1.1 is preferred.
</p>
<p>The Xalan-C/C++ project is providing several types of packages.
</p>
<p>Source packages contain all of the source code to build the
  Xalan-C/C++ library, the sample programs, and the documentation.
  There are UNIX scripts and Windows project files by which the
  library and sample programs can be built. 
  There are also scripts for building the User Guide web pages and
  a Doxygen configuration for building the interactive API Reference.
</p>
<p>Binary packages contain compiled libraries and the Xalan
  command line program.  The binary packages also contain C/C++
  header files for basic software development.
</p>
<p>Documentation packages contain pre-built directories of web
  page html files for the Xalan-C/C++ User Guide and the interactive
  API Reference for programmers.
</p> 

<anchor name="SourcePkgs"/>
<s2 title="Install Source Packages">
<p>We have no package managers for source packages.  You just extract
  the contents of the distribution <ref>zip</ref> file or <ref>tar</ref> file 
  into a source directory of your choosing.
</p>
<p>You also need to have the necessary C/C++ compiler tools installed
  and a working copy of the Xerces-C/C++ XML parser library.
</p>
<p>Building the 
  <link idref="builddocs" anchor="buildweb">User Guide</link> 
  from sources requires a working Xalan command line program.
</p>
<p>Building the interactive 
  <link idref="builddocs" anchor="buildapi">API Reference</link>
  requires a UNIX or Linux system with a current copy of 
  Doxygen and GraphViz installed.
</p>

<p>The building of a library from sources results in a directory from which
  a binary package can be made.  
  <link idref="buildlibs" anchor="unixbldenv">UNIX and Linux builds</link>
  are automatically targeted to an install destination.  
  <link idref="buildlibs" anchor="winbldinst">Installing a Windows build</link>
  requires that the specific compiled products be copied to a usable
  destination directory.
</p>

</s2>
<anchor name="BinaryPkgs"/>
<s2 title="Install Binary Packages">
<p>The binary packages distributed by <ref>zip</ref> files
  and <ref>tar</ref> files are usually extracted to the install 
  <code>{target}</code> directory.
  After extracting the contents, you then need to manually perform
  some minor system configuration.
</p>
<p>Packages that are handled by a package manager are usually
  installed and configured according to package maintainer.</p>

<anchor name="InsWin"/>
<s3 title="Install Windows Packages">
<p>The Xalan-C and Xerces-C packages can be installed to the same
  <code>{target}</code>
  directory tree.  The debug and release builds have different names
  for the shared <code>*.DLL</code> files.
</p>
<p>Windows operating systems require that the <code>{target}\bin</code>
  directory be added to the PATH environment. You can make the path
  a permanent part of the SYSTEM or user login DESKTOP environment. 
  The PATH environment variable should contain an entry
  where the <code>{target}\bin\*.DLL</code> files are found.
</p>
<ol>
  <li>Right-Click on the computer icon.</li>
  <li>Select Properties.</li>
  <li>Select Advanced System Settings.</li>
  <li>Select Environment Variables.</li>
  <li>Add the <code>{target}\bin</code> directory to the
      system PATH environment variable.</li>
</ol>
<p>The XP, NT, 2000 and 2003 systems allow environment variables to be 
   set explicitly to individual user accounts. 
   The Vista, Win-7, and 2008 systems have security administration that
   gets in the way of updating individual user environments.
</p>
<p>In a command window or a command environment, you can add the following
   shell command to set a temporary path to the XALAN <code>{target}\bin</code>
   directory.
</p>
<source>set PATH=%PATH%;{target}\bin</source>

</s3>
<anchor name="InsUnx"/>
<s3 title="Install UNIX Packages">
  <p>The path to the <code>Xalan</code> command line executable program should be added
  to the PATH environment variable.</p>
  <p>The path to the shared objects should be added to the system
  configuration or overridden by specific entry in an environment
  by which shared objects can be found.</p>
<p>Here is some more detailed information on 
  <link idref="buildlibs" anchor="unixlibpath">UNIX Runtime</link> configuration.
</p>
</s3>
<anchor name="InsPkgs"/>
<s3 title="Install Other Packages">
<p>These packages are usually installed and configured by a package manager.
  You should refer to the documentation provided by the package maintainer.
</p>

</s3>
</s2>
<anchor name="XalanDocPkg"/>
<s2 title="Install Documentation Packages">
<p>The documentation packages are distributed as <ref>tar</ref> files
  and <ref>zip</ref> files.  You just extract the files into a directory
  that is reachable by your favorite web browser.  The head of the
  documentation tree starts at the <link idref="index">
  <code>{docs}/xalan-c</code></link> directory.
</p>
<p><em>TO DO:</em></p>
<p>Rework the xalan/c/trunk/xdocs/sources/ scripts so that the
   source documentation builds are
   targeted to the xalan/c/trunk/build/docs/xalan-c/ directory path.
</p>
<p>Add a documentation script that performs a post-processing
   operation when building the API Reference from Doxygen to relocate
   the constructed products to the xalan/c/trunk/build/docs/xalan-c/apiDocs/
   directory path.
</p>
<p>Details are found in our <link idref="builddocs">Build Documents</link> pages.
</p>

<anchor name="DocWebPkg"/>
<s3 title="Install Xalan-C User Guide">
<p>Extract the distributed <ref>tar</ref> file or <ref>zip</ref>
  file to the <code>{docs}</code> directory.  The package populates
  the <code>{docs}/xalan-c/*</code> directory containing the Xalan-C
  User Guide web pages.
</p>

</s3>
<anchor name="DocApiPkg"/>
<s3 title="Install Xalan-C API Reference">
<p>Extract the distributed <ref>tar</ref> file or <ref>zip</ref>
  file to the <code>{docs}</code> directory.  The package populates
  the <code>{docs}/xalan-c/apiDocs/*</code> directory containing the
  Xalan-C API Reference for programmers.
</p>
</s3>
</s2>
</s1>
