<?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.
-->

<!DOCTYPE s1 SYSTEM "sbk:/style/dtd/document.dtd">

<s1 title="Build Instructions">
  <s2 title="Build Instructions">

    <p>Build instructions are provided for the following platforms and
       compilers:</p>

    <ul>
       <li><link anchor="UNIX">UNIX/Linux/Mac OS X/Cygwin/MinGW</link></li>
       <li><link anchor="Windows">Windows using Microsoft Visual C++</link></li>
       <li><link anchor="BorlandCC">Windows using Borland C++</link></li>
       <li><link anchor="BorlandBuilder">Windows using Borland C++ Builder</link></li>
    </ul>

    <anchor name="UNIX"/>
    <s3 title="Building on UNIX/Linux/Mac OS X/Cygwin/MinGW platforms">

        <p>For building on UNIX and UNIX-like (GNU/Linux, Max OS X,
           Cygwin, MinGW-MSYS) platforms &XercesCName; uses the
           GNU automake-based build systems and requires that you
           have <jump href="http://www.gnu.org/software/make/make.html">GNU
           make</jump> installed. On some platforms GNU make is called gmake
           instead of make.</p>

        <p>As with all automake-based projects the build process is divided
           into two parts: configuration and building. The configuration
           part is performed using the <code>configure</code> script that
           can be found in the <code>&XercesC3SrcInstallDir;</code> directory.
           The build part is performed by invoking <code>make</code>.</p>

        <p>Besides the standard <code>configure</code> options which
           you can view by running <code>configure --help</code>,
           &XercesCName; provides a number of project-specific options
           that are worth mentioning. You can specify one option for
           each category outlined below. If you do not specify anything
           for a particular category then <code>configure</code> will
           select the most appropriate default. At the end of its
           execution <code>configure</code> prints the selected
           values for each category.</p>


	<p>Net Accessor (used to access network resources):</p>

        <table>
          <tr>
            <th>Option</th>
            <th>Description</th>
          </tr>
          <tr>
            <td><code>--enable-netaccessor-curl</code></td>
            <td>use the libcurl library</td>
          </tr>
          <tr>
            <td><code>--enable-netaccessor-socket</code></td>
            <td>use plain sockets</td>
          </tr>
	  <tr>
            <td><code>--enable-netaccessor-cfurl</code></td>
            <td>use the CFURL API (only on Mac OS X)</td>
          </tr>
	  <tr>
            <td><code>--enable-netaccessor-winsock</code></td>
            <td>use WinSock (only on Windows, Cygwin, MinGW)</td>
          </tr>
          <tr>
            <td><code>--disable-network</code></td>
            <td>disable network support</td>
          </tr>
        </table>

	<p>Transcoder (used to convert between internal UTF-16 and other encodings):</p>

        <table>
          <tr>
            <th>Option</th>
            <th>Description</th>
          </tr>
          <tr>
            <td><code>--enable-transcoder-gnuiconv</code></td>
            <td>use the GNU iconv library</td>
          </tr>
          <tr>
            <td><code>--enable-transcoder-iconv</code></td>
            <td>use the iconv library</td>
          </tr>
          <tr>
            <td><code>--enable-transcoder-icu</code></td>
            <td>use the ICU library</td>
          </tr>
          <tr>
            <td><code>--enable-transcoder-macosunicodeconverter</code></td>
            <td>use Mac OS X APIs (only on Mac OS X)</td>
          </tr>
          <tr>
            <td><code>--enable-transcoder-windows</code></td>
            <td>use Windows APIs (only on Windows, Cygwin, MinGW)</td>
          </tr>
        </table>

	<p>Message Loader (used to access diagnostics messages):</p>

        <table>
          <tr>
            <th>Option</th>
            <th>Description</th>
          </tr>
          <tr>
            <td><code>--enable-msgloader-inmemory</code></td>
            <td>store the messages in memory</td>
          </tr>
          <tr>
            <td><code>--enable-msgloader-icu</code></td>
            <td>store the messages using the ICU resource bundles</td>
          </tr>
          <tr>
            <td><code>--enable-msgloader-iconv</code></td>
            <td>store the messages in the iconv message catalog</td>
          </tr>
        </table>

        <p>Thread support is enabled by default and can be disabled with the
           <code>--disable-threads</code> option.</p>

        <p>By default <code>configure</code> selects both shared and static
           libraries. You can use the <code>--disable-shared</code> and
           <code>--disable-static</code> options to avoid building the
           version you don't need.</p>

        <p>Finally, to make the build process cleaner the &XercesCName;
           build system hides actual compiler commands being executed
           by <code>make</code>. If you would like to see those then you
           can specify the <code>--disable-pretty-make</code> option.</p>

         <p>If you need to specify compiler executables that should be
            used to build &XercesCName;, you can set the CC and CXX
            variables when invoking <code>configure</code>. Similarly,
	    if you need to specify additional compiler or linker options,
            you can set the CFLAGS, CXXFLAGS, and LDFLAGS variables.
            For example:</p>

         <source>./configure --disable-static CC=gcc-4.3 CXX=g++-4.3 CFLAGS=-O3 CXXFLAGS=-O3</source>

         <p>Once the configuration part is complete you can run
            <code>make</code> (or <code>gmake</code>). Running
            <code>make</code> from the <code>&XercesC3SrcInstallDir;</code>
            directory builds &XercesCName; library and examples. If
            you like to build only the library, you can run make from
            <code>&XercesC3SrcInstallDir;/src</code>.</p>

         <p>If you would like to build the tests and run the
            automated test suite, run <code>make check</code>
            from the <code>&XercesC3SrcInstallDir;</code>
            directory. The automated test suite required
            Perl and the <code>diff</code> command.</p>

         <p>Some platforms and configurations require extra
            <code>configure</code> and <code>make</code> options
            which are shown in the following table.</p>

      <table>
        <tr>
          <th>Platform</th>
          <th>Compiler</th>
          <th>Options</th>
        </tr>
        <tr>
          <td>Solaris x86</td>
          <td>Sun CC</td>
          <td><code>./configure CXX=CC CC=cc</code></td>
        </tr>
        <tr>
          <td>Solaris x86-64</td>
          <td>Sun CC</td>
          <td><code>./configure CXX=CC CC=cc CFLAGS=-xarch=amd64 CXXFLAGS=-xarch=amd64</code></td>
        </tr>
        <tr>
          <td>Solaris SPARC</td>
          <td>Sun CC</td>
          <td><code>/configure CXX=CC CC=cc</code></td>
        </tr>
        <tr>
          <td>Solaris SPARCv9</td>
          <td>Sun CC</td>
          <td><code>./configure CXX=CC CC=cc CFLAGS=-xarch=v9 CXXFLAGS=-xarch=v9</code></td>
        </tr>
        <tr>
          <td>AIX PowerPC</td>
          <td>IBM XL C++</td>
          <td><code>./configure CXX=xlC_r CC=xlc_r</code><br/>
              <code>gmake libxerces_c_la_LDFLAGS=-qmkshrobj</code></td>
        </tr>
        <tr>
          <td>AIX PowerPC-64</td>
          <td>IBM XL C++</td>
          <td><code>export OBJECT_MODE=64</code><br/>
              <code>./configure CXX=xlC_r CC=xlc_r CXXFLAGS=-q64 CFLAGS=-q64</code><br/>
              <code>gmake libxerces_c_la_LDFLAGS=-qmkshrobj</code></td>
        </tr>
        <tr>
          <td>HP-UX IA-64-32</td>
          <td>HP aCC</td>
          <td><code>./configure CXX=aCC CC=aCC CFLAGS=-mt CXXFLAGS=-mt LDFLAGS=-mt</code></td>
        </tr>
        <tr>
          <td>HP-UX IA-64</td>
          <td>HP aCC</td>
          <td><code>./configure CXX=aCC CC=aCC CFLAGS="-mt +DD64" CXXFLAGS="-mt +DD64" LDFLAGS="-mt +DD64"</code></td>
        </tr>
        <tr>
          <td>Mac OS X x86-64</td>
          <td>GCC</td>
          <td><code>/configure CFLAGS="-arch x86_64" CXXFLAGS="-arch x86_64" </code></td>
        </tr>
        <tr>
          <td>Mac OS X PowerPC-64</td>
          <td>GCC</td>
          <td><code>./configure CFLAGS="-arch ppc64" CXXFLAGS="-arch ppc64"</code></td>
        </tr>
        <tr>
          <td>Mac OS X x86/PowerPC</td>
          <td>GCC</td>
          <td><code>./configure --disable-dependency-tracking CFLAGS="-arch i386 -arch ppc" CXXFLAGS="-arch i386 -arch ppc"</code></td>
        </tr>
        <tr>
          <td>Mingw x86</td>
          <td>GCC</td>
          <td><code>./configure LDFLAGS=-no-undefined</code></td>
        </tr>
        <tr>
          <td>Cygwin x86</td>
          <td>GCC</td>
          <td><code>./configure LDFLAGS=-no-undefined</code></td>
        </tr>
        </table>
        <p/>

        <note>
         Note that different UNIX platforms use different system
         environment variable for finding libraries. On Linux
         and Solaris, the environment variable name is
         <code>LD_LIBRARY_PATH</code>, on AIX it is
         <code>LIBPATH</code>, on Mac OS X it is
         <code>DYLD_LIBRARY_PATH</code>, and on HP-UX
         it is <code>SHLIB_PATH</code>.
        </note>

	<note>
          Note that Cygwin and MinGW are different from the UNIX platforms
          in the way they find libraries at run time. While UNIX platforms
          may use the <code>LD_LIBRARY_PATH</code> environment variable,
          Cygwin and MinGW use the <code>PATH</code> environment variable.
        </note>
    </s3>

    <anchor name="Windows"/>
    <s3 title="Building on Windows using Microsoft Visual C++">
        <p>&XercesCName; source distribution comes with Microsoft Visual C++ projects and solutions.
           The following describes the steps you need to build with this compiler.</p>

            <p>To build &XercesCName; from the source distribution you will
            need to open the solution containing the project. The solutions
            containing the &XercesCName; project files are in the following
            sub-directories in the <code>&XercesC3SrcInstallDir;</code>
            directory:</p>

<source>
(For VC6)   projects\Win32\VC6\xerces-all\xerces-all.dsw
(For VC7.1) projects\Win32\VC7.1\xerces-all\xerces-all.sln
(For VC8)   projects\Win32\VC8\xerces-all\xerces-all.sln
(For VC9)   projects\Win32\VC9\xerces-all\xerces-all.sln
</source>

            <p>Once you have the solution open, you need to build the
               project named <code>XercesLib</code>. You can select
               Debug/Release, Static/DLL, and, for VC8 and VC9, 32/64 bit
               builds using the Configuration Manager dialog. You
               can also select whether the &XercesCName; library
               should use ICU for transcoding.</p>

            <p>When building your own applications you need to make sure
               that you are linking your application with the
               &XercesC3WindowsLib;.lib library (or Debug/Static version of it)
               and also that the associated DLL is somewhere in the
               executable/DLL search path (<code>PATH</code>).</p>

            <note>If you are linking your application to the static
                  &XercesCName; library,
                  then you will need to compile your application with the
                  XERCES_STATIC_LIBRARY preprocessor macro defined in order
                  to turn off the DLL import/export mechanism.</note>

            <p>If you would also like to build tests and/or samples, inside
               the solution files mentioned above (<code>xerces-all.dsw</code>
               or <code>xerces-all.sln</code>), you'll find several other
               projects which are for the tests and samples. Select all
               the tests/samples that you would like to build and then
               right click on the selection. Choose "Build (selection
               only)" to build all the selected projects in one shot.</p>
    </s3>

    <anchor name="BorlandBuilder"/>
    <s3 title="Building on Windows using Borland C++ Builder">
        <p>&XercesCName; source distribution comes with the
           Borland C++ Builder 6 projects. The following describes the steps you
           need to build with this compiler.</p>

        <p>The library and example projects are all contained in the
           Xerces-all project group:
           <code>&XercesC3SrcInstallDir;\projects\Win32\BCB6\Xerces-all\Xerces-all.bpg</code>.
	   Each project in the group refers a directory below <code>Xerces-all\</code>.
	   For example, the XercesLib project files are contained in the directory
           <code>&XercesC3SrcInstallDir;\projects\Win32\BCB6\Xerces-all\XercesLib</code>.</p>

        <p>To build a project, open the project manager, double click on the project
           name, and select "Project -> Build" from the menu. For example, double click
           on XercesLib.dll in the manager then select "Project -> Build XercesLib" from
           the menu.
        </p>
    </s3>

    <anchor name="BorlandCC"/>
    <s3 title="Building on Windows using Borland C++">
        <p>&XercesCName; source distribution comes with the Borland C++ makefiles. The
           following describes the steps you need to build &XercesCName; with this compiler.</p>
        <ol>
	   <li>Change to the <code>&XercesC3SrcInstallDir;\projects\Win32\BCC.551\Xerces-all</code> directory</li>
           <li>Run <code>MakeBuildDirs.bat</code></li>
	   <li><code>make -f Xerces-all.mak</code> to build the library, examples, and tests.</li>
	</ol>
    </s3>
  </s2>
</s1>
