<?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="Building &xslt4c;">
<anchor name="build"/>
<p>This section is obsolete and is being rewritten.
See: <jump href="BUILD-LIBS.html">BUILD-LIBS.html</jump></p>
<p>This page was created for users who have downloaded the source distribution of &xslt4c; and are looking for guidance on how to
   build the &xslt4c; libraries themselves.</p>
<ul>
  <li><link anchor="rebuild">Rebuilding &xslt4c;</link></li>
  <li><link idref="samples" anchor="rebuilding">Rebuilding sample applications</link></li>
</ul>

<anchor name="rebuild"/> 
<s3 title="Rebuilding &xslt4c;">
<ul>
  <li><link anchor="needed">What you need from the distributions</link></li>   
  <li><link anchor="win32">Steps for doing a Windows Build</link></li>
  <li><link anchor="dotNet">Steps for doing a Windows Build with Visual Studio .NET</link></li>
  <li><link anchor="unix">Steps for doing a UNIX build</link></li>       
  <li><link anchor="locale">Steps for doing a Build with Message Localization Support</link></li>
  <!--
  <li><link anchor="xercesdepdom">Steps for doing a Build with Xerces Deprecated DOM Support</link></li>
  -->
</ul>
</s3>

<anchor name="needed"/>
<s3 title="What you need from the distributions">
<p>To rebuild &xslt4c;, you need the &xslt4c; source files, the &xml4c; header files, and for Windows the &xml4c; .lib file. 
   If you want to rebuild with the ICU, you will need to download the ICU source package to build the ICU libraries. </p>
<note>You can also download &xslt4c; source distributions from <resource-ref idref="xslt4c-distdir"/>: &xslt4c-dist;-src.zip 
      and &xslt4c-dist;-src.tar.gz. &xml4c; source distributions are available from <resource-ref idref="xml4c-distdir"/>: 
      &xml4c-dist;-src.zip and &xml4c-dist;-src.tar.gz.</note>
<p>Keep in mind that at any given point in time the &xslt4c; and &xml4c; source trees in the Apache XML repository may not 
   be consistent. When we release a version of &xslt4c; we certify that it is compatible with a given version of &xml4c;. To 
   be safe, use the Xerces distributions that we certify as compatible. Reminder: &xslt4c-current; is compatible with 
   &xml4c-used;.</p>
<p>For information on using the <resource-ref idref="icu"/>, see <link idref="usagepatterns" anchor="icu">Using the ICU</link>.
   The recommended version of ICU for &xslt4c-current; is &icu-current;. You may be able to use newer ICU releases as they appear.</p>
</s3>

<anchor name="win32"/>
<s3 title="Steps for doing a Windows build">
<p>To build &xslt4c; on Windows, you need &xml4c; and a C++ compiler for Windows (either MS Visual C++ 6.0 installed with Service 
   Pack 5 for Visual C++ OR Visual Studio .NET).</p> 
<p>If you are using a different Service Pack, you must rebuild all of the Xerces and Xalan binaries.</p>
<p>Before you do the following, be sure you have <link idref="install" anchor="windowspath">provided Visual C++ the paths to 
   the Xerces headers and libraries</link>.</p>
<ol>    
  <li>Create the XERCESCROOT environment variable and set it to the path of the root directory of &xml4c;.</li>
  <li>If you are building with ICU, create the ICUROOT environment variable and set it the the path of the ICU root directory.</li>
  <li>Use Visual C++ to open the Xalan workspace (.dsw) from the &xslt4c-win_root;\Projects\Win32\VC6.  If you are building with 
      ICU, then use XalanICU.dsw.  Otherwise, open the Xalan.dsw workspace.<br/><br/>
  <note>You may need to restart Visual Studio .NET in order for ICUROOT and XERCESCROOT to take effect.</note>
  <br/>
  As an alternative method to the steps described above, would be to go to "Tools" and select "Options" from Visual C++.  From the 
  "Options" window, click on the "Directories" tab and do the following:
  <ol>
    <li>Show Directories for: Executable files.  Add the Xerces bin directory to the list.</li>
    <li>Show Directories for: Include files.  Add the Xerces include directory to the list.  If you are building with ICU, add the 
        ICU include directory to the list as well.</li>
    <li>Show Directories for: Library files. Add the Xerces lib directory to the list.  If you are building with ICU, add the ICU 
        lib directory to the list as well.</li>
  </ol></li>
</ol>
<!-- -->
<note>To recompile existing applications without changing your source code, be sure to modify your Project settings to pick up the 
      Xalan headers in its new location. (see image below)</note>
<p><img src="options-sane.gif" alt="Visual C++ 6.0 Include Directories change"/></p>
<!-- -->
</s3>

<anchor name="dotNet"/>
<s3 title="Steps for doing a Windows Build with Microsoft Visual Studio .NET">
<p>For users who want to build with Visual Studio .NET,</p>
<ol>
  <li>Create the XERCESCROOT environment variable and set it to the path of the root directory of &xml4c;.</li>
  <li>If you are building with ICU, create the ICUROOT environment variable and set it to the path of the ICU root directory.</li>
  <li>Use Visual Studio .NET to open the Xalan solution (.sln) from the &xslt4c-win_root;\Projects\Win32\VC7.1.  If you are building 
      with ICU, then use XalanICU.sln.  Otherwise, open the Xalan.sln solution file.<br/><br/>
  <note>You may need to restart Visual Studio .NET in order for ICUROOT and XERCESCROOT to take effect.</note>
  <br/>
  An alternative method to the steps described above, would be to go to "Tools" and select "Options" from Visual Studio .NET.  From 
  the "Options" window, click on the "Projects" folder to expand the list.  Select "VC++ Directories" from the list and do the following:
  <ol>
    <li>Show Directories for: Executable files.  Add the Xerces bin directory to the list.</li>
    <li>Show Directories for: Include files.  Add the Xerces include directory to the list.  If you are building with ICU, add the 
        ICU include directory to the list as well.</li>
    <li>Show Directories for: Library files. Add the Xerces lib directory to the list.  If you are building with ICU, add the ICU 
        lib directory to the list as well.</li>
  </ol></li>
</ol>
<!-- -->
<note>To recompile existing applications without changing your source code, be sure to modify your Project settings to pick up the 
      Xalan headers in its new location. (see image below)</note>
<p><img src="NET_options.jpg" alt="Visual Studio .NET Include Directories change"/></p>
<!-- -->
</s3>

<anchor name="unix"/>
<s3 title="Steps for doing a UNIX build">
<p>For users who want to build in the UNIX environment,</p>
<ol>
  <li>The Xalan build files are written for GNU make, and will not work with other make utilities.<br/><br/></li>    
  <li>Set the XERCESCROOT environment variable to the path to the root directory of &xml4c;.<br/><br/></li>    
  <li>Set the XALANCROOT environment variable to the path to the c directory in the root directory of the &xslt4c;
      distribution.  For example, if the distribution is located in "/home/mydir", you would set the XALANCROOT to 
      "/home/mydir/&xslt4c-unix_root;". <br/><br/></li>
  <li>(Optional) If you decide to build with ICU, integrate the build with ICU by installing the ICU (see <link 
      idref="usagepatterns" anchor="icu">Using the ICU</link>) and defining XALAN_USE_ICU to a value, for example:
      export XALAN_USE_ICU=true.  Set the ICUROOT environment variable to the path to the root directory of ICU.  
      Note that building Xalan with ICU requires that Xerces must also be built with ICU.<br/><br/></li>
  <li>Change directory to XALANCROOT. You can also build Xalan-C outside of the source tree, but you will need to adjust the path to the
      runConfigure script in the next step.<br/><br/></li>      
  <li>Run the runConfigure utility and provide the platform, C compiler, and C++ compiler flags as 
      indicated below.  The runConfigure utility is used to generate the appropriate Makefile for 
      the desired build platform based on the options specified by the user. Valid options for the 
      runConfigure utility are:<br/><br/>
      <code>./runConfigure -p &lt;value&gt; -c &lt;value&gt; -x &lt;value&gt; [-[flag] &lt;value&gt;]</code><br/><br/>
      <table>
        <tr><th>flag</th><th>Description</th></tr>
        <tr><td>p</td><td>Build platform. Option must be provided by user. Valid values <br/>include: 
                          aix, linux, freebsd, netbsd, solaris, hp-10, hp-11, hp-11-ia64, irix,<br/> 
                          tru64, macosx, cygwin. </td></tr>
        <tr><td>c</td><td>C compiler name. Example: gcc, cc, c89, xlc_r, etc.</td></tr>
        <tr><td>x</td><td>C++ compiler name. Example: g++, xlC_r, CC, etc.</td></tr>
        <tr><td>d</td><td>Indicates build is a debug build. Takes no values. Default is no <br/>debug.</td></tr>
        <tr><td>t</td><td>Transcoder to use. Valid value is 'icu'. Default is null.</td></tr>
        <tr><td>m</td><td>Type of localization support method. Valid values include: inmem, <br/>icu, and nls. 
                          Default is inmem.</td></tr>
        <tr><td>M</td><td>Locale for Message Localization Support. Default is "en_US"</td></tr>
        <tr><td>r</td><td>Threads option. Valid values include: pthread or dce. Default is <br/>pthread. 
                          (valid on HP-UX only)</td></tr>
        <tr><td>b</td><td>Specify whether it is a 32-bit or 64-bit build. Valid values are 32 <br/>and 64. 
                          Default is 32-bit</td></tr>
        <tr><td>P</td><td>Install root directory. Used if invoking build with gmake install or <br/>gmake 
                          install-package. Default install root directory is /usr/local</td></tr>
        <tr><td>l</td><td>Extra link options other than the default. Default is null</td></tr>
        <tr><td>z</td><td>Extra compiler options other than the default. Default is null</td></tr>
        <tr><td>C</td><td>Extra configuration options.</td></tr>
        <tr><td>h</td><td>To get help on the above commands. Default is no help.</td></tr>
      </table><br/>
      <ref>Linux using GCC:</ref>&nbsp;&nbsp;<code>./runConfigure -p linux -c gcc -x g++</code><br/>
      <ref>Linux using the Intel compiler:</ref>&nbsp;&nbsp;<code>./runConfigure -p linux -c icc -x icc</code><br/>
      <ref>AIX (32-bit):</ref>&nbsp;&nbsp;&nbsp;&nbsp;<code>./runConfigure -p aix -c xlc_r -x xlC_r</code><br/><br/>
      <ref>AIX (64-bit):</ref>&nbsp;&nbsp;&nbsp;&nbsp;<code>./runConfigure -p aix -c xlc_r -x xlC_r -b 64</code><br/><br/>
      <ref>Cygwin (32-bit):</ref>&nbsp;&nbsp;<code>./runConfigure -p cygwin -c gcc -x g++</code><br/><br/>
      <ref>HP-UX 11 (32-bit):</ref>&nbsp;&nbsp;<code>./runConfigure -p hp-11 -c cc -x aCC</code><br/><br/>
      <ref>HP-UX 11 (64-bit):</ref>&nbsp;&nbsp;<code>./runConfigure -p hp-11 -c cc -x aCC -b 64</code><br/><br/>
      <ref>HP-UX 11 for Itanium (32-bit):</ref>&nbsp;&nbsp;<code>./runConfigure -p hp-11-ia64 -c cc -x aCC</code><br/><br/>
      <ref>HP-UX 11 for Itanium (64-bit):</ref>&nbsp;&nbsp;<code>./runConfigure -p hp-11-ia64 -c cc -x aCC -b 64</code><br/><br/>
      <ref>Solaris (32-bit):</ref>&nbsp;&nbsp;<code>./runConfigure -p solaris -c cc -x CC</code><br/><br/>
      <ref>Solaris (64-bit):</ref>&nbsp;&nbsp;<code>./runConfigure -p solaris -c cc -x CC -b 64</code><br/><br/>
      if you choose to install the distribution after building the libraries and executables, 
      then you will need to indicate where you would like the distribution to be installed. 
      To specify the install directory for your distribution, specify the flag -P &lt;install directory&gt;. 
      for example, building and installing on the AIX platform:<br/><br/>
      <code>./runConfigure -p aix -c xlc_r -x xlC_r -P $HOME/my_xalan</code><br/><br/>
      <note>The standard binary directories bin, lib, and include are created in the specified directory only if the install or 
            install-package option is specified in the build process.<br/><br/></note>
      To see the other runConfigure flags you may include, use the help flag:<br/><br/>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>./runConfigure -h</code><br/><br/></li>
  <li>Purge the previous build:<br/><br/>
      <code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make clean</code><br/><br/></li>
  <li>Run the new build:<br/><br/>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>make</code><br/>
      or<br/>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>make <ref>targ</ref></code><br/><br/>
      where <ref>targ</ref> can be one of:
      <table>
        <tr><th>targ</th><th>Description</th></tr>
        <tr><td>all</td><td>Build the libraries and Xalan executable. This is the default target <br/>if no targ 
                            is specified.</td></tr>
        <tr><td>clean</td><td>Deletes existing binaries, executables, libraries, tests, and <br/>samples.</td></tr>
        <tr><td>install</td><td>Build the library, executables, and samples, and copy them (along with <br/>the header files) 
                                the specified install location.</td></tr>
        <tr><td>install-package</td><td>Installs the library, executables, and samples to the <br/>specified location.</td></tr>
        <tr><td>Samples</td><td>Builds the samples.</td></tr>
        <tr><td>Tests</td><td>Builds the tests.</td></tr>
      </table>
      </li>
</ol>
<!-- note>To recompile existing applications without changing your source code, be sure to modify the command line in your Makefile 
      to pick up the Xalan headers from it's new location. e.g:  if your xalan source location is in /home/&xslt4c-unix_root;,</note>
<p><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>CC ... -I/home/&xslt4c-unix_root;/src -I/home/&xslt4c-unix_root;/src/xalanc 
   mysrc.cpp</code></p -->
</s3>

<anchor name="locale"/>
<s3 title="Steps for doing a Build with Message Localization Support">
<p>Message Localization Support is a new feature to allow users to build &xslt4c;  such that diagnostic messages are issued 
   in the language of their choice. Message localization support comes in three flavours:</p>
<ul>
  <li>Building static messages in the form of a library (DLL or shared object) which can be bound 
      to the Xalan executable. This method is referred to as "in memory".  By default, &xslt4c; is built using "in memory" 
      method.</li>
  <li>Building messages in the form of a library using localization support provided by the International Components for 
      Unicode (ICU). </li>
  <li>Building messages in the form of a message catalog. This method utilizes the localization support provided by the Unix 
      National Language Support (NLS) system. This method is supported for UNIX platforms only. </li>
</ul>
<p>Regardless of which method you choose, a message file containing translated messages in the language of your choice must 
   be provided. The standard message file provided in the &xslt4c-current; source package is in XML Localization Interchange 
   File Format (XLIFF) format and conforms to the XLIFF 1.1 standard (please see 
   <jump href="http://www.oasis-open.org/committees/xliff/documents/xliff-specification.htm">
   http://www.oasis-open.org/committees/xliff/documents/xliff-specification.htm</jump> for more information.) All message files 
   must be written and conform with the XLIFF 1.1 standard.</p>
<p>Once an XLIFF message file has been created, the XLIFF file should be stored under &xslt4c-unix_root;/src/xalanc/NLS/&lt;locale_name&gt; 
   directory (for example, the default XLIFF message file provided is XalanMsg_en_US.xlf). To build, you will need to follow the 
   same steps as shown above for building in Unix or Windows but with a small change.</p>
<p>For building on Windows platform with "In Memory" method:</p>
<ol>
  <li>Create the environment variable XERCESCROOT and set it to the path to the root directory of &xml4c;.</li>
  <li>Create the environment variable ICUROOT and set it to the path to the ICU root directory.</li>
  <li>Open the Xalan.dsw workspace using Microsoft Visual C++. The "inmem" localization method should be configured by default.</li>
  <li>Select the Localization project, and go to Settings and click on the "General" tab.  Verify 
      the build command line to use "nmake /f BuildMessages.mak TYPE=inmem LOCAL=en_US"</li>
  <li>Run "Build all" with the configuration of your choice. </li>
</ol>
<p>For building on the Windows platform with ICU method:</p>
<ol>
  <li>Create the environment variable XERCESCROOT and set it to the path to the root directory of &xml4c;.</li>
  <li>Create the environment variable ICUROOT and set it to the path to the ICU root directory.</li>
  <li>Open the XalanICU.dsw workspace using Microsoft Visual C++. </li>
  <li>Select the AllInOneWithICU project, and ensure that the project depends on the LocalizationWithICU 
      project. </li>
  <li>Select the LocalizationWithICU project, and go to Settings and click on the "General" tab. Modify 
      the build command line to use "nmake /f BuildMessages.mak TYPE=icu LOCAL=en_US"</li>
  <li>Open the tools.ini file under Projects\Win32\VC6\Utils\Localization and add the ICU root 
      directory to the ICUROOT variable setting.</li>
  <li>Run "Build all" with the configuration of your choice. </li>
</ol>
<p>For building on the Unix platform:</p>
<ol>
  <li>Repeat steps 1 through 5 as outlined under "Steps for doing a UNIX Build" </li>
  <li>Run the runConfigure and provide the platform, C compiler, C++ compiler, the message locale 
      system flavour you are intending to build, and the locale support.<br/><br/>
      Example 1: to use the NLS method for localization support using the default locale en_US:<br/><br/>
      <ref>AIX (32-bit):</ref>&nbsp;&nbsp;<code>./runConfigure -p aix -c xlc_r -x xlC -m nls</code><br/><br/>
      <ref>AIX (64-bit):</ref>&nbsp;&nbsp;.<code>/runConfigure -p aix -c xlc_r -x xlC_r -b 64 -m nls</code><br/><br/>
      Example 2: to use the 'icu' method for localization support using the locale fr_FR:<br/><br/>
      <ref>AIX (32-bit):</ref>&nbsp;&nbsp;<code>./runConfigure -p aix -c xlc_r -x xlC_r -m icu -M fr_Fr</code><br/><br/>
      <ref>AIX (64-bit):</ref>&nbsp;&nbsp;<code>./runConfigure -p aix -c xlc_r -x xlC_r -b 64 -m icu -M fr_Fr</code><br/><br/>
  </li>
  <li>Perform steps 7 and 8 as outlined under "Steps for doing a UNIX Build" </li>
</ol>
<p>After &xslt4c; and associated libraries have been successfully built, the message catalog will be stored in the directory 
   &xslt4c-unix_root;/bin.<br/><br/>
<table>
  <tr><th>Localization Build Type</th><th>File Name</th></tr>
  <tr><td><ref>ICU or "in memory" method:</ref></td><td>&xslt4c-msgsho; (for UNIX)<br/>
          &xslt4c-msgdll; and &xslt4c-msglib; (for Windows)</td></tr>
  <tr><td><ref>NLS method:</ref></td><td>&xslt4c-msgcat; can be found in $XALANCROOT/nls/&lt;locale_name&gt;/ directory</td></tr>
</table>
</p>
<p>The location of the message library, &xslt4c; and &xml4c; binaries need to be added to the PATH and library path variables. 
   Depending on the Message Localization Support method you've chosen, the following steps will need to be performed such that 
   &xslt4c; will be able to utilize the message library. </p>
<ul>
  <li>For an "in memory" or "icu" build, the location of the &xslt4c; and &xml4c; executables need to be added to the PATH variable. 
      The location of the message library will need to be added to: 
      <ul>
        <li>the LIBPATH variable for AIX users </li>
        <li>the LD_LIBRARY_PATH variable for RedHat, SuSE, and Solaris users </li>
        <li>the SHLIB_PATH variable for HP-UX users. </li>
      </ul>
  </li>
  <li>For an NLS build, the message catalog will need to be added to the NLSPATH. </li>
</ul>   
</s3>   

<!--
<anchor name="xercesdepdom"/>
<s3 title="Steps for doing a Build with Xerces Deprecated DOM Support">
<p>If your application is dependent on the XercesBridge classes to interface with the deprecated Xerces DOM, then the following 
   steps must be taken.</p>
<p>For a Windows build using Microsoft Visual C++ version 6.0:</p>
<ol>
  <li>Open the Xalan.dsw workspace</li>
  <li>Go to "Projects" and select "Settings".  From the "Project Settings panel", highlight the AllInOne project.</li>
  <li>Click on the "C/C++" tab on the right hand side.  From the "Category" pull down menu, scroll down to find "Preprocessor" 
      and click to highlight this category.</li>
  <li>Under the "Preprocessor Definitions" box, add "XALAN_BUILD_DEPRECATED_DOM_BRIDGE" to the list of definitions.</li>
  <li>Rebuild &xslt4c; as described under <link anchor="win32">"Steps for doing a Windows Build"</link></li>
</ol>
<p>For a UNIX build, the following parameter should be added to your runConfigure step: <code>-z -DXALAN_BUILD_DEPRECATED_DOM_BRIDGE</code>.  
   For example,</p>
&nbsp;&nbsp;&nbsp;&nbsp;<code>./runConfigure -p aix -c xlc_r -x xlC_r -z -DXALAN_BUILD_DEPRECATED_DOM_BRIDGE</code><br/><br/>
</s3>
-->

</s1>
