<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.x.y under Windows with tcsh
</h2>


<p>
The Cygwin tcsh environment is new, and can be used starting with
cws_srx644_ooo20030412.</p>

<p>
<b>Attention!</b> Don't use <CODE>cygwin.bat</CODE> or a windows command
prompt to start a cygwin shell, see
<a href="http://tools.openoffice.org/issues/show_bug.cgi?id=27319">iz27319</a>.
<br />
Always start the shell (bash) with
<br /><CODE>C:\cygwin\bin\rxvt.exe -e /usr/bin/bash --login -i</CODE>
<br />from Start-&gt;Run: or from a shortcut on the desktop.

</p>
<p>
This document describes the requirements and actions that you need to build 
OpenOffice.org on Windows using Cygwin shell.
</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>cws_srx644_ooo11beta</em>. </li>
    
   <li> Run the <CODE>configure</CODE> script to check all requirements and to 
     create the script 
   <CODE>winenv.set</CODE>. 
    
  <li> Run the 
    <CODE>winenv.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_win32intel.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, xml2cmp, mkdepend, sal, 
    solenv, vos, tools and rscpp</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>winenv.set</CODE>. 
   
  <li> Run
    
     
    in tcsh <CODE>source winenv.set</CODE> or in bash
              <CODE>source winenv.set.sh</CODE> 
     
    to set all environment variables. 
  </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   
Windows,   these are as follows:</p>






<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.
    See <a href="http://tools.openoffice.org/source/browse/tools/www/dev_docs/net2003_review.sxw">
    http://tools.openoffice.org/source/browse/tools/www/dev_docs/net2003_review.sxw</a> for the status
    of MS Visual C++ .net 2003.

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





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



  <li> 
    Cygwin Toolkit from 
    <a href="http://www.cygwin.com">http://www.cygwin.com</a>.
    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>


    <br>And also:
    <div style="margin-left: 2em">
     gcc<br>
     rxvt<br>
     tcsh<br>
     unzip<br>
     zip
    </div>


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





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


<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>
 
<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 example 643B):</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.  &nbsp; NB:  643 is a very old release
use a <a href="../builds/">current one</a>.</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 OpenOffice643 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 OpenOffice643 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 OpenOffice643 (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. In general, 
the code is given a weekly tag like <em>SRC641</em> (with weekly increasing numbers), 
and from there a branch tag <em>OO641B</em> (standing for <em>OpenOffice.org 641 Branch</em>) 
is created. Release engineering builds on this branch, adds eventual fixes, and 
tags the result as <em>OpenOffice641B</em>. The source tarballs are also created from 
this, i.e. the code resulting from checking out against <em>OpenOffice641B</em> is 
identical to the one in the 641 source tarball. After release, some further bug fixes 
will enter the branch. From then on, the code at <em>OO641B</em> and <em>OpenOffice641B</em> 
will differ. Finally, changes made on the branch (i.e. the difference between <em>OO641B</em> 
and <em>SRC641</em>) will be merged back to the main trunk.
</p>
<p>
Some releases are respins of a previous release. Those are marked 'C' instead of 'B' (for instance 
<em>OO641C</em> and <em>OO643C</em>. Note that 'B' stands for 'branch' and not for any 
counting index, even though it is treated like that in case of a respin. Therefore, there is 
no such tag as <em>OO641A</em>.
</p>
<p>This process is currently under change so the above may be outdated when you read it.</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>winenv.set</CODE>
that you then run the <CODE>source</CODE> command on to set all necessary 
build environment variables.



<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>
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>To distinguish the use of the tcsh shell from the 4NT shell, you have to enable it
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/PROGRA~1/MICROS~3/VC98</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>


<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 winenv.set</KBD>
</pre>
<p>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>
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>6 GB SCSI</td>
  </tr>
  <tr VALIGN=TOP>
    <td>Time</td>
    <td>~10 h</td>
  </tr>
</table>
 


<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_win32int.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 -xvzf solver643B_win32int.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>wntmsci7.pro</CODE> 
directory. Then run <CODE>build</CODE> with the debug option set to true:

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

<p>
The English installation set will be located at 
<CODE>$SRC_ROOT/instsetoo/wntmsci7.pro/01/normal</CODE>. 
Execute the <CODE>setup</CODE> binary to install:
<pre>
<KBD>$SRC_ROOT&gt; cd instsetoo/wntmsci7.pro/01/normal</KBD>
<KBD>normal&gt; setup.exe</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/wntmsci7.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_wnt.zip
</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/wntmsci7.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/wntmsci7.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>

