<html><head>
<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
</head>
<!-- PLEASE DO NOT COMMIT EDITED VERSION OF THE FILES BUILD_LINUX.HTML, 
BUILD_SOLARIS.HTML AND BUILD_WINDOWS.HTML. EDIT THE FILE BUILD_TEMPLATE 
INSTEAD AND USE ./mkbuilddoc TO GENERATE THE PLATFORM SPECIFIC BUILD DOCUMENT-->

<body>

<h2>
Building OpenOffice.org 1.1.x <Linux>under Linux</Linux><Solaris>under Solaris</Solaris><Win_tcsh>under Windows with tcsh</Win_tcsh><Windows>under Windows with 4NT</Windows>
</h2>
<p><b>Beware! The build instructions for OpenOffice.org 2.x are different!</b>
</p>
<Win_tcsh>
<p>
The Cygwin tcsh environment is new (from December 2003), and can be used starting with
cws_srx644_ooo20030412.</p>
</Win_tcsh>
<p>
This document describes the requirements and actions that you need to build 
OpenOffice.org on <Linux>Linux.</Linux><Solaris>Solaris.</Solaris><Win_tcsh>Windows using Cygwin shell.</Win_tcsh><Windows>Windows.</Windows>
</p>

<p>
Commands you have to type on the keyboard 
follow this syntax throughout this document:
</p>

<LinuxSolarisWin_tcsh>
<pre>
<KBD>config_office&gt; ./configure</KBD>
</pre>

<p> 
In this example, the script <CODE>configure</CODE> is executed 
in the directory <CODE>config_office</CODE>.
</p>
</LinuxSolarisWin_tcsh>

<Windows>
<pre>
<KBD>D:\my\source&gt; winenv.bat</KBD>
</pre>

<p> 
In this example, the script <CODE>winenv.bat</CODE> is executed in the directory 
<CODE>D:\my\source</CODE> under a 4NT shell. Unless stated otherwise, all commands 
appearing in this document should be entered from a 4NT shell (the exception 
is the configure script which has to be run from a cygwin bash shell). 
</Windows>

<CODE>$SRC_ROOT</CODE> will denote the directory in which the source code 
of OpenOffice.org is stored.

<p>
Basically, there is the choice to build OpenOffice.org from two different 
branches: a stable branch, which results in the release version, or 
a less stable developer branch (latest release see
<a href="http://tools.openoffice.org/builds/index.html">here</a>).
Links to the different sources are given in the document. 
</p>

<br><br><br>



<H2>Table of Contents</H2>

<ul>

<li>
<a href="#Overview">Overview</a>

<ul>

<li>
<a href="#OverviewofPerformingaFullBuild">of Performing a Full Build</a>
</li>

<li>
<a href="#OverviewofBuildinganIndividualProject">of Building an Individual 
Project</a>
</li>

</ul></li>

<li>
<a href="#BuildRequirements">Build Requirements</a>

<ul>

<li>
<a href="#ExternalComponents">External Components</a>
</li>

<li>
<a href="#GetTheSourceCode">Get the Source Code</a>
</li>

<li>
<a href="#GeneratingtheBuildEnvironmentandBuildTools">Generating 
the Build Environment and Build Tools</a>
</li>

</ul></li>

<li>
<a href="#BuildInstructions">Build Instructions</a>

<ul>

<li>
<a href="#BuildingaFullBuildofOpenOffice">Building a Full Build</a>
</li>

<li>
<a href="#BuildingIndividualProjects">Building 
Individual Projects with a Prebuilt</a>
</li>

<li>
<a href="#BuildingaProjectwithDebugInformation">Building 
a Project with Debug Information</a>
</li>

</ul></li>

<li> 
<a href="#InstallInstructions">Instructions to 
Build an Installation Set</a> 
</li>

<li>
<a href="#BuildingLocalised">Building Localised Versions of OpenOffice.org</a>
</li>

</ul>

<br><br><br>


<h2>
<a NAME="Overview">Overview</a>
</h2>

<p>
This section is meant as a reminder or checklist for those who have some 
experience in building OpenOffice.org. Everybody else should jump to the 
<a href="#BuildRequirements">Build Requirements</a> section. 

<p> 
Even experienced builders are well advised to check the release notes at 
<a href="http://download.openoffice.org/index.html">
http://download.openoffice.org/index.html</a>
and the section <a href="#BuildRequirements">Build Requirements</a> in this 
document to inform yourself about changes since the previous releases. 

<p>
Detailed step-by-step build descriptions are given from the next section on. 

<p>
You can perform a full build, or you can build an individual project using 
a prebuilt version.

<H2>
<a NAME="OverviewofPerformingaFullBuild"></a>Overview of 
Performing a Full Build
</H2>

<p>
To perform a full build, you need to follow these steps:

<ol>
  <li> Get the source code, either from the download webpage
    (<a href="http://download.openoffice.org/index.html">http://download.openoffice.org/index.html</a>)
    or alternatively via a check-out from the cvs tree against a release tag, 
    e.g. <em>OpenOffice_1_1_4</em>. </li>
   <LinuxSolarisWin_tcsh> 
   <li> Run the <CODE>configure</CODE> script to check all requirements and to 
     create the script</LinuxSolarisWin_tcsh> 
   <Linux><CODE>LinuxIntelEnv.Set</CODE>.</Linux><Solaris><CODE>SolarisSparcEnv.Set</CODE>.</Solaris><Win_tcsh><CODE>winenv.set</CODE>.</Win_tcsh> 
   <Windows> 
   <li> Run the <CODE>configure</CODE> script in a cygwin bash shell to 
    check all requirements and to create the script <CODE>winenv.bat</CODE>. 
  </li>
  </Windows> 
  <li> Run the 
    <Linux><CODE>LinuxIntelEnv.Set</CODE></Linux><Solaris><CODE>SolarisSparcEnv.Set</CODE></Solaris><Win_tcsh><CODE>winenv.set</CODE></Win_tcsh><Windows><CODE>winenv.bat</CODE> (under 4NT) </Windows> script to set all environment variables.
	<p>Please see the last screen from the configure script for more specific
	information on setting up for your platform.</p>
  </li>
  <LinuxSolarisWin_tcsh> 
  <li> Create the build tools using <CODE>bootstrap</CODE>. </li>
  </LinuxSolarisWin_tcsh> 
  <li> Build typing <CODE>dmake</CODE> in <CODE>$SRC_ROOT</CODE>, or 
    <CODE>build --all</CODE> in the <CODE>instsetoo</CODE> module, or 
    <CODE>build</CODE> followed by <CODE>deliver</CODE> in the individual 
    modules. </li>
</ol>

For detailed build instructions, see the section 
<a href="#BuildingaFullBuildofOpenOffice">Building a Full Build of the Office 
Suite</a> in this document. The installation procedure is described 
<a href="#InstallInstructions">at the end</a> of this document.
<br>


<H2> 
<a NAME="OverviewofBuildinganIndividualProject"></a>Overview of Building 
an Individual Project
</H2>
<p>
You can use a prebuilt version to build an individual project. Having a 
prebuilt version is necessary because the individual project you want to 
build could depend on other projects. A project builds a particular component 
of OpenOffice.org. For example, the Word Processing project builds the Word 
Processing application. To build an individual project, you must follow these 
steps: 
<ol>
  <li> Download the appropriate solver tarballs from the download webpage
    (<a href="http://download.open office.org/index.html">http://download.openoffice.org/index.html</a>)
    e.g., for 643B the solver tarball 
    <Linux><CODE>solver643B_linux_intel.tar.gz.</CODE></Linux> 
    <Solaris><CODE>solver643B_solaris_sparc.tar.gz.</CODE></Solaris> 
    <Windows><CODE>solver643B_win32intel.tar.gz.</CODE></Windows> 
    <Win_tcsh><CODE>solver643B_win32intel.tar.gz.</CODE></Win_tcsh>
	<p>643 is a very old release.  Please use the <a href="../builds/">latest</a>
	   version.</p>
  </li>

  <li> Check out the modules for the project that you want to build from the 
    OpenOffice.org cvs tree. If your project uses the resources module, 
    <CODE>res</CODE>, check 
    out this module also. You can, of course, also download the entire source 
    from the download webpage 
    (<a href="http://download.openoffice.org/index.html">http://download.openoffice.org/index.html</a>). 
    However, it is not possible to download individual modules there. </li>
  <li> Check out the module <CODE>config_office</CODE>. This is always necessary
    to create the build environment. </li>
  <li> Also check out the modules <CODE>dmake, external, sal, solenv, soltools,
     vos, tools, rsc and xml2cmp</CODE>.
  <LinuxSolarisWin_tcsh>
     These are required by <CODE>bootstrap</CODE> (see below).
  </LinuxSolarisWin_tcsh>
  </li>
  <li> Unpack the solver tarball in the <CODE>$SRC_ROOT</CODE> directory. </li>
  <LinuxSolarisWin_tcsh> 
  <li> Run the <CODE>configure</CODE> script to check all requirements and to 
    create the settings file
  </LinuxSolarisWin_tcsh>
  <Linux><CODE>LinuxIntelEnv.Set</CODE>.</Linux>
  <Solaris><CODE>SolarisSparcEnv.Set</CODE>.</Solaris> 
  <Win_tcsh><CODE>winenv.set</CODE>.</Win_tcsh> 
  <Windows> 
  <li> Run the <CODE>configure</CODE> script in a cygwin bash shell to 
    check all requirements and to create the script <CODE>winenv.bat</CODE>.
  <p>Note that all paths should NOT contain spaces.  This will confuse dmake later.</p>
  </li>
  </Windows> 
  <li> Run
    <Linux>in tcsh <CODE>source LinuxIntelEnv.Set</CODE> or in bash
           <CODE>source LinuxIntelEnv.Set.sh</CODE></Linux>
    <Solaris>in tcsh <CODE>source SolarisSparcEnv.Set</CODE> or in bash
             <CODE>source SolarisSparcEnv.Set.sh</CODE></Solaris> 
    <Win_tcsh>in tcsh <CODE>source winenv.set</CODE> and <CODE>rehash</CODE>
    afterwards or in bash
              <CODE>source winenv.set.sh</CODE></Win_tcsh> 
    <Windows><CODE>winenv.bat</CODE></Windows> 
    to set all environment variables and build dmake.exe. 
  </li>
  <LinuxSolarisWin_tcsh> 
  <li> Create the build tools using <CODE>./bootstrap</CODE>. </li>
  </LinuxSolarisWin_tcsh> 
  <li> Build each module against the prebuilt <CODE>solver</CODE> using the <CODE>build</CODE> 
    tool, followed by <CODE>deliver</CODE>. </li>
</ol>

For detailed build instructions, see 
<a href="#BuildingIndividualProjects">Building Individual Projects with a 
Prebuilt</a>. 

<br><br><br>


<h2>
<a NAME="BuildRequirements"></a>Build Requirements
</h2>

<p>
Before you start building, you must ensure that your system satisfies the
recommended software and hardware requirements for the type of system you
are working on. For <Linux>Linux, </Linux> <Solaris>Solaris, </Solaris> 
<Win_tcsh>Windows, </Win_tcsh> <Windows>Windows, </Windows> these are as follows:</p>

<Linux>
<b>Software Requirements</b>

<ul>
  <li>
    <CODE>glibc</CODE> 2.1.<i>x</i> or higher
  </li>

  <li>
    <CODE>gcc:</CODE> OpenOffice.org has been successfully build under Linux 
    using the gcc versions 3.0.x, 3.1.1, 3.2.x, and 3.3.x.
	Older versions were built with gcc 2.95.2, 2.95 support is not maintained
	for current branches however.
	Version 2.96 does not work!
  </li>

  <li>
    The X11 development libraries and header files should be installed. 
    Should be in place with most Linux distributions.
	<p>Note the there are currently some issues with X version 4.3.</p>
  </li>

  <li>
  PAM (should come with most Linux distributions).  You must install the
  development package for your distribution.
  </li>

  <li>
    <a href="http://java.sun.com/products/jdk/1.3">JDK 1.3.1</a> or
    <a href="http://java.sun.com/j2se/1.4.1/download.html">JDK 1.4.1</a>
	(note you need the SDK, not just the JRE).
	<br>JDK 1.4.2 is not supported for versions prior to OpenOffice.org 1.1.1,
    see <a  href="http://www.openoffice.org/issues/show_bug.cgi?id=16626">
    issue 16626</a>.</br>
  </li>

  <li>
    If you are building with JDK 1.3.1, you need to download crimson.jar
    from <a href="http://xml.apache.org/crimson/">http://xml.apache.org/crimson/</a>
    and xalan.jar and xml-apis.jar from <a href="http://xml.apache.org/xalan-j/index.html">http://xml.apache.org/xalan-j/index.html</a> and add these to the compilation classpath
  </li>

  <li>
    Perl 5
  </li>

  <li>
	<CODE>csh</CODE>&nbsp;&nbsp; Note that you can start a build in bash however all the
	scripts in the build system are actually csh scripts.
  </li>

  <li>
    <CODE>zip</CODE> and <CODE>unzip</CODE>
  </li>

  <li>
    The gpc general polygon clipper library release 2.31, located at
    <a href="http://www.cs.man.ac.uk/aig/staff/alan/software/">http://www.cs.man.ac.uk/aig/staff/alan/software/</a>.
    Download and unpack the tarball. You should have 
    the files gpc.c and gpc.h in <CODE>$SRC_ROOT/external/gpc</CODE>.
  </li>

  <li>GTK - If you enable the crash reporter in configure then you need the
      gtk 2, jpeg and tiff development libraries.

  <li><a href="http://ant.apache.org/">Ant</a> Is required to build some
  features.  This is a Java Make utility.</li>

</ul>

</Linux>

<Solaris>
<p><b>Software Requirements</b></p>

<ul>
  <li>
    Solaris 2.8 or 2.9
  </li>

  <li>
    Solaris compiler Forte C++ 6 update 1, Forte C++ 6 update 2 or Forte C++ 7
  </li>
  <li>
    <a href="http://java.sun.com/products/jdk/1.3">JDK 1.3.1</a> or
    <a href="http://java.sun.com/j2se/1.4.1/download.html">JDK 1.4.1</a>
        (note you need the SDK)
	<br>JDK 1.4.2 is not supported for versions prior to OpenOffice.org 1.1.1,
    see <a  href="http://www.openoffice.org/issues/show_bug.cgi?id=16626">
    issue 16626</a>.</br>
  </li>

  <li>
    If you are building with JDK 1.3.1, you need to download crimson.jar
    from <a href="http://xml.apache.org/crimson/">http://xml.apache.org/crimson/</a>
    and xalan.jar and xml-apis.jar from <a href="http://xml.apache.org/xalan-j/index.html">http://xml.apache.org/xalan-j/index.html</a> and add these to the compilation classpath.
  </li>

  <li>
    Perl 5
  </li>

  <li>
	<CODE>tcsh</CODE>&nbsp;&nbsp; Note that you can start a build in bash however all the
	scripts in the build system are actually csh scripts.
  </li>

  <li>
    <CODE>zip</CODE> and <CODE>unzip</CODE>
  </li>

  <li>GNU patch and cp, GNU tar recommended</li>
  <li>
    The gpc general polygon clipper library release 2.31, located at
    <a href="http://www.cs.man.ac.uk/aig/staff/alan/software/">http://www.cs.man.ac.uk/aig/staff/alan/software/</a>.
    Download and unpack the tarball. You should have
    the files gpc.c and gpc.h in <CODE>$SRC_ROOT/external/gpc</CODE>.
  </li>
  <li><a href="http://ant.apache.org/">Ant</a> Is required to build some
  features.  This is a Java Make utility.</li>


</ul>
</Solaris>

<WindowsWin_tcsh>
<p><b>Build Requirements</b></p>

<ul>
  <p><li>
    <b>General</b>
    <ul>
      <li>Don't build on FAT or network drives, see
        <a href="http://tools.openoffice.org/issues/show_bug.cgi?id=26761">iz26761</a>
        and <a href="http://tools.openoffice.org/issues/show_bug.cgi?id=18561">iz18561</a>
        for details.
      </li>
      <li>Don't build with an user account name that contains spaces, see
        <a href="http://tools.openoffice.org/issues/show_bug.cgi?id=24075">iz24075</a>
        for details.
      </li>
    </ul>
  </li></p>
  <p><li>
    <b>Windows NT Version 4</b> Service Pack 3 or higher, <b>Windows 2000</b> SP 2 or higher
    or <b>Windows XP</b>.
  </li></p>
  <p><li>
    A Microsoft Visual C++ Compiler. <b>MS Visual C++ .net 2002</b> is recommended,
    but <b>MS Visual C++ Version 6 Service Pack 5 or 6</b> can also be used. Please note that
    it is deprecated and no longer usable for the forthcoming 2.0 (680er codeline)
    version of Openoffice.org and see also
    <a href="http://tools.openoffice.org/issues/show_bug.cgi?id=21646">iz21646</a> for
    a known problem with this compiler.<br>
    Below you find a list with additional requirements that have to be fulfilled for
    the different compilers.

    <p>Extra requirements for <b>MS Visual C++ .net 2002</b>:
    <ul>
      <li>Install the ConvertDSW (wdevenv) utility.
        Get it from
        <a href="http://tools.openoffice.org/source/browse/tools/contrib/addin/bin/">
        http://tools.openoffice.org/source/browse/tools/contrib/addin/bin/</a>
        and follow the instructions of the Readme.sxw in that directory.
      </li>
      <li>A Microsoft Assembly compiler.
         It is included in .NET 2002, it can be found in the same directory as the
         compiler (<CODE>cl.exe</CODE>). Look for <CODE>ML.EXE</CODE>.
         If you use the <CODE>--with-cl-home=</CODE> configure option you also
         have to use the <CODE>--with-asm-home=</CODE> option pointing to the
         directory with the <CODE>ML.EXE</CODE>.
      </li>
      <li>
        Copy msvcp70.dll and msvcr70.dll to <CODE>$SRC_ROOT\external\msvcp70\</CODE>.
        These dlls are part of the .NET installation and can be found in a directory similar to:
        <CODE>c:\Program Files\Microsoft Visual Studio .NET\Visual C++ .NET Professional - English\</CODE>.
      </li>
    </ul>
    </p>
    <p>Extra requirements for <b>MS Visual C++ 6 SP5 or SP6</b>:
    <ul>
      <li>
        A Microsoft Assembly compiler. It can be found in the
        <a href="http://download.microsoft.com/download/win98SE/Install/Gold/W98/EN-US/98DDK.EXE">Windows 98 Driver Developer Kit</a>.
        Additional instructions can be found at:  
        <a href="http://www2.dgsys.com/~raymoon/faq/masm.html#9">http://www2.dgsys.com/~raymoon/faq/masm.html#9</a>. 
        <br />Place <CODE>ML.EXE</CODE> and <CODE>ML.ERR</CODE> somewhere in a directory in the system path or
        use the configure option <CODE>--with-asm-home=</CODE> pointing to this location.
        <br /><b>Warning! Do not</b> use the <em>Processor Pack for Visual Studio 6.0</em>, it is proven
        to <a href="http://tools.openoffice.org/servlets/ReadMsg?msgId=864369&listName=dev">break</a> the build.
      </li>
      <li>
        Use <CODE>midl.exe</CODE> and <CODE>midlc.exe</CODE> from the platform SDK. It has been
        reported in <a href="http://tools.openoffice.org/issues/show_bug.cgi?id=21023">iz21023</a>
        that the versions that come with MS Visual C++ 6 do not work properly.
      </li>
    </ul>
    </p>
  </li></p>
  <p><li>
    Parts of the February 2003 version of the Microsoft Platform SDK. The MDAC SDK,
    the Core SDK and the Internet Development SDK have to be installed on your build system.
    You can download them from <a href="http://www.microsoft.com/msdownload/platformsdk/sdkupdate/">
      http://www.microsoft.com/msdownload/platformsdk/sdkupdate</a>.
    <p>
    <b>Important Note 1:</b> Please ensure that you also select <em>Build environment (Intel 64-bit)</em>
    where available, when downloading the Platform SDK.
    </p>
  </li></p>
</WindowsWin_tcsh>

<Windows>
  <li>
    4NT Version 4.0 or higher. You can download this from 
    <a href="ftp://jpsoft.com/4nt/">ftp://jpsoft.com/4nt/</a>.
    <p>
    <b>Important Note 2:</b> Please ensure that the path to the 4NT application
    directory doesn't contain one or more spaces. No, not even
    <CODE>c:\Program Files\4NT\</CODE>. In this case uninstall and re-install
    to a directory without spaces.
    </p>
    <p>
    <b>Important Note 3:</b> Before you use 4NT, you must ensure that the initialisation
    file <CODE>4nt.ini</CODE> is present in the 4NT application directory (This means you
    propably have to create it.). The following code sample shows the content of the
    <CODE>4nt.ini</CODE> file:
    </p>
<pre>
[4NT]
CommandSep = ^
EscapeChar = Ctrl-X
ParameterChar = &amp;
LocalAliases = Yes
</pre>
    <p>
    <b>Important Note 4:</b> If you use 4NT 5.x and want to build OpenOffice.org 1.1
    (<CODE>OOo_1.1.0_source.tar.bz2</CODE> or <CODE>OOo_1.1.0_source.tar.gz</CODE>) please ensure that
    you replace the file: <CODE>python\convert.bat</CODE> with
    <a href="http://tools.openoffice.org/unbranded-source/browse/~checkout~/external/python/convert.bat?rev=1.1.18.1&content-type=text/plain">this</a>
    version. This is not necessary for newer source versions.
    </p>
  </li>
</Windows>

<WindowsWin_tcsh>
  <li>
    A Java 2 SDK. <a href="http://java.sun.com/j2se/1.4">JDK 1.4</a>
    or newer is required.
    <p><b>Important Note 5:</b> JDK 1.4.1 is proven to work, but JDK 1.4.2
    is not supported for versions prior to OpenOffice.org 1.1.1,
    see <a  href="http://www.openoffice.org/issues/show_bug.cgi?id=16626">
    issue 16626</a>.</p>
  </li>
</WindowsWin_tcsh>

<WindowsWin_tcsh>
  <li> 
    Cygwin Toolkit from 
    <a href="http://www.cygwin.com">http://www.cygwin.com</a>. Use at least Cygwin DLL version 1.5.10.
    The official informations on using the setup.exe and installing Cygwin are available at:
    <a href="http://cygwin.com/cygwin-ug-net/setup-net.html">http://cygwin.com/cygwin-ug-net/setup-net.html</a>. 
    More help and information on the Cygwin tools can be found at 
    <a href="http://website.openoffice.org/support/en/howtos/1.html">http://website.openoffice.org/support/en/howtos/1.html</a>.
   <p>
    When installing Cygwin make sure you set the "Default Text File Type" to
    "Unix". This is the default setting.
   <p>
    Not all Cygwin packages are needed to build OpenOffice.org, but make sure
    that at least all the packages from the <b>base category</b> and the following
    packages are installed.
    <div style="margin-left: 2em">
     bison<br>
     flex<br>
     make<br>
     patch<br>
     perl
    </div>
</WindowsWin_tcsh>
<Win_tcsh>
    <br>And also:
    <div style="margin-left: 2em">
     gcc<br>
     rxvt<br>
     tcsh<br>
     unzip<br>
     zip
    </div>
</Win_tcsh>
<WindowsWin_tcsh>
  </li>
  <p>
  <b>Important Note 6:</b>
    Within the Cygwin Toolkit, three executables might be realised as 
    symlinks, namely awk.exe, gunzip.exe and tar.exe. This might lead to 
    a break of the build later, and the symlinks should be replaced with 
    copies of the command 
    they link to. Check, in a cygwin shell, with <em>ls -l /bin/awk.exe</em> 
    whether awk.exe is a symlink. For instance, awk.exe could be a link to 
    gawk.exe, in which case you should copy gawk.exe to awk.exe: 
   <em>cd /bin; cp gawk.exe awk.exe</em>. Take similar action for unzip.exe 
   and tar.exe.</p>
  <p><b>Important Note 7:</b>
    If your cygwin installation includes the XFree86 packages make sure to
    remove/change the <CODE>/etc/profile.d/00XFree86-bin.csh</CODE> file. See
    <a href="http://tools.openoffice.org/issues/show_bug.cgi?id=26833">iz26833</a>.</p>
  <p><b>Important Note 8:</b>
    Don't use Cygwin 1.5.7, there were some problems with this
    version. Upgrade to a newer release.</p>
</WindowsWin_tcsh>

<Windows>
  <li> <CODE>zip.exe</CODE> Version 2.2 or higher, and <CODE>unzip.exe</CODE>. 
    If you do not have these already, you can download them from 
    <a href="http://www.info-zip.org">www.info-zip.org</a>. 
    Note: The cygwin zip.exe is not working for the build under the 4NT shell. 
    You have to use the native w32 version. 
    Make sure that the first zip.exe in your path is the native w32
    version, e.g. rename or delete the zip.exe in your cygwin /bin directory and
    copy the InfoZip version to this place.
  </li>
</Windows>

<WindowsWin_tcsh>
  <li>
    The gpc general polygon clipper library release 2.31, located at
    <a href="http://www.cs.man.ac.uk/aig/staff/alan/software/">http://www.cs.man.ac.uk/aig/staff/alan/software/</a>.
    Download and unpack the tarball. You should have
    the files gpc.c and gpc.h in <CODE>$SRC_ROOT/external/gpc</CODE>.
  </li>
  <li>
    The Microsoft Layer for Unicode (unicows.dll). Get it from the Microsoft
    site and put it into <CODE>$SRC_ROOT/external/unicows</CODE>.
    (Note: Microsoft seems to enjoy changing the exact location of this file.
    You may have to search Microsoft's website.) Last time it was seen
    <a href="http://download.microsoft.com/download/b/7/5/b75eace3-00e2-4aa0-9a6f-0b6882c71642/unicows.exe">here</a>.
  </li>
  <li>
    The dbghelp.dll from Microsoft. Get it from the Microsoft
    site and put it into <CODE>$SRC_ROOT/external/dbghelp</CODE>.
    (Note: You may have to search Microsoft's website.) Last time it was seen
    <a href="http://www.microsoft.com/downloads/release.asp?releaseid=30682">here</a>.
  </li>
  <li><a href="http://ant.apache.org/">Ant</a> Is required to build some
  features.  This is a Java make utility.</li>


</ul>
</WindowsWin_tcsh>

<h3>Perl - Optional requirements</h3>
<p>For committers who want to use the CWS tooling. Install them like
<a href="http://ooo.ximian.com/cpan.html">this</a>.</p>

<table>
  <tr>
    <td><b>Module:</b></td>
    <td><b>Used for:</b></td>
  </tr>
  <tr>
    <td>Crypt::SSLeay </td>
	<td>for SSL encrypted SOAP connections</td>
  </tr>
  <tr>
     <td>SOAP::Lite</td>
	 <td>access the SOAP based CWS webservice</td>
  </tr>
</table>
<br>
<Linux>
<b>Hardware Requirements</b>

<ul>

  <li>
    Intel Pentium II (P4 recommended)
  </li>

  <li>
    256 MB RAM (Much more recommended)
  </li>

  <li>
	4 Gb free disk space,  add approximately 2 Gb to build with --with-lang=ALL
	option.  Approximately 8 Gb with full crash report enabled,
	--enable-crashdump.
  </li>

</ul>
</Linux>

<Solaris>
<b>Hardware Requirements</b>

<ul>

  <li>
    For Solaris/x86: Intel Pentium II PC (P4 recommended)
    <br>
    For Solaris/Sparc: Ultrasparc 3 / 3i
  </li>
  <li>512 MB RAM</li>

  <li>
    4 GB free disk space
  </li>

</ul>
</Solaris>

<WindowsWin_tcsh>
<b>Hardware Requirements</b>

<ul>

  <li>
    Intel Pentium II PC
  </li>

  <li>
    128 MB RAM (More recommended)
  </li>

  <li>
    4 GB free disk space (8 GB for crashdump)
  </li>

</ul>
</WindowsWin_tcsh> 
<br><br>


<h2>
<a NAME="ExternalComponents"></a>External Components
</h2>

<p>
The code contains some further external components which are already provided. 
If you are interested in details about these, look at the External Components 
webpage at 
<a href="http://tools.openoffice.org/ext_comp.html">http://tools.openoffice.org/ext_comp.html</a>.</p>

<br><br><br>



<H2>
<a NAME="GetTheSourceCode"></a>Get the source code
</H2>

<p>
You have two options to get the source code:

<ul>

<li>
Download the source code tarball 
(<a href="http://download.openoffice.org/index.html">http://download.openoffice.org/index.html</a>),
e.g. <CODE>oo_643B_src.tar.gz</CODE> in case of the 643B release.
<p>
Unpack the tarballs as follows (for the 643B example):</p>
<pre>
<KBD>&gt; tar -xvzf oo_643B_src.tar.gz</KBD>
<KBD>&gt; cd oo_643B_src</KBD> 
</pre>
<p>This will be $SRC_ROOT from now on.</p>
</li>

<li>
Another possibility is to check out the code from the cvs tree. 
If you don't have a username and password, you can still do a checkout as <CODE>anoncvs</CODE>: 
<pre>
<KBD>&gt; cvs -d:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs login</KBD>
<p>Just press enter when prompted for the password.</p>
<KBD>&gt; cd $SRC_ROOT</KBD>
<KBD>$SRC_ROOT&gt; cvs</KBD> /
<KBD>    -d:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs</KBD> /
<KBD>    co -r OpenOffice_1_1_4 OpenOffice</KBD>
</pre>
The non-bold slash means that the command should be in one line. It is 
possible to update an already existing older copy to a newer release: 
<pre>
<KBD>$SRC_ROOT&gt; cvs</KBD> /
<KBD>    -d:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs</KBD> /
<KBD>    update -r OpenOffice_1_1_4 OpenOffice</KBD>
</pre>
</li>

<li> 
If you're only interested in building individual modules, you won't need 
the entire source code. You can check out individual modules from the cvs 
tree: 
<pre>
<KBD>$SRC_ROOT&gt; cvs</KBD> /
<KBD>    -d:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs</KBD> /
<KBD>    co -r OpenOffice_1_1_4 (module-name)</KBD>
</pre>
</li>

<li>
<p>
A note on the tags (i.e. the argument to the -r option in the cvs commands listed above): 
If <em>HEAD</em> is used as a tag, you will get the newest latest source code. This, 
however, will most likely not build since development is going on there. 
See <a href="http://tools.openoffice.org#CWS">http://tools.openoffice.org#CWS</a>
for a description of the development process with child workspaces and
<a href="http://eis.services.openoffice.org/EIS2/servlet/GuestLogon">
<strong>E</strong>nvironment <strong>I</strong>nformation <strong>S</strong>ystem</a>
for the current child workspaces and milestones.
</p>
</li>

</ul>

<br><br><br>



<H2>
<a NAME="GeneratingtheBuildEnvironmentandBuildTools"></a>Generating the Build 
Environment and Build Tools
</H2>

<LinuxSolarisWin_tcsh>
<p>
You use the <CODE>configure</CODE> script to generate the build environment.
The <CODE>configure</CODE> script checks that all software, hardware, and 
system requirements for the build are satisfied, and it creates a 
configuration file called </LinuxSolarisWin_tcsh><Linux>
<CODE>LinuxIntelEnv.Set</CODE></Linux><Solaris>
<CODE>SolarisSparcEnv.Set</CODE></Solaris><Win_tcsh>
<CODE>winenv.set</CODE></Win_tcsh><LinuxSolarisWin_tcsh>
that you then run the <CODE>source</CODE> command on to set all necessary 
build environment variables. Don't forget to run rehash afterwards.
</LinuxSolarisWin_tcsh>
<Windows>
<p>
Ideally, in keeping with the principles of open source, you would use an open 
source shell to build on a computer running a Win32 operating system.  
However, you 
decided to use a non-open source shell to build on a computer running a Win32 
operating system: the 4NT command shell. </p>
<p>
On the other hand, the <CODE>bash</CODE> shell from the cygwin tools is needed to run 
the <CODE>configure</CODE> script which generates the build environment.  The 
<CODE>configure</CODE> script checks that all software, hardware, and system 
requirements for the build are satisfied, and it creates a configuration file 
called <CODE>winenv.bat</CODE> that you then execute to set all necessary 
build environment variables. We demonstrate a sample run below. 
</Windows>

<p> 
This configuration file will be moved into the <CODE>SRC_ROOT</CODE> directory. 
A top-level makefile script <CODE>makefile.mk</CODE> <LinuxSolarisWin_tcsh> and the 
script <CODE>bootstrap</CODE> in the <CODE>config-office</CODE> directory </LinuxSolarisWin_tcsh> 
will be moved into <CODE>SRC_ROOT</CODE> as well. This is due to technical reasons: 
The <CODE>SRC_ROOT</CODE> directory in the cvs tree can only hold directories. 
On the other hand, the top-level <CODE>makefile.mk</CODE> should logically be 
placed in the top-level directory <CODE>SRC_ROOT</CODE>. The cvs tree holds 
these files in <CODE>config_office</CODE> and <CODE>configure</CODE> copies 
them up. 
<LinuxSolaris> 

<p>
If you are running a compiler with a non-standard name or location.
<Linux>
Perhaps you would like to use ccache to reduce your compile time.
</Linux>
Before running configure, make sure that the environment variables 
CC and CXX point to your c and c++ compiler:
</p>

</LinuxSolaris>
<Linux>
<pre>
<KBD>CC=/your/path/to/gcc</KBD>
<KBD>CXX=/your/path/to/g++</KBD>
<KBD>export CC CXX</KBD>
</pre>
</Linux>
<Solaris>
<pre>
<KBD>CC=/your/path/to/cc</KBD>
<KBD>CXX=/your/path/to/CC</KBD>
<KBD>export CC CXX</KBD>
</pre>
</Solaris><LinuxSolaris>


<p>To run the <CODE>configure</CODE> script, type the following command:</p>

<pre>
<KBD>$SRC_ROOT&gt; cd config_office</KBD>
<KBD>config_office&gt; ./configure</KBD>
</pre></LinuxSolaris>

<Win_tcsh>
<p>
Before running configure, make sure that all needed Programs are in the system path
or start configure with the appropriate command line switches.
<p>
The following should demonstrate in detail what steps have to be done to 
set up the environment. For this examples we assume that
  <ul>
    <li>
      the source code is in <CODE>C:\oo643B</CODE>
    </li>
    <li>
      JDK 1.4.1_02 is installed in <CODE>C:\j2sdk1.4.1_02</CODE>
    </li>
    <li>
      the Microsoft Compiler is located in 
      <CODE>C:\PROGRA~1\MICROS~3\VC98</CODE>
      (or <CODE>C:\program files\microsoft visual studio\vc98</CODE>)
    </li>
    <li>
      the Microsoft SDK is located in <CODE>C:\PROGRA~1\MICROS~5</CODE> 
    </li>
    <li>
      and the assembly compiler resides in <CODE>C:\ml</CODE>
    </li>
  </ul>

<H3>tcsh - Example</H3>
<b>You have to enable the use of tcsh
with <CODE>--with-use-shell=tcsh</CODE></b>.

<p>
To run the <CODE>configure</CODE> script, type the following command:

<pre>
<KBD>$SRC_ROOT&gt; cd config_office</KBD>
<KBD>config_office&gt; ./configure --with-cl-home="/cygdrive/c/Programme/Microsoft Visual Studio .NET 2003/Vc7"</KBD>
<KBD>--with-asm-home=/cygdrive/c/ml --with-jdk-home=/cygdrive/c/j2sdk1.4.1_02</KBD>
<KBD>--with-use-shell=tcsh</KBD>
</pre>
</Win_tcsh>

<LinuxSolarisWin_tcsh><p>
There are a number of options that you can use with the
<CODE>configure</CODE>
script. To display these options, type the following command:
</p>

<pre>
<KBD>config_office&gt; ./configure --help</KBD>
</pre>
</LinuxSolarisWin_tcsh>

<Windows>
<p>
The following should demonstrate in detail what steps have to be done to 
set up the environment:</p> 
<b>As 4nt is not the only possible shell, you should enable the use of 4NT
with <CODE>--with-use-shell=4nt</CODE></b>
<ul>
  <li>
  <p>
  Run the configure script according to the following example. We 
  assume here that</p> 

  <ul>

    <li>
      the source code is in <CODE>C:\oo643B</CODE>
    </li>
    <li>
      JDK 1.4.1_02 is installed in <CODE>C:\j2sdk1.4.1_02</CODE>
    </li>
    <li>
      the Microsoft Compiler is located in 
      <CODE>C:\PROGRA~1\MICROS~3\VC98</CODE>
      (or <CODE>C:\program files\microsoft visual studio\vc98</CODE>)
    </li>
    <li>
      the Microsoft SDK is located in <CODE>C:\PROGRA~1\MICROS~5</CODE> 
    </li>
    <li>
      the assembly compiler resides in <CODE>C:\ml</CODE>
    </li>
    <li>
      and your zip.exe and unzip.exe are in <CODE>C:\unzip</CODE>
    </li>

  </ul>

  <p>
  Running the configure script could then look like the following (bold typed 
  text is what you enter):

  <p>
  <CODE>
  (open a cygwin bash shell)
  <br>
  <b>cd /cygdrive/c/oo643B/config_office</b>
  <br>
  <b>./configure --with-cl-home=/cygdrive/c/PROGRA~1/MICROS~3/VC98 --with-asm-home=/cygdrive/c/ml --with-jdk-home=/cygdrive/c/j2sdk1.4.1_02 --with-unzip-home=/cygdrive/c/unzip</b>
  <br>
  .
  <br>
  .
  <br>
  .
  <br>
  (some screen output here)
  <br>
  .
  <br>
  .
  <br>
  .
  <br>
  (more screen output here)
  <br>
  bash-2.02$ <b>exit</b>
  <br>
  </CODE>
  </p> 
</li>

</ul>

You should exit the bash shell. Now you can run the environment
settings file <CODE>winenv.bat</CODE> from your 4NT shell.

<p>
Note the change in pathname notation. Since the cygwin bash 
shell won't accept backslashes, paths have to be typed in a 
cygwin bash notation which is <CODE>/cygdrive/c/path/to/file</CODE>, 
instead of <CODE>C:\path\to\file</CODE>. This may appear 
confusing at the moment, but sticking to this notation will 
work.

<p>
There are a number of further options that you can use with the 
<CODE>configure</CODE> script. To display these options, type 
the following command:

<pre>
<KBD>config_office&gt; bash configure --help</KBD>
</pre>
</Windows>


<LinuxSolarisWin_tcsh>
<p> 
After running <CODE>configure</CODE>, you have to source the configuration 
file which sets all environment variables: 
</p>
<pre>
<KBD>$SRC_ROOT&gt; tcsh</KBD>
</LinuxSolarisWin_tcsh>
<Linux><KBD>$SRC_ROOT&gt; source LinuxIntelEnv.Set</KBD></Linux>
<Solaris><KBD>$SRC_ROOT&gt; source SolarisSparcEnv.Set</KBD></Solaris>
<Win_tcsh><KBD>$SRC_ROOT&gt; source winenv.set</KBD></Win_tcsh><LinuxSolarisWin_tcsh>
</pre>
<p>Don't forget to run
</p>
<pre>
<KBD>$SRC_ROOT&gt; rehash</KBD>
</pre>
<p>afterwards. See the last screen from configure for exact details for your platform.</p>
</LinuxSolarisWin_tcsh>
<Windows>

<p>
After running <CODE>configure</CODE> you have to execute the 
configuration file which sets all environment variables. The generated
file is called <CODE>winenv.bat</CODE>.
</Windows>

<p> 
If you experiment with newest sources from the cvs-tree, mind that updates 
to the configure process may not happen via updates of <CODE>configure</CODE>
(the script file) but via the files <CODE>configure.in</CODE> and 
<CODE>set_soenv.in</CODE>. The configure script itself is created from 
<CODE>configure.in</CODE> using the 
<CODE>autoreconf</CODE> command. The perl script set_soenv is created when you
run configure from set_soenv.in.

<p>If you need to modify or create a correct configure you would run commands 
like the following: <LinuxSolarisWin_tcsh> 
<pre>
<KBD>$SRC_ROOT&gt; cd config_office</KBD>
<KBD>config_office&gt; cvs update configure.in</KBD>
<KBD>config_office&gt; autoreconf</KBD>
</pre>
</LinuxSolarisWin_tcsh>
<Windows>
<pre>
<KBD>$SRC_ROOT&gt; cd config_office</KBD>
<KBD>config_office&gt; cvs update configure.in</KBD>
get a bash shell
<KBD>config_office&gt;bash autoconf</KBD>
exit the bash shell
</pre>

<p>
</Windows>
To update the <CODE>configure</CODE> script. If you only use code from the 
snapshot releases on the web, you don't need to be concerned about this.

<LinuxSolarisWin_tcsh>
<p>
To create the build tools, type the following command:

<pre>
<KBD>$SRC_ROOT&gt; ./bootstrap</KBD>
</pre>

<p>
The <CODE>bootstrap</CODE> utility creates the tools required for building.
This involves already building some modules and will take a few minutes.
</LinuxSolarisWin_tcsh>

<br><br><br>


<H2>
<a NAME="BuildInstructions"></a>Build Instructions
</H2>


<H2>
<a NAME="BuildingaFullBuildofOpenOffice"></a>Building 
a Full Build of the Office Suite
</H2>

Now you are ready to build OpenOffice.org. To build the entire suite, all you 
have to do (after having created the environment as described above) is to run 
dmake from the top-level directory. This may take several hours. 

<pre>
<KBD>$SRC_ROOT&gt; dmake</KBD>
</pre>

<Linux>
<p>To clean up a previous build you can delete all output directories with</p>
<pre>
   rm -rf */unxlngi4.pro
</pre>
</Linux>


<p>
If you decide to rebuild a module or build each module individually (mind 
dependencies!), you will have to use the <CODE>build</CODE> tool. A subsequent 
<CODE>deliver</CODE> will copy all created binaries, libraries etc. into the 
solver tree:

<pre>
<KBD>$SRC_ROOT/(module)&gt; build</KBD>
<KBD>$SRC_ROOT/(module)&gt; deliver</KBD>
</pre>

<p>
The following table shows the time required to build on a system with a 
particular specification. You can use these details to estimate the time
required to build on your system.</p>

<Linux>
<table BORDER="1" CELLSPACING=0 CELLPADDING=5>
  <tr VALIGN=TOP>
    <td>Architecture</td>
    <td>Intel</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Processor</td>
    <td>Pentium III</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Processor speed</td>
    <td>600 MHz</td>
  </tr>
  <tr VALIGN=TOP>
    <td>RAM</td>
    <td>256 MB</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Hard disk</td>
    <td>4 GB IDE</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Time (for 1.x series)</td>
    <td>~12 h</td>
  </tr>
</table>
<p>Note that using ccache can reduce your compile times and dramatically
reduce recompile times.</p>
</Linux>
<Solaris>
<table BORDER="1" CELLSPACING=0 CELLPADDING=5>
  <tr VALIGN=TOP>
    <td>Architecture</td>
    <td>SPARC</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Model</td>
    <td>Ultra 30</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Processor speed</td>
    <td>300 MHz</td>
  </tr>
  <tr VALIGN=TOP>
    <td>RAM</td>
    <td>512 MB</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Hard disk</td>
    <td>10000 RPM model</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Time (for SRC680_m74)</td>
    <td>~39 h</td>
  </tr>
</table>
</Solaris>
<WindowsWin_tcsh>
<table BORDER="1" CELLSPACING=0 CELLPADDING=5>
  <tr VALIGN=TOP>
    <td>Architecture</td>
    <td>Intel</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Processor</td>
    <td>Pentium III</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Processor speed</td>
    <td>600 MHz</td>
  </tr>
  <tr VALIGN=TOP>
    <td>RAM</td>
    <td>256 MB</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Hard Disk</td>
    <td>6 GB SCSI</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Time</td>
    <td>~10 h</td>
  </tr>
</table>
</WindowsWin_tcsh> 


<H2>
<a NAME="BuildingIndividualProjects"></a>Building 
Individual Projects with a Prebuilt
</H2>

<p>
OpenOffice.org is organised in several projects. For example, 
the Word Processing Project. These in turn consist of several 
modules, organised in separate directories. The source contains 
approximately 90 modules. 

<p> 
You can build any project or module individually. Building modules 
individually should not be misunderstood as reducing OpenOffice.org to a 
special application, say, for instance, the spreadsheet application. The 
program will always consist of the entire office suite: text processor, 
spreadsheet, drawing application, etc. Building individual 
modules comes in handy if you want to develop on a certain module. 
Most modules will depend on other modules to be already built. 
In other words, all modules must build in a particular order. To avoid 
building all modules which are prerequisites of the module of your 
interest, you can make use of a prebuilt <CODE>solver</CODE> tree against 
which you can build any module. 

<p>
For more information on modules and on the sequence that they build in, and 
on the dependencies, see 
<a href="http://tools.openoffice.org/modules.html">tools.openoffice.org/modules.html</a>.

<p> 
You have to download the <CODE>solver</CODE> tree as a tarball. For example 
<Linux><CODE>solver643B_linux_intel.tar.gz</CODE></Linux> 
<Solaris><CODE>solver643B_solaris_sparc.tar.gz</CODE></Solaris> 
<Win_tcsh><CODE>solver643B_win32int.tar.gz</CODE></Win_tcsh> 
<Windows><CODE>solver643B_win32int.tar.gz</CODE></Windows> 
from the Download page at 
<a href="http://download.openoffice.org/index.html">http://download.openoffice.org/index.html</a>,
use a current release 643 is very old and only used as an example,
and unpack it in the <CODE>$SRC_ROOT</CODE> directory, e.g.: 
<pre>
<Linux>
<KBD>$SRC_ROOT&gt; tar -xzvf solver643B_linux_intel.tar.gz</KBD>
</Linux>
<Solaris>
<KBD>$SRC_ROOT&gt; gunzip solver643B_solaris_sparc.tar.gz</KBD>
<KBD>$SRC_ROOT&gt; tar -xvf solver643B_solaris_sparc.tar</KBD>
</Solaris>
<WindowsWin_tcsh>
<KBD>$SRC_ROOT&gt; tar -xvzf solver643B_win32int.tar.gz</KBD>
</WindowsWin_tcsh>
</pre>

<LinuxSolarisWin_tcsh>
In order to create the build environment and build tools (bootstrap), you 
also have to check out the modules <CODE>config_office, dmake, external, 
xml2cmp, mkdepend, sal, solenv, vos, tools and rscpp</CODE>.
</LinuxSolarisWin_tcsh>
<Windows>
In order to create the build environment and build tools, you also have to 
check out the <CODE>config_office</CODE> module and <CODE>solenv</CODE>.
</Windows>

<p>
To build a project, you build each of its modules individually in their 
directory with the <CODE>build</CODE> tool, followed by <CODE>deliver</CODE> 
to copy the created libraries, binaries etc. into the solver tree: 
<pre>
<KBD>$SRC_ROOT/(module-name)&gt; build</KBD>
<KBD>$SRC_ROOT/(module-name)&gt; deliver</KBD>
</pre>

Files called <CODE>build.lst</CODE> in the directories 
<CODE>(module-name)/prj</CODE> contain all information about the 
subdirectories to be build (each of them containing makefiles 
<CODE>makefile.mk</CODE>), about internal dependencies, and also about 
modules the current module depends on. The files 
<CODE>(module-name)/prj/d.lst</CODE> control the actions done by 
<CODE>deliver</CODE>. The last or second to last directory to be build is 
usually <VAR>module-name</VAR><CODE>/util</CODE> which is responsible for 
linking one or more shared libraries.

<br><br><br>


<H2>
<a NAME="BuildingaProjectwithDebugInformation"></a>Building 
a Project with Debug Information
</H2>

<p>
To rebuild a complete project with debug information, remove all object
files by removing the 
<Linux><CODE>unxlngi4.pro</CODE></Linux>
<Solaris><CODE>unxsols3.pro</CODE></Solaris>
<WindowsWin_tcsh><CODE>wntmsci9.pro</CODE></WindowsWin_tcsh> 
directory. Then run <CODE>build</CODE> with the debug option set to true:

<pre>
<KBD>$SRC_ROOT/(module)&gt; rm -rf <Linux>unxlngi4.pro</Linux><Solaris>unxsols3.pro</Solaris><Windows>wntmsci9.pro</Windows></KBD>
<KBD>$SRC_ROOT/(module)&gt; build debug=true</KBD>
</pre>

<br><br><br>

<h2>
<a NAME="InstallInstructions"></a>Instructions to Build 
an Installation Set
</h2>

<p>
The build process (started with a top-level <CODE>dmake</CODE> or 
<CODE>build --all</CODE> in <CODE>$SRC_ROOT/instsetoo</CODE>) will create 
installation sets in English and German. 
A simple <CODE>build</CODE> in 
<CODE>$SRC_ROOT/instsetoo</CODE> will also create the installation sets, 
provided all other modules are already built. 

<p>
If you have built an installation set earlier and want to re-build it, 
please delete the local outpath first: 
<pre>
<KBD>$SRC_ROOT/instsetoo&gt; rm -rf <Linux>unxlngi4.pro</Linux><Solaris>unxsols3.pro</Solaris><WindowsWin_tcsh>wntmsci9.pro</WindowsWin_tcsh></KBD>
</pre>

<p>
The English installation set will be located at 
<CODE>$SRC_ROOT/instsetoo/<Linux>unxlngi4.pro</Linux><Solaris>unxsols3.pro</Solaris><WindowsWin_tcsh>wntmsci9.pro</WindowsWin_tcsh>/01/normal</CODE>. 
Execute the <CODE>setup</CODE> binary to install:
<pre>
<KBD>$SRC_ROOT&gt; cd instsetoo/<Linux>unxlngi4.pro</Linux><Solaris>unxsols3.pro</Solaris><WindowsWin_tcsh>wntmsci9.pro</WindowsWin_tcsh>/01/normal</KBD>
<KBD><LinuxSolaris>normal&gt; ./setup</LinuxSolaris><WindowsWin_tcsh>normal&gt; setup.exe</WindowsWin_tcsh></KBD>
</pre>

The 01 in the path names indicates that the localisation is American English. This number 
corresponds to the international phone code for the USA. The German installation set 
will be located in a subdirectory 49. This scheme holds true for all localisations you may 
have chosen explicitly (see next section 
<a href="#BuildingLocalised">Building Localised Versions of OpenOffice.org</a>). 

<p>
For a network installation, use the <CODE>-net</CODE> option to 
<CODE>setup</CODE>. Details on the network installation process 
can be found at 
<a href="http://installation.openoffice.org/proposals/netinstall.html">
http://installation.openoffice.org/proposals/netinstall.html</a> 
in the installation project webpage.
</p>
<p>For information on creating an automated
<a href="http://installation.openoffice.org/01RESPONSE_SO52_final_rev2.pdf">
installation script</a> and create a response file.</p>

<br><br><br>


<H2>
<a NAME="BuildingLocalised"></a>Building Localised Versions of OpenOffice.org
</H2>

<p>
Running the configure script with the --with-lang option will introduce the build
of additional language resources. This option will introduce a command in the 
environment settings file which in turn after execution sets a variable like, for instance, 
<CODE>RES_FREN</CODE> to <CODE>TRUE</CODE> in the case of french (You can also set 
this variable by hand in order to introduce another language). It is also possible to 
build more than one language at once.
One language resource, however, will not be
introduced that way: the help content! Clicking on 'help' would still open English
help documents.
</p>

<p>
There is no automatic procedure yet to implement non-English help, but the additional
manual effort is rather minimal: After building the source as described above, but before 
building the installation set, a zip-file with all help-content for the language of choice has 
to be unzipped into the directory 

<pre>
<Linux><CODE>$SRC_ROOT/solver/641/unxlngi4.pro/pck</CODE>.</Linux><Solaris><CODE>$SRC_ROOT/solver/641/unxsols3.pro/pck</CODE>.</Solaris><WindowsWin_tcsh><CODE>$SRC_ROOT/solver/641/wntmsci9.pro/pck</CODE>.</WindowsWin_tcsh>
</pre>

<p>
The filenames of these files contain a number code for the language, corresponding to 
the international phone code of a country in which that language is mainly spoken. 
For instance, the file <CODE>
<LinuxSolaris>helpcontent_34_unix.tgz</LinuxSolaris><WindowsWin_tcsh>helpcontent_34_wnt.zip</WindowsWin_tcsh>
</CODE> contains all help content for the Spanish localisation. 
The zipfiles themselves are available at 
<a href="http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/helpcontent/">ftp.services.openoffice.org/pub/OpenOffice.org/contrib/helpcontent/</a>.
</p>

<p>
Having unzipped the helpcontent files in there, building of installation sets can be 
resumed or repeated (in case you already have build some), as described in the previous 
chapter. English installation sets will be located in</p> 

<pre>
<CODE>$SRC_ROOT/instsetoo/<Linux>unxlngi4.pro</Linux><Solaris>unxsols3.pro</Solaris><WindowsWin_tcsh>wntmsci9.pro</WindowsWin_tcsh>/01/normal</CODE>, 
</pre>

where 01 corresponds to the international phone code of the USA. 
If you have chosen, for instance, French (by configuring with the <CODE>--with-lang=FREN</CODE> option) 
you will find an additional directory called 33:  

<pre>
<CODE>$SRC_ROOT/instsetoo/<Linux>unxlngi4.pro</Linux><Solaris>unxsols3.pro</Solaris><WindowsWin_tcsh>wntmsci9.pro</WindowsWin_tcsh>/33/normal</CODE>.
</pre>

<p>Similarly, you will find 49 for German, 34 for Spanish, etc.</p>

<p>
Localised help content is not yet available for all languages. In such cases, the English 
helpcontent will appear in the installations. For instance, when Danish is set with 
configure, you will find installation sets under the directory 45, but the help files will 
appear in English. 
</p>

<br><br><br>


</body>
</html>
</html>

