<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Divec</id>
	<title>Apache OpenOffice Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Divec"/>
	<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/wiki/Special:Contributions/Divec"/>
	<updated>2026-10-18T09:46:17Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Framework/Article/Generic_UNO_Interfaces_for_complex_toolbar_controls&amp;diff=111181</id>
		<title>Framework/Article/Generic UNO Interfaces for complex toolbar controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Framework/Article/Generic_UNO_Interfaces_for_complex_toolbar_controls&amp;diff=111181"/>
		<updated>2009-02-10T02:41:29Z</updated>

		<summary type="html">&lt;p&gt;Divec: Change DropdownBox -&amp;gt; Dropdownbox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Technical specification =&lt;br /&gt;
&lt;br /&gt;
= Generic and easy to use complex tool bar controls for add-ons =&lt;br /&gt;
&lt;br /&gt;
== State before OpenOffice.org 2.0.3 ==&lt;br /&gt;
&lt;br /&gt;
The current user interface framework implemented for OpenOffice 2.0 gives developers the ability to integrate more complex controls (other than simple buttons) into their add-on toolbar. Although it&amp;#039;s possible implementing these kind of controls for an add-on it&amp;#039;s not an easy task. The developer has to implement a toolbar controller ([http://api.openoffice.org/docs/common/ref/com/sun/star/frame/ToolbarController.html com.sun.star.frame.ToolbarController]) and register it in the Controller.xcu file. The controller must provide an awt control to the framework which puts it into the toolbar. To have full control over the created control a developer has to implement and use several interfaces (e.g. [http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XToolbarController.html com.sun.star.frame.XToolbarController]). This complexity doesn&amp;#039;t attract developers who just want to use complex controls without the need to have full control.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
The Addon.xcu file provides a way to describe the user interface for an add-on. It will be enhanced to enable users to provide the control type of every toolbar item. The following table shows all properties which are supported for toolbar items in Addons configuration file. The bold properties mark the new properties.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
! width=&amp;quot;22%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Property&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Type&lt;br /&gt;
! width=&amp;quot;59%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Description&lt;br /&gt;
 |- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;22%&amp;quot; |&lt;br /&gt;
URL&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
String&lt;br /&gt;
| width=&amp;quot;59%&amp;quot; |&lt;br /&gt;
The command which is bound to the toolbar item.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;22%&amp;quot; |&lt;br /&gt;
Title&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
String/localized&lt;br /&gt;
| width=&amp;quot;59%&amp;quot; |&lt;br /&gt;
A localized text which is used as a label and/or quick help text.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;22%&amp;quot; |&lt;br /&gt;
ImageIdentifier&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
String&lt;br /&gt;
| width=&amp;quot;59%&amp;quot; |&lt;br /&gt;
An optional identifier to an image. Normally not used as the set &amp;quot;UserImages&amp;quot; associates images to commands.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;22%&amp;quot; |&lt;br /&gt;
Target&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
String&lt;br /&gt;
| width=&amp;quot;59%&amp;quot; |&lt;br /&gt;
Defines how to find a dispatcher for the command.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;22%&amp;quot; |&lt;br /&gt;
Context&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
String&lt;br /&gt;
| width=&amp;quot;59%&amp;quot; |&lt;br /&gt;
Determines for which contexts the control should be visible.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;22%&amp;quot; |&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ControlType&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
String&lt;br /&gt;
| width=&amp;quot;59%&amp;quot; |&lt;br /&gt;
Defines the type of control.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;22%&amp;quot; |&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Width&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
Long&lt;br /&gt;
| width=&amp;quot;59%&amp;quot; |&lt;br /&gt;
Defines the width of the control. Only controls with a dynamic width support this property (e.g. Combo box, edit field, spin field)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The following control types should be supported.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
! width=&amp;quot;26%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Control&lt;br /&gt;
! width=&amp;quot;74%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Description&lt;br /&gt;
 |- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;26%&amp;quot; |&lt;br /&gt;
ImageButton&lt;br /&gt;
| width=&amp;quot;74%&amp;quot; |&lt;br /&gt;
A normal toggle button, but the size of the button depends on the image. At least the width, the height must follow some rules to prevent non-useful toolbars.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;26%&amp;quot; |&lt;br /&gt;
Combobox&lt;br /&gt;
| width=&amp;quot;74%&amp;quot; |&lt;br /&gt;
A normal combo box with edit field inside.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;26%&amp;quot; |&lt;br /&gt;
Dropdownbox&lt;br /&gt;
| width=&amp;quot;74%&amp;quot; |&lt;br /&gt;
A normal drop down box (only read only edit field).&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;26%&amp;quot; |&lt;br /&gt;
Spinfield&lt;br /&gt;
| width=&amp;quot;74%&amp;quot; |&lt;br /&gt;
A edit field with two buttons to increase/decrease numerical values.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;26%&amp;quot; |&lt;br /&gt;
Editfield&lt;br /&gt;
| width=&amp;quot;74%&amp;quot; |&lt;br /&gt;
A normal edit field.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;26%&amp;quot; |&lt;br /&gt;
Button&lt;br /&gt;
| width=&amp;quot;74%&amp;quot; |&lt;br /&gt;
A simple button without any need for status updates. This can useful if the button is always enabled and loading the add-on code on startup is costly.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;26%&amp;quot; |&lt;br /&gt;
ToggleButton&lt;br /&gt;
| width=&amp;quot;74%&amp;quot; |&lt;br /&gt;
A simple button which can be controlled by status updates.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;26%&amp;quot; |&lt;br /&gt;
DropdownButton&lt;br /&gt;
| width=&amp;quot;74%&amp;quot; |&lt;br /&gt;
A drop-down only button. Newly introduced by OpenOffice.org 2.0.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;26%&amp;quot; |&lt;br /&gt;
ToggleDropdownButton&lt;br /&gt;
| width=&amp;quot;74%&amp;quot; |&lt;br /&gt;
A toggle button with a drop-down button. Newly introduced by OpenOffice.org 2.0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The user interface framework generates the controls when the add-on toolbar is created via the toolbar controller factory. Every add-on which wants to support a toolbar must be a dispatch provider. Therefore one communication protocol for the new controls will be the normal duo com.sun.star.frame.XDispatch / com.sun.star.frame.XStatusListener. The new controls are listener at the dispatch object they get after calling queryDispatch. The new controls will listen for special updates where a new struct called &amp;quot;ControlCommand&amp;quot; is provided. The ControlCommand struct offers developers a way to send commands to the control. It uses a string as command descriptor and a sequence of com.sun.star.beans.NamedValues for the arguments. This solution can be extended in the future and makes the implementation on the control side much easier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;idl&amp;quot;&amp;gt;&lt;br /&gt;
module com { module sun { module star { module frame {&lt;br /&gt;
&lt;br /&gt;
struct ControlCommand&lt;br /&gt;
{&lt;br /&gt;
  //-------------------------------------------------------------------------&lt;br /&gt;
  /** specifies the command which should be processed by the toolbar &lt;br /&gt;
      control.&lt;br /&gt;
  */&lt;br /&gt;
  string Command;&lt;br /&gt;
&lt;br /&gt;
  //-------------------------------------------------------------------------&lt;br /&gt;
  /** specifies a sequence of named values which are used as argument&lt;br /&gt;
      for the command. The number and type of arguments depend on the&lt;br /&gt;
      command and control.&lt;br /&gt;
  */&lt;br /&gt;
  sequence&amp;lt; com::sun::star::beans::NamedValue &amp;gt; Arguments;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
}; }; }; };&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Control commands ===&lt;br /&gt;
&lt;br /&gt;
Depending on the control type the command calls are interpreted. The following table gives an overview which commands could be supported by the new controls. The table can be extended without any problems regarding incompatibility. Please be aware that this table only shows the current state. New commands can be added in later OpenOffice.org versions.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
! width=&amp;quot;17%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Control&lt;br /&gt;
! width=&amp;quot;17%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Command/Status Update&lt;br /&gt;
! width=&amp;quot;19%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Arguments&lt;br /&gt;
! width=&amp;quot;47%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Description&lt;br /&gt;
 |- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; height=&amp;quot;16&amp;quot; |&lt;br /&gt;
ImageButton&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetImage&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
URL=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Use the provided URL to load a new image&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
Combobox&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetText&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Set a new text into the edit field.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetList&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
List=Sequence&amp;amp;lt;String&amp;amp;gt;&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
A new list for the combo box.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
RemoveEntryPos&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Pos=Long&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Remove entry at position Pos.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
RemoveEntryText&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Remove entry with text = Text.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
InsertEntry&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Pos=Long&amp;lt;br /&amp;gt;Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Insert entry at position Pos with text Text.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
Dropdownbox&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SelectEntry&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Entry=Long&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Select entry number.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetList&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
List=Sequence&amp;amp;lt;String&amp;amp;gt;&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
A new list for the dropdown box.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
RemoveEntryPos&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Pos=Long&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Remove entry at position Pos.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
RemoveEntryText&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Remove entry with text = Text.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
InsertEntry&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Pos=Long&amp;lt;br /&amp;gt;Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Insert entry at position Pos with text Text.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
Spinfield&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetValue&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Value=Long/Double&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
A new value for the edit field.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetValues&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Value=Long/Double&amp;lt;br/&amp;gt;&lt;br /&gt;
Step=Long/Double&amp;lt;br/&amp;gt;&lt;br /&gt;
LowerLimit=Long/Double&amp;lt;br/&amp;gt;&lt;br /&gt;
UpperLimit=Long/Double&amp;lt;br/&amp;gt;&lt;br /&gt;
OutputFormat=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Set all possible values for the spin field at once.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetLowerLimit&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
LowerLimit=Long/Double&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Set lower limit for the spin field.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetUpperLimit&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
UpperLimit=Long/Double&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Set upper limit for the spin field.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetStep&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Step=Long/Double&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Set single step value for the spin field.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetOutputFormat&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
OutputFormat=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Sets an optional output format string.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
Editfield&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetText&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
A new text for the edit field.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
Button&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
---&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Simple button doesn&amp;#039;t support status updates.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
ToggleButton&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
---&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Currently I don&amp;#039;t see a useful command here.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
DropdownButton&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetList&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
List=Sequence&amp;amp;lt;String&amp;amp;gt;&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
A new list for the drop down box which get displayed when the user activates the drop down button.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
AddEntry&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Adds an entry at the end of the list.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
InsertEntry&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Pos=Long&amp;lt;br/&amp;gt;Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Inserts a new entry with text Text to the list at position Pos&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
RemoveEntryPos&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Pos=Long&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Removes an entry from the listbox at position Pos&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
RemoveEntryText&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Remove entry at position Pos.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
ToggleDropdownButton&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
SetList&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
List=Sequence&amp;amp;lt;String&amp;amp;gt;&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
A new list for the listbox which get displayed when the user activates the dropdown button.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
CheckItemPos&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Pos=Long&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Checks the item at position Pos&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
AddEntry&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Adds a new entry at the end of the list.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
InsertEntry&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Pos=Long&amp;lt;br/&amp;gt;Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Inserts a new entry with text Text to the list at position Pos&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
RemoveEntryPos&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Pos=Long&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Removes an entry from the listbox at position Pos&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;17%&amp;quot; |&lt;br /&gt;
RemoveEntryText&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Remove entry at position Pos.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following code snippet shows how a command to set a new list for a &amp;quot;ToggleDropdownButton&amp;quot; can look like in C++.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
// The command &amp;quot;SetList&amp;quot; currently supports only one parameter&lt;br /&gt;
Sequence&amp;lt; NamedValue &amp;gt; aArgs( 1 );&lt;br /&gt;
&lt;br /&gt;
// create a sequence of strings for the dropdown menu&lt;br /&gt;
Sequence&amp;lt; rtl::OUString &amp;gt; aContextMenu( 3 );&lt;br /&gt;
aContextMenu[0] = rtl::OUString::createFromAscii( &amp;quot;Command 1&amp;quot; );&lt;br /&gt;
aContextMenu[1] = rtl::OUString::createFromAscii( &amp;quot;Command 2&amp;quot; );&lt;br /&gt;
aContextMenu[2] = rtl::OUString::createFromAscii( &amp;quot;Command 3&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
// argument is called &amp;quot;List&amp;quot;&lt;br /&gt;
aArgs[0].Name = rtl::OUString::createFromAscii( &amp;quot;List&amp;quot; );&lt;br /&gt;
aArgs[0].Value &amp;lt;&amp;lt;= aContextMenu;&lt;br /&gt;
&lt;br /&gt;
FeatureStateEvent aEvent;&lt;br /&gt;
&lt;br /&gt;
aEvent.FeatureURL = aURL;&lt;br /&gt;
aEvent.Source = (::com::sun::star::frame::XDispatch*)this&lt;br /&gt;
aEvent.IsEnabled = bEnabled;&lt;br /&gt;
aEvent.Requery = sal_False;&lt;br /&gt;
&lt;br /&gt;
// initialize control command&lt;br /&gt;
com::sun::star::frame::ControlCommand aCtrlCmd;&lt;br /&gt;
aCtrlCmd.Command = rtl::OUString::createFromAscii( &amp;quot;SetList&amp;quot; );&lt;br /&gt;
aCtrlCmd.Arguments = rArgs;&lt;br /&gt;
&lt;br /&gt;
aEvent.State &amp;lt;&amp;lt;= aCtrlCmd;&lt;br /&gt;
&lt;br /&gt;
// send command via statusChanged to the control&lt;br /&gt;
xControl-&amp;gt;statusChanged( aEvent );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To enable add-on developers to get notifications from the new controls a new interface must be added. It will be called &amp;#039;com.sun.star.frame.XControlNotificationListener&amp;#039; and should be implemented by the dispatch object provided by &amp;#039;XDispatchProvider::queryDispatch&amp;#039;. The new controls will send notifications for important events. The notification is not send when a user executes a function with the control itself (e.g. clicking on a button to execute a function will not be notified. &amp;#039;XDispatch::dispatch(...)&amp;#039; is called instead).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;idl&amp;quot;&amp;gt;&lt;br /&gt;
module com { module sun { module star { module frame { &lt;br /&gt;
&lt;br /&gt;
interface XControlNotificationListener&lt;br /&gt;
{ &lt;br /&gt;
  //-------------------------------------------------------------------------&lt;br /&gt;
  /** notifies that a control event has happened&lt;br /&gt;
      @param Event&lt;br /&gt;
        contains the event information&lt;br /&gt;
  */&lt;br /&gt;
  void controlEvent( [in] ControlEvent Event ); &lt;br /&gt;
}; &lt;br /&gt;
&lt;br /&gt;
}; }; }; };&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The function controlEvent uses another struct called ControlEvent. The following code snippet shows the details of the structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;idl&amp;quot;&amp;gt;&lt;br /&gt;
module com { module sun { module star { module frame&lt;br /&gt;
&lt;br /&gt;
struct ControlEvent&lt;br /&gt;
{&lt;br /&gt;
  //-------------------------------------------------------------------------&lt;br /&gt;
  /** fully parsed URL describing the control that sends this&lt;br /&gt;
      notification.&lt;br /&gt;
  */&lt;br /&gt;
  ::com::sun::star::util::URL&lt;br /&gt;
&lt;br /&gt;
  // -------------------------------------------------------------------------&lt;br /&gt;
  /** specifies the event which has occurred. &lt;br /&gt;
  */&lt;br /&gt;
  string EventName;&lt;br /&gt;
&lt;br /&gt;
  // -------------------------------------------------------------------------&lt;br /&gt;
  /** specifies a sequence of named values which are used as &lt;br /&gt;
      additional values for the event. The number and types of&lt;br /&gt;
      named values depend on the event.&lt;br /&gt;
  */&lt;br /&gt;
  sequence&amp;lt; com::sun::star::beans::NamedValue &amp;gt; Information;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
}; }; }; };&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the event name is defined as a string and additional information provided as a sequence com.sun.star.beans.Named the event system can be extended easily. Depending on the control type the different events are notified. The following table gives an overview which events could be supported by the control types.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Control&lt;br /&gt;
! width=&amp;quot;15%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Command/Status Update&lt;br /&gt;
! width=&amp;quot;19%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Information&lt;br /&gt;
! width=&amp;quot;47%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Description&lt;br /&gt;
 |- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; height=&amp;quot;16&amp;quot; |&lt;br /&gt;
ImageButton&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
ImageChanged&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
URL=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when a new image has been set.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
Combobox&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
TextChanged&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the text of the edit field has been changed.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
ListChanged&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
List=Sequence&amp;amp;lt;String&amp;amp;gt;&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when new list for the combo box has been set.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
FocusSet&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
-&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the edit field has gained the input focus.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
FocusLost&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
-&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the edit field has lost the input focus.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
Dropdownbox&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
ListChanged&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
List=Sequence&amp;amp;lt;String&amp;amp;gt;&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the entry list of the combo box has been changed.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
FocusSet&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
-&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the edit field has gained the input focus.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
FocusLost&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
-&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the edit field has lost the input focus.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
Spinfield&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
TextChanged&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the text of the edit field has been changed.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
LowerLimitChanged&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Lower=Long/Double&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the lower limit for the spin field has been changed.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
UpperLimitChanged&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Upper=Long/Double&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the upper limit for the spin field has been changed.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
StepChanged&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Step=Long/Double&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the step value for the spin field has been changed.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
FocusSet&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
-&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the edit field has gained the input focus.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
FocusLost&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
-&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the edit field has lost the input focus.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
Editfield&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
TextChanged&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Text=String&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the text of the edit field has been changed.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
FocusSet&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
-&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the edit field has gained the input focus.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
FocusLost&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
-&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when the edit field has lost the input focus.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
Button&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
-&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Currently I don&amp;#039;t see a useful event here.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
ToggleButton&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
-&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Currently I don&amp;#039;t see a useful event here.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
DropdownButton&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
ListChanged&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
List=Sequence&amp;amp;lt;String&amp;amp;gt;&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when a new list for the context menu has been set.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
ToggleDropdownButton&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
ListChanged&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
List=Sequence&amp;amp;lt;String&amp;amp;gt;&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when a new list for the context menu has been set.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;20%&amp;quot; |&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
| width=&amp;quot;15%&amp;quot; |&lt;br /&gt;
ItemChecked&lt;br /&gt;
| width=&amp;quot;19%&amp;quot; |&lt;br /&gt;
Pos=Long&lt;br /&gt;
| width=&amp;quot;47%&amp;quot; |&lt;br /&gt;
Called when an entry at position Pos has been checked.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Final conclusion ==&lt;br /&gt;
&lt;br /&gt;
The new controls and their interfaces should help normal developer to use complex controls in add-ons. There is also a second way to use these kind of controls which give developers more control, but need more effort. The proposed solution fits into the current framework environment. It reuses interfaces and concepts which every add-on developer already know and use.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is an example add-on for Windows and Linux x86 available (source code is also available). The add-on needs at least OOo 2.0.3 to work correctly. You need at least the OOo 2.0.3 SDK to build the add-on. This example is part of the OpenOffice.org 2.2 SDK. You can find it in the folder &amp;#039;&amp;#039;examples/cpp/complextoolbarcontrols&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
! width=&amp;quot;38%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Add-on&lt;br /&gt;
! width=&amp;quot;62%&amp;quot; bgcolor=&amp;quot;#e6e6e6&amp;quot; |&lt;br /&gt;
Link&lt;br /&gt;
 |- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;38%&amp;quot; |&lt;br /&gt;
Demo add-on (Windows/Linux x86)&lt;br /&gt;
| width=&amp;quot;62%&amp;quot; |&lt;br /&gt;
http://framework.openoffice.org/files/documents/25/4121/DemoAddOn_cpp.oxt&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| width=&amp;quot;38%&amp;quot; |&lt;br /&gt;
Demo add-on source code (C++)&lt;br /&gt;
| width=&amp;quot;62%&amp;quot; |&lt;br /&gt;
http://framework.openoffice.org/files/documents/25/4122/complextoolbarcontrols.zip&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Appendix ==&lt;br /&gt;
&lt;br /&gt;
Illustration which and how the framework environment objects interact.&lt;br /&gt;
&lt;br /&gt;
[[Image:ComplexToolbarControls.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Framework:Article]]&lt;/div&gt;</summary>
		<author><name>Divec</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_Windows&amp;diff=109401</id>
		<title>Documentation/Building Guide/Building on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_Windows&amp;diff=109401"/>
		<updated>2009-01-27T13:17:20Z</updated>

		<summary type="html">&lt;p&gt;Divec: /* CPAN errors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Building OpenOffice.org on Windows =&lt;br /&gt;
This document tries to fill a gap. The existing documentation about building OOo on Windows mainly reads like “Building OOo on Windows explained for Linux developers”. I will collect and summarize this existing documentation, fix some of its errors and try to add some comments that address people that are already developing on Windows and now want to get to know about building OOo. So this document is also for those who are not used to unix like command line interfaces, tar balls etc. Of course you must be familiar with a command line, but you don&amp;#039;t need to be a shell wizard. But on the other hand it wouldn&amp;#039;t hurt if you are. :-)&lt;br /&gt;
&lt;br /&gt;
I collected information from several places, e.g.:&lt;br /&gt;
&lt;br /&gt;
[http://tools.openoffice.org/dev_docs/build_windows_tcsh.html#BuildRequirements http://tools.openoffice.org/dev_docs/build_windows_tcsh.html#BuildRequirements]&lt;br /&gt;
&lt;br /&gt;
[[Windows|Building on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[CPAN_install | Perl modules installation with CPAN]]&lt;br /&gt;
&lt;br /&gt;
[http://website.openoffice.org/support/en/howtos/1.html#1 http://website.openoffice.org/support/en/howtos/1.html#1]&lt;br /&gt;
&lt;br /&gt;
The first problem with them is that there are many of them (there are even more than the mentioned four!). So you have to collect things by yourself and have to sort out non-Windows parts. Additionally some of the places contain outdated, incomplete or even wrong information. So I hope that my commented summary might come in handy for starters.&lt;br /&gt;
&lt;br /&gt;
If this documentation is not enough for you or if you have a problem that is not addressed you can send a mail to the mailing list [mailto:dev@openoffice.org dev@openoffice.org] ([mailto:dev-subscribe@openoffice.org subscription] is recommended) or you can meet OOo developers on IRC in the channel #dev.openoffice.org at freenode.de. If you just want to give some feedback about the documentation please also use the mailing list.&lt;br /&gt;
&lt;br /&gt;
You might want to know how many time and disk space installing the build environment will cost you. For a rough estimation I give some download, install and build times. They have been measured on an Athlon 64 X2 3800 (2GHz) dual core machine with 1GByte RAM and a 300 GB SATA disk. My internet connection is a 8MBit DSL broadband connection.&lt;br /&gt;
&lt;br /&gt;
I created this document for building OOo using Microsoft Visual Studio 2005 Express, the “free” (as in beer) offering from Microsoft. It also works with Microsoft Visual Studio 2003, the small differences are mentioned in the text. Using Microsoft Visual Studio 2005 (without the “Express”) should work also but until now I have only one known case as a proof for this. But meanwhile things have become even more complicated because on the way to OpenOffice.org 3.0 the compiler was changed again and now the recommended compiler is Visual Studio 2008 (Express). Please see [[http://wiki.services.openoffice.org/wiki/Building_OOo_with_Cygwin_on_Windows#Download_and_install_MS_compiler_and_tools]] for more details.&lt;br /&gt;
&lt;br /&gt;
Building works fine on Windows XP. It should work also on Windows 2000. I have no information about it but I assume that using Windows 98/ME is not a good idea (Visual Studio Express 2005 cannot be installed on Windows 98, so you&amp;#039;d probably need the full version of Visual Studio 2003 - but Windows 98 is unsupported for OpenOffice.org 3.0 anyway [[User:Cloph|Cloph]]). I don&amp;#039;t know anything about building on Vista.&lt;br /&gt;
&lt;br /&gt;
The first thing you need is the build environment. We are using Cygwin, a Windows program that emulates a complete Unix command line environment.&lt;br /&gt;
&lt;br /&gt;
= Download and install Cygwin =&lt;br /&gt;
Go to [http://www.cygwin.com/ http://www.cygwin.com] und download the current version. If you already have Cygwin installed: you will need at least version 1.5.10. If you are using version 1.5.18 you must download a special version of the cygwin1.dll as described [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html#BuildRequirements here]. But in general I would recommend to use a recent version.&lt;br /&gt;
&lt;br /&gt;
Cygwin has a web based installation process that is described [http://website.openoffice.org/support/en/howtos/1.html#1 here]. I used the “Install from Internet” method and it worked like a charm. Make sure that you tell the setup to use the “Unix/binary” file type. Cygwin consists of some basic and a lot of optional packages. As building OOo needs some of these optional packages you have to select them in the installer. Unfortunately the list of packages mentioned at the [http://website.openoffice.org/support/en/howtos/1.html#1 place describing the installation process] is incomplete, some more are listed [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html#BuildRequirements here]. Here&amp;#039;s a complete list of the needed packages:&lt;br /&gt;
&lt;br /&gt;
* Category Archive: unzip, zip&lt;br /&gt;
* Category Devel : autoconf, bison, cvs, flex, gcc-g++, gperf, make, openssl-devel (only needed for perl modules for CWS tooling, see below)&lt;br /&gt;
* Category Libs: openssl&lt;br /&gt;
* Category Net: openssh, ncftp&lt;br /&gt;
* Category Perl: perl (Perl)&lt;br /&gt;
* Category Shells: rxvt, tcsh&lt;br /&gt;
* Category Utils: patch, gnupg&lt;br /&gt;
* Category Web: lynx, wget&lt;br /&gt;
&lt;br /&gt;
The installer will automatically check and download some more packages needed by thosed listed here. The total amount of disk space is 46 MB for the download and 174 MB for the Cygwin installation, including all the additional Perl modules shown below. The whole process took roughly 20 minutes.&lt;br /&gt;
&lt;br /&gt;
Within the Cygwin Toolkit, some executables might be symlinks, in the version I have downloaded (1.5.24-2) it was awk.exe and gunzip.exe, older documentation also mentioned tar.exe. This can lead to a break of the build later, and the symlinks should be replaced by copies of the command they link to. &lt;br /&gt;
&lt;br /&gt;
You can check this in the cygwin shell by calling e.g.&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;ls -l /bin/awk.exe&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
whether e.g. awk.exe is a symlink. In version 1.5.24-2 awk.exe is a link to gawk.exe. The shell will show this by putting out “awk.exe -&amp;gt; gawk.exe”. In this case gawk.exe must be copied to awk.exe by executing: &lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;cd /bin&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;rm awk.exe&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;cp gawk.exe awk.exe&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Take similar action for gunzip.exe that I found to be a link to unzip.exe.&lt;br /&gt;
&lt;br /&gt;
In case you overlook something here or you have a newer Cygwin version with additional symlinks not mentioned here it&amp;#039;s not a problem. You will get a helpful error message about an existing link in the configuration step (configure) later. The message will tell you which link you have to remove and you can do it following the advice given above for the awk.exe/gawk.exe pair.&lt;br /&gt;
&lt;br /&gt;
Cygwin uses the command line shell “bash” by default and I always use this shell for everything I do with Cygwin. Building OOo is also possible using the shell “tcsh”, though some problems have been reported (see below). My recommendation is to use bash.&lt;br /&gt;
&lt;br /&gt;
Though bash is the recommended shell you shouldn&amp;#039;t try to deinstall tcsh. Cygwin doesn&amp;#039;t have a simple mechanism to deinstall something automatically and it&amp;#039;s still possible that one of the tools used for the build is using the tcsh internally because the script calling it doesn&amp;#039;t evaluate the environment variable pointing to the shell to use. So it&amp;#039;s safer to keep tcsh installed even if you use bash.&lt;br /&gt;
&lt;br /&gt;
All commands written in this document are meant to be used in a bash (except explicitly told differently). In case you are not used to Unix command line shells you will need to familiarize yourself with some basic commands, but explaining that in closer detail is beyound the scope of this documentation. If you use the shell only for building the source all shell commands you will need are “cd” for the navigation between directories and “rm” in case you want to remove something. Use the “man” command to get more information (e.g. by calling “man cd”) or the “--help” option of the commands to get a short information about the basic options.&lt;br /&gt;
&lt;br /&gt;
= Download and install MS compiler and tools  =&lt;br /&gt;
Currently building on Windows needs a Microsoft Visual Studio C++ compiler. The “regular” builds for OpenOffice 2.x are done with Visual Studio 2003 that is available from Microsoft at a price. Building using the free (as in “free beer”) compiler Visual Studio 2005 Express works fine and is explained here. For OpenOffice 3.x the recommended as well as the &amp;quot;official&amp;quot; compiler is Visual Studio 2008 or 2008 Express.&lt;br /&gt;
&lt;br /&gt;
== Visual Studio 2005 Express (for OOo 2.x) ==&lt;br /&gt;
&lt;br /&gt;
In case you still can find a copy of the 2005 Express compiler setup and it still works it downloads additional content from the Web. You only need to select the Graphical IDE. More can be downloaded later if you want, but for building and debugging OOo you will not need more than the basic package. The download and installation took me roughly 10 minutes and 220&amp;amp;thinsp;MB on my hard disk. The complete (not Web based) compiler installation set still can be downloaded as an ISO-images (~450&amp;amp;thinsp;MB) from the [http://msdn2.microsoft.com/en-us/express/aa718401.aspx Manual Installation] site.&lt;br /&gt;
&lt;br /&gt;
Next step when you plan to use the “Express” version is installing the [http://www.microsoft.com/downloads/details.aspx?familyid=7A1C9DA0-0510-44A2-B042-7EF370530C64&amp;amp;displaylang=en Microsoft Macro Assembler] (MASM). MASM is part of the paid version of Visual Studio (so you can skip that part if you are using it) but for the “Express” version you have to download it separately. It&amp;#039;s only a very small download. I had a problem with the MASM installer on all machines where I used it: the setup started but then suddenly disappeared from the screen. I found a hanging msiexec.exe in the task manager and had to kill it manually. Fortunately the MASM was obviously installed correctly. It appeared in the “Add and remove software” dialog and the “ml.exe” was installed to “Vc/Bin” folder of VC8.&lt;br /&gt;
&lt;br /&gt;
You also must download and install the Microsoft Windows Platform SDK. The usual instructions recommend to download it from [http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&amp;amp;displaylang=en here] but I followed the recommendations from the [http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/ Visual C++ site]. There you can find a link (download requires Genuine Windows Validation). &amp;#039;&amp;#039;&amp;#039;WARNING&amp;#039;&amp;#039;&amp;#039;: don&amp;#039;t install the new Vista platform SDK that is needed for the 2008 Express compiler (see below), the 2005 Express Compiler is does not work with it.&lt;br /&gt;
&lt;br /&gt;
The setup is again web based. You can either user the “Typical” installation or select “Custom” setup and deselect the packages you don&amp;#039;t need. You need at least the following packages:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Windows Core SDK&lt;br /&gt;
* Microsoft Web Workshop (IE) SDK &lt;br /&gt;
* Microsoft Internet Information Server (IIS) SDK &lt;br /&gt;
* Microsoft Data Access Services (MDAC) SDK&lt;br /&gt;
* Microsoft DirectShow SDK&lt;br /&gt;
* Microsoft Windows Installer SDK&lt;br /&gt;
&lt;br /&gt;
You can deselect all 64Bit parts of these packages, all samples, all source code modules and (if you want) every documentation. In total the installation filled 438 MB of my harddisk space (including the documentation, but without all other optional parts).&lt;br /&gt;
&lt;br /&gt;
Warning: the first installation option is called “Register Environment Variables” and it is deselected by default. You shouldn&amp;#039;t change this as selecting it will add directories with blanks to your PATH variable. This (or more precisely the quotes surrounding them) will cause troubles in Cygwin (see below). It is also possible that other installed Windows programs (not only Cygwin) can&amp;#039;t cope with the changed PATH variable as the installer of the Platform SDK explicitly warns.&lt;br /&gt;
&lt;br /&gt;
The only drawback of not selecting this option is that if you wanted to use the platform SDK for other projects except OOo you would have to take care for the correct environment yourself. The platform SDK creates some start menu entries for shells with a suitable configured environment so that shouldn&amp;#039;t be a problem.&lt;br /&gt;
&lt;br /&gt;
There is a library called “libcp.lib” in the “Lib” directory of the SDK; it must be either moved away or renamed. You can read more about this [http://www.openoffice.org/issues/show_bug.cgi?id=49856 here].&lt;br /&gt;
&lt;br /&gt;
There is another thing you have to change in the Platform SDK: you have to apply a small patch to one of the Platform SDK header files as described [http://tools.openoffice.org/servlets/ReadMsg?listName=dev&amp;amp;msgNo=6024 here].&lt;br /&gt;
&lt;br /&gt;
== Visual Studio 2008 Express (OOo 3.x development) ==&lt;br /&gt;
&lt;br /&gt;
You can download the 2008 Express compiler Web based setup or a DVD ISO from [http://www.microsoft.com/express/download Microsoft]. You don&amp;#039;t need to install any optional parts.&lt;br /&gt;
&lt;br /&gt;
You also must download and install the Microsoft Windows Platform SDK, but now in the [http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&amp;amp;displaylang=en newer version 6.0.6001.18000.367-KRMSDK_EN] that also supports Vista. This is a DVD image. You can either mount it with a suitable tool, burn it do a DVD or use tools like winrar that can extract files from ISO files directly. You don&amp;#039;t need to install any samples or documentation (especially not installing the latter saves a lot of disk space - 193 MB instead of nearly 1GB).&lt;br /&gt;
&lt;br /&gt;
The Platform SDK setup will also install the .NET Framework 3.5 SDK.&lt;br /&gt;
&lt;br /&gt;
It might be best to install the Windows SDK into the default directory, and if not that into one without capital letters in the path. I used D:\Dev\Win_SDK\ and received some linking errors in the Python module (see [http://www.openoffice.org/issues/show_bug.cgi?id=88568+ Issue 88568]).&lt;br /&gt;
&lt;br /&gt;
== DirectX SDK ==&lt;br /&gt;
&lt;br /&gt;
Another SDK that could be downloaded and installed is the Direct X9 SDK. If you don&amp;#039;t want to download it you can disable DirectX support in the configuration step (“--disable-directx”). The current regular builds of OOo are done with a version of the DirectX SDK that is no longer available for download so it&amp;#039;s necessary to search for a download link in the Web. The OOo pages mention several links, outdated as well as working links. I took the one from [http://www.microsoft.com/downloads/details.aspx?FamilyId=D625324C-59B4-4951-849E-640B508DC442&amp;amp;displaylang=en here] (Genuine Windows Validation required). This is a 509 MB download as the setup is not Web based. Downloading, unpacking and installing took 30 minutes. As I deselected the sources and sample the resulting installation only was 189 MB.&lt;br /&gt;
&lt;br /&gt;
Current (as of 2008/01) versions of the DirectX9 SDK and Windows Platform SDK do not fit to each other. To be able to build with DirextX enabled, you need to patch one file in the Platform SDK. See [http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2743771&amp;amp;SiteID=1 MSDN forum] for details].&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WARNING&amp;#039;&amp;#039;&amp;#039;: do not use a DirectX10 SDK.&lt;br /&gt;
&lt;br /&gt;
= Download of additional files =&lt;br /&gt;
You have to download some more files that you have to put into some prepared locations of the OOo source tree later. I mention it here because most of them are related to the MS compiler but perhaps it makes more sense first to download the source so that you can immediately copy the addtitional files to the proper location. Here&amp;#039;s the list of files to download (with links) and the locations in the source tree where you must put them:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| [http://www.microsoft.com/downloads/details.aspx?familyid=6A63AB9C-DF12-4D41-933C-BE590FEAA05A&amp;amp;displaylang=en GDI+ Redistributable] (Genuine Windows Validation required)&lt;br /&gt;
| external/gdiplus&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Only for OOo2.x but due to a [http://www.openoffice.org/issues/show_bug.cgi?id=88652 bug] in configure still needed for 3.x: [http://download.microsoft.com/download/b/7/5/b75eace3-00e2-4aa0-9a6f-0b6882c71642/unicows.exe unicows.dll] &lt;br /&gt;
| external/unicows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=CD1FC4B2-0885-47F4-AF45-7FD5E14DB6C0 dbghelp.dll]&lt;br /&gt;
| external/dbghelp&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://download.microsoft.com/download/WindowsInstaller/Install/2.0/NT45/EN-US/InstMsiW.exe instmsiw.exe] and [http://download.microsoft.com/download/WindowsInstaller/Install/2.0/W9XMe/EN-US/InstMsiA.exe instmsia.exe]&lt;br /&gt;
| external/msi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| for 2005 compiler: msvcp80.dll and msvcr80.dll (found in c:\WINDOWS/WinSxS/x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd/msvc &lt;br /&gt;
| external/msvcp80&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| for 2008 compiler (until DEV300 m22): msvcp90.dll and msvcr90.dll (found in $(msvcdir)\Vc\redist\x86\Microsoft.VC90.CRT) &lt;br /&gt;
| external/msvcp90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| for 2008 compiler starting with DEV300m23: Microsoft_VC90_CRT_x86.msm and policy_9_0_Microsoft_VC90_CRT_x86.msm for non debug builds and Microsoft_VC90_DebugCRT_x86.msm and policy_9_0_Microsoft_VC90_DebugCRT_x86.msm for debug builds. These merge modules are available in VS08 Express Edition and VS08 Professional Edtion. All *.msm files are located at c:\Program Files\Common Files\Merge Module. &lt;br /&gt;
| external/msm90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cs.man.ac.uk/aig/staff/alan/software/ GPC]&lt;br /&gt;
| Unpack to external/gpc&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://tools.openoffice.org/moz_prebuild/680/ Mozilla binary distribution] &lt;br /&gt;
&lt;br /&gt;
(WNTMSCIruntime.zip,WNTMSCIlib.zip,WNTMSCIinc.zip)&lt;br /&gt;
| moz/zipped&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| msvcr71.dll and msvcp71.dll for Mozilla libraries (Search for them in the Web or on your PC. These files should be named as all lower case. Sometimes when downloaded they are upper case and this will cause &amp;#039;file not found&amp;#039; errors towards the end of the build))&lt;br /&gt;
| external/msvcp71 &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some of the files can be found in a suitable OOo installation set also, so you can save the download by “stealing” it from your OOo installation.&lt;br /&gt;
&lt;br /&gt;
OOo uses some Mozilla libraries. Building the corresponding sources is only possible with the VC2003 compiler so you have to use precompiled libraries that require the msvx71 libraries mentioned above. On Windows the Mozilla libraries are needed only for Mozilla address book support. Unfortunaly a bug in the module dependencies makes it necessary that the mozilla libaries are used anyway as otherwise building the module xmlsecurity fails (see [[Building_OOo_with_Cygwin_on_Windows#Setting_up_the_build_environment|below]]).&lt;br /&gt;
&lt;br /&gt;
= Downloading and installing additional Perl modules =&lt;br /&gt;
As explained [[CPAN_install | elsewhere in the wiki]] some perl modules must be installed with CPAN. The necessary command in the cygwin shell is&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;perl -MCPAN -e shell&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If this command is executed the first time CPAN will ask for configuration. The autoconfiguration worked fine for me. I used the prompted installation just to see what is asked but always pressed “Enter” in each step, even in case I got an error message that asked me for confirmation. You can do the same and just ignore any error messages you might see (the same is true for all queries while you are executing the “install” command mentioned below).&lt;br /&gt;
&lt;br /&gt;
Please note that CPAN is not able to deal with usernames containing spaces. To work around this fact, when CPAN asks you to specify the &amp;#039;&amp;#039;CPAN build and cache directory&amp;#039;&amp;#039;, change the default suggestion to &amp;lt;tt&amp;gt;/cpan&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
At the end the CPAN shell appeared and is ready to accept commands for installations. Each module is installed by typing “install $MODULENAME”. The modules that must be installed are:&lt;br /&gt;
&lt;br /&gt;
* Archive::Zip&lt;br /&gt;
* XML::Parser (though it seems that this is already installed; doesn&amp;#039;t hurt to do it)&lt;br /&gt;
* URI&lt;br /&gt;
* LWP::UserAgent&lt;br /&gt;
* SOAP::Lite&lt;br /&gt;
* Crypt::SSLeay&lt;br /&gt;
&lt;br /&gt;
The last three modules are only needed if you want to use the [http://tools.openoffice.org/dev_docs/ooo-cws-tools-doc.sxw CWS tooling]. These tools are necessary if you want to create and maintain your own [http://wiki.services.openoffice.org/wiki/CWS Child Workspaces] or if you want to build one of them. I recommend to install them anyway as sooner or later you want to work on a child workspace.&lt;br /&gt;
&lt;br /&gt;
CPAN will detect if a selected module depends on other modules and it will offer to download them also. As explained please just confirm this.&lt;br /&gt;
&lt;br /&gt;
=== Cygwin errors exhibited when using CPAN ===&lt;br /&gt;
&lt;br /&gt;
* I got an error message from CPAN somewhat like the following:&lt;br /&gt;
&lt;br /&gt;
: C:\cygwin\bin\perl.exe: *** unable to remap C:\cygwin\bin\cygiconv-2.dll to same&lt;br /&gt;
: address as parent(0x7C0000) != 0x7D0000&lt;br /&gt;
&lt;br /&gt;
To fix this, I had to exit the Cygwin shell, run cmd.exe, then type &amp;quot;c:\cygwin\bin\ash.exe&amp;quot; to start the minimal shell, then type &amp;quot;/bin/rebaseall&amp;quot;.  Then CPAN worked when I ran it again.&lt;br /&gt;
&lt;br /&gt;
* I got another error when cygwin was performing &amp;quot;make install&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
: ERROR: Can&amp;#039;t create &amp;#039;/usr/bin&amp;#039;; Do not have write permissions on &amp;#039;/usr/bin&amp;#039;&lt;br /&gt;
&lt;br /&gt;
I can actually write to /usr/bin; however when I do &amp;quot;ls -ld /usr/bin&amp;quot;, cygwin reports no write permission; and &amp;quot;chmod u+w /usr/bin&amp;quot; gives &amp;quot;Permission denied&amp;quot;.  This causes the install process to fail when it checks permissions.  As a kludge, I installed vim, and edited line 368 of /usr/lib/perl5/5.10/ExtUtils/Install.pm, replacing this:&lt;br /&gt;
&lt;br /&gt;
:        return -w $dir;&lt;br /&gt;
&lt;br /&gt;
with this:&lt;br /&gt;
&lt;br /&gt;
:        return 1;&lt;br /&gt;
&lt;br /&gt;
which allowed installation to proceed.&lt;br /&gt;
&lt;br /&gt;
= Downloading and installing Java and other tools =&lt;br /&gt;
Some OOo components as well as some build tools of OOo require Java. So you must download a JDK and the Java make utility [http://ant.apache.org/ Ant]. It&amp;#039;s not necessary to read the whole installation instructions from Ant. After downloading the zip package just unpack the bin and lib folders from it into a directory that you specfiy as ant-home in the configure step later. The path to this directory must not contain blank characters!&lt;br /&gt;
&lt;br /&gt;
All OOo builds can be done with [http://java.sun.com/j2se/1.4.2 JDK 1.4.2]. If your build is based at least on milestone m158 you can also use [http://java.sun.com/j2se/1.5.0  JDK 1.5.0.] Don&amp;#039;t use Java 1.6, at least the hsqldb modules does not build with that version. This is status quo with milestone m218.&lt;br /&gt;
&lt;br /&gt;
If a self contained Windows installer is desired in addition to the MSI installer files [http://nsis.sourceforge.net/ NSIS] 2.0.4 is needed, but it is optional. If NSIS is not present the build will ignore this step. Used to be that newer version of NSIS used to break the build ([http://qa.openoffice.org/issues/show_bug.cgi?id=85657 #85657]), but it seems that in now works for up to 2.3.7.&lt;br /&gt;
&lt;br /&gt;
= Getting the source code =&lt;br /&gt;
You will place your code somewhere in your file system. In the following text this root directory will be called SRC_ROOT.&lt;br /&gt;
&lt;br /&gt;
Source code is available via CVS or as a source tarball. Downloading and unpacking the latter needs less bandwidth but tarballs are not available for every milestone build, only for the latest release and the latest developer build, both available from our [http://download.openoffice.org download site]. If you want to work on a particular milestone or CWS you have to get the source directly from the cvs.&lt;br /&gt;
&lt;br /&gt;
We have some documentation about working with cvs on OOo. Here&amp;#039;s a short description how you can download the whole OOo2 source. You have to use the following commands to get e.g. the milestone m10 on the code line dev300 (with the cvs branch tag DEV300_m10):&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;export &amp;#039;CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;cvs login ( use the CVS password: anoncvs when you are asked for it)&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;cd SRC_ROOT&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;cvs co -r DEV300_m10 OpenOffice2&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The alias “OpenOffice2” will check out all modules that are needed for OOo2.x or OOo3.x (a new alias for OOo3.x will be created in the near future); it is also possible to check out single modules. Checking out OpenOffice2 took me roughly an hour. If you already have a [http://www.openoffice.org/scdocs/ddSSHGuide.html cvs tunnel] working you can of course use this one instead of the anoncvs access I used in my example but anoncvs is much faster as it does not have the SSL overhead and latency.&lt;br /&gt;
&lt;br /&gt;
If you got the tarball, e.g. the one for version 2.4.0, you can unpack it with&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;tar -xvzf Ooo_2.4.0_src.tar.gz&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The great [[User:Kr/Concurrent_Checkout | script from Kay Ramme]] that checks out any project or modules and – using the build lists of the modules and the dependencies created from them – all other modules that are needed for a successful build currently doesn&amp;#039;t work for OOo3.x (fix is in the works). It uses several parallel cvs connections (anoncvs allows to use 3) and so should be a bit faster. I used the script several times and it took roughly 40 minutes. But if you wanted to go the safe way or you want to work on the 3.x code line you should use the checkout via the “OpenOffice2” target.&lt;br /&gt;
&lt;br /&gt;
Once you have the source tree you can copy all the extenal files listed in the table above into the appropriate locations.&lt;br /&gt;
&lt;br /&gt;
Whatever milestone (version) of OOo you want to use, never try to build the HEAD revision! As new files are committed to HEAD quite often when workspaces are integrated into the main code lines it is very likely that you start to check it out while committing of files is still in progress. The result will be an incomplete and inconsistent version that most probably won&amp;#039;t build. The OOo versioning works in a way that release engineers commit files to HEAD and give these files a version tag for the next milestone, e.g. “DEV300_m10”. Once this version is built and tested sucessfully it is announced to be usable for developers and the race is on for the next round. &lt;br /&gt;
&lt;br /&gt;
If you want to know which milestones are current please look into our “Environment Information System” ([[EIS|EIS]]). There is an RSS feed available that informs you about new available milestones. You can also [mailto:cws-announce-subscribe@openoffice.org subscribe] to the [mailto:cws-announce@openoffice.org cws-announce@openoffice.org] mailing list (or look into its [http://www.openoffice.org/servlets/SummarizeList?listName=cws-announce archive]). &lt;br /&gt;
&lt;br /&gt;
EIS also provides a lot of other useful information and entry points to more documentation.&lt;br /&gt;
&lt;br /&gt;
= Setting up the build environment =&lt;br /&gt;
Finally the “configure” tool is used to create the environment. It checks that all software, hardware, and system requirements for the build are satisfied, and creates configuration files called winenv.set (for tcsh) and winenv.set.sh (for bash) that are used to set all necessary build environment variables. If configure detects a problem it will stop and give you a useful (really!) hint how to fix it. You have to call “configure” from the SRC_ROOT/config_office directory.&lt;br /&gt;
&lt;br /&gt;
The resulting configuration files are created in the SRC_ROOT directory. A top-level makefile script makefile.mk and the script bootstrap that are located in the config_office directory are moved into SRC_ROOT folder as well. This is due to technical reasons: The SRC_ROOT directory in the cvs tree can only hold directories. On the other hand, the top-level makefile.mk should logically be placed in the top-level directory SRC_ROOT. The cvs tree holds these files in config_office and configure copies them up.&lt;br /&gt;
&lt;br /&gt;
Before running configure, make sure that all needed programs are in the system path or start configure with the appropriate command line switches. Make also sure that the PATH variable in your cygwin shell does not contain any blanks and quotes. &lt;br /&gt;
&lt;br /&gt;
There are a number of options that you can use with the configure script. To display these options, type the following command:&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;./configure –help&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here&amp;#039;s my configure call (the folders of the different programs of course might be different in your case):&lt;br /&gt;
&lt;br /&gt;
: ./configure \&lt;br /&gt;
::  --disable-directx \&lt;br /&gt;
::  --with-cl-home=&amp;quot;/cygdrive/d/develop/msvc/VC&amp;quot; \&lt;br /&gt;
::  --disable-activex \&lt;br /&gt;
::  --disable-atl \&lt;br /&gt;
::  --disable-build-mozilla \&lt;br /&gt;
::  --with-frame-home=&amp;quot;/cygdrive/d/develop/MSDK/v6.1&amp;quot; \&lt;br /&gt;
::  --with-psdk-home=&amp;quot;/cygdrive/d/develop/MSDK/v6.1&amp;quot; \&lt;br /&gt;
::  --with-midl-path=&amp;quot;/cygdrive/d/develop/MSDK/v6.1/Bin&amp;quot; \&lt;br /&gt;
::  --with-asm-home=&amp;quot;/cygdrive/d/develop/msvc/VC&amp;quot; \&lt;br /&gt;
::  --with-jdk-home=&amp;quot;/cygdrive/d/develop/j2sdk1.4.2_11&amp;quot; \&lt;br /&gt;
::  --with-csc-path=&amp;quot;/cygdrive/c/Windows/Microsoft.NET/Framework/v3.5&amp;quot; \&lt;br /&gt;
::  --with-ant-home=/ant \&lt;br /&gt;
::  --with-use-shell=bash&lt;br /&gt;
&lt;br /&gt;
(the pathes containing &amp;quot;msvc&amp;quot; and &amp;quot;msdk&amp;quot; should be self-explanatory.)&lt;br /&gt;
&lt;br /&gt;
Sometimes configure had problems with paths containing spaces (no pattern detected) so I preferred to install into pathes without them. The &amp;quot;with-psdk-home&amp;quot; setting needs a case-sensitive path name. I recommend to use case-sensitive usage in all cases - it&amp;#039;s good to get used to case sensitivity if you are going to work with Cygwin.&lt;br /&gt;
&lt;br /&gt;
Most parameters are self-explanatory, but some options might need an explanation. &lt;br /&gt;
&lt;br /&gt;
The Visual Studio Express compilers do not contain everything needed to build the OOo ActiveX control so I disabled it here. If you are using a “complete” Visual Studio (no “Express” version) you can omit this if you want. But the ActiveX control is not needed to run OOo, it&amp;#039;s just an additional feature that lets OOo embed files into the Internet Explorer. On the 3.0.x code line and the 2008 Express compiler another step is necessary after configuring: the environment variable &amp;quot;DISABLE_ATL=TRUE&amp;quot; must be set in the shell and also (in case configure fails to detect the Windows platform SDK version correctly) WINDOWS_VISTA_PSDK also must be set to TRUE. [Remark: the detection failure results from the way how configure searches for the Vista PSDK: it will be found only if it is installed into the default location.] I manually added both variables to the winenv.set.sh file that was created by the &amp;quot;configure&amp;quot; call file. For all code lines since 3.1.x this has been fixed and both environment variables will be set properly.&lt;br /&gt;
&lt;br /&gt;
As DirectX is not needed for most developers, its SDK consumes a lot of disk space and is prone to incompatibilities I recommend to build without DirecX support by using --disable-directx as shown above. Otherwise you have to provide the path to the SDK in --with-directx-home.&lt;br /&gt;
&lt;br /&gt;
OOo uses some Mozilla components. As mentioned above it is not possible to build them from the sources using the Visual Studio 2005 compiler. So I disabled the build with an appropriate option. Disabling the Mozilla components with &amp;quot;--disable-mozilla&amp;quot; completely currently does not work due to a bug in the module dependencies.&lt;br /&gt;
&lt;br /&gt;
Cygwin starts with a “bash” shell by default as already mentioned. My document explains how to build with this shell. Using a tcsh is possible though it may sometimes lead to problems (memory allocation errors, hanging builds) so I don&amp;#039;t recommend to use it. Unfortunately using “tcsh” is still the default setting created by configure (as the first builds where done using it) and so I told configure that the bash should be used instead. If you want to try using tcsh remove the “--with-use-shell” parameter shown above and build with tcsh as explained below. In case the build breaks at some place you can manually patch your winenv.set.sh file and exchange the line &lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;SHELL=”/usr/bin/tcsh”&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;SHELL=”/usr/bin/bash” &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
and the line&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;“USE_SHELL=”tcsh”&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;“USE_SHELL=”bash”&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Then close the tcsh and build again with bash as explained below.&lt;br /&gt;
&lt;br /&gt;
After running configure you must create the dmake make utility that is needed for the build of OpenOffice.org. This done from the SRC_ROOT directory by calling&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;./bootstrap&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If you experiment with the newest sources from the cvs-tree, mind that updates to the configure process may not happen via updates of configure (the script file) but via the files configure.in and set_soenv.in. The configure script itself is created from configure.in using the autoreconf command. The perl script set_soenv is created when you run configure from set_soenv.in.&lt;br /&gt;
&lt;br /&gt;
If you need to modify or create a correct configure you would run commands like the following:&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;SRC_ROOT&amp;gt; cd config_office&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;config_office&amp;gt; cvs update configure.in&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;config_office&amp;gt; autoconf&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
to update the configure script. If you only use code from the snapshot releases on the web, you don&amp;#039;t need to be concerned about this. If you are working on a Child Workspace you should rerun the configure script after each resync.&lt;br /&gt;
&lt;br /&gt;
= Build Instructions =&lt;br /&gt;
Now you are ready to build OpenOffice.org. In every Cygwin instance used for building you have to set the environment variables from the generated configuration file(s).&lt;br /&gt;
&lt;br /&gt;
If you are using bash got to your SRC_ROOT folder and call&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: .&amp;#039;&amp;#039; winenv.set.sh&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
or if you are using tcsh call&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;source winenv.set&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Now you have two options to build the whole Office. You can either call “dmake” in SRC_ROOT or you can go to the “instsetoo_native” directory and use “build” that allows you to control the build process a bit better:&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;SRC_ROOT&amp;gt; cd instsetoo_native&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;SRC_ROOT&amp;gt; build --all -P4&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The “-P4” tells the build tools to start 4 parallel running processes. Using more than one process will speed up the build as it avoids that CPU time is wasted waiting for disk i/o. As a rule of thumb twice as much processes as you have CPU cores is a good number, so “-P4” is fine for my dual core Athlon 64 X2. On this machine (described at the top of this document) the complete build took roughly 2,5-3 hours. The whole tree takes 8,1GB after a successful build.&lt;br /&gt;
&lt;br /&gt;
Some build times for comparison (as reported by users):&lt;br /&gt;
&lt;br /&gt;
* Athlon XP 64 2 GHz, 1 GB RAM - 3 hours&lt;br /&gt;
* Athlon 1,15 GHz, 1 GB RAM - 18,5 hours&lt;br /&gt;
* Core2 Duo 2 GHz, 1GB RAM - 3 hours&lt;br /&gt;
* Core2 Quad 2,4 GHz, 4GB RAM - 1,5 hours&lt;br /&gt;
&lt;br /&gt;
There are some special things in the way how OOo builds its modules. Every module has an “output” folder (with some subfolders for the different kinds of generated output) that is created the first time a build is done in the module. The name of this folder is “wntmsci10.pro” for builds with MSVC++2003 and “wntmsci11.pro” for builds with MSVC++2005. After a successful build of a module some of the generated files are copied to the output folder of the “solver” module by executing a tool called “deliver” (this is automatically called by build --all for each of the modules). Other modules will take these “delivered” files (header files, libraries etc.) to resolve their dependencies. The content of the solver module will also be used to pack the installation sets in the final step.&lt;br /&gt;
&lt;br /&gt;
Sometimes a build breaks. You will get an error message that tells you which modules have to be rebuilt. It seems that at least on Windows in rare cases the build (especially a multi processor build) breaks without an obvious reason and redoing the build is enough to “fix” the problem. I didn&amp;#039;t experience that in the last months but don&amp;#039;t be surprised if it happens to you. Of course a build can break for “real” reasons also if you changed something in the source code. “build” will always tell you the modules it couldn&amp;#039;t build successfully and you can then go to any folder inside the module(s) and fix the problems.&lt;br /&gt;
&lt;br /&gt;
The build system recommends to use the “--from” parameter of the build command to continue the build where it broke after you have fixed the problem. Rumours are that this is not reliable everytime. So if you can bear the extra minutes that “build” needs to detect already built modules you should restart your build with “build --all” from inside instsetoo_native as you did the first time just to avoid uncertainties. For more options of “build” call&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;SRC_ROOT&amp;gt; build – help&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
After a successful build you will find the OOo installation set in &lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;instsetoo_native/wntmsci11.pro/OpenOffice/msi/Install/en-US&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
“instsetoo_native” is the module that packs the installation set.&lt;br /&gt;
&lt;br /&gt;
If you already have a version of OOo installed you can install your freshly built version in parallel by installing it with setup /a that just unpacks all files without any system registration.&lt;br /&gt;
&lt;br /&gt;
If you decide to rebuild a module or build each module individually (mind dependencies!), you also will have to use the “build” tool from inside a folder of these modules. A “build” of a single module will not call “deliver” automatically as described above for the “build --all” case. You must call is manually to get the usual files copied to the solver tree so that other modules or the packaging module can use them.&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;SRC_ROOT/(module)&amp;gt; build&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;SRC_ROOT/(module)&amp;gt; deliver&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
You can copy all new files manually to the appropriate places in your installation. There&amp;#039;s no need to rebuild and install the complete installation set if you only want to rebuild some parts.&lt;br /&gt;
&lt;br /&gt;
= Special Debug Builds with --enable-dbgutil =&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org can be built in a [[Non Product Build|&amp;quot;non-pro&amp;quot; version]] where special debug assertions are enabled. This is supported for Windows/Cygwin starting with the m218 milestone of the SRC680 codeline and all released code lines starting with OOo 2.3.&lt;br /&gt;
&lt;br /&gt;
To enable this kind of build you must add the &amp;quot;--enable-dbgutil&amp;quot; switch to your &amp;quot;configure&amp;quot; command line. If you are building with a MSVC 2005 compiler and you didn&amp;#039;t disable the mozilla parts you will also need the debug DLLs for the MSVC2003 compiler runtime, msvcr71d.dll and msvcp71d.dll. You can download them from the internet and copy them into the external/msvcp71 folder. &lt;br /&gt;
&lt;br /&gt;
In milestones older than SRC680m223 you also have to change the d.lst file in the external/prj folder. Add the following lines:&lt;br /&gt;
&lt;br /&gt;
..\msvcp71\msvcp71d.dll %_DEST%\bin%_EXT%\msvcp71d.dll&lt;br /&gt;
&lt;br /&gt;
..\msvcp71\msvcr71d.dll %_DEST%\bin%_EXT%\msvcr71d.dll&lt;br /&gt;
&lt;br /&gt;
You can build the non-pro version in the same source tree as the pro-version, all created files go into wntmsci10 or wntmsci11 folders, without the &amp;quot;pro&amp;quot; extension as in case of the &amp;quot;normal&amp;quot; builds.&lt;br /&gt;
&lt;br /&gt;
When you work with the non-pro version you will see some error messages or warnings at times. In most cases you can safely assume that you have found a bug. The non-pro version is a bit slower than the pro version.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>Divec</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_Windows&amp;diff=109397</id>
		<title>Documentation/Building Guide/Building on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_Windows&amp;diff=109397"/>
		<updated>2009-01-27T13:02:30Z</updated>

		<summary type="html">&lt;p&gt;Divec: Add info about cygwin errors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Building OpenOffice.org on Windows =&lt;br /&gt;
This document tries to fill a gap. The existing documentation about building OOo on Windows mainly reads like “Building OOo on Windows explained for Linux developers”. I will collect and summarize this existing documentation, fix some of its errors and try to add some comments that address people that are already developing on Windows and now want to get to know about building OOo. So this document is also for those who are not used to unix like command line interfaces, tar balls etc. Of course you must be familiar with a command line, but you don&amp;#039;t need to be a shell wizard. But on the other hand it wouldn&amp;#039;t hurt if you are. :-)&lt;br /&gt;
&lt;br /&gt;
I collected information from several places, e.g.:&lt;br /&gt;
&lt;br /&gt;
[http://tools.openoffice.org/dev_docs/build_windows_tcsh.html#BuildRequirements http://tools.openoffice.org/dev_docs/build_windows_tcsh.html#BuildRequirements]&lt;br /&gt;
&lt;br /&gt;
[[Windows|Building on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[CPAN_install | Perl modules installation with CPAN]]&lt;br /&gt;
&lt;br /&gt;
[http://website.openoffice.org/support/en/howtos/1.html#1 http://website.openoffice.org/support/en/howtos/1.html#1]&lt;br /&gt;
&lt;br /&gt;
The first problem with them is that there are many of them (there are even more than the mentioned four!). So you have to collect things by yourself and have to sort out non-Windows parts. Additionally some of the places contain outdated, incomplete or even wrong information. So I hope that my commented summary might come in handy for starters.&lt;br /&gt;
&lt;br /&gt;
If this documentation is not enough for you or if you have a problem that is not addressed you can send a mail to the mailing list [mailto:dev@openoffice.org dev@openoffice.org] ([mailto:dev-subscribe@openoffice.org subscription] is recommended) or you can meet OOo developers on IRC in the channel #dev.openoffice.org at freenode.de. If you just want to give some feedback about the documentation please also use the mailing list.&lt;br /&gt;
&lt;br /&gt;
You might want to know how many time and disk space installing the build environment will cost you. For a rough estimation I give some download, install and build times. They have been measured on an Athlon 64 X2 3800 (2GHz) dual core machine with 1GByte RAM and a 300 GB SATA disk. My internet connection is a 8MBit DSL broadband connection.&lt;br /&gt;
&lt;br /&gt;
I created this document for building OOo using Microsoft Visual Studio 2005 Express, the “free” (as in beer) offering from Microsoft. It also works with Microsoft Visual Studio 2003, the small differences are mentioned in the text. Using Microsoft Visual Studio 2005 (without the “Express”) should work also but until now I have only one known case as a proof for this. But meanwhile things have become even more complicated because on the way to OpenOffice.org 3.0 the compiler was changed again and now the recommended compiler is Visual Studio 2008 (Express). Please see [[http://wiki.services.openoffice.org/wiki/Building_OOo_with_Cygwin_on_Windows#Download_and_install_MS_compiler_and_tools]] for more details.&lt;br /&gt;
&lt;br /&gt;
Building works fine on Windows XP. It should work also on Windows 2000. I have no information about it but I assume that using Windows 98/ME is not a good idea (Visual Studio Express 2005 cannot be installed on Windows 98, so you&amp;#039;d probably need the full version of Visual Studio 2003 - but Windows 98 is unsupported for OpenOffice.org 3.0 anyway [[User:Cloph|Cloph]]). I don&amp;#039;t know anything about building on Vista.&lt;br /&gt;
&lt;br /&gt;
The first thing you need is the build environment. We are using Cygwin, a Windows program that emulates a complete Unix command line environment.&lt;br /&gt;
&lt;br /&gt;
= Download and install Cygwin =&lt;br /&gt;
Go to [http://www.cygwin.com/ http://www.cygwin.com] und download the current version. If you already have Cygwin installed: you will need at least version 1.5.10. If you are using version 1.5.18 you must download a special version of the cygwin1.dll as described [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html#BuildRequirements here]. But in general I would recommend to use a recent version.&lt;br /&gt;
&lt;br /&gt;
Cygwin has a web based installation process that is described [http://website.openoffice.org/support/en/howtos/1.html#1 here]. I used the “Install from Internet” method and it worked like a charm. Make sure that you tell the setup to use the “Unix/binary” file type. Cygwin consists of some basic and a lot of optional packages. As building OOo needs some of these optional packages you have to select them in the installer. Unfortunately the list of packages mentioned at the [http://website.openoffice.org/support/en/howtos/1.html#1 place describing the installation process] is incomplete, some more are listed [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html#BuildRequirements here]. Here&amp;#039;s a complete list of the needed packages:&lt;br /&gt;
&lt;br /&gt;
* Category Archive: unzip, zip&lt;br /&gt;
* Category Devel : autoconf, bison, cvs, flex, gcc-g++, gperf, make, openssl-devel (only needed for perl modules for CWS tooling, see below)&lt;br /&gt;
* Category Libs: openssl&lt;br /&gt;
* Category Net: openssh, ncftp&lt;br /&gt;
* Category Perl: perl (Perl)&lt;br /&gt;
* Category Shells: rxvt, tcsh&lt;br /&gt;
* Category Utils: patch, gnupg&lt;br /&gt;
* Category Web: lynx, wget&lt;br /&gt;
&lt;br /&gt;
The installer will automatically check and download some more packages needed by thosed listed here. The total amount of disk space is 46 MB for the download and 174 MB for the Cygwin installation, including all the additional Perl modules shown below. The whole process took roughly 20 minutes.&lt;br /&gt;
&lt;br /&gt;
Within the Cygwin Toolkit, some executables might be symlinks, in the version I have downloaded (1.5.24-2) it was awk.exe and gunzip.exe, older documentation also mentioned tar.exe. This can lead to a break of the build later, and the symlinks should be replaced by copies of the command they link to. &lt;br /&gt;
&lt;br /&gt;
You can check this in the cygwin shell by calling e.g.&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;ls -l /bin/awk.exe&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
whether e.g. awk.exe is a symlink. In version 1.5.24-2 awk.exe is a link to gawk.exe. The shell will show this by putting out “awk.exe -&amp;gt; gawk.exe”. In this case gawk.exe must be copied to awk.exe by executing: &lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;cd /bin&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;rm awk.exe&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;cp gawk.exe awk.exe&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Take similar action for gunzip.exe that I found to be a link to unzip.exe.&lt;br /&gt;
&lt;br /&gt;
In case you overlook something here or you have a newer Cygwin version with additional symlinks not mentioned here it&amp;#039;s not a problem. You will get a helpful error message about an existing link in the configuration step (configure) later. The message will tell you which link you have to remove and you can do it following the advice given above for the awk.exe/gawk.exe pair.&lt;br /&gt;
&lt;br /&gt;
Cygwin uses the command line shell “bash” by default and I always use this shell for everything I do with Cygwin. Building OOo is also possible using the shell “tcsh”, though some problems have been reported (see below). My recommendation is to use bash.&lt;br /&gt;
&lt;br /&gt;
Though bash is the recommended shell you shouldn&amp;#039;t try to deinstall tcsh. Cygwin doesn&amp;#039;t have a simple mechanism to deinstall something automatically and it&amp;#039;s still possible that one of the tools used for the build is using the tcsh internally because the script calling it doesn&amp;#039;t evaluate the environment variable pointing to the shell to use. So it&amp;#039;s safer to keep tcsh installed even if you use bash.&lt;br /&gt;
&lt;br /&gt;
All commands written in this document are meant to be used in a bash (except explicitly told differently). In case you are not used to Unix command line shells you will need to familiarize yourself with some basic commands, but explaining that in closer detail is beyound the scope of this documentation. If you use the shell only for building the source all shell commands you will need are “cd” for the navigation between directories and “rm” in case you want to remove something. Use the “man” command to get more information (e.g. by calling “man cd”) or the “--help” option of the commands to get a short information about the basic options.&lt;br /&gt;
&lt;br /&gt;
= Download and install MS compiler and tools  =&lt;br /&gt;
Currently building on Windows needs a Microsoft Visual Studio C++ compiler. The “regular” builds for OpenOffice 2.x are done with Visual Studio 2003 that is available from Microsoft at a price. Building using the free (as in “free beer”) compiler Visual Studio 2005 Express works fine and is explained here. For OpenOffice 3.x the recommended as well as the &amp;quot;official&amp;quot; compiler is Visual Studio 2008 or 2008 Express.&lt;br /&gt;
&lt;br /&gt;
== Visual Studio 2005 Express (for OOo 2.x) ==&lt;br /&gt;
&lt;br /&gt;
In case you still can find a copy of the 2005 Express compiler setup and it still works it downloads additional content from the Web. You only need to select the Graphical IDE. More can be downloaded later if you want, but for building and debugging OOo you will not need more than the basic package. The download and installation took me roughly 10 minutes and 220&amp;amp;thinsp;MB on my hard disk. The complete (not Web based) compiler installation set still can be downloaded as an ISO-images (~450&amp;amp;thinsp;MB) from the [http://msdn2.microsoft.com/en-us/express/aa718401.aspx Manual Installation] site.&lt;br /&gt;
&lt;br /&gt;
Next step when you plan to use the “Express” version is installing the [http://www.microsoft.com/downloads/details.aspx?familyid=7A1C9DA0-0510-44A2-B042-7EF370530C64&amp;amp;displaylang=en Microsoft Macro Assembler] (MASM). MASM is part of the paid version of Visual Studio (so you can skip that part if you are using it) but for the “Express” version you have to download it separately. It&amp;#039;s only a very small download. I had a problem with the MASM installer on all machines where I used it: the setup started but then suddenly disappeared from the screen. I found a hanging msiexec.exe in the task manager and had to kill it manually. Fortunately the MASM was obviously installed correctly. It appeared in the “Add and remove software” dialog and the “ml.exe” was installed to “Vc/Bin” folder of VC8.&lt;br /&gt;
&lt;br /&gt;
You also must download and install the Microsoft Windows Platform SDK. The usual instructions recommend to download it from [http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&amp;amp;displaylang=en here] but I followed the recommendations from the [http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/ Visual C++ site]. There you can find a link (download requires Genuine Windows Validation). &amp;#039;&amp;#039;&amp;#039;WARNING&amp;#039;&amp;#039;&amp;#039;: don&amp;#039;t install the new Vista platform SDK that is needed for the 2008 Express compiler (see below), the 2005 Express Compiler is does not work with it.&lt;br /&gt;
&lt;br /&gt;
The setup is again web based. You can either user the “Typical” installation or select “Custom” setup and deselect the packages you don&amp;#039;t need. You need at least the following packages:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Windows Core SDK&lt;br /&gt;
* Microsoft Web Workshop (IE) SDK &lt;br /&gt;
* Microsoft Internet Information Server (IIS) SDK &lt;br /&gt;
* Microsoft Data Access Services (MDAC) SDK&lt;br /&gt;
* Microsoft DirectShow SDK&lt;br /&gt;
* Microsoft Windows Installer SDK&lt;br /&gt;
&lt;br /&gt;
You can deselect all 64Bit parts of these packages, all samples, all source code modules and (if you want) every documentation. In total the installation filled 438 MB of my harddisk space (including the documentation, but without all other optional parts).&lt;br /&gt;
&lt;br /&gt;
Warning: the first installation option is called “Register Environment Variables” and it is deselected by default. You shouldn&amp;#039;t change this as selecting it will add directories with blanks to your PATH variable. This (or more precisely the quotes surrounding them) will cause troubles in Cygwin (see below). It is also possible that other installed Windows programs (not only Cygwin) can&amp;#039;t cope with the changed PATH variable as the installer of the Platform SDK explicitly warns.&lt;br /&gt;
&lt;br /&gt;
The only drawback of not selecting this option is that if you wanted to use the platform SDK for other projects except OOo you would have to take care for the correct environment yourself. The platform SDK creates some start menu entries for shells with a suitable configured environment so that shouldn&amp;#039;t be a problem.&lt;br /&gt;
&lt;br /&gt;
There is a library called “libcp.lib” in the “Lib” directory of the SDK; it must be either moved away or renamed. You can read more about this [http://www.openoffice.org/issues/show_bug.cgi?id=49856 here].&lt;br /&gt;
&lt;br /&gt;
There is another thing you have to change in the Platform SDK: you have to apply a small patch to one of the Platform SDK header files as described [http://tools.openoffice.org/servlets/ReadMsg?listName=dev&amp;amp;msgNo=6024 here].&lt;br /&gt;
&lt;br /&gt;
== Visual Studio 2008 Express (OOo 3.x development) ==&lt;br /&gt;
&lt;br /&gt;
You can download the 2008 Express compiler Web based setup or a DVD ISO from [http://www.microsoft.com/express/download Microsoft]. You don&amp;#039;t need to install any optional parts.&lt;br /&gt;
&lt;br /&gt;
You also must download and install the Microsoft Windows Platform SDK, but now in the [http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&amp;amp;displaylang=en newer version 6.0.6001.18000.367-KRMSDK_EN] that also supports Vista. This is a DVD image. You can either mount it with a suitable tool, burn it do a DVD or use tools like winrar that can extract files from ISO files directly. You don&amp;#039;t need to install any samples or documentation (especially not installing the latter saves a lot of disk space - 193 MB instead of nearly 1GB).&lt;br /&gt;
&lt;br /&gt;
The Platform SDK setup will also install the .NET Framework 3.5 SDK.&lt;br /&gt;
&lt;br /&gt;
It might be best to install the Windows SDK into the default directory, and if not that into one without capital letters in the path. I used D:\Dev\Win_SDK\ and received some linking errors in the Python module (see [http://www.openoffice.org/issues/show_bug.cgi?id=88568+ Issue 88568]).&lt;br /&gt;
&lt;br /&gt;
== DirectX SDK ==&lt;br /&gt;
&lt;br /&gt;
Another SDK that could be downloaded and installed is the Direct X9 SDK. If you don&amp;#039;t want to download it you can disable DirectX support in the configuration step (“--disable-directx”). The current regular builds of OOo are done with a version of the DirectX SDK that is no longer available for download so it&amp;#039;s necessary to search for a download link in the Web. The OOo pages mention several links, outdated as well as working links. I took the one from [http://www.microsoft.com/downloads/details.aspx?FamilyId=D625324C-59B4-4951-849E-640B508DC442&amp;amp;displaylang=en here] (Genuine Windows Validation required). This is a 509 MB download as the setup is not Web based. Downloading, unpacking and installing took 30 minutes. As I deselected the sources and sample the resulting installation only was 189 MB.&lt;br /&gt;
&lt;br /&gt;
Current (as of 2008/01) versions of the DirectX9 SDK and Windows Platform SDK do not fit to each other. To be able to build with DirextX enabled, you need to patch one file in the Platform SDK. See [http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2743771&amp;amp;SiteID=1 MSDN forum] for details].&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WARNING&amp;#039;&amp;#039;&amp;#039;: do not use a DirectX10 SDK.&lt;br /&gt;
&lt;br /&gt;
= Download of additional files =&lt;br /&gt;
You have to download some more files that you have to put into some prepared locations of the OOo source tree later. I mention it here because most of them are related to the MS compiler but perhaps it makes more sense first to download the source so that you can immediately copy the addtitional files to the proper location. Here&amp;#039;s the list of files to download (with links) and the locations in the source tree where you must put them:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| [http://www.microsoft.com/downloads/details.aspx?familyid=6A63AB9C-DF12-4D41-933C-BE590FEAA05A&amp;amp;displaylang=en GDI+ Redistributable] (Genuine Windows Validation required)&lt;br /&gt;
| external/gdiplus&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Only for OOo2.x but due to a [http://www.openoffice.org/issues/show_bug.cgi?id=88652 bug] in configure still needed for 3.x: [http://download.microsoft.com/download/b/7/5/b75eace3-00e2-4aa0-9a6f-0b6882c71642/unicows.exe unicows.dll] &lt;br /&gt;
| external/unicows&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=CD1FC4B2-0885-47F4-AF45-7FD5E14DB6C0 dbghelp.dll]&lt;br /&gt;
| external/dbghelp&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://download.microsoft.com/download/WindowsInstaller/Install/2.0/NT45/EN-US/InstMsiW.exe instmsiw.exe] and [http://download.microsoft.com/download/WindowsInstaller/Install/2.0/W9XMe/EN-US/InstMsiA.exe instmsia.exe]&lt;br /&gt;
| external/msi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| for 2005 compiler: msvcp80.dll and msvcr80.dll (found in c:\WINDOWS/WinSxS/x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd/msvc &lt;br /&gt;
| external/msvcp80&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| for 2008 compiler (until DEV300 m22): msvcp90.dll and msvcr90.dll (found in $(msvcdir)\Vc\redist\x86\Microsoft.VC90.CRT) &lt;br /&gt;
| external/msvcp90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| for 2008 compiler starting with DEV300m23: Microsoft_VC90_CRT_x86.msm and policy_9_0_Microsoft_VC90_CRT_x86.msm for non debug builds and Microsoft_VC90_DebugCRT_x86.msm and policy_9_0_Microsoft_VC90_DebugCRT_x86.msm for debug builds. These merge modules are available in VS08 Express Edition and VS08 Professional Edtion. All *.msm files are located at c:\Program Files\Common Files\Merge Module. &lt;br /&gt;
| external/msm90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cs.man.ac.uk/aig/staff/alan/software/ GPC]&lt;br /&gt;
| Unpack to external/gpc&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://tools.openoffice.org/moz_prebuild/680/ Mozilla binary distribution] &lt;br /&gt;
&lt;br /&gt;
(WNTMSCIruntime.zip,WNTMSCIlib.zip,WNTMSCIinc.zip)&lt;br /&gt;
| moz/zipped&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| msvcr71.dll and msvcp71.dll for Mozilla libraries (Search for them in the Web or on your PC. These files should be named as all lower case. Sometimes when downloaded they are upper case and this will cause &amp;#039;file not found&amp;#039; errors towards the end of the build))&lt;br /&gt;
| external/msvcp71 &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some of the files can be found in a suitable OOo installation set also, so you can save the download by “stealing” it from your OOo installation.&lt;br /&gt;
&lt;br /&gt;
OOo uses some Mozilla libraries. Building the corresponding sources is only possible with the VC2003 compiler so you have to use precompiled libraries that require the msvx71 libraries mentioned above. On Windows the Mozilla libraries are needed only for Mozilla address book support. Unfortunaly a bug in the module dependencies makes it necessary that the mozilla libaries are used anyway as otherwise building the module xmlsecurity fails (see [[Building_OOo_with_Cygwin_on_Windows#Setting_up_the_build_environment|below]]).&lt;br /&gt;
&lt;br /&gt;
= Downloading and installing additional Perl modules =&lt;br /&gt;
As explained [[CPAN_install | elsewhere in the wiki]] some perl modules must be installed with CPAN. The necessary command in the cygwin shell is&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;perl -MCPAN -e shell&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If this command is executed the first time CPAN will ask for configuration. The autoconfiguration worked fine for me. I used the prompted installation just to see what is asked but always pressed “Enter” in each step, even in case I got an error message that asked me for confirmation. You can do the same and just ignore any error messages you might see (the same is true for all queries while you are executing the “install” command mentioned below).&lt;br /&gt;
&lt;br /&gt;
Please note that CPAN is not able to deal with usernames containing spaces. To work around this fact, when CPAN asks you to specify the &amp;#039;&amp;#039;CPAN build and cache directory&amp;#039;&amp;#039;, change the default suggestion to &amp;lt;tt&amp;gt;/cpan&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
At the end the CPAN shell appeared and is ready to accept commands for installations. Each module is installed by typing “install $MODULENAME”. The modules that must be installed are:&lt;br /&gt;
&lt;br /&gt;
* Archive::Zip&lt;br /&gt;
* XML::Parser (though it seems that this is already installed; doesn&amp;#039;t hurt to do it)&lt;br /&gt;
* URI&lt;br /&gt;
* LWP::UserAgent&lt;br /&gt;
* SOAP::Lite&lt;br /&gt;
* Crypt::SSLeay&lt;br /&gt;
&lt;br /&gt;
The last three modules are only needed if you want to use the [http://tools.openoffice.org/dev_docs/ooo-cws-tools-doc.sxw CWS tooling]. These tools are necessary if you want to create and maintain your own [http://wiki.services.openoffice.org/wiki/CWS Child Workspaces] or if you want to build one of them. I recommend to install them anyway as sooner or later you want to work on a child workspace.&lt;br /&gt;
&lt;br /&gt;
CPAN will detect if a selected module depends on other modules and it will offer to download them also. As explained please just confirm this.&lt;br /&gt;
&lt;br /&gt;
=== CPAN errors ===&lt;br /&gt;
&lt;br /&gt;
* I got an error message from CPAN somewhat like the following:&lt;br /&gt;
&lt;br /&gt;
: C:\cygwin\bin\perl.exe: *** unable to remap C:\cygwin\bin\cygiconv-2.dll to same&lt;br /&gt;
: address as parent(0x7C0000) != 0x7D0000&lt;br /&gt;
&lt;br /&gt;
To fix this, I had to exit the Cygwin shell, run cmd.exe, then type &amp;quot;c:\cygwin\bin\ash.exe&amp;quot; to start the minimal shell, then type &amp;quot;/bin/rebaseall&amp;quot;.  Then CPAN worked when I ran it again.&lt;br /&gt;
&lt;br /&gt;
* I got another error when cygwin was performing &amp;quot;make install&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
: ERROR: Can&amp;#039;t create &amp;#039;/usr/bin&amp;#039;; Do not have write permissions on &amp;#039;/usr/bin&amp;#039;&lt;br /&gt;
&lt;br /&gt;
I can actually write to /usr/bin; however when I do &amp;quot;ls -ld /usr/bin&amp;quot;, cygwin reports no write permission; and &amp;quot;chmod u+w /usr/bin&amp;quot; gives &amp;quot;Permission denied&amp;quot;.  This causes the install process to fail when it checks permissions.  As a kludge, I installed vim, and edited line 368 of /usr/lib/perl5/5.10/ExtUtils/Install.pm, replacing this:&lt;br /&gt;
&lt;br /&gt;
:        return -w $dir;&lt;br /&gt;
&lt;br /&gt;
with this:&lt;br /&gt;
&lt;br /&gt;
:        return 1;&lt;br /&gt;
&lt;br /&gt;
which allowed installation to proceed.&lt;br /&gt;
&lt;br /&gt;
= Downloading and installing Java and other tools =&lt;br /&gt;
Some OOo components as well as some build tools of OOo require Java. So you must download a JDK and the Java make utility [http://ant.apache.org/ Ant]. It&amp;#039;s not necessary to read the whole installation instructions from Ant. After downloading the zip package just unpack the bin and lib folders from it into a directory that you specfiy as ant-home in the configure step later. The path to this directory must not contain blank characters!&lt;br /&gt;
&lt;br /&gt;
All OOo builds can be done with [http://java.sun.com/j2se/1.4.2 JDK 1.4.2]. If your build is based at least on milestone m158 you can also use [http://java.sun.com/j2se/1.5.0  JDK 1.5.0.] Don&amp;#039;t use Java 1.6, at least the hsqldb modules does not build with that version. This is status quo with milestone m218.&lt;br /&gt;
&lt;br /&gt;
If a self contained Windows installer is desired in addition to the MSI installer files [http://nsis.sourceforge.net/ NSIS] 2.0.4 is needed, but it is optional. If NSIS is not present the build will ignore this step. Used to be that newer version of NSIS used to break the build ([http://qa.openoffice.org/issues/show_bug.cgi?id=85657 #85657]), but it seems that in now works for up to 2.3.7.&lt;br /&gt;
&lt;br /&gt;
= Getting the source code =&lt;br /&gt;
You will place your code somewhere in your file system. In the following text this root directory will be called SRC_ROOT.&lt;br /&gt;
&lt;br /&gt;
Source code is available via CVS or as a source tarball. Downloading and unpacking the latter needs less bandwidth but tarballs are not available for every milestone build, only for the latest release and the latest developer build, both available from our [http://download.openoffice.org download site]. If you want to work on a particular milestone or CWS you have to get the source directly from the cvs.&lt;br /&gt;
&lt;br /&gt;
We have some documentation about working with cvs on OOo. Here&amp;#039;s a short description how you can download the whole OOo2 source. You have to use the following commands to get e.g. the milestone m10 on the code line dev300 (with the cvs branch tag DEV300_m10):&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;export &amp;#039;CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;cvs login ( use the CVS password: anoncvs when you are asked for it)&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;cd SRC_ROOT&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;cvs co -r DEV300_m10 OpenOffice2&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The alias “OpenOffice2” will check out all modules that are needed for OOo2.x or OOo3.x (a new alias for OOo3.x will be created in the near future); it is also possible to check out single modules. Checking out OpenOffice2 took me roughly an hour. If you already have a [http://www.openoffice.org/scdocs/ddSSHGuide.html cvs tunnel] working you can of course use this one instead of the anoncvs access I used in my example but anoncvs is much faster as it does not have the SSL overhead and latency.&lt;br /&gt;
&lt;br /&gt;
If you got the tarball, e.g. the one for version 2.4.0, you can unpack it with&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;tar -xvzf Ooo_2.4.0_src.tar.gz&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The great [[User:Kr/Concurrent_Checkout | script from Kay Ramme]] that checks out any project or modules and – using the build lists of the modules and the dependencies created from them – all other modules that are needed for a successful build currently doesn&amp;#039;t work for OOo3.x (fix is in the works). It uses several parallel cvs connections (anoncvs allows to use 3) and so should be a bit faster. I used the script several times and it took roughly 40 minutes. But if you wanted to go the safe way or you want to work on the 3.x code line you should use the checkout via the “OpenOffice2” target.&lt;br /&gt;
&lt;br /&gt;
Once you have the source tree you can copy all the extenal files listed in the table above into the appropriate locations.&lt;br /&gt;
&lt;br /&gt;
Whatever milestone (version) of OOo you want to use, never try to build the HEAD revision! As new files are committed to HEAD quite often when workspaces are integrated into the main code lines it is very likely that you start to check it out while committing of files is still in progress. The result will be an incomplete and inconsistent version that most probably won&amp;#039;t build. The OOo versioning works in a way that release engineers commit files to HEAD and give these files a version tag for the next milestone, e.g. “DEV300_m10”. Once this version is built and tested sucessfully it is announced to be usable for developers and the race is on for the next round. &lt;br /&gt;
&lt;br /&gt;
If you want to know which milestones are current please look into our “Environment Information System” ([[EIS|EIS]]). There is an RSS feed available that informs you about new available milestones. You can also [mailto:cws-announce-subscribe@openoffice.org subscribe] to the [mailto:cws-announce@openoffice.org cws-announce@openoffice.org] mailing list (or look into its [http://www.openoffice.org/servlets/SummarizeList?listName=cws-announce archive]). &lt;br /&gt;
&lt;br /&gt;
EIS also provides a lot of other useful information and entry points to more documentation.&lt;br /&gt;
&lt;br /&gt;
= Setting up the build environment =&lt;br /&gt;
Finally the “configure” tool is used to create the environment. It checks that all software, hardware, and system requirements for the build are satisfied, and creates configuration files called winenv.set (for tcsh) and winenv.set.sh (for bash) that are used to set all necessary build environment variables. If configure detects a problem it will stop and give you a useful (really!) hint how to fix it. You have to call “configure” from the SRC_ROOT/config_office directory.&lt;br /&gt;
&lt;br /&gt;
The resulting configuration files are created in the SRC_ROOT directory. A top-level makefile script makefile.mk and the script bootstrap that are located in the config_office directory are moved into SRC_ROOT folder as well. This is due to technical reasons: The SRC_ROOT directory in the cvs tree can only hold directories. On the other hand, the top-level makefile.mk should logically be placed in the top-level directory SRC_ROOT. The cvs tree holds these files in config_office and configure copies them up.&lt;br /&gt;
&lt;br /&gt;
Before running configure, make sure that all needed programs are in the system path or start configure with the appropriate command line switches. Make also sure that the PATH variable in your cygwin shell does not contain any blanks and quotes. &lt;br /&gt;
&lt;br /&gt;
There are a number of options that you can use with the configure script. To display these options, type the following command:&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;./configure –help&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here&amp;#039;s my configure call (the folders of the different programs of course might be different in your case):&lt;br /&gt;
&lt;br /&gt;
: ./configure \&lt;br /&gt;
::  --disable-directx \&lt;br /&gt;
::  --with-cl-home=&amp;quot;/cygdrive/d/develop/msvc/VC&amp;quot; \&lt;br /&gt;
::  --disable-activex \&lt;br /&gt;
::  --disable-atl \&lt;br /&gt;
::  --disable-build-mozilla \&lt;br /&gt;
::  --with-frame-home=&amp;quot;/cygdrive/d/develop/MSDK/v6.1&amp;quot; \&lt;br /&gt;
::  --with-psdk-home=&amp;quot;/cygdrive/d/develop/MSDK/v6.1&amp;quot; \&lt;br /&gt;
::  --with-midl-path=&amp;quot;/cygdrive/d/develop/MSDK/v6.1/Bin&amp;quot; \&lt;br /&gt;
::  --with-asm-home=&amp;quot;/cygdrive/d/develop/msvc/VC&amp;quot; \&lt;br /&gt;
::  --with-jdk-home=&amp;quot;/cygdrive/d/develop/j2sdk1.4.2_11&amp;quot; \&lt;br /&gt;
::  --with-csc-path=&amp;quot;/cygdrive/c/Windows/Microsoft.NET/Framework/v3.5&amp;quot; \&lt;br /&gt;
::  --with-ant-home=/ant \&lt;br /&gt;
::  --with-use-shell=bash&lt;br /&gt;
&lt;br /&gt;
(the pathes containing &amp;quot;msvc&amp;quot; and &amp;quot;msdk&amp;quot; should be self-explanatory.)&lt;br /&gt;
&lt;br /&gt;
Sometimes configure had problems with paths containing spaces (no pattern detected) so I preferred to install into pathes without them. The &amp;quot;with-psdk-home&amp;quot; setting needs a case-sensitive path name. I recommend to use case-sensitive usage in all cases - it&amp;#039;s good to get used to case sensitivity if you are going to work with Cygwin.&lt;br /&gt;
&lt;br /&gt;
Most parameters are self-explanatory, but some options might need an explanation. &lt;br /&gt;
&lt;br /&gt;
The Visual Studio Express compilers do not contain everything needed to build the OOo ActiveX control so I disabled it here. If you are using a “complete” Visual Studio (no “Express” version) you can omit this if you want. But the ActiveX control is not needed to run OOo, it&amp;#039;s just an additional feature that lets OOo embed files into the Internet Explorer. On the 3.0.x code line and the 2008 Express compiler another step is necessary after configuring: the environment variable &amp;quot;DISABLE_ATL=TRUE&amp;quot; must be set in the shell and also (in case configure fails to detect the Windows platform SDK version correctly) WINDOWS_VISTA_PSDK also must be set to TRUE. [Remark: the detection failure results from the way how configure searches for the Vista PSDK: it will be found only if it is installed into the default location.] I manually added both variables to the winenv.set.sh file that was created by the &amp;quot;configure&amp;quot; call file. For all code lines since 3.1.x this has been fixed and both environment variables will be set properly.&lt;br /&gt;
&lt;br /&gt;
As DirectX is not needed for most developers, its SDK consumes a lot of disk space and is prone to incompatibilities I recommend to build without DirecX support by using --disable-directx as shown above. Otherwise you have to provide the path to the SDK in --with-directx-home.&lt;br /&gt;
&lt;br /&gt;
OOo uses some Mozilla components. As mentioned above it is not possible to build them from the sources using the Visual Studio 2005 compiler. So I disabled the build with an appropriate option. Disabling the Mozilla components with &amp;quot;--disable-mozilla&amp;quot; completely currently does not work due to a bug in the module dependencies.&lt;br /&gt;
&lt;br /&gt;
Cygwin starts with a “bash” shell by default as already mentioned. My document explains how to build with this shell. Using a tcsh is possible though it may sometimes lead to problems (memory allocation errors, hanging builds) so I don&amp;#039;t recommend to use it. Unfortunately using “tcsh” is still the default setting created by configure (as the first builds where done using it) and so I told configure that the bash should be used instead. If you want to try using tcsh remove the “--with-use-shell” parameter shown above and build with tcsh as explained below. In case the build breaks at some place you can manually patch your winenv.set.sh file and exchange the line &lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;SHELL=”/usr/bin/tcsh”&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;SHELL=”/usr/bin/bash” &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
and the line&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;“USE_SHELL=”tcsh”&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
with &lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;“USE_SHELL=”bash”&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Then close the tcsh and build again with bash as explained below.&lt;br /&gt;
&lt;br /&gt;
After running configure you must create the dmake make utility that is needed for the build of OpenOffice.org. This done from the SRC_ROOT directory by calling&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;./bootstrap&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If you experiment with the newest sources from the cvs-tree, mind that updates to the configure process may not happen via updates of configure (the script file) but via the files configure.in and set_soenv.in. The configure script itself is created from configure.in using the autoreconf command. The perl script set_soenv is created when you run configure from set_soenv.in.&lt;br /&gt;
&lt;br /&gt;
If you need to modify or create a correct configure you would run commands like the following:&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;SRC_ROOT&amp;gt; cd config_office&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;config_office&amp;gt; cvs update configure.in&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;config_office&amp;gt; autoconf&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
to update the configure script. If you only use code from the snapshot releases on the web, you don&amp;#039;t need to be concerned about this. If you are working on a Child Workspace you should rerun the configure script after each resync.&lt;br /&gt;
&lt;br /&gt;
= Build Instructions =&lt;br /&gt;
Now you are ready to build OpenOffice.org. In every Cygwin instance used for building you have to set the environment variables from the generated configuration file(s).&lt;br /&gt;
&lt;br /&gt;
If you are using bash got to your SRC_ROOT folder and call&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: .&amp;#039;&amp;#039; winenv.set.sh&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
or if you are using tcsh call&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;source winenv.set&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Now you have two options to build the whole Office. You can either call “dmake” in SRC_ROOT or you can go to the “instsetoo_native” directory and use “build” that allows you to control the build process a bit better:&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;SRC_ROOT&amp;gt; cd instsetoo_native&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;SRC_ROOT&amp;gt; build --all -P4&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The “-P4” tells the build tools to start 4 parallel running processes. Using more than one process will speed up the build as it avoids that CPU time is wasted waiting for disk i/o. As a rule of thumb twice as much processes as you have CPU cores is a good number, so “-P4” is fine for my dual core Athlon 64 X2. On this machine (described at the top of this document) the complete build took roughly 2,5-3 hours. The whole tree takes 8,1GB after a successful build.&lt;br /&gt;
&lt;br /&gt;
Some build times for comparison (as reported by users):&lt;br /&gt;
&lt;br /&gt;
* Athlon XP 64 2 GHz, 1 GB RAM - 3 hours&lt;br /&gt;
* Athlon 1,15 GHz, 1 GB RAM - 18,5 hours&lt;br /&gt;
* Core2 Duo 2 GHz, 1GB RAM - 3 hours&lt;br /&gt;
* Core2 Quad 2,4 GHz, 4GB RAM - 1,5 hours&lt;br /&gt;
&lt;br /&gt;
There are some special things in the way how OOo builds its modules. Every module has an “output” folder (with some subfolders for the different kinds of generated output) that is created the first time a build is done in the module. The name of this folder is “wntmsci10.pro” for builds with MSVC++2003 and “wntmsci11.pro” for builds with MSVC++2005. After a successful build of a module some of the generated files are copied to the output folder of the “solver” module by executing a tool called “deliver” (this is automatically called by build --all for each of the modules). Other modules will take these “delivered” files (header files, libraries etc.) to resolve their dependencies. The content of the solver module will also be used to pack the installation sets in the final step.&lt;br /&gt;
&lt;br /&gt;
Sometimes a build breaks. You will get an error message that tells you which modules have to be rebuilt. It seems that at least on Windows in rare cases the build (especially a multi processor build) breaks without an obvious reason and redoing the build is enough to “fix” the problem. I didn&amp;#039;t experience that in the last months but don&amp;#039;t be surprised if it happens to you. Of course a build can break for “real” reasons also if you changed something in the source code. “build” will always tell you the modules it couldn&amp;#039;t build successfully and you can then go to any folder inside the module(s) and fix the problems.&lt;br /&gt;
&lt;br /&gt;
The build system recommends to use the “--from” parameter of the build command to continue the build where it broke after you have fixed the problem. Rumours are that this is not reliable everytime. So if you can bear the extra minutes that “build” needs to detect already built modules you should restart your build with “build --all” from inside instsetoo_native as you did the first time just to avoid uncertainties. For more options of “build” call&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;SRC_ROOT&amp;gt; build – help&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
After a successful build you will find the OOo installation set in &lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;instsetoo_native/wntmsci11.pro/OpenOffice/msi/Install/en-US&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
“instsetoo_native” is the module that packs the installation set.&lt;br /&gt;
&lt;br /&gt;
If you already have a version of OOo installed you can install your freshly built version in parallel by installing it with setup /a that just unpacks all files without any system registration.&lt;br /&gt;
&lt;br /&gt;
If you decide to rebuild a module or build each module individually (mind dependencies!), you also will have to use the “build” tool from inside a folder of these modules. A “build” of a single module will not call “deliver” automatically as described above for the “build --all” case. You must call is manually to get the usual files copied to the solver tree so that other modules or the packaging module can use them.&lt;br /&gt;
&lt;br /&gt;
: &lt;br /&gt;
:: &lt;br /&gt;
::: &lt;br /&gt;
:::: &amp;#039;&amp;#039;SRC_ROOT/(module)&amp;gt; build&amp;#039;&amp;#039;&lt;br /&gt;
:::: &amp;#039;&amp;#039;SRC_ROOT/(module)&amp;gt; deliver&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
You can copy all new files manually to the appropriate places in your installation. There&amp;#039;s no need to rebuild and install the complete installation set if you only want to rebuild some parts.&lt;br /&gt;
&lt;br /&gt;
= Special Debug Builds with --enable-dbgutil =&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org can be built in a [[Non Product Build|&amp;quot;non-pro&amp;quot; version]] where special debug assertions are enabled. This is supported for Windows/Cygwin starting with the m218 milestone of the SRC680 codeline and all released code lines starting with OOo 2.3.&lt;br /&gt;
&lt;br /&gt;
To enable this kind of build you must add the &amp;quot;--enable-dbgutil&amp;quot; switch to your &amp;quot;configure&amp;quot; command line. If you are building with a MSVC 2005 compiler and you didn&amp;#039;t disable the mozilla parts you will also need the debug DLLs for the MSVC2003 compiler runtime, msvcr71d.dll and msvcp71d.dll. You can download them from the internet and copy them into the external/msvcp71 folder. &lt;br /&gt;
&lt;br /&gt;
In milestones older than SRC680m223 you also have to change the d.lst file in the external/prj folder. Add the following lines:&lt;br /&gt;
&lt;br /&gt;
..\msvcp71\msvcp71d.dll %_DEST%\bin%_EXT%\msvcp71d.dll&lt;br /&gt;
&lt;br /&gt;
..\msvcp71\msvcr71d.dll %_DEST%\bin%_EXT%\msvcr71d.dll&lt;br /&gt;
&lt;br /&gt;
You can build the non-pro version in the same source tree as the pro-version, all created files go into wntmsci10 or wntmsci11 folders, without the &amp;quot;pro&amp;quot; extension as in case of the &amp;quot;normal&amp;quot; builds.&lt;br /&gt;
&lt;br /&gt;
When you work with the non-pro version you will see some error messages or warnings at times. In most cases you can safely assume that you have found a bug. The non-pro version is a bit slower than the pro version.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>Divec</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Windows&amp;diff=3113</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Windows&amp;diff=3113"/>
		<updated>2005-12-15T14:50:00Z</updated>

		<summary type="html">&lt;p&gt;Divec: Added link to Windows Installer Hacking&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to OOo development for Windows ==&lt;br /&gt;
&lt;br /&gt;
This is an initial attempt to fill out information for building on Windows.&lt;br /&gt;
If it ends up being complete, this notice can be removed!  At the moment you&amp;#039;ll have to piece together information from [[#See also|other pages]] with the changes here for doing it on Windows.&lt;br /&gt;
&lt;br /&gt;
Most of this wiki assumes that you&amp;#039;ll be using a reasonably current Linux system, as a time saving feature.  While real hackers prefer [http://www.gnu.org Free software], if you&amp;#039;re forced to build stuff for Windows, this is the place to be.&lt;br /&gt;
&lt;br /&gt;
== Development Tools ==&lt;br /&gt;
&lt;br /&gt;
There have been several different ways of building with more or less success...&lt;br /&gt;
&lt;br /&gt;
The reference page to look at is [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html Building under Windows with tcsh]&lt;br /&gt;
&lt;br /&gt;
Other ways to build are documented below, the official way requires Visual C++ .NET 2003&lt;br /&gt;
&lt;br /&gt;
=== Visual C++ .NET 2003 ===&lt;br /&gt;
&lt;br /&gt;
This is the full version of Visual C++. It is the official way to build OpenOffice.org.&lt;br /&gt;
It seems like the Standard version of this (approx $109 price) should be sufficient but I have not confirmed this. (The alternative is the full Visual Studio).&lt;br /&gt;
&lt;br /&gt;
=== Visual C++ Toolkit 2003 ===&lt;br /&gt;
&lt;br /&gt;
[http://msdn.microsoft.com/visualc/vctoolkit2003/ Visual C++ Toolkit 2003] is not currently usable because it doesn&amp;#039;t contain all the libraries required for building OpenOffice.org. See [http://www.openoffice.org/issues/show_bug.cgi?id=51145 Issue 51145] for progress on this issue.&lt;br /&gt;
&lt;br /&gt;
TODO: fill in all the required libraries, and possible alternatives - in the issue.&lt;br /&gt;
&lt;br /&gt;
=== MinGW ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mingw.org/ MinGW] is basically gcc for Windows, without requiring the POSIX compatibility layer that CygWin provides. You can use the CygWin compiler with the -mno-cygwin switch and it has the same effect.&lt;br /&gt;
&lt;br /&gt;
MinGW is not officially supported at the moment, so it will probably take some work to get it &lt;br /&gt;
&lt;br /&gt;
Work to build OpenOffice.org with MinGW is at [http://qa.openoffice.org/issues/show_bug.cgi?id=24588 issue 24588] ; however this mostly deals with OpenOffice.org 1.1 branch at the moment.&lt;br /&gt;
&lt;br /&gt;
== Using vanilla source ==&lt;br /&gt;
&lt;br /&gt;
While ooo-build has been developed to make building OOo less painful, you might also try to start out with the standard source code. After you download and unpack a vanilla ooo source tarball, running &amp;amp;quot;configure&amp;amp;quot; in the directory &amp;amp;quot;config_office&amp;amp;quot; will gladly complain about missing build-dependencies. The remaining build process is described in the document [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html Building under Windows with tcsh]&lt;br /&gt;
&lt;br /&gt;
== Using ooo-build ==&lt;br /&gt;
&lt;br /&gt;
These are addenda to using ooo-build with the following command line:&lt;br /&gt;
  ./configure --with-win32&lt;br /&gt;
&lt;br /&gt;
ooo-build should pick up all the other requirements for you automatically (reading them out of the registry)&lt;br /&gt;
&lt;br /&gt;
=== Extra requirements ===&lt;br /&gt;
&lt;br /&gt;
* Cygwin requires the cabextract package.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous info ==&lt;br /&gt;
&lt;br /&gt;
* csc.exe comes from the c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 directory, you might need &amp;lt;tt&amp;gt;--with-csc-path&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Beware of using &amp;lt;tt&amp;gt;/c/&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;/cygdrive/c/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Avoid trailing slashes in configure parameters. They sure cause problems for &amp;lt;tt&amp;gt;--with-psdk-home&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Using the latest cygwin release (1.5.18) can lead to tcsh freezing in places - the build will appear to hang. you can fix this by using the latest snapshot (e.g. 20050825) or running &amp;#039;&amp;#039;cat /proc/$nnn/cmdline&amp;#039;&amp;#039; where $nnn is the number of the process. See [http://www.openoffice.org/issues/show_bug.cgi?id=51560 issue 51560] for more info...&lt;br /&gt;
* With cygwin 1.5.18, makecab.exe hangs when run from the build process (but it works fine when run standalone).  So you definitely want to use a snapshot and &amp;#039;&amp;#039;&amp;#039;avoid cygwin 1.5.18&amp;#039;&amp;#039;&amp;#039;, unless you enjoy wasting half a week of your life debugging like I did ...&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* To get started from scratch you most likely need to follow these steps (from the Linux version): [[Getting It]], [[Building]], [[Installing]], [[Running]]&lt;br /&gt;
* [[Windows Debugging]]&lt;br /&gt;
* [[Windows Tips]]&lt;br /&gt;
* [[Windows Installer Hacking]]&lt;/div&gt;</summary>
		<author><name>Divec</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Windows_Installer_Hacking&amp;diff=3112</id>
		<title>Windows Installer Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Windows_Installer_Hacking&amp;diff=3112"/>
		<updated>2005-12-15T14:49:08Z</updated>

		<summary type="html">&lt;p&gt;Divec: Add example perl script to create DDF file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how to modify a Windows installer EXE (the big, &amp;gt;70 MB one which contains everything).&lt;br /&gt;
&lt;br /&gt;
== Why? ==&lt;br /&gt;
&lt;br /&gt;
Normally this is a bad idea, and it is better to build OOo from scratch&lt;br /&gt;
yourself.  However, this may not be possible for various reasons, e.g. if:&lt;br /&gt;
&lt;br /&gt;
* You don&amp;#039;t have the (non-Free) toolchain available to build OOo.&lt;br /&gt;
* You&amp;#039;re modifying a non-Free OOo derivative and don&amp;#039;t have the source.&lt;br /&gt;
* You don&amp;#039;t have the time and resources available to build OOo&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
== OOo_2.0_Windows_install_en-US.exe ==&lt;br /&gt;
&lt;br /&gt;
This is an NSIS self-extracting installer.  It contains the following&lt;br /&gt;
structure:&lt;br /&gt;
&lt;br /&gt;
    openofficeorg1.cab&lt;br /&gt;
    openofficeorg2.cab&lt;br /&gt;
    openofficeorg3.cab&lt;br /&gt;
    openofficeorg4.cab&lt;br /&gt;
    openofficeorg20.msi&lt;br /&gt;
    instmsia.exe&lt;br /&gt;
    instmsiw.exe&lt;br /&gt;
    licenses/&lt;br /&gt;
    readmes/&lt;br /&gt;
    setup.exe&lt;br /&gt;
    setup.ini&lt;br /&gt;
&lt;br /&gt;
In the OOo 2.0 build process it is built from its contents using a command&lt;br /&gt;
(at &amp;quot;call_nsis&amp;quot; in solenv/bin/modules/installer/download.pm) which does&lt;br /&gt;
something like the following:&lt;br /&gt;
&lt;br /&gt;
    /cygdrive/c/Program\ Files/NSIS/makensis.exe c:/ooo2/ooo-build/build/ooo680-m3/instsetoo_native/wntmsci10.pro/OpenOffice/nsis/en-US/downloadtemplate.nsi&lt;br /&gt;
&lt;br /&gt;
The file&lt;br /&gt;
&lt;br /&gt;
    downloadtemplate.nsi&lt;br /&gt;
&lt;br /&gt;
contains instructions for building the .exe.  Its directory also contains&lt;br /&gt;
&lt;br /&gt;
    English_pack.nsh&lt;br /&gt;
    English_pack.nlf&lt;br /&gt;
&lt;br /&gt;
which both consist of text strings in the installer language and are&lt;br /&gt;
referenced from downloadtemplate.nsi.  (Various .ico and .bmp files, located&lt;br /&gt;
outside the directory, are also referenced).&lt;br /&gt;
&lt;br /&gt;
== CAB files ==&lt;br /&gt;
&lt;br /&gt;
These contain the actual files which get extracted.  Although CAB files can&lt;br /&gt;
apparently store a directory tree structure, these ones are flat.  The&lt;br /&gt;
filenames inside the CAB are often, but not always, the same as the names&lt;br /&gt;
when installed.&lt;br /&gt;
&lt;br /&gt;
N.B.  &amp;#039;&amp;#039;&amp;#039;The order in which files are stored is very important!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    cabextract -l # lists the contents of a cab file.&lt;br /&gt;
    makecab.exe /F blah.ddf # Create CAB from blah.ddf, a spec+filelist&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;blah.ddf&amp;quot; file can be generated with a perl script like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/perl -w&lt;br /&gt;
# &lt;br /&gt;
# Files to pack: c:\msi\files&lt;br /&gt;
# Output file path is relative to that directory&lt;br /&gt;
# Temporary work space: c:\msi\makecabtemp&lt;br /&gt;
# Usage: perl make-ddf.pl (list of names of files to pack, in order, without path)&lt;br /&gt;
# &lt;br /&gt;
print &amp;lt;&amp;lt;EOF;&lt;br /&gt;
.Set CabinetName1=../out.cab&lt;br /&gt;
.Set ReservePerCabinetSize=128&lt;br /&gt;
.Set MaxDiskSize=CDROM&lt;br /&gt;
.Set CompressionType=LZX&lt;br /&gt;
.Set Compress=ON&lt;br /&gt;
.Set CompressionLevel=2&lt;br /&gt;
.Set Cabinet=ON&lt;br /&gt;
.Set DiskDirectoryTemplate=c:/msi/makecabtemp&lt;br /&gt;
EOF&lt;br /&gt;
for my $file (@ARGV) {&lt;br /&gt;
    print qq(&amp;quot;c:\\msi\\files\\$file&amp;quot; $file\n);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some files in the CABs may not actually get installed: See Component.idt&lt;br /&gt;
below.&lt;br /&gt;
&lt;br /&gt;
== MSI file ==&lt;br /&gt;
&lt;br /&gt;
This is a relational database which controls the installation process.  It&lt;br /&gt;
can be dumped into tab-separated text files (*.idt), one per table, using&lt;br /&gt;
&lt;br /&gt;
    MsiDb.Exe -e -d blah.msi -f c:\text_file_dest *&lt;br /&gt;
&lt;br /&gt;
The text files can be dumped back into a new MSI like this:&lt;br /&gt;
&lt;br /&gt;
    MsiDb.Exe -i -d blah_new.msi -f c:\text_file_dest *.idt&lt;br /&gt;
&lt;br /&gt;
(N.B. In both cases, be sure to surround the * in quotes if you&amp;#039;re using a&lt;br /&gt;
UNIX shell)&lt;br /&gt;
&lt;br /&gt;
If you edit these text files, you have to be pretty careful, because there&lt;br /&gt;
is all sorts of referrential integrity to preserve between tables.  To&lt;br /&gt;
modify the install, some tables are particularly important:&lt;br /&gt;
&lt;br /&gt;
=== File.idt ===&lt;br /&gt;
&lt;br /&gt;
This is a list of files which *potentially* can be installed.&lt;br /&gt;
&lt;br /&gt;
* File is the name of the file in the archive.&lt;br /&gt;
&lt;br /&gt;
* Each file is part of a Component.&lt;br /&gt;
&lt;br /&gt;
* FileSize speaks for itself.&lt;br /&gt;
&lt;br /&gt;
* Sequence is the order in which the files appear in the CABs, and the&lt;br /&gt;
installer will *fail* if it is not correct.  (The Sequence is across all CAB&lt;br /&gt;
files, so for instance the first file in CAB 3 has the Sequence number one&lt;br /&gt;
higher than the last file in CAB 2).&lt;br /&gt;
&lt;br /&gt;
=== Directory.idt ===&lt;br /&gt;
&lt;br /&gt;
Defines directories per feature component&lt;br /&gt;
&lt;br /&gt;
=== Media.idt ===&lt;br /&gt;
&lt;br /&gt;
Specifies the CABs from which to obtain files.  Crucially, this specifies&lt;br /&gt;
the file number ranges contained within each CAB, so if you add any files&lt;br /&gt;
you will probably have to alter this.&lt;br /&gt;
&lt;br /&gt;
=== Feature.idt ===&lt;br /&gt;
&lt;br /&gt;
Defines Features, i.e. groupings of functionality which can be selected in&lt;br /&gt;
the installer.&lt;br /&gt;
&lt;br /&gt;
=== FeatureComponent.idt ===&lt;br /&gt;
&lt;br /&gt;
Each Feature is a set of components.&lt;br /&gt;
&lt;br /&gt;
=== Component.idt ===&lt;br /&gt;
&lt;br /&gt;
Specifies into which directory a component is installed (relative to the&lt;br /&gt;
Feature (?)), etc.  KeyPath is the First file in the component (in Sequence&lt;br /&gt;
order) (?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Full paths of executables ==&lt;br /&gt;
&lt;br /&gt;
* C:\Program Files\Microsoft Platform SDK\Bin\MsiDb.Exe&lt;br /&gt;
* C:\WINDOWS\system32\makecab.exe (on Windows XP)&lt;br /&gt;
* cabextract - UNIX (or cygwin) program&lt;/div&gt;</summary>
		<author><name>Divec</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Windows_Installer_Hacking&amp;diff=3111</id>
		<title>Windows Installer Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Windows_Installer_Hacking&amp;diff=3111"/>
		<updated>2005-12-15T14:34:53Z</updated>

		<summary type="html">&lt;p&gt;Divec: Initial text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how to modify a Windows installer EXE (the big, &amp;gt;70 MB one which contains everything).&lt;br /&gt;
&lt;br /&gt;
== Why? ==&lt;br /&gt;
&lt;br /&gt;
Normally this is a bad idea, and it is better to build OOo from scratch&lt;br /&gt;
yourself.  However, this may not be possible for various reasons, e.g. if:&lt;br /&gt;
&lt;br /&gt;
* You don&amp;#039;t have the (non-Free) toolchain available to build OOo.&lt;br /&gt;
* You&amp;#039;re modifying a non-Free OOo derivative and don&amp;#039;t have the source.&lt;br /&gt;
* You don&amp;#039;t have the time and resources available to build OOo&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
== OOo_2.0_Windows_install_en-US.exe ==&lt;br /&gt;
&lt;br /&gt;
This is an NSIS self-extracting installer.  It contains the following&lt;br /&gt;
structure:&lt;br /&gt;
&lt;br /&gt;
    openofficeorg1.cab&lt;br /&gt;
    openofficeorg2.cab&lt;br /&gt;
    openofficeorg3.cab&lt;br /&gt;
    openofficeorg4.cab&lt;br /&gt;
    openofficeorg20.msi&lt;br /&gt;
    instmsia.exe&lt;br /&gt;
    instmsiw.exe&lt;br /&gt;
    licenses/&lt;br /&gt;
    readmes/&lt;br /&gt;
    setup.exe&lt;br /&gt;
    setup.ini&lt;br /&gt;
&lt;br /&gt;
In the OOo 2.0 build process it is built from its contents using a command&lt;br /&gt;
(at &amp;quot;call_nsis&amp;quot; in solenv/bin/modules/installer/download.pm) which does&lt;br /&gt;
something like the following:&lt;br /&gt;
&lt;br /&gt;
    /cygdrive/c/Program\ Files/NSIS/makensis.exe c:/ooo2/ooo-build/build/ooo680-m3/instsetoo_native/wntmsci10.pro/OpenOffice/nsis/en-US/downloadtemplate.nsi&lt;br /&gt;
&lt;br /&gt;
The file&lt;br /&gt;
&lt;br /&gt;
    downloadtemplate.nsi&lt;br /&gt;
&lt;br /&gt;
contains instructions for building the .exe.  Its directory also contains&lt;br /&gt;
&lt;br /&gt;
    English_pack.nsh&lt;br /&gt;
    English_pack.nlf&lt;br /&gt;
&lt;br /&gt;
which both consist of text strings in the installer language and are&lt;br /&gt;
referenced from downloadtemplate.nsi.  (Various .ico and .bmp files, located&lt;br /&gt;
outside the directory, are also referenced).&lt;br /&gt;
&lt;br /&gt;
== CAB files ==&lt;br /&gt;
&lt;br /&gt;
These contain the actual files which get extracted.  Although CAB files can&lt;br /&gt;
apparently store a directory tree structure, these ones are flat.  The&lt;br /&gt;
filenames inside the CAB are often, but not always, the same as the names&lt;br /&gt;
when installed.&lt;br /&gt;
&lt;br /&gt;
N.B.  &amp;#039;&amp;#039;&amp;#039;The order in which files are stored is very important!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    cabextract -l # lists the contents of a cab file.&lt;br /&gt;
    makecab.exe /F blah.ddf # Create CAB from blah.ddf, a spec+filelist&lt;br /&gt;
&lt;br /&gt;
Some files in the CABs may not actually get installed: See Component.idt&lt;br /&gt;
below.&lt;br /&gt;
&lt;br /&gt;
== MSI file ==&lt;br /&gt;
&lt;br /&gt;
This is a relational database which controls the installation process.  It&lt;br /&gt;
can be dumped into tab-separated text files (*.idt), one per table, using&lt;br /&gt;
&lt;br /&gt;
    MsiDb.Exe -e -d blah.msi -f c:\text_file_dest *&lt;br /&gt;
&lt;br /&gt;
The text files can be dumped back into a new MSI like this:&lt;br /&gt;
&lt;br /&gt;
    MsiDb.Exe -i -d blah_new.msi -f c:\text_file_dest *.idt&lt;br /&gt;
&lt;br /&gt;
(N.B. In both cases, be sure to surround the * in quotes if you&amp;#039;re using a&lt;br /&gt;
UNIX shell)&lt;br /&gt;
&lt;br /&gt;
If you edit these text files, you have to be pretty careful, because there&lt;br /&gt;
is all sorts of referrential integrity to preserve between tables.  To&lt;br /&gt;
modify the install, some tables are particularly important:&lt;br /&gt;
&lt;br /&gt;
=== File.idt ===&lt;br /&gt;
&lt;br /&gt;
This is a list of files which *potentially* can be installed.&lt;br /&gt;
&lt;br /&gt;
* File is the name of the file in the archive.&lt;br /&gt;
&lt;br /&gt;
* Each file is part of a Component.&lt;br /&gt;
&lt;br /&gt;
* FileSize speaks for itself.&lt;br /&gt;
&lt;br /&gt;
* Sequence is the order in which the files appear in the CABs, and the&lt;br /&gt;
installer will *fail* if it is not correct.  (The Sequence is across all CAB&lt;br /&gt;
files, so for instance the first file in CAB 3 has the Sequence number one&lt;br /&gt;
higher than the last file in CAB 2).&lt;br /&gt;
&lt;br /&gt;
=== Directory.idt ===&lt;br /&gt;
&lt;br /&gt;
Defines directories per feature component&lt;br /&gt;
&lt;br /&gt;
=== Media.idt ===&lt;br /&gt;
&lt;br /&gt;
Specifies the CABs from which to obtain files.  Crucially, this specifies&lt;br /&gt;
the file number ranges contained within each CAB, so if you add any files&lt;br /&gt;
you will probably have to alter this.&lt;br /&gt;
&lt;br /&gt;
=== Feature.idt ===&lt;br /&gt;
&lt;br /&gt;
Defines Features, i.e. groupings of functionality which can be selected in&lt;br /&gt;
the installer.&lt;br /&gt;
&lt;br /&gt;
=== FeatureComponent.idt ===&lt;br /&gt;
&lt;br /&gt;
Each Feature is a set of components.&lt;br /&gt;
&lt;br /&gt;
=== Component.idt ===&lt;br /&gt;
&lt;br /&gt;
Specifies into which directory a component is installed (relative to the&lt;br /&gt;
Feature (?)), etc.  KeyPath is the First file in the component (in Sequence&lt;br /&gt;
order) (?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Full paths of executables ==&lt;br /&gt;
&lt;br /&gt;
* C:\Program Files\Microsoft Platform SDK\Bin\MsiDb.Exe&lt;br /&gt;
* C:\WINDOWS\system32\makecab.exe (on Windows XP)&lt;br /&gt;
* cabextract - UNIX (or cygwin) program&lt;/div&gt;</summary>
		<author><name>Divec</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Windows&amp;diff=2522</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Windows&amp;diff=2522"/>
		<updated>2005-12-05T00:30:05Z</updated>

		<summary type="html">&lt;p&gt;Divec: Added link to Windows Tips; moved important links to their own section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to OOo development for Windows ==&lt;br /&gt;
&lt;br /&gt;
This is an initial attempt to fill out information for building on Windows.&lt;br /&gt;
If it ends up being complete, this notice can be removed!  At the moment you&amp;#039;ll have to piece together information from [[#See also|other pages]] with the changes here for doing it on Windows.&lt;br /&gt;
&lt;br /&gt;
Most of this wiki assumes that you&amp;#039;ll be using a reasonably current Linux system, as a time saving feature.  While real hackers prefer [http://www.gnu.org Free software], if you&amp;#039;re forced to build stuff for Windows, this is the place to be.&lt;br /&gt;
&lt;br /&gt;
== Development Tools ==&lt;br /&gt;
&lt;br /&gt;
There have been several different ways of building with more or less success...&lt;br /&gt;
&lt;br /&gt;
The reference page to look at is [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html Building under Windows with tcsh]&lt;br /&gt;
&lt;br /&gt;
Other ways to build are documented below, the official way requires Visual C++ .NET 2003&lt;br /&gt;
&lt;br /&gt;
=== Visual C++ .NET 2003 ===&lt;br /&gt;
&lt;br /&gt;
This is the full version of Visual C++. It is the official way to build OpenOffice.org.&lt;br /&gt;
It seems like the Standard version of this (approx $109 price) should be sufficient but I have not confirmed this. (The alternative is the full Visual Studio).&lt;br /&gt;
&lt;br /&gt;
=== Visual C++ Toolkit 2003 ===&lt;br /&gt;
&lt;br /&gt;
[http://msdn.microsoft.com/visualc/vctoolkit2003/ Visual C++ Toolkit 2003] is not currently usable because it doesn&amp;#039;t contain all the libraries required for building OpenOffice.org. See [http://www.openoffice.org/issues/show_bug.cgi?id=51145 Issue 51145] for progress on this issue.&lt;br /&gt;
&lt;br /&gt;
TODO: fill in all the required libraries, and possible alternatives - in the issue.&lt;br /&gt;
&lt;br /&gt;
=== MinGW ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mingw.org/ MinGW] is basically gcc for Windows, without requiring the POSIX compatibility layer that CygWin provides. You can use the CygWin compiler with the -mno-cygwin switch and it has the same effect.&lt;br /&gt;
&lt;br /&gt;
MinGW is not officially supported at the moment, so it will probably take some work to get it &lt;br /&gt;
&lt;br /&gt;
Work to build OpenOffice.org with MinGW is at [http://qa.openoffice.org/issues/show_bug.cgi?id=24588 issue 24588] ; however this mostly deals with OpenOffice.org 1.1 branch at the moment.&lt;br /&gt;
&lt;br /&gt;
== Using vanilla source ==&lt;br /&gt;
&lt;br /&gt;
While ooo-build has been developed to make building OOo less painful, you might also try to start out with the standard source code. After you download and unpack a vanilla ooo source tarball, running &amp;quot;configure&amp;quot; in the directory &amp;quot;config_office&amp;quot; will gladly complain about missing build-dependencies. The remaining build process is described in the document [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html Building under Windows with tcsh]&lt;br /&gt;
&lt;br /&gt;
== Using ooo-build ==&lt;br /&gt;
&lt;br /&gt;
These are addenda to using ooo-build with the following command line:&lt;br /&gt;
  ./configure --with-win32&lt;br /&gt;
&lt;br /&gt;
ooo-build should pick up all the other requirements for you automatically (reading them out of the registry)&lt;br /&gt;
&lt;br /&gt;
=== Extra requirements ===&lt;br /&gt;
&lt;br /&gt;
* Cygwin requires the cabextract package.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous info ==&lt;br /&gt;
&lt;br /&gt;
* csc.exe comes from the c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 directory, you might need &amp;lt;tt&amp;gt;--with-csc-path&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Beware of using &amp;lt;tt&amp;gt;/c/&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;/cygdrive/c/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Avoid trailing slashes in configure parameters. They sure cause problems for &amp;lt;tt&amp;gt;--with-psdk-home&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Using the latest cygwin release (1.5.18) can lead to tcsh freezing in places - the build will appear to hang. you can fix this by using the latest snapshot (e.g. 20050825) or running &amp;#039;&amp;#039;cat /proc/$nnn/cmdline&amp;#039;&amp;#039; where $nnn is the number of the process. See [http://www.openoffice.org/issues/show_bug.cgi?id=51560 issue 51560] for more info...&lt;br /&gt;
* With cygwin 1.5.18, makecab.exe hangs when run from the build process (but it works fine when run standalone).  So you definitely want to use a snapshot and &amp;#039;&amp;#039;&amp;#039;avoid cygwin 1.5.18&amp;#039;&amp;#039;&amp;#039;, unless you enjoy wasting half a week of your life debugging like I did ...&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* To get started from scratch you most likely need to follow these steps (from the Linux version): [[Getting It]], [[Building]], [[Installing]], [[Running]]&lt;br /&gt;
* [[Windows Debugging]]&lt;br /&gt;
* [[Windows Tips]]&lt;/div&gt;</summary>
		<author><name>Divec</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Windows_Tips&amp;diff=2521</id>
		<title>Windows Tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Windows_Tips&amp;diff=2521"/>
		<updated>2005-12-05T00:29:06Z</updated>

		<summary type="html">&lt;p&gt;Divec: Closing the quickstarter from a macro&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Closing the Windows quickstarter from a macro ==&lt;br /&gt;
&lt;br /&gt;
There seems to be no obvious way to close quickstart.exe (the OOo icon in the system tray) using UNO.  Indeed, &amp;quot;quickstart -killtray&amp;quot; itself does it by searching the running system processes for one with the correct name and path.  The following Basic snippet is a work-round that is OK for some purposes:&lt;br /&gt;
&lt;br /&gt;
  sub KillQuickstarter()&lt;br /&gt;
      &amp;#039; Runs &amp;quot;quickstart -killtray&amp;quot;&lt;br /&gt;
      subst = CreateUnoService(&amp;quot;com.sun.star.util.PathSubstitution&amp;quot;)&lt;br /&gt;
      quickstartPath = subst.substituteVariables(&amp;quot;$(prog)/quickstart&amp;quot;, 1)&lt;br /&gt;
      shell(quickstartPath, 0, &amp;quot;-killtray&amp;quot;)&lt;br /&gt;
  end sub&lt;/div&gt;</summary>
		<author><name>Divec</name></author>
	</entry>
</feed>