<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 under Linux
</h2>
<p><b>Beware! The build instructions for OpenOffice.org 2.x are different!</b>
</p>

<p>
This document describes the requirements and actions that you need to build 
OpenOffice.org on Linux.
</p>

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


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




<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>
    
   <li> Run the <CODE>configure</CODE> script to check all requirements and to 
     create the script 
   <CODE>LinuxIntelEnv.Set</CODE>. 
    
  <li> Run the 
    <CODE>LinuxIntelEnv.Set</CODE> 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>
   
  <li> Create the build tools using <CODE>bootstrap</CODE>. </li>
   
  <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 
    <CODE>solver643B_linux_intel.tar.gz.</CODE> 
     
     
    
	<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>.
  
     These are required by <CODE>bootstrap</CODE> (see below).
  
  </li>
  <li> Unpack the solver tarball in the <CODE>$SRC_ROOT</CODE> directory. </li>
   
  <li> Run the <CODE>configure</CODE> script to check all requirements and to 
    create the settings file
  
  <CODE>LinuxIntelEnv.Set</CODE>.
   
   
   
  <li> Run
    in tcsh <CODE>source LinuxIntelEnv.Set</CODE> or in bash
           <CODE>source LinuxIntelEnv.Set.sh</CODE>
     
     
     
    to set all environment variables and build dmake.exe. 
  </li>
   
  <li> Create the build tools using <CODE>./bootstrap</CODE>. </li>
   
  <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,   
  these are as follows:</p>


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



















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

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




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


<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 
<CODE>LinuxIntelEnv.Set</CODE>
that you then run the <CODE>source</CODE> command on to set all necessary 
build environment variables. Don't forget to run rehash afterwards.



<p> 
This configuration file will be moved into the <CODE>SRC_ROOT</CODE> directory. 
A top-level makefile script <CODE>makefile.mk</CODE>  and the 
script <CODE>bootstrap</CODE> in the <CODE>config-office</CODE> directory  
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. 
 

<p>
If you are running a compiler with a non-standard name or location.

Perhaps you would like to use ccache to reduce your compile time.

Before running configure, make sure that the environment variables 
CC and CXX point to your c and c++ compiler:
</p>



<pre>
<KBD>CC=/your/path/to/gcc</KBD>
<KBD>CXX=/your/path/to/g++</KBD>
<KBD>export CC CXX</KBD>
</pre>




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



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






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

<KBD>$SRC_ROOT&gt; source LinuxIntelEnv.Set</KBD>


</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>



<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:  
<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>


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.


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


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


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



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


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


 


<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 
<CODE>solver643B_linux_intel.tar.gz</CODE> 
 
 
 
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>

<KBD>$SRC_ROOT&gt; tar -xzvf solver643B_linux_intel.tar.gz</KBD>



</pre>


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



<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 
<CODE>unxlngi4.pro</CODE>

 
directory. Then run <CODE>build</CODE> with the debug option set to true:

<pre>
<KBD>$SRC_ROOT/(module)&gt; rm -rf unxlngi4.pro</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 unxlngi4.pro</KBD>
</pre>

<p>
The English installation set will be located at 
<CODE>$SRC_ROOT/instsetoo/unxlngi4.pro/01/normal</CODE>. 
Execute the <CODE>setup</CODE> binary to install:
<pre>
<KBD>$SRC_ROOT&gt; cd instsetoo/unxlngi4.pro/01/normal</KBD>
<KBD>normal&gt; ./setup</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>
<CODE>$SRC_ROOT/solver/641/unxlngi4.pro/pck</CODE>.
</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>
helpcontent_34_unix.tgz
</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/unxlngi4.pro/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/unxlngi4.pro/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>

