<?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=DavidRoss</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=DavidRoss"/>
	<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/wiki/Special:Contributions/DavidRoss"/>
	<updated>2026-10-17T20:11:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Category:Distribution-Specific_Build_Instructions&amp;diff=106102</id>
		<title>Category:Distribution-Specific Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Category:Distribution-Specific_Build_Instructions&amp;diff=106102"/>
		<updated>2008-12-31T18:37:21Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Yes, [[ooo-build]] has distribution-specific behavior.  Most of the differences lie in package naming (e.g. &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;xxx&amp;#039;&amp;#039;-devel&amp;#039;&amp;#039;&amp;#039; on Fedora/SuSE vs &amp;#039;&amp;#039;&amp;#039;lib&amp;#039;&amp;#039;xxx&amp;#039;&amp;#039;-dev&amp;#039;&amp;#039;&amp;#039; on Debian/Ubuntu) and availability.&lt;br /&gt;
&lt;br /&gt;
You may be safest going with SuSE, since that&amp;#039;s where most of the development seems to be happening, but everyone has their favorite distro.&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DE/Building_OpenOffice.org_de&amp;diff=105839</id>
		<title>DE/Building OpenOffice.org de</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DE/Building_OpenOffice.org_de&amp;diff=105839"/>
		<updated>2008-12-29T04:16:31Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;br /&gt;
&lt;br /&gt;
Dies sind die Anweisungen, wie man ein &amp;quot;einfaches&amp;quot; (&amp;quot;vanilla&amp;quot;) (oder &amp;quot;Up-Stream&amp;quot;) OpenOffice.org erstellt. Einfach bedeutet: ohne Werkzeuge wie ooo-build, das den Build-Prozeß übernimmt. Falls Sie ooo-build verwenden, schauen Sie stattdessen auf [[Erstellen_mit_ooobuild]].&lt;br /&gt;
&lt;br /&gt;
= Kompilieren von OpenOffice.org : das Verfahren =&lt;br /&gt;
== Bekommen der Quellen ==&lt;br /&gt;
Um diese Anweisungen nicht länger als nötig zu machen, gibt es eine spezielle Seite hierzu unter [[Getting_It | Wie man die Quellen bekommt]].&lt;br /&gt;
&lt;br /&gt;
== Abhängigkeiten == &lt;br /&gt;
Sie benötigen natürlich einige installierte Entwicklungs-Bibliotheken (development libraries), um OpenOffice.org zu erstellen.&lt;br /&gt;
Das Skript configure wird es beanstanden, wenn etwas fehlt.&lt;br /&gt;
Bis dieser Leitfaden die Voraussetzungen auflistet, schauen Sie auf http://tools.openoffice.org/&lt;br /&gt;
&lt;br /&gt;
==Unterschiedliche Plattformen==&lt;br /&gt;
Einige Informationen für bestimmte Plattformen werden unter [http://tools.openoffice.org#Build tools] zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Sehen Sie sich für OS X auch  [[AquaBuild]] ( experimentale Aqua-Version von OpenOffice.org) oder [[MacOSXBuildInstructions]] ( X11-Version ), für GNU/Linux Sparc [[GNULinuxSparcPorting]] und für Windows [[Windows]] an.&lt;br /&gt;
&lt;br /&gt;
= Einen Meilenstein (Milestone) erstellen =&lt;br /&gt;
== Configure laufen lassen ==&lt;br /&gt;
Der erste Schritt nach dem Erhalten der Quellen (und hoffentlich aller Voraussetzungen) ist das laufen lassen von configure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd &amp;lt;SRC_ROOT&amp;gt;&lt;br /&gt;
cd config_office&lt;br /&gt;
./configure&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sie werden höchst wahrscheinlich configure mitteilen müssen, wo es einige Pakete wie beispielsweise Ant findet und welches Java es benutzen soll. Verwenden Sie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure --help&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
, um eine Liste der gültigen Optionen zu erhalten, die Sie verwenden können.&lt;br /&gt;
&lt;br /&gt;
Falls Sie vergessen haben sollten, einige Abhängigkeiten zu installieren, wird Sie das Skript configure daran erinnern, welche fehlen.&lt;br /&gt;
&lt;br /&gt;
Besonderer Tipp in Bezug auf Ant: Stellen Sie sicher, dass Sie einen absoluten Pfad verwenden.&lt;br /&gt;
&lt;br /&gt;
== Bootstrappen ==&lt;br /&gt;
Falls configure sauber durchläuft (d.h., es endet ohne irgendeinen Fehler oder eine Warnung), können Sie mit dem Erstellen fortfahren. &lt;br /&gt;
Configure erstellt eine Umgebungsdatei, die Sie in Ihre Shell einlesen müssen.&lt;br /&gt;
Falls Sie eine Bash laufen haben, benutzen Sie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd &amp;lt;SRC_ROOT&amp;gt;&lt;br /&gt;
source LinuxX86Env.Set.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Falls Sie eine tcsh oder etwas ähnliches laufen haben, verwenden Sie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd &amp;lt;SRC_ROOT&amp;gt;&lt;br /&gt;
source LinuxX86Env.Set&lt;br /&gt;
rehash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beachten Sie: der Dateiname des Umgebungsskriptes könnte auf einer anderen Systemarchitektur anders lauten. Ersetzen Sie &amp;#039;X86&amp;#039; durch etwas, das adäquat ist. Beachten Sie auch, dass es bei älteren Versionen &amp;#039;Intel&amp;#039; und nicht &amp;#039;X86&amp;#039; ist.&lt;br /&gt;
&lt;br /&gt;
Der letzte Schritt vor dem realen Erstellen besteht darin, die Erstellungswerkzeuge (buildtools) zu kreieren, die OOo verwendet. Um dies   zu tun, lassen Sie einfach folgendes laufen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bootstrap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in &amp;lt;SRC_ROOT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das eigentliche Erstellen starten ==&lt;br /&gt;
Nun ist es an der Zeit für das eigentliche Erstellen&lt;br /&gt;
Tippen Sie einfach &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in &amp;lt;SRC_ROOT&amp;gt; ein und entspannen Sie sich dann.&lt;br /&gt;
Das Erstellen von OOo erfordert einige Zeit (circa 10-12 Stunden auf einem Standard-Schreibtisch-PC), weshalb Sie in der Zwischenzeit andere Dinge tun können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Erstellen eines [[CWS]] =&lt;br /&gt;
Um einen Child Workspace (CWS) zu erstellen, müssen Sie zuerst den Meilenstein (milestone) auschecken, auf dem der CWS basiert (sehen Sie oben das Erhalten der Quellen). Danach müssen Sie die Module, die in den CWS einbezogen sind, mit den CVS-Markierungen (cvs tag) des CWS aktualisieren.&lt;br /&gt;
&lt;br /&gt;
Sie können entweder [[EIS]] verwenden, um Informationen darüber zu erhalten, welcher Meilenstein die Basis für den CWS ist (sehen Sie sich hierzu das Feld &amp;quot;Milestone (current)&amp;quot; an) und welche Module in ihn einbezogen sind (sehen Sie sich hierzu die Tabelle &amp;quot;Modules &amp;amp; Files&amp;quot; an). Oder Sie können [http://go-oo.org/tinderbox/tags/tag-list Tinderbox&amp;#039;s tag-list] benutzen, um diese Information zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Sobald Sie alle benötigten Informationen gesammelt haben, können Sie folgendes ausführen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd &amp;lt;SRC_ROOT&amp;gt;&lt;br /&gt;
setenv CVSROOT &amp;quot;:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&amp;quot;&lt;br /&gt;
cvs [optional cvs flags such as -z #] update -dP -r &amp;lt;cwstag&amp;gt; &amp;lt;module1&amp;gt; &amp;lt;module2&amp;gt; &amp;lt;moduleN&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wobei &lt;br /&gt;
* SRC_ROOT das Verzeichnis auf der obersten Ebene Ihres Meilenstein-Checkouts ist.&lt;br /&gt;
* cwstag die CVS-Markierung (cvs tag) des CWS ist. Die Markierung ist in der Form cws_&amp;lt;main codeline&amp;gt;_&amp;lt;name of cws&amp;gt;, zum Beispiel cws_src680_chart2mst3&lt;br /&gt;
&lt;br /&gt;
Beachten Sie: Falls Sie CVS verwenden, das einen SSH-Tunnel benutzt, verwenden Sie SSH-Kompression eher als CVS-Kompression - dies ergibt bessere Resultate&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel können Sie eingeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd src680-m172&lt;br /&gt;
setenv CVSROOT &amp;quot;:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&amp;quot;&lt;br /&gt;
cvs -z3 update -dP -r cws_src680_chart2mst3 chart2/ offuh/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tips and Tricks =&lt;br /&gt;
&lt;br /&gt;
Hier einige Tipps, die Ihnen das Leben leichter machen oder das Erstellen beschleunigen können.&lt;br /&gt;
&lt;br /&gt;
== ccache ==&lt;br /&gt;
Falls es möglich ist, ist es stärksten empfohlen, [http://ccache.samba.org/ ccache] zu installieren (und zu konfigurieren) - dies wird  die Build-Zeit für anschließende Builds sehr stark reduzieren. Geben Sie die Erlaubnis für einen großen Cache und eine Menge von Dateien für den kompletten OOo-Build-Baum. Falls Sie an mehreren [[CWS]]s gleichzeitig arbeiten, zahlt es sich aus, seperate Cache zu  haben wie auch seperate Cache für Nichtproduktive-/Produktiv-Builds innerhalb eines CWS, z.B. führen Sie, nachdem Sie die Umgebung gesourced haben, folgende Kommandos aus:&lt;br /&gt;
&lt;br /&gt;
 export CCACHE_DIR=&amp;quot;${YOUR_SOURCES}/$CWS_WORK_STAMP/.ccache_$INPATH&amp;quot;&lt;br /&gt;
 ccache -M 2G -F 100000&lt;br /&gt;
 export CC=&amp;quot;ccache gcc&amp;quot;&lt;br /&gt;
 export CXX=&amp;quot;ccache g++&amp;quot;&lt;br /&gt;
&lt;br /&gt;
in der Bash beziehungsweise in der Tcsh&lt;br /&gt;
&lt;br /&gt;
 setenv CCACHE_DIR &amp;quot;${YOUR_SOURCES}/$CWS_WORK_STAMP/.ccache_$INPATH&amp;quot;&lt;br /&gt;
 ccache -M 2G -F 100000&lt;br /&gt;
 setenv CC &amp;quot;ccache gcc&amp;quot;&lt;br /&gt;
 setenv CXX &amp;quot;ccache g++&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Für Windows: Laden Sie von [http://artax.karlin.mff.cuni.cz/~kendy/ccache/ hier] herunter und machen Sie das Folgende:&lt;br /&gt;
&lt;br /&gt;
 export CCACHE_DIR=&amp;quot;some/place/with/space&amp;quot;&lt;br /&gt;
 ccache -M 2G -F 10000&lt;br /&gt;
 export CCACHE_CPP2=TRUE&lt;br /&gt;
 export CXX=&amp;quot;guw.pl ccache cl&amp;quot;&lt;br /&gt;
 # export USE_PCH=  if you experience trouble with precompiled headers&lt;br /&gt;
&lt;br /&gt;
in der Bash beziehungsweise in 4NT:&lt;br /&gt;
&lt;br /&gt;
 set CCACHE_DIR=&amp;quot;some/place/with/space&amp;quot;&lt;br /&gt;
 ccache -M 2G -F 10000&lt;br /&gt;
 set CXX=ccache cl&lt;br /&gt;
 unset USE_PCH&lt;br /&gt;
 # if you want to experient with precompiled headers (not recommended):&lt;br /&gt;
 set CCACHE_CPP2=TRUE and keep USE_PCH=TRUE&lt;br /&gt;
&lt;br /&gt;
Sehen Sie sich auch dies [http://www.nabble.com/ccache-for-MSVC-t4013218.html thread] an als Hintergrundinformation über Windows-CCache-Spezifikationen.&lt;br /&gt;
&lt;br /&gt;
== set nodep=TRUE ==&lt;br /&gt;
Falls Sie  die Umgebungsvariable nodep auf TRUE setzen, werden keine Dateien mit Informationen zu den Abhängigkeiten erstellt - das Build wird damit schneller fertiggestellt.&lt;br /&gt;
&lt;br /&gt;
Allerdings sollten Sie dies nur in einem sauberen Build aktivieren. Sobald Sie OOo erstellt und danach Veränderungen vorgenommen haben, setzen Sie diese Variable wieder zurück um auf der sicheren Seite zu sein.&lt;br /&gt;
&lt;br /&gt;
== set NO_HIDS=TRUE ==&lt;br /&gt;
Ähnlich der Variable nodeps unterdrückt diese das Erstellen von (Hilfe-IDs), die hauptsächlich für das automatische Testen verwendet werden - falls Sie nur OOo erstellen wollen, brauchen Sie diese nicht.&lt;br /&gt;
&lt;br /&gt;
== Verwenden von parallelen Builds ==&lt;br /&gt;
Falls Sie eine Mehrprozessormaschine oder etwas ähnliches haben, können Sie parallele Builds starten. Es gibt zwei Ebenen von Parallelisierung - eine, die auf der Ebene des Makefiles arbeitet und eine andere auf Modulebene.&lt;br /&gt;
&lt;br /&gt;
=== set MAXPROCESS=&amp;lt;Anzahl oder Prozesse&amp;gt; ===&lt;br /&gt;
Dies ist die Makefile-Parallelisierung. Dies teilt dmake mit, wieviele Vorgaben ihm für das Parallele Erstellen erlaubt sind.&lt;br /&gt;
&lt;br /&gt;
=== starten von parallelen build.pl ===&lt;br /&gt;
Für Parallelisierung auf Modulebene müssen Sie build aus dem Verzeichnis &amp;lt;SRC_ROOT&amp;gt;/instsetoo_native starten mit dem Schalter -P&amp;lt;number&amp;gt;, zum Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
build -P2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Erstellen eines prebuilt Mozilla und Verwendung dieses anstelle eines jedesmal neukompilierten ==&lt;br /&gt;
Für die Mozilla-Komponenten haben Sie die Möglichkeit, diese entweder aus den Mozillaquellen zu erstellen, vorkompilierte Pakete ([http://tools.openoffice.org/moz_prebuild/680/ die &amp;quot;offiziellen&amp;quot; können Sie von tools.openoffice.org erhalten]) oder das System-Mozilla (dasjenige, das auf Ihrem Buildsystem installiert ist; nicht alles mag funktionieren, abhängig von der Version, die Sie installiert haben) benutzen.&lt;br /&gt;
Sie können einfach Ihre eigene Version von vorkonfigurierten Binärdateien erstellen, wenn Sie dies tun wollen (entweder weil Sie die offiziellen nicht benutzen können aufgrund einer nicht passenden Kompilerversion, die zu ihrem Erstellen benutzt wurde, oder aus anderen technischen Gründen oder weil Sie nicht Sachen benutzen wollen, die Sie nicht selbst erstellt haben).&lt;br /&gt;
Um dies zu tun,&lt;br /&gt;
&lt;br /&gt;
* erstellen Sie das Modul &amp;lt;code&amp;gt;moz&amp;lt;/code&amp;gt; aus den Mozillaquellen&amp;lt;br/&amp;gt;(verwenden Sie hierzu &amp;lt;code&amp;gt;--enable-build-mozilla&amp;lt;/code&amp;gt;, wenn Sie configure starten und legen Sie den Mozillaquellen-Tarball in das Verzeichnis &amp;lt;code&amp;gt;moz/download&amp;lt;/code&amp;gt;)&lt;br /&gt;
* in &amp;lt;code&amp;gt;moz&amp;lt;/code&amp;gt; run &amp;lt;code&amp;gt;dmake zip&amp;lt;/code&amp;gt; to create the zip files&lt;br /&gt;
* you&amp;#039;ll find the zips in &amp;lt;code&amp;gt;{unxlngi#,wntmsci#}.pro/zipped&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy them to a location of your liking.&lt;br /&gt;
Now instead of using &amp;lt;code&amp;gt;--enable-build-mozilla&amp;lt;/code&amp;gt;, use &amp;lt;code&amp;gt;--disable-build-mozilla&amp;lt;/code&amp;gt; and copy the zips you created or downloaded to &amp;lt;code&amp;gt;moz/zipped&amp;lt;/code&amp;gt; and these will be used when compiling.&lt;br /&gt;
This will greatly reduce build-time (you save the time that would otherwise be spent on compiling mozilla)&lt;br /&gt;
&lt;br /&gt;
== Sparen von Plattenplatz allein durch das Verknüpfen zum Solver ==&lt;br /&gt;
Verwenden Sie &amp;quot;--dlv_switch -link&amp;quot;, wenn Sie build starten, um deliver mitzuteilen, dass es die Dateien nur verknüpfen soll, anstatt sie  zu kopieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
build --dlv_switch -link&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reparieren des EPM-4-Produktnamenfehlers ==&lt;br /&gt;
Falls Sie folgende Fehlermeldung erhalten &amp;quot;epm: Product names can only contain letters and numbers!&amp;quot;, müssen Sie epm patchen und die Namensprüfung auskommentieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /*&lt;br /&gt;
  * for (i = 0; prodname[i]; i ++)&lt;br /&gt;
  *   if (!isalnum(prodname[i] &amp;amp; 255))&lt;br /&gt;
  *   {&lt;br /&gt;
  *     puts(&amp;quot;epm: Product names can only contain letters and numbers!&amp;quot;);&lt;br /&gt;
  *     usage();&lt;br /&gt;
  *   }&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Building_de&amp;diff=105838</id>
		<title>Building de</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Building_de&amp;diff=105838"/>
		<updated>2008-12-29T04:16:03Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
Es gibt zumindest zwei Wege, um OOo zu erstellen (build):&lt;br /&gt;
* Up-Stream - benuten Sie einfach die Quellen und das enthaltene Buildsystem direkt (dies wird erklärt in [[Building OpenOffice.org_de]])&lt;br /&gt;
* ooo-build - ein System, das den Prozess einkapselt und einige ergänzende Patchsets verwaltet (mehr dazu in [[Erstellen mit ooobuild]])&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einige [[:Category:Distribution-Specific_Build_Instructions | Distributionsspezifische Anleitungen ]].&lt;br /&gt;
&lt;br /&gt;
== Sehen Sie sich auch an ==&lt;br /&gt;
&lt;br /&gt;
* [[Installing]]&lt;br /&gt;
* [http://tools.openoffice.org/ tools] Project für Build-Anleitungen für verschiedene Plattformen&lt;br /&gt;
&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/WritingUNO/C%2B%2B/Building_and_Testing_C%2B%2B_Components&amp;diff=105837</id>
		<title>Documentation/DevGuide/WritingUNO/C++/Building and Testing C++ Components</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/WritingUNO/C%2B%2B/Building_and_Testing_C%2B%2B_Components&amp;diff=105837"/>
		<updated>2008-12-29T04:15:42Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/DevGuide/WritingUNOTOC&lt;br /&gt;
|WritingUNO2d=block&lt;br /&gt;
|ShowPrevNext=block&lt;br /&gt;
|PrevPage=Documentation/DevGuide/WritingUNO/C++/Multiple Components in One Dynamic Link Library&lt;br /&gt;
|NextPage=Documentation/DevGuide/WritingUNO/Integrating Components into OpenOffice.org&lt;br /&gt;
}}&lt;br /&gt;
[[zh:Zh/Documentation/DevGuide/WritingUNO/C++/Building and Testing C++ Components]]&lt;br /&gt;
{{DISPLAYTITLE:Building and Testing C++ Components}}&lt;br /&gt;
=== Build Process ===&lt;br /&gt;
&lt;br /&gt;
For details about building component code, see the gnu makefile. It uses a number of platform dependent variables used in the SDK that are included from &amp;#039;&amp;#039;&amp;lt;SDK&amp;gt;/settings/settings.mk&amp;#039;&amp;#039;. For simplicity, details are omitted here, and the build process is just sketched in eight steps:&lt;br /&gt;
&lt;br /&gt;
# The UNOIDL compiler compiles the &amp;#039;&amp;#039;.idl&amp;#039;&amp;#039; file &amp;#039;&amp;#039;some.idl&amp;#039;&amp;#039; into an urd file.&lt;br /&gt;
# The resulting binary &amp;#039;&amp;#039;.urd&amp;#039;&amp;#039; files are merged into a new &amp;#039;&amp;#039;simple_component.rdb&amp;#039;&amp;#039;. &lt;br /&gt;
# The tool &amp;#039;&amp;#039;xml2cmp&amp;#039;&amp;#039; parses the xml component description &amp;#039;&amp;#039;simple_component.xml&amp;#039;&amp;#039; for types needed for compiling. This file describes the service implementation(s) for deployment, such as the purpose of the implementation(s) and used types. Visit [http://udk.openoffice.org/common/man/module_description.html http://udk.openoffice.org/common/man/module_description.html] for details about the syntax of these XML files.&lt;br /&gt;
# The types parsed in step 3 are passed to &amp;#039;&amp;#039;cppumaker&amp;#039;&amp;#039;, which generates the appropriate header pairs into the output include directory using &amp;#039;&amp;#039;simple_component.rdb&amp;#039;&amp;#039; and the {{PRODUCTNAME}} type library &amp;#039;&amp;#039;types.rdb&amp;#039;&amp;#039; that is stored in the program directory of your {{PRODUCTNAME}} installation.&lt;br /&gt;
&lt;br /&gt;
{{Documentation/Tip|For your own component you can simplify step 3 and 4, and pass the types used by your component to &amp;#039;&amp;#039;cppumaker&amp;#039;&amp;#039; using the -T option.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=5&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The source files &amp;#039;&amp;#039;service1_impl.cxx&amp;#039;&amp;#039; and &amp;#039;&amp;#039;service2_impl.cxx&amp;#039;&amp;#039; are compiled.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The shared library is linked out of object files, linking dynamically to the UNO base libraries sal, cppu and cppuhelper. The shared library&amp;#039;s name is &amp;#039;&amp;#039;libsimple_component.so&amp;#039;&amp;#039; on Unix and &amp;#039;&amp;#039;simple_component.dll&amp;#039;&amp;#039; on Windows.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Documentation/Caution|In general, the shared library component should limit its exports to only the above mentioned functions (prefixed with &amp;lt;tt&amp;gt;component_&amp;lt;/tt&amp;gt;) to avoid symbol clashes on Unix. In addition, for the gnu gcc3 C++ compiler, it is necessary to export the RTTI symbols of exceptions, too.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=7&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The shared library component is registered into &amp;#039;&amp;#039;simple_component.rdb&amp;#039;&amp;#039;. This can also be done manually running&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ regcomp -register -r simple_component.rdb -c simple_component.dll&lt;br /&gt;
&lt;br /&gt;
=== Test Registration and Use ===&lt;br /&gt;
&lt;br /&gt;
The component&amp;#039;s registry &amp;#039;&amp;#039;simple_component.rdb&amp;#039;&amp;#039; has entries for the registered service implementations. If the library is registered successfully, run:&lt;br /&gt;
&lt;br /&gt;
  $ regview simple_component.rdb&lt;br /&gt;
&lt;br /&gt;
The result should look similar to the following:&lt;br /&gt;
&lt;br /&gt;
  /&lt;br /&gt;
    / UCR&lt;br /&gt;
      / my_module&lt;br /&gt;
        / XSomething&lt;br /&gt;
  &lt;br /&gt;
          ... interface information ...&lt;br /&gt;
  &lt;br /&gt;
    / IMPLEMENTATIONS&lt;br /&gt;
      / my_module.my_sc_impl.MyService2&lt;br /&gt;
        / UNO&lt;br /&gt;
          / ACTIVATOR&lt;br /&gt;
            Value: Type = RG_VALUETYPE_STRING&lt;br /&gt;
                   Size = 34&lt;br /&gt;
                   Data = &amp;quot;com.sun.star.loader.SharedLibrary&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
          / SERVICES&lt;br /&gt;
            / my_module.MyService2&lt;br /&gt;
          / LOCATION&lt;br /&gt;
            Value: Type = RG_VALUETYPE_STRING&lt;br /&gt;
                   Size = 21&lt;br /&gt;
                   Data = &amp;quot;simple_component.dll&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
      / my_module.my_sc_impl.MyService1&lt;br /&gt;
        / UNO&lt;br /&gt;
          / ACTIVATOR&lt;br /&gt;
            Value: Type = RG_VALUETYPE_STRING&lt;br /&gt;
                   Size = 34&lt;br /&gt;
                   Data = &amp;quot;com.sun.star.loader.SharedLibrary&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
          / SERVICES&lt;br /&gt;
            / my_module.MyService1&lt;br /&gt;
          / LOCATION&lt;br /&gt;
            Value: Type = RG_VALUETYPE_STRING&lt;br /&gt;
                   Size = 21&lt;br /&gt;
                   Data = &amp;quot;simple_component.dll&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    / SERVICES&lt;br /&gt;
      / my_module.MyService1&lt;br /&gt;
        Value: Type = RG_VALUETYPE_STRINGLIST&lt;br /&gt;
               Size = 40&lt;br /&gt;
               Len = 1&lt;br /&gt;
               Data = 0 = &amp;quot;my_module.my_sc_impl.MyService1&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
      / my_module.MyService2&lt;br /&gt;
        Value: Type = RG_VALUETYPE_STRINGLIST&lt;br /&gt;
               Size = 40&lt;br /&gt;
               Len = 1&lt;br /&gt;
               Data = 0 = &amp;quot;my_module.my_sc_impl.MyService2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{PRODUCTNAME}} recognizes registry files being inserted into the &amp;#039;&amp;#039;unorc&amp;#039;&amp;#039; file (on Unix, &amp;#039;&amp;#039;uno.ini&amp;#039;&amp;#039; on Windows) in the program directory of your {{PRODUCTNAME}} installation. Extend the types and services in that file by &amp;#039;&amp;#039;simple_component.rdb&amp;#039;&amp;#039;. The given file has to be an absolute file URL, but if the rdb is copied to the {{PRODUCTNAME}} program directory, a $ORIGIN macro can be used, as shown in the following &amp;#039;&amp;#039;unorc&amp;#039;&amp;#039; file:&lt;br /&gt;
&lt;br /&gt;
  [Bootstrap]&lt;br /&gt;
  UNO_TYPES=$ORIGIN/types.rdb $ORIGIN/simple_component.rdb&lt;br /&gt;
  UNO_SERVICES=$ORIGIN/services.rdb $ORIGIN/simple_component.rdb&lt;br /&gt;
&lt;br /&gt;
Second, when running {{PRODUCTNAME}}, extend the PATH (Windows) or LD_LIBRARY_PATH (Unix), including the output path of the build, so that the loader finds the component. If the shared library is copied to the program directory or a link is created inside the program directory (Unix only), do not extend the path.&lt;br /&gt;
&lt;br /&gt;
Launching the test component inside a {{PRODUCTNAME}} Basic script is simple to do, as shown in the following code:&lt;br /&gt;
&lt;br /&gt;
  Sub Main&lt;br /&gt;
  &lt;br /&gt;
      REM calling service1 impl&lt;br /&gt;
      mgr = getProcessServiceManager()&lt;br /&gt;
      o = mgr.createInstance(&amp;quot;my_module.MyService1&amp;quot;)&lt;br /&gt;
      MsgBox o.methodOne(&amp;quot;foo&amp;quot;)&lt;br /&gt;
      MsgBox o.dbg_supportedInterfaces&lt;br /&gt;
  &lt;br /&gt;
      REM calling service2 impl&lt;br /&gt;
      dim args( 0 )&lt;br /&gt;
      args( 0 ) = &amp;quot;foo&amp;quot;&lt;br /&gt;
      o = mgr.createInstanceWithArguments(&amp;quot;my_module.MyService2&amp;quot;, args())&lt;br /&gt;
      MsgBox o.methodOne(&amp;quot;bar&amp;quot;)&lt;br /&gt;
      MsgBox o.dbg_supportedInterfaces&lt;br /&gt;
  &lt;br /&gt;
  End Sub&lt;br /&gt;
&lt;br /&gt;
This procedure instantiates the service implementations and performs calls on their interfaces. The return value of the &amp;lt;code&amp;gt;methodOne()&amp;lt;/code&amp;gt; call is brought up in message boxes. The Basic object property &amp;lt;code&amp;gt;dbg_supportedInterfaces&amp;lt;/code&amp;gt; retrieves its information through the &amp;lt;idl&amp;gt;com.sun.star.lang.XTypeProvider&amp;lt;/idl&amp;gt; interfaces of the objects.&lt;br /&gt;
&lt;br /&gt;
{{PDL1}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation/Developer&amp;#039;s Guide/Writing UNO Components]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Quick_and_Fast_Building&amp;diff=105836</id>
		<title>Quick and Fast Building</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Quick_and_Fast_Building&amp;diff=105836"/>
		<updated>2008-12-29T04:15:07Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
The ability to provide bug fixes to users/customers in a reasonable short time frame, typically within one week. To get this done, the Sun development process provides the following:&lt;br /&gt;
&lt;br /&gt;
* fast qa access to every release build for bug confirmation&lt;br /&gt;
&lt;br /&gt;
* fast developer access to all supported platforms to be able to debug natively on every platform, thus almost identical development environment on every platform.&lt;br /&gt;
&lt;br /&gt;
* ready to build environment on every platform and easy access to prebuilt/preinstalled enviroment&lt;br /&gt;
&lt;br /&gt;
* fast qa access to every release build for bugfix verification&lt;br /&gt;
&lt;br /&gt;
most of these issues can be mapped to OOo requirements:&lt;br /&gt;
&lt;br /&gt;
* provide access to milestone builds (now already done for some localized versions (fr, de, ja, etc.)&lt;br /&gt;
&lt;br /&gt;
* provide access to main development platform for developers (partly done through tinderboxing, up to the contributor to take care of this)&lt;br /&gt;
&lt;br /&gt;
* access to cws build for verification of bugs (work in progress in the tinderbox environment)&lt;br /&gt;
&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Building_cli_ure_remotely&amp;diff=105835</id>
		<title>Building cli ure remotely</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Building_cli_ure_remotely&amp;diff=105835"/>
		<updated>2008-12-29T04:12:04Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Building cli_ure remotely==&lt;br /&gt;
&lt;br /&gt;
When building cli_ure on a remote machine, that is, the project is accessed through a mapped hard drive (Windows), then one may encounter a messages such as this:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..\wntmsci10.pro\bin\climaker.exe \&lt;br /&gt;
--out ..\wntmsci10.pro\bin\cli_types.dll \&lt;br /&gt;
--keyfile ..\wntmsci10.pro\bin\cliuno.snk \&lt;br /&gt;
--assembly-version 1.1.7.0 \&lt;br /&gt;
--assembly-description &amp;quot;This assembly contains metadata for the StarOffice/OpenOffice.org API.&amp;quot; \&lt;br /&gt;
--assembly-company &amp;quot;OpenOffice.org&amp;quot; \&lt;br /&gt;
x:\SRC680\wntmsci10.pro\bin.m198\types_doc.rdb&lt;br /&gt;
&lt;br /&gt;
Unhandled Exception: System.Security.Policy.PolicyException: Unverifiable assembly &amp;#039;X:\SRC680\src.m198\cli_ure\wntmsci10.pro\bin\climaker.exe&amp;#039; failed policy check. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The reason is that build tools, such as the climaker.exe, which is a .NET application, reside on a different machine but require access to the local .NET Framework. Therefore the security settings must be adapted to allow the program access to the local machine. &lt;br /&gt;
&lt;br /&gt;
To make security settings one uses .NET Framework x.y Configuration (x.y stands for 1.1, 2.0) etc. The configuration panel can be found in the Administrative Tools. Please note, that the configuration was part of the .NET Framework 1.1 but it is not part of the .NET Framework 2.0. Instead it is contained in the .NET SDK 2.0.&lt;br /&gt;
&lt;br /&gt;
===NFS mounted disk===&lt;br /&gt;
Log on as administrator.&lt;br /&gt;
Open Control Panel -&amp;gt; Administrative Tools -&amp;gt; Microsoft .NET Framework x.y Configuration.&lt;br /&gt;
In the tree view on the left side select &amp;quot; Runtime Security Policies &amp;quot;. Then select &amp;quot;Adjust Zone Security&amp;quot; on the right side. In the dialog that appears select &amp;quot;Make changes to this computer&amp;quot; and press the &amp;quot;Next&amp;quot; button. In the following dialog select the zone &amp;quot;Trusted Sites&amp;quot; and choose the level of trust to &amp;quot;Full Trust&amp;quot; and press the &amp;quot;Next&amp;quot; button. In the following dialog press &amp;quot;Finish&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Log on as normal user and make the same settings for the current user in the .NET Framework x.y Configuration.&lt;br /&gt;
&lt;br /&gt;
Add the machine where the executable is located to the trusted sites:&lt;br /&gt;
From the Start menu open&lt;br /&gt;
Control Panel -&amp;gt; Internet options -&amp;gt; Security -&amp;gt; Trusted Sites -&amp;gt; Sites&lt;br /&gt;
Uncheck &amp;quot;Require server verification ... &amp;quot;&lt;br /&gt;
Add the machine where the executable is located, for example \\machine_ooo_build, etc.&lt;br /&gt;
&lt;br /&gt;
===Samba mounted disk===&lt;br /&gt;
Log on as administrator and open the .NET Framwork x.y Configuration. In the tree view on the left side select &amp;quot; Runtime Security Policies &amp;quot;. Then select &amp;quot;Adjust Zone Security&amp;quot; on the right side. In the dialog that appears select &amp;quot;Make changes to this computer&amp;quot; and press the &amp;quot;Next&amp;quot; button. In the following dialog select the zone &amp;quot;Local Intranet&amp;quot; and choose the level of trust to &amp;quot;Full Trust&amp;quot; and press the &amp;quot;Next&amp;quot; button. In the following dialog press &amp;quot;Finish&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Log on as normal user and repeat these step but this time select &amp;#039;Current User&amp;#039;&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=105834</id>
		<title>Buildbot Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=105834"/>
		<updated>2008-12-29T04:11:10Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come join the collective! Bots for new platforms or adding bots for for existing platforms will increase the build capabilities available, and are therefore much appreciated. &lt;br /&gt;
&lt;br /&gt;
What you need is a reasonably fast machine, with decent RAM and disk, and of course a stable internet connection. It might be easier to first set up the openoffice build environment on this machine. &lt;br /&gt;
&lt;br /&gt;
Please see http://code.google.com/p/ootermite/wiki/AddNewBuildBot for more information.&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildbot_Development&amp;diff=105833</id>
		<title>Buildbot Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildbot_Development&amp;diff=105833"/>
		<updated>2008-12-29T04:10:37Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Steps to create buildbot development setup.&lt;br /&gt;
&lt;br /&gt;
== Buildbot Requirements == &lt;br /&gt;
The Buildbot requires: &lt;br /&gt;
* Python 2.4 or later: http://www.python.org &lt;br /&gt;
* Twisted: http://twistedmatrix.com - most recent version is recommended. You&amp;#039;ll need at least &amp;quot;Twisted&amp;quot; (the core package), and you&amp;#039;ll also want TwistedMail, TwistedWeb, and TwistedWords. &lt;br /&gt;
** Note: For Twisted, you first need to install Zope. &lt;br /&gt;
&lt;br /&gt;
== Getting the OpenOffice Buildbot == &lt;br /&gt;
The Buildbot has been customized for Openoffice.org builds. Please checkout buildbot-0.7.3 from [http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/ Gnome CVS].  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/scratch/buildbot/buildbot-0.7.3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing the Buildbot == &lt;br /&gt;
* Note: &lt;br /&gt;
** Detailed instuctions are at http://buildbot.sourceforge.net/manual-0.7.3.html#Requirements&lt;br /&gt;
** The install may need to be to run as root (su). &lt;br /&gt;
After all requirements are met, install buildbot by running following commands in buildbot directory. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python setup.py build&lt;br /&gt;
python setup.py install                                                                    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Test installation is proper by running the command &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;buildbot --version&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install is OK if you see the version information for Buildbot and Twisted.&lt;br /&gt;
* Errors such as &amp;#039;no such command&amp;#039; or &amp;quot;ImportError&amp;quot; means something went wrong.&lt;br /&gt;
* Note: For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Installing-the-code&lt;br /&gt;
&lt;br /&gt;
== Setting up the Buildmaster ==  &lt;br /&gt;
*Make a buildmaster directory on the machine at an appropriate place.&lt;br /&gt;
** The full path name for this directory is hereinafter referred to as &amp;#039;&amp;#039;masterdir&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir &amp;#039;&amp;#039;masterdir&amp;#039;&amp;#039;&amp;lt;/pre&amp;gt;   &lt;br /&gt;
*Run the buildbot command to create a buildmaster:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot master &amp;#039;&amp;#039;masterdir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Creating-a-buildmaster&lt;br /&gt;
&lt;br /&gt;
*Checkout some OO build specific scripts from http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/master_config_files/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/scratch/buildbot/master_config_files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* You will see the following files: &lt;br /&gt;
** master.cfg - sample buildmaster configuration file. You need to edit this as required.&lt;br /&gt;
** create_logs.pl - perl script for creating summary logs&lt;br /&gt;
** modules - perl modules needed for summary logs&lt;br /&gt;
** buildbot.css - cascaded style sheet which handles look and feel of buildmaster status page.&lt;br /&gt;
Please copy these files to &amp;#039;&amp;#039;masterdir&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Setting up the Buildslave ==  &lt;br /&gt;
If you are setting up buildslave on different machine than buildmaster, then you need to install buildbot on this machine also. So follow the steps given above to install buildbot.&lt;br /&gt;
Make a buildslave directory on the machine at an appropriate place.&lt;br /&gt;
* The full path name for this directory is hereinafter referred to as &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&amp;lt;/pre&amp;gt;   &lt;br /&gt;
Run the buildbot command to create a build slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot slave &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; MASTERHOST:9989 &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where,&lt;br /&gt;
* BUILDMASTER may be localhost if master and slave are on same machine.&lt;br /&gt;
* Choose a &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; and &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; and enter the same in buildmaster&amp;#039;s master.cfg file.&lt;br /&gt;
* For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Creating-a-buildslave&lt;br /&gt;
* For additional creation options see http://buildbot.sourceforge.net/manual-0.7.3.html#Buildslave-Options&lt;br /&gt;
&lt;br /&gt;
Fill in the hostinfo files&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/admin should contain your name and email address. This is the &amp;#039;&amp;#039;&amp;#039;buildslave admin address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/host should be filled with a brief description of the host. For example: OS, version, memory size, CPU speed, versions of relevant libraries installed, and finally the version of the buildbot code which is running on the machine. &lt;br /&gt;
&lt;br /&gt;
Checkout some OO build specific scripts from http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/slave/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/scratch/buildbot/slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will see the following files: &lt;br /&gt;
* buildbotget.pl - perl script for checking out OO source code from CVS&lt;br /&gt;
* buildoo - script to start OO build process. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
* smoketestoo - script to start OO smoke test after successful compliation. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
Please copy these files to &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Edit buildmaster&amp;#039;s master.cfg file ==&lt;br /&gt;
Please edit master.cfg file as needed. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
e.g. If you are adding a new slave then you need to modify master.cfg to make following entries&lt;br /&gt;
1. Make an entry of slavename and password in c[&amp;#039;bots&amp;#039;] &lt;br /&gt;
2. Create a new scheduler and builder for buildslave&lt;br /&gt;
3. Create a buildfactory of steps that buildslave should follow.&lt;br /&gt;
4. Add newly created builder and buildfactory to builderlist c[&amp;#039;builders&amp;#039;].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Start the buildmaster and buildslave ==&lt;br /&gt;
Once buildmaster is configured for new buildslave then you can start buildmaster and buildslave by running following command.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot start &amp;#039;&amp;#039;masterdir&amp;#039;&amp;#039;&lt;br /&gt;
buildbot start &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To stop buildmaster/buildslave anytime, please run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot stop &amp;#039;&amp;#039;masterdir&amp;#039;&amp;#039;&lt;br /&gt;
buildbot stop &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Commit your changes ==&lt;br /&gt;
If you add any new feature, commit your changes to cvs and notify ooo-staging buildmaster administrator.&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildd&amp;diff=105832</id>
		<title>Buildd</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildd&amp;diff=105832"/>
		<updated>2008-12-29T04:01:56Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A build-daemon/bot/tinderbox is desired that provides the following:&lt;br /&gt;
* Abiltity to build CWS/SVN branch on demand&lt;br /&gt;
* Ability to generate and make available install sets for multiple platforms&lt;br /&gt;
* Ability to run and make reports available of tests, including performance tests&lt;br /&gt;
&lt;br /&gt;
KaiB and Mikeleib are working/soon to be working on this.  Volunteers are also welcome.&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=PL/ooo-build&amp;diff=105831</id>
		<title>PL/ooo-build</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=PL/ooo-build&amp;diff=105831"/>
		<updated>2008-12-29T04:01:26Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* powrót do [[Pl.openoffice.org|Wiki pl.openoffice.org]]&lt;br /&gt;
* przejdź do [[PL/spistresci|spisu treści]]&lt;br /&gt;
* przejdź do [http://pl.openoffice.org Polskiego Projektu Językowego]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ta kolekcja łatek, grafik i struktury kompilacji istnieje jedynie jako odzwierciedlenie wielu problemów napotykanych w wersji up-stream źródeł. Proces zmian jest bolesny dla każdej organizacji, im większa tym bardziej bolesny. Jednak - rozmiar zmian nie jest żadnym wytłumaczeniem na brak ich wprowadzania, a głównym przeznaczeniem ooo-build jest jego zmniejszanie poprzez wprowadzanie zmian w nim zawartych.&lt;br /&gt;
&lt;br /&gt;
== Na temat ooo-build ==&lt;br /&gt;
&lt;br /&gt;
ooo-build wyrósł na frustracji ze schematu tworzenia OOo zanim został wynaleziona i wprowadzona w życie koncepcja [[PL/CWS|Child Workspace]]. Na jego powstanie ma również wpływ infrastruktura [[PL/Problemy_infrastruktury#CVS|Serwera CVS]].&lt;br /&gt;
&lt;br /&gt;
* [[PL/ooo-build/bin|/ooo-build/bin]] - Opis narzędzi katalogu bin/ w CVS&lt;br /&gt;
&lt;br /&gt;
== przykładowe proste poprawki ==&lt;br /&gt;
&lt;br /&gt;
=== Win32 / configure auto-detection ===&lt;br /&gt;
&lt;br /&gt;
Mamy ładny skrypt perl, &amp;#039;oowintool&amp;#039;, który lepiej sprawuje się w wykrywaniu narzędzi systemowych niż up-stream, powinniśmy zintegrować go tam - to uczyni pracę nad naszą wspólną sprawą dużo prostszą. Porównaj też ostatni punkt.&lt;br /&gt;
&lt;br /&gt;
=== branding / artwork / splash bits ===&lt;br /&gt;
&lt;br /&gt;
Wiele łatek ooo-build to zwykłe grafiki dla różnych dystrybucji. Wprowadzenie tego up-stream wraz z kilkoma &amp;#039;experymentalnymi&amp;#039; dodatkami uczyniłoby tworzenie ooo-build bezużytecznym dla niektórych. Dobra dokumentacja i &amp;lt;code&amp;gt;--with-splash=/tmp/foo.png --with-logo=/tmp/baa.bmp&amp;lt;/code&amp;gt; mogłyby się sprawować świetnie jako dystrybucja.&lt;br /&gt;
&lt;br /&gt;
=== faster 1st time (packagers/developers) build ===&lt;br /&gt;
&lt;br /&gt;
Tworzenie powiązań zajmuje procesorowi ogromną ilość czasu - wykrycie podstawowej kompilacji i eksport &amp;#039;nodep=1&amp;#039; znacznie skraca cały proces - powinno się to znaleźć up-stream.&lt;br /&gt;
&lt;br /&gt;
=== easier developer experience ===&lt;br /&gt;
&lt;br /&gt;
Prosty, wbudowany, zautomatyzowany system malloc allocator checker (przez linkoo &amp;amp;amp; source ooenv), także - domyślne wyłączenie (strasznie denerwującego) okienka &amp;#039;recover from crash&amp;#039; przez ten sam patch environment variable patch: i#54275.&lt;br /&gt;
&lt;br /&gt;
== łatki do zrobienia ==&lt;br /&gt;
&lt;br /&gt;
Ponieważ nie ma sensu, żeby tworzyć tutaj (tłumaczyć na język polski) listę poprawek do zrobienia dla ooo-build, która za kilka dni zaowocuje łatkami, najlepiej będzie jeśli chętny programista odwiedzi zawsze aktualny spis tematów w dziale [http://wiki.services.openoffice.org/wiki/Ooo-build ooo-build] po angielsku.&lt;br /&gt;
&lt;br /&gt;
[[Category:Build_System]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Autopackage_distribution&amp;diff=105830</id>
		<title>Autopackage distribution</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Autopackage_distribution&amp;diff=105830"/>
		<updated>2008-12-29T04:01:02Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Wikipedia:Autopackage|Autopackage]] is a new package management system intended to be usable across multiple Linux distributions. Unlike traditional package formats such as [[Wikipedia:RPM_Package_Manager|RPM]] and [[Wikipedia:Deb (file_format)|DEB]], autopackage checks for the presence of dependencies &amp;#039;&amp;#039;on the actual system files&amp;#039;&amp;#039;, rather than querying a database of package information. &lt;br /&gt;
&lt;br /&gt;
This reduces compatibility issues with different package naming conventions, relaxes package version dependency and allows users to install the application without worrying about what package format is being used on their Linux distributions. &lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;Linux version of OpenOffice.org&amp;#039;&amp;#039;&amp;#039; released [http://www.openoffice.org/ by the Offical OOo homepage], as a third-party binary (when viewed from the point of view of Linux vendors) for download with frequent updates, highly matches the software delivery requirement being served and addressed by autopackage. &lt;br /&gt;
&lt;br /&gt;
By providing OpenOffice.org in autopackage format, it will go a long way to simplify the Linux installation process without end users needing to consult [http://documentation.openoffice.org/setup_guide2/index.html the OpenOffice.org 2.x Setup guide] (for setup procedures on various Linux distros out there). &lt;br /&gt;
&lt;br /&gt;
It will also provide the foundation for incremental update mechanism similiar to the auto-updater implemented in Firefox 1.5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenOffice.org in autopackage format discussion ==&lt;br /&gt;
&lt;br /&gt;
=== Issue reported  ===&lt;br /&gt;
* [http://qa.openoffice.org/issues/show_bug.cgi?id=46333 Issue 46333]: Native Linux install package using autopackage&lt;br /&gt;
* [http://qa.openoffice.org/issues/show_bug.cgi?id=58158 Issue 58158]: Small Patch Update system[http://www.oooforum.org/forum/viewtopic.phtml?p=132194], is now practical to implement under Linux using autopackage&lt;br /&gt;
&lt;br /&gt;
=== Preparation phrase ===&lt;br /&gt;
&lt;br /&gt;
# Find out the dependency information&lt;br /&gt;
# Prepare the autopackage script&lt;br /&gt;
# Repackage the official binary in autopackage format&lt;br /&gt;
# Testing and feedback&lt;br /&gt;
&lt;br /&gt;
Optional (to do later)&lt;br /&gt;
* Check the compilation environment&lt;br /&gt;
* Compiling a different build if necessary&lt;br /&gt;
&lt;br /&gt;
== Autopackage information for users and developers ==&lt;br /&gt;
&lt;br /&gt;
To see how easy it is to install software in autopackage format, check out this how-to page:&lt;br /&gt;
* [http://www.autopackage.org/docs/howto-install/ Install Linux autopackages in 4 easy steps]&lt;br /&gt;
&lt;br /&gt;
=== General information ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.autopackage.org/ Autopackage Official page]&lt;br /&gt;
* [http://www.autopackage.org/faq.html Autopackage FAQ]&lt;br /&gt;
&lt;br /&gt;
=== Developer documenation ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.autopackage.org/docs.html Packagers Documentation]&amp;lt;br&amp;gt;With quickstart, tutorials, packager guides, API documentation and many other resources&lt;br /&gt;
* [http://www.autopackage.org/download-tools.html Developer Tools]&lt;br /&gt;
* [http://plan99.net/autopackage/ Autopackage Wiki]&lt;br /&gt;
* [http://planet.autopackage.org/ Planet Autopackge]: Developers&amp;#039; blog&lt;br /&gt;
&lt;br /&gt;
== Related articles ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.osnews.com/story.php?news_id=10155 Autopackage 1.0, the now and the next]&lt;br /&gt;
* [http://www.linux.com/article.pl?sid=05/11/22/2021228 Autopackage: Toward a universal package manager for the desktop]&lt;br /&gt;
* [http://www.ubuntuforums.org/showthread.php?t=97504 Ubuntu Forum]: 35 pages long (wow!) discussion of the autopackage format and its integration with Ubuntu Dapper Drake&lt;br /&gt;
&lt;br /&gt;
[[Category:User Experience]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Compiler_versions_used_by_port_maintainers_and_release_engineers&amp;diff=105829</id>
		<title>Compiler versions used by port maintainers and release engineers</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Compiler_versions_used_by_port_maintainers_and_release_engineers&amp;diff=105829"/>
		<updated>2008-12-29T04:00:00Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Port maintainers: please state your current compiler needs on this page. This helps us to decide when we are able to deprecate an old version of a compiler without leaving a port behind.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! Platform &lt;br /&gt;
! Distribution&lt;br /&gt;
! Maintainer&lt;br /&gt;
! C++/C-Compiler&lt;br /&gt;
! Java-Compiler/JRE&lt;br /&gt;
! Notes&lt;br /&gt;
|- &lt;br /&gt;
| Solaris Sparc&lt;br /&gt;
| Solaris 8 and newer&lt;br /&gt;
| OOo/SO RE (Sun Hamburg) hr@openoffice.org&lt;br /&gt;
| Sun Studio 8 / C++-5.5&lt;br /&gt;
| build: Sun JDK 1.4.1_03, ship: Sun JRE-1.6u4&lt;br /&gt;
| plan to migrate to C++-5.8/SunStudio12 later for OOo-3.0&lt;br /&gt;
|-&lt;br /&gt;
| Solaris x86&lt;br /&gt;
| Solaris 8 and newer&lt;br /&gt;
| OOo/SO RE (Sun Hamburg) hr@openoffice.org&lt;br /&gt;
| Sun Studio 8 / C++-5.5&lt;br /&gt;
| build: Sun JDK 1.4.1_03, ship: Sun JRE-1.6u4&lt;br /&gt;
| plan to migrate to C++-5.8/SunStudio11 later for OOo-3.0&lt;br /&gt;
|-&lt;br /&gt;
| Linux x86&lt;br /&gt;
| all distributions with glibc-2.2.4 or newer&lt;br /&gt;
| OOo/SO RE (Sun Hamburg) hr@openoffice.org&lt;br /&gt;
| GCC 3.4.1 + enum patch + visibility patch&lt;br /&gt;
| build: Sun JDK 1.4.1_03, ship: Sun JRE-1.6u4&lt;br /&gt;
| plan to migrate to current gcc for OOo-3.0&lt;br /&gt;
|-&lt;br /&gt;
| Linux x86-64 (OOo-3.x)&lt;br /&gt;
| all distributions with glibc-2.3.6 or newer&lt;br /&gt;
| OOo/SO RE (Sun Hamburg) hr@openoffice.org&lt;br /&gt;
| GCC 4.2.3&lt;br /&gt;
| build: Sun JDK 1.5_15, ship: Sun JRE-1.6u4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Linux PowerPC&lt;br /&gt;
| Baseline for build : all distributions with glibc-2.3.x or newer&lt;br /&gt;
|  OOo only (Community builds)&lt;br /&gt;
| GCC 4.0.1&lt;br /&gt;
|&lt;br /&gt;
| Depending on the distributions, some values can change&lt;br /&gt;
|-&lt;br /&gt;
| GNU/Linux SPARC&lt;br /&gt;
| Baseline for build : sparc&lt;br /&gt;
|  OOo only (Community builds) sparcmoz@openoffice.org&lt;br /&gt;
| GCC 4.1.2 preview&lt;br /&gt;
| Eclipse Java Compiler v_677_R32x 3.2.1 per Debian java-gcj-compat&lt;br /&gt;
| For building vanilla SRC680 sources with gcc4.1, some minor [http://wiki.services.openoffice.org/wiki/GNULinuxSparcPorting#Building_with_GCC_4.1 issues are described here.]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X &amp;lt;br&amp;gt;( version 2.1 maxi )&lt;br /&gt;
| Baseline for build : Mac OS X 10.3 compatibility&lt;br /&gt;
| OOo only (Community builds)&lt;br /&gt;
| GCC 3.3 (version provided with Mac OS X 10.3 tools)&lt;br /&gt;
| build: Apple JDK 1.4&lt;br /&gt;
| plan to migrate to gcc-4.0.1 if cross-compiling allows to build from Mac OS X 10.4 for Mac OS X 10.3&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X &amp;lt;br&amp;gt;( 2.2 and later)&lt;br /&gt;
| Baseline for build : Mac OS X 10.4 compatibility&lt;br /&gt;
| OOo only (Community builds)&lt;br /&gt;
| GCC 4.0.x (version provided with XCode 2.4 &amp;lt;br&amp;gt;(and superior)&lt;br /&gt;
| build: Apple JDK 1.5 &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X&lt;br /&gt;
| Baseline for build : Mac OS X Tiger and later&lt;br /&gt;
| OOo/SO RE (Sun Hamburg) obo@openoffice.org&lt;br /&gt;
| GCC 4.0.1, Mac SDK 10.4uSDK&lt;br /&gt;
| build: Apple JDK 1.5.0_07 &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| Windows 2000 - Windows Vista&lt;br /&gt;
| OOo/SO RE (Sun Hamburg) obo@openoffice.org&lt;br /&gt;
| Microsoft Visual Studio 2008&lt;br /&gt;
| build: Sun JDK 1.5.0.06, ship: Sun JRE-1.6u4&lt;br /&gt;
| Platform SDK: 2008 Server SDK, 6.0.6001.18000.367-KRMSDK_EN.iso, Date: 06.03.2008&lt;br /&gt;
|-&lt;br /&gt;
| OS/2&lt;br /&gt;
| eComStation&lt;br /&gt;
| OOo only (SSI build)&lt;br /&gt;
| GCC 3.3.5&lt;br /&gt;
|&lt;br /&gt;
| no current plans to migrate to a newer version&lt;br /&gt;
|-&lt;br /&gt;
| FreeBSD&lt;br /&gt;
| Baseline for build : FreeBSD 5.3-RELEASE&lt;br /&gt;
| maho@openoffice.org&lt;br /&gt;
| GCC 3.4.1 + enum patch + visibility patch&lt;br /&gt;
| build: unofficially ported SUN JDK 1.4.2&lt;br /&gt;
| Usually ports take care of everything we need. A patch for ld.so is needed for prior than 5.2.1. http://porting.openoffice.org/freebsd/&lt;br /&gt;
|-&lt;br /&gt;
| Linux x86/ppc/ppc64/x86_64/arm-eabi/ia64/s390/s390x/m68k&lt;br /&gt;
| Fedora Core 10&lt;br /&gt;
| caolanm@redhat.com&lt;br /&gt;
| GCC 4.3.2&lt;br /&gt;
| eclipse-ecj-3.4.1/gij-4.3.2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Linux x86/ppc/sparc&lt;br /&gt;
| Ubuntu 5.10&lt;br /&gt;
| doko@ubuntu.com&lt;br /&gt;
| GCC 4.0.2&lt;br /&gt;
| gcj-4.0.2/gij-4.0.2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Linux x86/ppc/sparc&lt;br /&gt;
| Ubuntu 6.06&lt;br /&gt;
| doko@ubuntu.com&lt;br /&gt;
| GCC 4.0.3&lt;br /&gt;
| gcj-4.1.0/gij-4.1.0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Linux mipsel&lt;br /&gt;
| Slackware 12.0&lt;br /&gt;
| sjanki@openoffice.org&lt;br /&gt;
| GCC 4.1.2&lt;br /&gt;
| gcj-4.1.2/gij-4.1.2 or jdk 1.5/1.6&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Using Cpp with the OOo SDK|Using C++ with OOo SDK]]&lt;br /&gt;
* Writing a Program to Control OpenOffice.org, by Franco Pingiori — [http://www.linuxjournal.com/article/8550 Part 1] and [http://www.linuxjournal.com/article/8608 Part 2], Linux Journal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Cpp]]&lt;br /&gt;
[[Category:Uno]]&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Extensions_development&amp;diff=105828</id>
		<title>Extensions development</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Extensions_development&amp;diff=105828"/>
		<updated>2008-12-29T03:59:09Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Extensions}}&lt;br /&gt;
Developing extensions is an efficient way to bring value to OpenOffice.org without diving into core sources. Obviously all developers willing to [[Main_Page|develop at OpenOffice.org sources level]] are welcomed.&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org enables third party tools creation through UNO bridges, allowing using many languages.&lt;br /&gt;
&lt;br /&gt;
The principle is to create UNO packages that can be listed in the OpenOffice.org [[Extensions_repository|Extensions repository]] and installed by end-users easily.&lt;br /&gt;
&lt;br /&gt;
This section gives newcomers as well as experienced developers some hints for developing Extensions in various languages and provides tools and frameworks to facilitate that development.&lt;br /&gt;
&lt;br /&gt;
Finally, popular Extensions may be integrated into OpenOffice.org, so it is important to follow common policies from beginning to ease this merging.&lt;br /&gt;
&lt;br /&gt;
==== Starting in a language ====&lt;br /&gt;
Addons can be written in various languages. Each section gives starting information to help you create your addon. Each section is dedicated to a language. It deals with specific points concerning the Extensions aspect. Resources regarding the OpenOffice.org API can be found on the [http://api.openoffice.org API project] and the UNO bridge language issues are at [http://udk.openoffice.org UDK project]. The [http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/OpenOffice.org_Developers_Guide OpenOffice.org Developer&amp;#039;s Guide] is a valuable source of information as well.&lt;br /&gt;
&lt;br /&gt;
The translations of these pages are welcomed and [[Extensions#Translating_these_pages|guidelines are available]].&lt;br /&gt;
&lt;br /&gt;
* [[Extensions_development_python|Starting in Python]]&lt;br /&gt;
* [[Extensions_development_basic|Starting in Basic]] and [[Documentation/BASIC_Guide|Documentation BASIC Guide]]&lt;br /&gt;
* [[Extensions_development_java|Starting in Java]]&lt;br /&gt;
*  [[Uno/Cpp/Tutorials/Introduction_to_Cpp_Uno|Introduction to C++ and UNO]] and [[Using_Cpp_with_the_OOo_SDK|Using C++ with OOoSDK]]&lt;br /&gt;
* [[Extensions_development_vfp|Starting in Visual FoxPro (French)]]&lt;br /&gt;
* [[Non-code_extensions|Non programmatic Extensions]]&lt;br /&gt;
* [[Extensions_packaging|Extensions packaging]]&lt;br /&gt;
* [[Extensions_Integration_into_Installation_Set|Extensions Integration into Installation Set]]&lt;br /&gt;
* [[Spellchecker_Integration_into_Installation_Set|Adding Spellchecker Extensions into Installation Set]]&lt;br /&gt;
* [[Filter_extensions|Import and Export filter extensions using code or xslt]]&lt;br /&gt;
&lt;br /&gt;
==== Articles &amp;amp; Tutorials ====&lt;br /&gt;
&lt;br /&gt;
* [[Framework/Article/Generic_UNO_Interfaces_for_complex_toolbar_controls|Generic UNO Interfaces for complex toolbar controls]] &lt;br /&gt;
&lt;br /&gt;
* [[Framework/Article/Addon_Menu_Toolbar_Merging|Addon Menu Toolbar Merging]] &lt;br /&gt;
&lt;br /&gt;
* [[Framework/Tutorial/Popup_Menu_Controller|Popup Menu Controller]]&lt;br /&gt;
&lt;br /&gt;
* [[Framework/Tutorial/Statusbar_Controller|Statusbar Controller]]&lt;br /&gt;
&lt;br /&gt;
==== Books on OpenOffice.org Basic Programming ====&lt;br /&gt;
&lt;br /&gt;
* [http://www.amazon.com/OpenOffice-org-Macros-Explained-Andrew-Pitonyak/dp/1930919514/ OpenOffice.org Macros Explained] by Andrew Pitonyak&lt;br /&gt;
* [http://www.lulu.com/content/2905912 OpenOffice.org Basic Crash Course] by Dmitri Popov&lt;br /&gt;
* [http://www.amazon.com/Learn-OpenOffice-org-Spreadsheet-Macro-Programming/dp/1847190979/ Learn OpenOffice.org Spreadsheet Macro Programming] by Mark, Alexander Bain&lt;br /&gt;
* [http://www.amazon.de/Makros-OpenOffice-org-2-3-StarBasic-OpenOffice/dp/3836211114/ Makros in OpenOffice.org 2.3] von Thomas Krumbein (in German)&lt;br /&gt;
* [http://www.amazon.fr/Programmation-OpenOffice-org-Macros-OOoBasic-API/dp/2212117639/ Programmation OpenOffice.org 2] de Bernard Marcelly, Laurent Godard (in French)&lt;br /&gt;
&lt;br /&gt;
==== Tools &amp;amp; Frameworks ====&lt;br /&gt;
&lt;br /&gt;
* [http://codesnippets.services.openoffice.org Code snippets available in many languages]&lt;br /&gt;
* [[API/Samples|Code snippets in the Wiki]]&lt;br /&gt;
* [[Extensions_development_translation|Translation framework]]&lt;br /&gt;
* [[Extensions_Packager|Extensions Packager]] - BasicAddonBuilder - Extension Compiler&lt;br /&gt;
* Predefined wizards&lt;br /&gt;
* [[Extensions_introspection|Introspection Tools]]: discover the API&lt;br /&gt;
* [[OpenOffice_Eclipse_Integration|OpenOffice.org Eclipse Integration]] - OpenOffice.org development with Eclipse&lt;br /&gt;
* [[OpenOffice_NetBeans_Integration|OpenOffice.org NetBeans Integration]] - plug-in for NetBeans providing some nice features to simplify the development with and for OpenOffice.org (highlevel wizards, UNOIDL and xcu syntax highlighting, code completion, integrated API reference, ...)&lt;br /&gt;
* [[Extension_Development_with_IntelliJ_IDEA|Extension Development with IntelliJ IDEA]]: simple introduction how you can use the IntelliJ IDEA to develop OpenOffice.org extensions.&lt;br /&gt;
* [[OpenOffice_Maven2_Integration|OpenOffice.org Maven 2 integration]] - Maven plugin to build OpenOffice.org extensions.&lt;br /&gt;
&lt;br /&gt;
==== Best Practices ====&lt;br /&gt;
* [[Extensions_best_practices|How to write OO.o GUI Extensions today]]&lt;br /&gt;
&lt;br /&gt;
==== Project: Enhancing the Extensions Infrastructure of OpenOffice.org ====&lt;br /&gt;
* [[Extensions_improvements_proposal|Project Proposal (agreed by the Community June 2006)]]&lt;br /&gt;
* [[Extensions_improvements_plan_and_status|Project Status]]&lt;br /&gt;
&lt;br /&gt;
==== Improving the Extension Manager ====&lt;br /&gt;
* [[Extensions_feature_ideas|Feature ideas]]&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Termite&amp;diff=105827</id>
		<title>Termite</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Termite&amp;diff=105827"/>
		<updated>2008-12-29T03:56:59Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://code.google.com/p/ootermite/ is the new project pages for this page.&lt;br /&gt;
&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildbot&amp;diff=105826</id>
		<title>Buildbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildbot&amp;diff=105826"/>
		<updated>2008-12-29T03:56:37Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A buildbot is now deployed for OpenOffice.org. &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;http://buildbot.go-oo.org/&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
From the Buildbot README: http://buildbot.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
This project has now moved to google code http://code.google.com/p/ootermite/&lt;br /&gt;
&lt;br /&gt;
The BuildBot is a system to automate the compile/test cycle required by most software projects to validate code changes. By automatically rebuilding and testing the tree each time something has changed, build problems are pinpointed quickly, before other developers are inconvenienced by the failure. The guilty developer can be identified and harassed without human intervention. By running the builds on a variety of platforms, developers who do not have the facilities to test their changes everywhere before checkin will at least know shortly afterwards whether they have broken the build or not. Warning counts, lint checks, image size, compile time, and other build parameters can be tracked over time, are more visible, and are therefore easier to improve.&lt;br /&gt;
&lt;br /&gt;
== How to start a build ==&lt;br /&gt;
&lt;br /&gt;
* Visit http://buildbot.go-oo.org/buildbot/&lt;br /&gt;
* Choose a machine you want to build on, and click on it&lt;br /&gt;
* Fill in the &amp;#039;&amp;#039;Your name&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Reason for build&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Branch to build&amp;#039;&amp;#039; (just the CWS name)&lt;br /&gt;
* If you want to have the resulting installation sets, check &amp;#039;&amp;#039;Install Set&amp;#039;&amp;#039;&lt;br /&gt;
* Press &amp;#039;&amp;#039;Force Build&amp;#039;&amp;#039;&lt;br /&gt;
* Wait until the installation sets appear in http://buildbot.go-oo.org/install_sets/ (if you wanted them)&lt;br /&gt;
&lt;br /&gt;
If your build breaks it &amp;#039;&amp;#039;may&amp;#039;&amp;#039; be the Buildbot&amp;#039;s fault as they are not perfect. If you are unsure feel free to contact the Buildslave&amp;#039;s maintainer (contact address on the Builder&amp;#039;s overview page).&lt;br /&gt;
&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Tinderbox&amp;diff=105824</id>
		<title>Tinderbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Tinderbox&amp;diff=105824"/>
		<updated>2008-12-29T03:55:00Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tinderbox]]&lt;br /&gt;
&amp;#039;&amp;#039;Welcome to the OpenOffice.org Tinderbox page!&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This Tinderbox Wiki page is designed to be used to inform about the OpenOffice.org tinderbox and coordinate ideas and resources about the further development of the tinderbox. See also: [[Buildbot]] and the successor called [[Termite]].&lt;br /&gt;
&lt;br /&gt;
A Wiki is a type of website that anybody can edit but radical changes should be discussed on the tinderbox mailing list first.&lt;br /&gt;
&lt;br /&gt;
= What is a Tinderbox =&lt;br /&gt;
&lt;br /&gt;
A tinderbox allows developers to test their [[CWS]]s (Childworkspaces) on several architectures without the need of having access to all those architectures.&lt;br /&gt;
&lt;br /&gt;
Setting up tinderbox builds with the standard toolchain and maybe the newest toolchain for all of the main platforms (x86 Linux, Solaris Sparc, and Windows) and allowing volunteer developers to see the build error logs and progress will finally make developers less afraid to commit anything (fixes or advancements) for fear of breaking something for other platforms.&lt;br /&gt;
&lt;br /&gt;
In essence a tinderbox is a perl script that processes mail, and turns it into HTML. It expects to be mailed build logs from separate and de-coupled build machines. Tinderbox has a few elaborations over the most simple &amp;#039;status&amp;#039; web-page, inasmuch that it integrates with bonsai - to correlate builds against commits, and it has some nice built in error-parsers to allow huge build logs to be condensed to just a few (possible) tricky sections.&lt;br /&gt;
&lt;br /&gt;
Our tinderbox uses the [http://www.mozilla.org/tinderbox.html Tinderbox 2] from the mozilla project plus some small cosmetic changes. Additional documentation can be found there.&lt;br /&gt;
&lt;br /&gt;
= Last Tinderbox results =&lt;br /&gt;
Click the [http://go-ooo.org/tinderbox/all_trees.express.html result overview] link to get the latest build results, or check the [http://go-oo.org/tinderbox/ tinderbox] link to get a list of the currently open tinderbox trees (CWSs and MWSs).&lt;br /&gt;
&lt;br /&gt;
= Tinderbox integration into EIS =&lt;br /&gt;
The [[TinderboxAndEISStatus]] page explains the technical details of Tinderbox integration into [[EIS]]. A page explaining how to act on [[CWS]]s with red tinderbox status is currently being worked on ([[RedTinderboxStatusInEIS]]).&lt;br /&gt;
&lt;br /&gt;
= Set up a Tinderbox client =&lt;br /&gt;
Follow the [[Tinderbox_Setup]] link to get information how to set up a tinderbox client.&lt;br /&gt;
&lt;br /&gt;
== Expected (New) Tinderbox Clients == &lt;br /&gt;
* Windows - Volker&lt;br /&gt;
* Suse 10 - Tor&lt;br /&gt;
* Red Hat - Fridrich &lt;br /&gt;
* Debian - OSUOSL/&lt;br /&gt;
* OpenSuse - OSUOSL/&lt;br /&gt;
&lt;br /&gt;
= Tinderbox mailing list =&lt;br /&gt;
&lt;br /&gt;
Topics related to the tinderbox should be discussed on the tinderbox@tools.openoffice.org [http://tools.openoffice.org/servlets/SummarizeList?listName=tinderbox mailing list] (Send a completely blank e-mail to tinderbox-subscribe@tools.openoffice.org address to subscribe).&lt;br /&gt;
&lt;br /&gt;
= OpenOffice Tinderbox ToDo list =&lt;br /&gt;
&lt;br /&gt;
* Improve this page&lt;br /&gt;
* Create &amp;lt;code&amp;gt;tools.openoffice.org/tinderbox.html&amp;lt;/code&amp;gt; linking to this page&lt;br /&gt;
* Discuss/create [[buildd|framework]] to allow developers to request tinderbox builds for their CWSs&lt;br /&gt;
* Advertise the tinderbox and attract more tinderbox clients&lt;br /&gt;
* Define specifications which &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; parameters have to be used, which languages should be enabled, etc.&lt;br /&gt;
* Provide a means to upload installation sets from a tinderbox build to a place that allows QA of these builds. See [http://qa.openoffice.org/issues/show_bug.cgi?id=38096 issue 38096].&lt;br /&gt;
&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=JavaEclipseTuto&amp;diff=105823</id>
		<title>JavaEclipseTuto</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=JavaEclipseTuto&amp;diff=105823"/>
		<updated>2008-12-29T03:51:35Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=How to create a Java component with Eclipse=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This paper is a tutorial to guide UNO newcomers through creating their first Java component. This tutorial will use Eclipse and its plugin for the OpenOffice.org development, and every step will be detailed. If you are an experienced UNO programmer, you can still follow this tutorial to have a better view of how to use the Eclipse plugin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===UNO Components===&lt;br /&gt;
This section will explain some very basic things about UNO components. You can skip it if you already know it. First I will explain what a component is and its main parts. Afterwards, I will explain what is needed to create a UNO component to help you to fully understand the different tools and their use during the tutorial.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Components anatomy====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;quot;A component is a system element offering a predefined service and able to communicate with other components&amp;quot;&amp;#039;&amp;#039; explains [http://fr.wikipedia.org/wiki/composant Wikipedia (Fr)] (Even thought there is a definition on the English wikipedia article, I prefer the French one because of its completeness). In UNOs case a component will generally be delivered as a package containing a library (share library in C++ or jar in Java). For UNO, a component is made of two distinct parts: specifications and an implementation. &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Specification: &amp;#039;&amp;#039;&amp;#039;definition in a common language of what the component should do. For UNO, this language is called UNO-IDL and is more or less similar to [http://en.wikipedia.org/wiki/Corba Corba] IDL. The documented part that will be provided as an API to use the component is the specification. Thus, it should be complete and implementation independent.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Implementation: &amp;#039;&amp;#039;&amp;#039;is the code that will realize what is described in the component specifications. This programming language can either be C++, Java, Python or others. This is the internal part of the component and will not be accessible from another component.&lt;br /&gt;
In order that UNO knows which implementation corresponds to which specification, the component will use registries. There are two of them: the first one describes all the component specifications (&amp;lt;tt&amp;gt;types.rdb&amp;lt;/tt&amp;gt;) and the second translates the implementation into specifications (&amp;lt;tt&amp;gt;services.rdb&amp;lt;/tt&amp;gt;) and is generated from the implementation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Components creation process====&lt;br /&gt;
The following diagram will help you better understand what should be done to get a component from its specification and sources.  As shown by the diagram, the specifications are compiled and merged into one &amp;lt;tt&amp;gt;types.rdb&amp;lt;/tt&amp;gt; registry. &amp;lt;tt&amp;gt;Class&amp;lt;/tt&amp;gt; files are generated from that file to translate the specifications into a Java class definition file which is built with the implementation into a class using the &amp;lt;tt&amp;gt;java&amp;lt;/tt&amp;gt; compiler. All the classes are delivered as a &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt; file with a specific manifest as we will see further in this tutorial. This doesn&amp;#039;t make a usable OpenOffice.org: the &amp;lt;tt&amp;gt;types.rdb&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;jar&amp;lt;/tt&amp;gt; file will have to be zipped into a &amp;lt;tt&amp;gt;.uno.pkg&amp;lt;/tt&amp;gt; file described with another manifest.&lt;br /&gt;
&lt;br /&gt;
[[Image:CompilationChain.png|center|UNO component build chain]]&lt;br /&gt;
&lt;br /&gt;
As I will explain later, the Eclipse plugin will hide some of these operations, however you will need to know how they work to fully understand the build process and what we will do in the following steps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Installing the development platform===&lt;br /&gt;
Now that you know what to do, we will install and configure the development tools. This is quite simple, but you can run into some problems if you do not read the following information carefully. I will now assume that you have none of the development tools. The minimum requirements for OpenOffice.org Eclipse integration are:&lt;br /&gt;
&lt;br /&gt;
*OpenOffice.org 2.0&lt;br /&gt;
*OpenOffice.org SDK 2.0.4&lt;br /&gt;
*Eclipse 3.2&lt;br /&gt;
*Java 1.5 (the GNU Java does not work with the Eclipse integration)&lt;br /&gt;
&lt;br /&gt;
====OpenOffice.org====&lt;br /&gt;
First of all, you will need to have a working OpenOffice.org 2.0 and its Software Development Kit (SDK). The latest versions are available on the [http://download.openoffice.org/ OpenOffice.org download pages] for the most current platforms. The OpenOffice.org SDK version 2.0.4 is mandatory to use the plugin correctly. It includes a new tool used by the plugin: the &amp;lt;tt&amp;gt;uno-skeletonmaker&amp;lt;/tt&amp;gt;. This tool will generate the implementation skeleton to help you to concentrate only on your code.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;This tutorial assumes that you used the &amp;quot;Official&amp;quot; OpenOffice.org distribution&amp;#039;&amp;#039;&amp;#039; from the project&amp;#039;s website. Other distributions may not work with the Eclipse integration (see the trouble shooting section at the end of this page).&lt;br /&gt;
&lt;br /&gt;
====Eclipse and the plugin====&lt;br /&gt;
To get Eclipse, just go to their download pages and download the latest Eclipse SDK. You will have Eclipse and its SDK. Of course, you might want to download only the binary runtime, but you will have to follow more links. Once you have Eclipse, unzip it on your computer and that&amp;#039;s it: Eclipse has a Java plugin to help you program in Java.&lt;br /&gt;
&lt;br /&gt;
Now we will install the OpenOffice.org development plugin for Eclipse using the Eclipse software update system. &amp;#039;&amp;#039;&amp;#039;Do not try to download an archive from somewhere. Eclipse will do it for you when you do the following steps.&amp;#039;&amp;#039;&amp;#039; Select the &amp;#039;&amp;#039;&amp;#039;Help &amp;gt; Software updates &amp;gt; Find and install&amp;#039;&amp;#039;&amp;#039; menu to get the window shown in the following illustration. Check the second option on this window and click on the &amp;#039;&amp;#039;&amp;#039;Next&amp;#039;&amp;#039;&amp;#039; button.&lt;br /&gt;
&lt;br /&gt;
[[Image:InstallWindow.png|center|&amp;quot;Find &amp;amp; Install&amp;quot; window]]&lt;br /&gt;
&lt;br /&gt;
On the following page, you will see a list of &amp;quot;&amp;#039;&amp;#039;update sites&amp;#039;&amp;#039;&amp;quot;. These are URLs pointing to directories containing plugins informations and archives. Now click on the &amp;#039;&amp;#039;&amp;#039;Add remote site&amp;#039;&amp;#039;&amp;#039; button to get a small window asking for a name that will be displayed in the list and an URL. The URL of OpenOffice.org plugin update site is http://cedric.bosdonnat.free.fr/ooeclipseintegration. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Do not try to download an archive from this URL. This is the plugin update site for Eclipse.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
You can also download the source code and build your own update site using ant and the contained ant build files. &lt;br /&gt;
The source code can be downloaded from the CVS repository: http://api.openoffice.org/source/browse/api/ooeclipseintegration/&lt;br /&gt;
&lt;br /&gt;
Validate the new update site parameters and be sure that the OpenOffice.org site is checked before clicking on the &amp;#039;&amp;#039;&amp;#039;Finish&amp;#039;&amp;#039;&amp;#039; button. You should now see a window like the one in the following illustration. &amp;#039;&amp;#039;&amp;#039;Select the OpenOffice.org plugin Core and Java plugins&amp;#039;&amp;#039;&amp;#039;, click Next and let the wizard guide you through the end of the process. You will be asked to accept the plugin license and validate the installation archives which are not signed.&lt;br /&gt;
&lt;br /&gt;
[[Image:PluginUpdates.png|center|OpenOffice.org update site contents]]&lt;br /&gt;
&lt;br /&gt;
Congratulations, you have installed the OpenOffice.org plugin successfully. Now you must configure it. The following steps will guide you through this task. Go to the Eclipse options via the &amp;#039;&amp;#039;&amp;#039;Window &amp;gt; Preferences...&amp;#039;&amp;#039;&amp;#039; menu. In the list on the left, select the &amp;#039;&amp;#039;&amp;#039;OpenOffice.org plugin &amp;gt; SDK Configuration&amp;#039;&amp;#039;&amp;#039; item to get a window like the one shown in the following illustration.&lt;br /&gt;
&lt;br /&gt;
[[Image:UnoProperties.png|center|SDK configuration window]]&lt;br /&gt;
&lt;br /&gt;
In this window you will have to configure the path to your OpenOffice.org and to its SDK. So, let us begin with the SDK path: click on the &amp;#039;&amp;#039;&amp;#039;Add&amp;#039;&amp;#039;&amp;#039; button next to the SDKs list. You will have a window like the one shown in following illustration. Browse to your OpenOffice.org 2.0 SDK and validate. Then you will have to do the same for the OpenOffice.org path using the other &amp;#039;&amp;#039;&amp;#039;Add&amp;#039;&amp;#039;&amp;#039; button.&lt;br /&gt;
&lt;br /&gt;
Note that a URE installation can be selected instead of a complete OpenOffice.org installation. Please refer to the Java URE application tutorial for more details on the plugin&amp;#039;s URE support.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;If you are using Windows, please make sure that the path to the SDK does not contains any spaces.  Spaces in the path can cause problems when you build your UNO projects.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:SdkConfig.png|center|New SDK path window]]&lt;br /&gt;
&lt;br /&gt;
Now your OpenOffice.org plugin is ready to work. You can begin to create your new component. If there was any problem during the plugin installation, please report it to the dev@api.openoffice.org [http://api.openoffice.org/servlets/ProjectMailingListList mailing-list].&lt;br /&gt;
&lt;br /&gt;
==Creating a new component==&lt;br /&gt;
For the Eclipse plugin, a UNO component is a UNO project. This tutorial will explain how to easily create a new UNO component using the Eclipse plugin. We will now assume that you have very simple needs. The component that will be created is a &amp;quot;Hello world&amp;quot; service and its implementation. Creating a component that defines and implements more services is a bit more complex and requires advanced Java UNO knowledge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note: The plugin needs to open a connection to Open Office in order for it to obtain lists of components. The plugin will try to bootstrap OO if it is not running. If it fails, starting Open Office after running the wizard will not succeed. You will have to restart the wizard.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are several ways to create a UNO component project using the plugin: &lt;br /&gt;
&lt;br /&gt;
*The first one is the &amp;#039;&amp;#039;&amp;#039;File &amp;gt; New &amp;gt; Project&amp;#039;&amp;#039;&amp;#039; menu entry and choose the &amp;#039;&amp;#039;&amp;#039;UNO &amp;gt; UNO-IDL Project&amp;#039;&amp;#039;&amp;#039; item as shown by the following illustration.&lt;br /&gt;
&lt;br /&gt;
[[Image:NewUnoProjectsItems.png|center|New UNO-IDL project item]]&lt;br /&gt;
&lt;br /&gt;
*The second one is the icon in the toolbar representing a blue folder with a star as shown by the following illustration.&lt;br /&gt;
&lt;br /&gt;
[[Image:NewUnoProjectIcon.png|center|New UNO-IDL project icon]]&lt;br /&gt;
&lt;br /&gt;
Then you only have to follow the wizard to create your UNO component project, its specification and a skeleton of the implementation. This wizard is composed of several pages:&lt;br /&gt;
&lt;br /&gt;
*The main configuration page to define the general project properties.&lt;br /&gt;
*The implementation language configuration page.&lt;br /&gt;
*The service configuration page.&lt;br /&gt;
*The interface configuration page.&lt;br /&gt;
After all these steps you will have a running component... doing nothing. The following sections will describe the different wizard pages and where to place your code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The project configuration page===&lt;br /&gt;
The first page in the project wizard is the only page containing fields that must be filled in. All the others have default values to help you through the component creation. In our case, we will cover all the pages in the wizard to explain them all and define some new methods and attributes in our component.&lt;br /&gt;
&lt;br /&gt;
[[Image:NewUnoProject.jpg|center|New UNO-IDL project wizard page]]&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Project name:&amp;#039;&amp;#039;&amp;#039; is the component name, in our case, it will be &amp;quot;&amp;#039;&amp;#039;Helloworld&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Location:&amp;#039;&amp;#039;&amp;#039; is the directory on your computer where the project will be created. You can change the default one by deselecting the &amp;#039;&amp;#039;&amp;#039;Use default&amp;#039;&amp;#039;&amp;#039; check box. The default location of each Eclipse project is a directory with your project name in the current Eclipse workspace. &amp;#039;&amp;#039;&amp;#039;Please do not use spaces in this path on Windows.  Spaces in the path can prevent your component from being built.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Root package:&amp;#039;&amp;#039;&amp;#039; is the name of the first module of your component. It is generally composed of two parts: the vendor name (here &amp;lt;tt&amp;gt;org.openoffice&amp;lt;/tt&amp;gt;) and the project name (here &amp;lt;tt&amp;gt;helloworld&amp;lt;/tt&amp;gt;).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Used SDK:&amp;#039;&amp;#039;&amp;#039; selects the OpenOffice.org SDK which will be used to develop the component. You generally will have only one SDK in the list, but you can add others in the preferences or by clicking on the &amp;#039;&amp;#039;&amp;#039;Configure SDKs&amp;#039;&amp;#039;&amp;#039; button.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Used OOo:&amp;#039;&amp;#039;&amp;#039; selects the version of OpenOffice.org to use to develop the component. Just as with the SDK, you will generally have only one entry in the list, but you can add others in the preferences or by clicking on the OOo Installations button.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Programming language:&amp;#039;&amp;#039;&amp;#039; selects the programming language for the component implementation. For the moment, there is only Java available, however C++ and python are planned.&lt;br /&gt;
&lt;br /&gt;
===The implementation language configuration page===&lt;br /&gt;
This page depends on the chosen language. For Java, the default values should be kept: they define which class is the main class of the component. The component&amp;#039;s main class contains some code mapping the services to their implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The service configuration page===&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse_Service_Page.png|center|Service configuration page]]&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Module:&amp;#039;&amp;#039;&amp;#039; corresponds to the UNO-IDL module where to add the interface. If the text field is left empty, the interface will be added in the root module of the component (filled in the project wizard).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Service name:&amp;#039;&amp;#039;&amp;#039; is the service name. By keeping the default value, you will be able to define your own interface using the interface configuration page. Otherwise, you can reuse an existing interface.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Published&amp;#039;&amp;#039;&amp;#039;: specifies if the interface is published or not. The published notion is translated into a keyword in UNO-IDL language. Declaring a UNO-IDL type as published means that it will not change in future releases. We will keep it unchecked because our component is really far from being a stable API.&lt;br /&gt;
&lt;br /&gt;
===The interface configuration page===&lt;br /&gt;
&lt;br /&gt;
[[Image:NewInterfacePage.png|center|Interface configuration page]]&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Module:&amp;#039;&amp;#039;&amp;#039; corresponds to the UNO-IDL module where the interface is added. If the text field is left empty, the interface will be added in the root module of the component (filled in the project wizard).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Interface name:&amp;#039;&amp;#039;&amp;#039; is the interface name. By convention, we generally name an interface beginning with an &amp;quot;X&amp;quot;. In this tutorial, the interface will be named &amp;lt;tt&amp;gt;XHelloworld&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Inherited interfaces:&amp;#039;&amp;#039;&amp;#039; is a list of all the interfaces from which the one that is about to be created will inherit. This is one of the changes in UNO-IDL between OpenOffice.org 1.1.x and 2.0, and why the plugin does not support OpenOffice.org versions prior to 2.0. All the UNO-IDL interfaces are inheriting more or less directly from the &amp;lt;tt&amp;gt;com::sun::star::uno::XInterface&amp;lt;/tt&amp;gt; type. As the &amp;lt;tt&amp;gt;XHelloworld&amp;lt;/tt&amp;gt; interface is very easy, no super interface will be added. This will implicitly define &amp;lt;tt&amp;gt;XInterface&amp;lt;/tt&amp;gt; as the only parent for the new interface. &lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;&amp;quot;?&amp;quot; column:&amp;#039;&amp;#039;&amp;#039; specifies if the interface inheritance is mandatory or not. If the box is checked, the interface inheritance is optional and may not be implemented.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;&amp;quot;Add&amp;quot; and &amp;quot;Del&amp;quot; buttons:&amp;#039;&amp;#039;&amp;#039; allows you to add an interface to the inherited ones or remove the selected interface. Iff a connection to OpenOffice (already running or bootstrapped by the plugin) was succesfully made, you will see: [[Image:UNO_Types_Selector.PNG|center|UNO Types Selector option sheet]]It may take up to a minute to appear depending on your machine.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Members:&amp;#039;&amp;#039;&amp;#039; is a list of all the methods and properties of the interface. See below for explanations about the members. In this tutorial, just create one &amp;lt;tt&amp;gt;string sayHello([in] boolean isBadBoy)&amp;lt;/tt&amp;gt; method and a &amp;lt;tt&amp;gt;LadyName&amp;lt;/tt&amp;gt; property.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Published:&amp;#039;&amp;#039;&amp;#039; specifies if the interface is published or not. The published notion is translated into a keyword in UNO-IDL language. Declaring a UNO-IDL type as published means that it will not change in future releases. We will keep it unchecked because our component is really far from being a stable API.&lt;br /&gt;
A UNO interface can contain two kind of members: methods and properties. When clicking on the &amp;#039;&amp;#039;&amp;#039;Add&amp;#039;&amp;#039;&amp;#039; button near the members&amp;#039; list, the following window will be shown. When double-clicking on a line in the members&amp;#039; list, you will edit the corresponding member through the same window.&lt;br /&gt;
&lt;br /&gt;
When the window is opened to create a new member, you can choose whether the member will be a property or a method. The name and returned type fields are always present, but the lower part of the dialog is different for a method and a property.&lt;br /&gt;
&lt;br /&gt;
[[Image:Eclipse_Interface_Members_Dialog.png|center|Interface member creation dialog]]&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;The arguments list:&amp;#039;&amp;#039;&amp;#039; defines the name, type and direction of the parameters of the method. Simply click on the cell to edit it.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Read-only and Bound check boxes:&amp;#039;&amp;#039;&amp;#039; selecting these boxes sets the corresponding IDL flag on the property.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tip:&amp;#039;&amp;#039;&amp;#039; you can use &amp;#039;&amp;#039;&amp;lt;tt&amp;gt;&amp;#039;&amp;#039;Ctrl+Space&amp;#039;&amp;#039;&amp;lt;/tt&amp;gt;&amp;#039;&amp;#039; to complete the type name in the &amp;#039;&amp;#039;&amp;#039;Return type&amp;#039;&amp;#039;&amp;#039; field and &amp;#039;&amp;#039;&amp;#039;Type&amp;#039;&amp;#039;&amp;#039; column.&lt;br /&gt;
&lt;br /&gt;
===Writing the implementation===&lt;br /&gt;
After having completed the wizard, you need to write the component implementation. Hopefully a skeleton has been generated and opened. You need to complete the code where there are some TODOS. The generated project contains the following directories and files:&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;source:&amp;#039;&amp;#039;&amp;#039; directory containing your Java implementation classes.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;build:&amp;#039;&amp;#039;&amp;#039; directory containing all the generated temporary files, such as the results of the specification files (&amp;lt;tt&amp;gt;.idl&amp;lt;/tt&amp;gt; files) compilation (&amp;lt;tt&amp;gt;.urd&amp;lt;/tt&amp;gt; files) or the class files corresponding to the specifications (&amp;lt;tt&amp;gt;.class&amp;lt;/tt&amp;gt; files).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;idl:&amp;#039;&amp;#039;&amp;#039; directory containing the specifications of the component.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;types.rdb:&amp;#039;&amp;#039;&amp;#039; generated UNO types registry from which the classes files will be generated.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;JRE and the jars:&amp;#039;&amp;#039;&amp;#039; describe the classpath of the component. They are visible only in the Java package explorer. The OpenOffice.org jars are changed if the OpenOffice.org version associated to the project is changed. &amp;#039;&amp;#039;In a future version, they will be packed in a user library to take less space in the tree.&amp;#039;&amp;#039;&lt;br /&gt;
The generated skeleton already contains the methods for the implementation registration. The only things to modify are:&lt;br /&gt;
&lt;br /&gt;
*Change the code of the setters and getters for the defined properties.&lt;br /&gt;
*Change the code of the defined methods.&lt;br /&gt;
The Eclipse integration even manages the libraries needed by your implementation. Let us imagine that we want to use the &amp;lt;tt&amp;gt;Fraction&amp;lt;/tt&amp;gt; class from the Apache &amp;lt;tt&amp;gt;common-math&amp;lt;/tt&amp;gt; jar. Download this jar from the Apache website, and import the &amp;lt;tt&amp;gt;common-math-1.1.jar&amp;lt;/tt&amp;gt; file into your component project, for example in a &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt; directory. Add the jar to the project build path in the same way than in any other Eclipse Java project and use it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    // org.openoffice.helloworld.XHelloworld:&lt;br /&gt;
    private String mLadyName = &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    public String getLadyName()&lt;br /&gt;
    {&lt;br /&gt;
        return mLadyName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void setLadyName(String the_value)&lt;br /&gt;
    {&lt;br /&gt;
        mLadyName = the_value;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public String sayHello(boolean isBadBoy)&lt;br /&gt;
    {&lt;br /&gt;
    	String hello = &amp;quot;Hello Mrs. &amp;quot; + getLadyName();&lt;br /&gt;
        if (isBadBoy) {&lt;br /&gt;
        	Fraction f = new Fraction(1, 3);&lt;br /&gt;
        	hello = &amp;quot;A third is &amp;quot; + f.doubleValue();&lt;br /&gt;
        }&lt;br /&gt;
        return hello;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The above code shows you what could be an implementation of our component. Now, there is only to package it properly and test it.&lt;br /&gt;
&lt;br /&gt;
==Packaging and testing the component==&lt;br /&gt;
Now we will show you how to export your component into an OpenOffice.org package. There is little to do apart from following these steps:&lt;br /&gt;
&lt;br /&gt;
*Select the &amp;#039;&amp;#039;&amp;#039;File &amp;gt; Export&amp;#039;&amp;#039;&amp;#039; menu. Then choose the &amp;#039;&amp;#039;&amp;#039;UNO &amp;gt; OpenOffice.org&amp;#039;&amp;#039;&amp;#039; package export type.&lt;br /&gt;
*The next page of the wizard asks for the UNO project to export (already selected), the directory where to export the package and the OpenOffice.org minimum compatibility version for the package. Depending of the selected OpenOffice.org version, the package will get a different name and a different structure.&lt;br /&gt;
*Click on the Finish button. The wizard will ask you whether to deploy to package or not and asks for the old package removal if needed.&lt;br /&gt;
Then we will suppose that the package is deployed on the OpenOffice.org installation and we will test it using the following &amp;lt;tt&amp;gt;OooBasic&amp;lt;/tt&amp;gt; macro.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;oobas&amp;quot;&amp;gt;&lt;br /&gt;
Sub testHelloworld&lt;br /&gt;
	oHelloworld = createUnoService( &amp;quot;org.openoffice.helloworld.Helloworld&amp;quot; )&lt;br /&gt;
	oHelloworld.LadyName = &amp;quot;Robinson&amp;quot;&lt;br /&gt;
	print oHelloworld.sayHello( false )&lt;br /&gt;
	print oHelloworld.sayHello( True )&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This macro should open two message windows with &amp;#039;&amp;#039;&amp;quot;Hello Mrs. Robinson&amp;quot;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;quot;A third is 0.3333333&amp;quot;&amp;#039;&amp;#039;. Your first UNO component is now running, enjoy doing others.&lt;br /&gt;
&lt;br /&gt;
==Going further==&lt;br /&gt;
This chapter is only for those who enjoyed this tutorial and want to know more about the UNO component creation in Java or other languages. The following is a list of useful links for any UNO developer:&lt;br /&gt;
&lt;br /&gt;
*[http://api.openoffice.org/docs/DevelopersGuide/DevelopersGuide.xhtml OpenOffice.org developer&amp;#039;s guide] is a huge source of documentation for any OpenOffice.org developer. You should probably have a look at chapters 3 and 4 for UNO component information.&lt;br /&gt;
*[http://api.openoffice.org/docs/java/ref/overview-summary.html OOo Java reference] is the UNO binding for Java reference.&lt;br /&gt;
*[http://api.openoffice.org/docs/cpp/ref/names/index.html OOo C++ reference] is the UNO binding for C++ reference.&lt;br /&gt;
*[http://wiki.services.openoffice.org/ OOo Developer&amp;#039;s Wiki] is the wiki for all the OpenOffice.org developers. It contains useful information even for people who are just starting out with UNO.&lt;br /&gt;
*[http://udk.openoffice.org/common/man/draft/multinherit.html http://udk.openoffice.org/common/man/draft/multinherit.html] for further information on what changes have been made in UNO-IDL between OpenOffice.org 1.1.x and 2.0&lt;br /&gt;
*[http://tools.openoffice.org/autodoc/HowToWriteDocumentation-Cpp.html Autodoc Java reference] is the reference for &amp;lt;tt&amp;gt;javadoc&amp;lt;/tt&amp;gt; like comments in UNO-IDL files.&lt;br /&gt;
*[http://tools.openoffice.org/autodoc/HowToWriteDocumentation-Cpp.html Autodoc C++ documentation] is the reference for &amp;lt;tt&amp;gt;javadoc&amp;lt;/tt&amp;gt; like comments in C++ components.&lt;br /&gt;
*[http://cedric.bosdonnat.free.fr/wordpress/?p=19 URE C++ application tutorial] explains how to create a C++ application based on the URE, that is a UNO C++ component that does not need OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
==Trouble shooting==&lt;br /&gt;
* If you run into trouble it might be helpful to turn the log level to debug mode. This can be done inside Eclipse via Window &amp;gt; Preferences &amp;gt; OpenOffice.org Integration. The log file can be found in &amp;#039;&amp;#039;$YOURWORKSPACEPATH/.metadata/.log&amp;#039;&amp;#039; .&lt;br /&gt;
* If you run into trouble at deployment, make shure that no OpenOffice process is running&lt;br /&gt;
* If redeployment does not work, because the previously installed plugin can not be deleted, use &amp;lt;OpenOffice Installation&amp;gt;\program\unopkg to delete it manually&lt;br /&gt;
* If you plan to use the OpenOffice version that comes with your distribution try using the according SDK (in Ubuntu it is the package openoffice.org-dev). If there is no such package and you run into trouble not getting the skeletons and opening of an external editor you probably have to create a symbolic link to &amp;#039;&amp;#039;/usr/lib/libstlport_gcc.so&amp;#039;&amp;#039; from the official version of libstlport_gcc.so extracted from an official download of OOo.&lt;br /&gt;
* On Unix running &amp;#039;&amp;#039;setsdkenv_unix&amp;#039;&amp;#039; in your SDK directory might helpful as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Eclipse]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Tutorial]]&lt;br /&gt;
[[Category:Java]]&lt;br /&gt;
[[Category:Uno]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Prj&amp;diff=105818</id>
		<title>Prj</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Prj&amp;diff=105818"/>
		<updated>2008-12-29T03:38:54Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;does contain build.lst and d.lst&lt;br /&gt;
build.lst give us dependencies : probably a lot for vcl, build 98th module over ~148. Everything graphical depends in vcl.&lt;br /&gt;
qa : does contain all quality assurancy stuff&lt;br /&gt;
source : the most important :-)&lt;br /&gt;
Depending on the OS and the architecture, binaries are built or not.&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Prj&amp;diff=105816</id>
		<title>Prj</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Prj&amp;diff=105816"/>
		<updated>2008-12-29T03:35:00Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: Category:Orphan&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;does contain build.lst and d.lst&lt;br /&gt;
build.lst give us dependencies : probably a lot for vcl, build 98th module over ~148. Everything graphical depends in vcl.&lt;br /&gt;
qa : does contain all quality assurancy stuff&lt;br /&gt;
source : the most important :-)&lt;br /&gt;
Depending on the OS and the architecture, binaries are built or not.&lt;br /&gt;
&lt;br /&gt;
[[Category:Orphan]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Modularization&amp;diff=105815</id>
		<title>Modularization</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Modularization&amp;diff=105815"/>
		<updated>2008-12-29T03:32:31Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenOffice.org Modularization ==&lt;br /&gt;
&lt;br /&gt;
Often the question arises why is OpenOffice.org not more modular. There are several aspects of modularization:&lt;br /&gt;
&lt;br /&gt;
== Views on Modularization ==&lt;br /&gt;
&lt;br /&gt;
=== User View ===&lt;br /&gt;
&lt;br /&gt;
From the user point of view there are several modules:&lt;br /&gt;
* Word Processor&lt;br /&gt;
* Spreadsheet Module&lt;br /&gt;
* Impress Module&lt;br /&gt;
* Database Module&lt;br /&gt;
* Core Modules&lt;br /&gt;
* Desktop Integration&lt;br /&gt;
* Filter Modules &lt;br /&gt;
and many more.&lt;br /&gt;
&lt;br /&gt;
=== Architectural View ===&lt;br /&gt;
&lt;br /&gt;
The [http://www.openoffice.org/white_papers/tech_overview/tech_overview.html#27 Architectural OverView] shows a very stripped down overview. In reality we will find up to 20 layers below an Application module. All code which can be shared among the Application modules has been moved to core modules. Examples for such layers are &lt;br /&gt;
* System Abstraction Layer&lt;br /&gt;
* Infrastructure Layer&lt;br /&gt;
* Framework Layer&lt;br /&gt;
These layers themselves can contain some layers again, helper and wrapper layer and so on.&lt;br /&gt;
&lt;br /&gt;
=== Source Code ===&lt;br /&gt;
The Source Code itself is group im more than 150 modules, each of these can be build in one pass.&lt;br /&gt;
&lt;br /&gt;
Each compilation unit and each C++ class also can be viewed as a module. &lt;br /&gt;
&lt;br /&gt;
=== Libraries ===&lt;br /&gt;
&lt;br /&gt;
Often libraries are build on per (source code/CVS) module basis, sometimes several libraries are built in one CVS module. Attention: at many places the runtime dependencies of the library modules differs from the build sequence of CVS modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Goals of Modularization ==&lt;br /&gt;
When viewing the list of problems, one can see some terms repeated often. In reverse, those lead to some goals (items are not necessarily distinct):&lt;br /&gt;
&lt;br /&gt;
* Reducing dependencies&lt;br /&gt;
**  implementation dependencies (improve maintainability, testability, correctness)&lt;br /&gt;
**  build time dependencies (reduce build effort, also accelerate development)&lt;br /&gt;
**  run time dependencies (improve runtime efficiency)&lt;br /&gt;
* Maintainability&lt;br /&gt;
**  clear points of responsibility - one piece of code for each task&lt;br /&gt;
**  changes have less risk, because they most times only affect a clearly separated amount of code&lt;br /&gt;
**  code is easier to understand, if module&amp;#039;s tasks and interfaces are clearly defined&lt;br /&gt;
* Testability&lt;br /&gt;
**  modules can be tested in isolation&lt;br /&gt;
* Runtime efficiency&lt;br /&gt;
**  only needed modules are loaded, leading to less memory usage and faster startup&lt;br /&gt;
* Correctness&lt;br /&gt;
**  less regression, because changes have fewer side effects&lt;br /&gt;
**  better tests, because tests can concentrate on sharply separated units&lt;br /&gt;
&lt;br /&gt;
== Principles of Modularization ==&lt;br /&gt;
How does one recognize a module? What is a &amp;quot;good&amp;quot; module?&lt;br /&gt;
* encapsulation&lt;br /&gt;
* unambiguously defined, consistent and minimal interfaces&lt;br /&gt;
* dependencies always shall have tree-shape, no circles (small dependency circles up to about 5 compilation units or 2 larger modules may be necessary sometimes)&lt;br /&gt;
&lt;br /&gt;
== Review of the Current Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Possibilities ===&lt;br /&gt;
The current structure does not only have problems, but also provides some possibilities on which further modularization might build up.&lt;br /&gt;
&lt;br /&gt;
* The system abstraction layer provides a lot of independence from platforms and enables, though OpenOffice.org is a huge project, relatively easy portability.&lt;br /&gt;
* UNO allows to write components which enforce modularization, because they are only accessible via well defined interfaces.&lt;br /&gt;
&lt;br /&gt;
=== General Problems ===&lt;br /&gt;
&amp;#039;&amp;#039;List problems here, if they occur at many places or are of principal nature.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Selective Installation of Application modules doesn&amp;#039;t save disk space for the User.&lt;br /&gt;
* Amount of modules and their dependencies is impossible to overview for Developers, this leads to&lt;br /&gt;
**  maintainability problems&lt;br /&gt;
**  code complexity&lt;br /&gt;
**  long build times&lt;br /&gt;
* Architectural/source code modules are not clearly separated from each other by interfaces. Instead clients depend on implementation details of the module. Often it is not really defined what shall be interface and what was meant as implementation only. Consequences:&lt;br /&gt;
**  complexity - as it is unclear which functions of a module are for public use and which are not&lt;br /&gt;
**  avoidable build time - as dependant source code needs to be rebuild, when implementation details of a module are changed&lt;br /&gt;
**  maintainability problems - because when changing implementation details of a module, it is unclear which client code will be influenced and how.&lt;br /&gt;
* There is a lot of duplicate code for the same tasks in parallel use cases. This leads to problems with&lt;br /&gt;
**  performance - because of increased code size in memory&lt;br /&gt;
**  maintainability - because to change one feature, it is often necessary to change a lot of different locations in code; sometimes even nobody knows which all those locations would be&lt;br /&gt;
* Large circular dependencies among compilation units. There are several cases where one or a few hundred compilation units are circular dependent on each other. This means:&lt;br /&gt;
** testing problems - none of them can be tested in isolation, unit tests are nearly impossible&lt;br /&gt;
** maintainability problems - lots of regression, because a change in one of those files may cause side effects in a few hundred others&lt;br /&gt;
&lt;br /&gt;
=== Specific Suggestions for Improvement ===&lt;br /&gt;
&amp;#039;&amp;#039;List suggestions here, if they are already related to concrete locations in the code or specific architectural concepts.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=BuildSpeedup&amp;diff=105814</id>
		<title>BuildSpeedup</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=BuildSpeedup&amp;diff=105814"/>
		<updated>2008-12-29T03:30:15Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Make the OO.o build system the coolest on the planet! OpenOffice.org is one of the largest and most interesting open source projects that exists. The target of the BuildSpeedup project is to make the build system the coolest one around. A reliable and fast build system has several direct and indirect impacts, maybe most importantly it is the first thing a new contributor comes across when they pick up the project. Main main target audience is an contributor running a high-mid level desktop. Secondary target is people running build farms (notably Sun). Specification for Jam build prototype [[SpecJamBuild]].&lt;br /&gt;
&lt;br /&gt;
* Simple test harness to figure out the speed of different build tools: [http://wiki.services.openoffice.org/mwiki/images/1/11/Buildtest.tgz Buildtest.tgz]&lt;br /&gt;
* Paper on prototype for setting up and building OO.o on large compilation cluster: [http://wiki.services.openoffice.org/wiki/Image:Build_j50.tgz Build_j50.tgz]&lt;br /&gt;
&lt;br /&gt;
== How to report build profile logs ==&lt;br /&gt;
&lt;br /&gt;
Thank you for sending in a build profile log. The more logs we have, the easier it is to focus our effort correctly. Here are the steps to producing a build log:&lt;br /&gt;
&lt;br /&gt;
# Apply the latest patch from {{Bug|60948}} to your source tree&lt;br /&gt;
# in the dmake directory type &amp;quot;make clean; make&amp;quot;. In the root directory type &amp;quot;./bootstrap&amp;quot;&lt;br /&gt;
# When building redirect stderr and stdout to the logfile. In tcsh &amp;quot;build --all |&amp;amp; tee myconfigdesc_build.log&amp;quot; will do the trick. You can alternatively use cat instead of tee to speed up the build slightly. You need to build in a single go and in a single process (no parallel building)&lt;br /&gt;
# Check that the log contains markers like &amp;quot;s target 1234 foo.obj&amp;quot;. If not, then report&lt;br /&gt;
# Compress the log with zip/gz&lt;br /&gt;
# When you send in your log URL to mailto:kaib@openoffice.org please provide a short description of the build type:&lt;br /&gt;
#* Important configure options (like --with-lang=?)&lt;br /&gt;
#* OS/compiler/generic hardware description&lt;br /&gt;
#* No-change, partial or full build (we are especially looking for full builds)&lt;br /&gt;
#* External accelerators like [[wikipedia:ccache|ccache]]&lt;br /&gt;
&lt;br /&gt;
Thank you again for contributing! --[[User:KaiB|KaiB]] 16:25, 25 January 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
== Profile results ==&lt;br /&gt;
&lt;br /&gt;
Here are some initial profile results. These were done on a HP development desktop with 4GB of RAM. Due to various reasons there is a margin of error in all results, but the largest culprits are pretty clear.&lt;br /&gt;
&lt;br /&gt;
=== Full rebuild from scratch ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Time spent&lt;br /&gt;
! Target type (file extension)&lt;br /&gt;
|- &lt;br /&gt;
| 33.2%&lt;br /&gt;
| C/C++ compilation (obj)&lt;br /&gt;
|- &lt;br /&gt;
| 27%&lt;br /&gt;
| dmake/build.pl (time not attributed to any target)&lt;br /&gt;
|-&lt;br /&gt;
| 22.0%&lt;br /&gt;
| Dependency generation (dpcc)&lt;br /&gt;
|-&lt;br /&gt;
| 3.7%&lt;br /&gt;
| SDK installer (sdkoo_en-US)&lt;br /&gt;
|-&lt;br /&gt;
| 1.3%&lt;br /&gt;
| Unknown, build related (last_target)&lt;br /&gt;
|-&lt;br /&gt;
| 1.2%&lt;br /&gt;
| Linking (dll)&lt;br /&gt;
|-&lt;br /&gt;
| 1.1%&lt;br /&gt;
| OpenOffice.org installer (openoffice_en-US)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Running time: 62296 s targets: 45927 s 73%&lt;br /&gt;
&lt;br /&gt;
As a benchmark, a Mozilla Firefox build corrected for differences in source code size takes about 25% of the OO.o build time.&lt;br /&gt;
&lt;br /&gt;
=== Nothing changed rebuild ===&lt;br /&gt;
&lt;br /&gt;
Basically profiling the build in a non-changed source tree.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Time spent&lt;br /&gt;
! Target type (file extension)&lt;br /&gt;
|- &lt;br /&gt;
| 54.8%&lt;br /&gt;
| SDK installer (sdkoo_en-US)&lt;br /&gt;
|-&lt;br /&gt;
| 19%&lt;br /&gt;
| dmake/build.pl (time not attributed to any target)&lt;br /&gt;
|-&lt;br /&gt;
| 16.2%&lt;br /&gt;
| OpenOffice installer (openoffice_en-US)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Running time: 4209 s targets: 3431 s 81%&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
This is a workarea for ideas and notes regarding the speeding up of the build process. --[[User:KaiB|KaiB]] 12:50, 16 January 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* Newest dmake version: cws_src680_dmake43p01)&lt;br /&gt;
* solenv/inc define global targets&lt;br /&gt;
* potential modules: KaiB: transex3, tools, svx, binfilter - small to huge :)&lt;br /&gt;
* helpcontent2 --with-lang=ALL (there are open issues on this already)&lt;br /&gt;
* batched compiles&lt;br /&gt;
* Interix instead of cygwin&lt;br /&gt;
* dependency generation&lt;br /&gt;
&lt;br /&gt;
Existing possibly useful Build Speed related tweaks:&lt;br /&gt;
* export nodep=true&lt;br /&gt;
* export NO_HIDS=true&lt;br /&gt;
* build.pl -P parallel flag&lt;br /&gt;
* dmake -P parallel flag and/or MAXPROCESS (cws_src680_dmake43p01 has fixes for some problems there)&lt;br /&gt;
* dmake -s flag for less verbose output&lt;br /&gt;
* for gcj users targetedaot workspace to ahead of time compile (only) HelpLinker and FCFGMerge java build tools&lt;br /&gt;
&lt;br /&gt;
=== transex3 ===&lt;br /&gt;
&lt;br /&gt;
Started by tackling this small module. Initial full compile time was 137 sec.&lt;br /&gt;
&lt;br /&gt;
== build_profile_analyzer.py ==&lt;br /&gt;
&lt;br /&gt;
(NB. Move this to an attachment once the Wiki accepts .py files)&lt;br /&gt;
&lt;br /&gt;
 # Copyright 2006 Google Inc.&lt;br /&gt;
 #&lt;br /&gt;
 # Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;
 # you may not use this file except in compliance with the License.&lt;br /&gt;
 # You may obtain a copy of the License at&lt;br /&gt;
 #&lt;br /&gt;
 #     http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 #&lt;br /&gt;
 # Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
 # distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
 # See the License for the specific language governing permissions and&lt;br /&gt;
 # limitations under the License.&lt;br /&gt;
 &lt;br /&gt;
 # OO.o build profile analyzer. To get the required patches look at:&lt;br /&gt;
 # http://wiki.services.openoffice.org/wiki/BuildSpeedup&lt;br /&gt;
 # Author: Kai Backman, kaib@google.com&lt;br /&gt;
 &lt;br /&gt;
 import os&lt;br /&gt;
 import re&lt;br /&gt;
 import sys&lt;br /&gt;
 &lt;br /&gt;
 def SortProfileTimes(lhs, rhs):&lt;br /&gt;
   if lhs[1] &amp;lt; rhs[1] : return 1&lt;br /&gt;
   elif rhs[1] &amp;lt; lhs[1] : return -1&lt;br /&gt;
   else : return 0&lt;br /&gt;
 &lt;br /&gt;
 def ProcessLogFile(file_name, target_durations):&lt;br /&gt;
 #  print &amp;quot;Processing file: &amp;quot; + file_name&lt;br /&gt;
   file = open(file_name)&lt;br /&gt;
   start_time = 0&lt;br /&gt;
   end_time = 0&lt;br /&gt;
 &lt;br /&gt;
   target_start = 0&lt;br /&gt;
   target_name = &amp;quot;&amp;quot;&lt;br /&gt;
   line = file.readline()&lt;br /&gt;
   while line != &amp;quot;&amp;quot; :&lt;br /&gt;
     tokens = line[:-1].split(&amp;quot; &amp;quot;)&lt;br /&gt;
     line = file.readline()&lt;br /&gt;
 &lt;br /&gt;
     if len(tokens) &amp;lt; 2 : continue&lt;br /&gt;
     if tokens[1] == &amp;quot;build&amp;quot; :&lt;br /&gt;
       if tokens[0] == &amp;quot;s&amp;quot; :&lt;br /&gt;
         start_time = int(tokens[2]) * 1000&lt;br /&gt;
       elif tokens[0] == &amp;quot;e&amp;quot; :&lt;br /&gt;
         end_time = int(tokens[2]) * 1000&lt;br /&gt;
     elif tokens[1] == &amp;quot;target&amp;quot; :&lt;br /&gt;
       if tokens[0] == &amp;quot;s&amp;quot;:&lt;br /&gt;
         target_start = int(tokens[2])&lt;br /&gt;
         target_name = tokens[3]&lt;br /&gt;
       elif tokens[0] == &amp;quot;e&amp;quot; and target_name == tokens[3]:&lt;br /&gt;
         target_duration = int(tokens[2]) - target_start&lt;br /&gt;
         target_tokens = tokens[3].split(&amp;quot;.&amp;quot;)&lt;br /&gt;
         target_class = target_tokens[len(target_tokens) - 1]&lt;br /&gt;
         if target_durations.has_key(target_class) :&lt;br /&gt;
           target_durations[target_class] += target_duration&lt;br /&gt;
         else :&lt;br /&gt;
           target_durations[target_class] = target_duration&lt;br /&gt;
   file.close()&lt;br /&gt;
   return end_time - start_time&lt;br /&gt;
   return &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
   target_durations = {}&lt;br /&gt;
   total_time = 0&lt;br /&gt;
   for file_name in sys.argv[1:] :&lt;br /&gt;
     total_time += ProcessLogFile(file_name, target_durations)&lt;br /&gt;
 &lt;br /&gt;
   profile = target_durations.items()&lt;br /&gt;
   profile.sort(SortProfileTimes)&lt;br /&gt;
   total_target_time = 0&lt;br /&gt;
   for target_iter in profile :&lt;br /&gt;
     target_promille = target_iter[1] * 1000 / total_time&lt;br /&gt;
     if target_promille &amp;gt; 0 :&lt;br /&gt;
       print &amp;quot;%6.ds %3.d.%1.d%% %s&amp;quot; % (target_iter[1] / 1000, target_promille/10,&lt;br /&gt;
                                       target_promille % 10, target_iter[0])&lt;br /&gt;
     total_target_time += target_iter[1]&lt;br /&gt;
   print &amp;quot;Running time: %d s targets: %d s %d%%&amp;quot; % (total_time / 1000, total_target_time / 1000,&lt;br /&gt;
                                                    total_target_time * 100 / total_time)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=BuildingMSVCStandard&amp;diff=105813</id>
		<title>BuildingMSVCStandard</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=BuildingMSVCStandard&amp;diff=105813"/>
		<updated>2008-12-29T03:29:36Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Code changes ==&lt;br /&gt;
&lt;br /&gt;
What hides these issues when using Professional is more agressive inlining. Even if they all manifest with standard, they are actually separate and distinct issues. I&amp;#039;ve summarized the changes here and I&amp;#039;ll add a patch once I&amp;#039;ve verified the impact of these changes. &amp;#039;&amp;#039;&amp;#039;You have to do these changes before compiling&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Update: These are all the changes required to compile OO.o. I&amp;#039;m now working on a patch. --[[User:KaiB|KaiB]] 22:30, 13 January 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
Update: These or different changes with the same effect are implemented in m156 and will also be included in OOo 2.0.2.&lt;br /&gt;
--[[User:Vq|Vq]] 14:41, 13 February 2006 (EST)&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;sj2/util/makefile.mk&amp;#039;&amp;#039;&amp;#039;: add the SVTOOLLIB library ===&lt;br /&gt;
&lt;br /&gt;
 SHL1STDLIBS= \ &lt;br /&gt;
  $(VCLLIB) \ &lt;br /&gt;
  $(UNOTOOLSLIB) \ &lt;br /&gt;
  $(TOOLSLIB) \ &lt;br /&gt;
  $(CPPULIB) \ &lt;br /&gt;
  $(SALLIB) \ &lt;br /&gt;
 +$(SVTOOLLIB) &lt;br /&gt;
&lt;br /&gt;
The required library was just missing from the makefile.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;basic/source/apps/dialogs.cxx&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
1. Comment out the lines shown here starting from line 43:&lt;br /&gt;
&lt;br /&gt;
 //HACK( #define protected public )&lt;br /&gt;
 //#define protected public		// Kleine Schweinerei um an FreeResource ranzukommen&lt;br /&gt;
 #ifndef _TOOLS_RC_HXX //autogen&lt;br /&gt;
 #include &amp;lt;tools/rc.hxx&amp;gt;&lt;br /&gt;
 #endif&lt;br /&gt;
 //#undef protected&lt;br /&gt;
&lt;br /&gt;
2. Comment out the line shown here (line 238):&lt;br /&gt;
&lt;br /&gt;
 aConfig.EnablePersistence( FALSE );&lt;br /&gt;
 // aTabCtrl.FreeResource();&lt;br /&gt;
 FreeResource();&lt;br /&gt;
&lt;br /&gt;
Redefining the reserved keyword in spot 1 results in the linker trying to find a public FreeResource method while the actual one compiled into the library is protected. The error pops up in a totally unrelated module and halts the build. Spot 2 is the place that requires this workaround.&lt;br /&gt;
&lt;br /&gt;
In [http://www.openoffice.org/issues/show_bug.cgi?id=58352 Issue 58352] there is a commit log of the changes needed to solve the problem and not workaround it. The fix is on CWS warnings01. (Gregor Hartmann is the basic/source/app maintainer)&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;tools/source/stream/stream.cxx&amp;#039;&amp;#039;&amp;#039; (line 66): Define ENABLE_STRING_STREAM_OPERATORS to compile the stream operators into the library: ===&lt;br /&gt;
&lt;br /&gt;
  #define ENABLE_BYTESTRING_STREAM_OPERATORS&lt;br /&gt;
 +#define ENABLE_STRING_STREAM_OPERATORS&lt;br /&gt;
  #include &amp;lt;stream.hxx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Simple change to ensure that the deprecated stream functions are still compiled into the library. The proper long term fix is to change the call sites and remove the requirement altogether.&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Tinderbox_Setup&amp;diff=105812</id>
		<title>Tinderbox Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Tinderbox_Setup&amp;diff=105812"/>
		<updated>2008-12-29T03:28:17Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Disclaimer! I tested the tinderbox scripts that are described on this page only with W32-tcsh but they should work with any *NIX like system. They are to be considered of beta quality only. Patches are very much appreciated.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= What is tinderbox =&lt;br /&gt;
&lt;br /&gt;
In essence tinderbox collects build logs and presents the logs and the result it in a nice, clear and concise way  It is very easy to tell whether build complete successfully or not and whether the results are still valid (there could have been changes to the sourcecode in the meantime). It collects the logs from separate and de-coupled build machines. Tinderbox has a few elaborations over the most simple &amp;#039;status&amp;#039; web-page, inasmuch that it integrates with bonsai - to correlate builds against commits, and it has some nice built in error-parsers to allow huge build logs to be condensed to just a few (possible) tricky sections.&lt;br /&gt;
&lt;br /&gt;
Our [http://go-oo.org/tinderbox/ tinderbox] uses the [http://www.mozilla.org/tinderbox.html Tinderbox 2] from the mozilla project plus some small cosmetic changes. Additional documentation can be found there.&lt;br /&gt;
&lt;br /&gt;
= Setting up a build slave =&lt;br /&gt;
To do this, you need to be able to build OO.o already; if you can&amp;#039;t do this start here: [[Building]].&lt;br /&gt;
&lt;br /&gt;
== The very basics ==&lt;br /&gt;
As mentioned earlier, the tinderbox works by collecting the buildlogs. So all you need to do is to mail your logs to the tinderbox-server. The scripts presented further down automate this process, but let&amp;#039;s have a look at the mails first.&lt;br /&gt;
&lt;br /&gt;
=== Necessary annotations to the buildlogs ===&lt;br /&gt;
To be able to assign a logfile to a given buildslave, the mail must contain some lines that identify the buildslave and the cws the log belongs to.&lt;br /&gt;
An example of the fields looks like this:&lt;br /&gt;
&lt;br /&gt;
 tinderbox: administrator: John Doe &amp;lt;john@doe.com&amp;gt;&lt;br /&gt;
 tinderbox: buildname:     LinuxPPC (gcc 4.0.2)&lt;br /&gt;
 tinderbox: tree:          SRC680_m198&lt;br /&gt;
 tinderbox: errorparser:   unix&lt;br /&gt;
 tinderbox: starttime:     1168270122&lt;br /&gt;
 tinderbox: timenow:       1168286928&lt;br /&gt;
 tinderbox: status:        success&lt;br /&gt;
 tinderbox: END&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;buildlog goes here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fields should be almost self-explanatory, but still: &lt;br /&gt;
* Admin is the person to contact when there are problems with the buildslave/questions about it&lt;br /&gt;
* buildname is the identifier of the buildslave as it will appear in the overview pages&lt;br /&gt;
* tree identifies the Milestone/CWS that the buildslaves reports&lt;br /&gt;
* errorparser identifies the parser the tinderbox uses to detect build errors within the log - OOo&amp;#039;s tinderbox currenlty uses &amp;quot;unix&amp;quot; errorparser for all platfomrs&lt;br /&gt;
* starttime is the timestamp when the build started (human-readable times possible as well)&lt;br /&gt;
* timenow is the timestap when the mail is sent&lt;br /&gt;
* status is the current state of the build (valid values are &amp;quot;building&amp;quot;, &amp;quot;success&amp;quot; &amp;quot;failed&amp;quot;, &amp;quot;test_failed&amp;quot;, &amp;quot;not_running&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
The buildlog follows the annotations.&lt;br /&gt;
&lt;br /&gt;
=== Sending the buildlog gzipped compressed ===&lt;br /&gt;
&lt;br /&gt;
To save both bandwidth and diskscpace (and to be in the max-message-size limit of most mail-servers), the tinderbox accepts buildlogs in gzipped format. So send gzipped mails, prepare the log as you would do with a plaintext-only message (i.e.)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tinderbox annotations&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;buildlog&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And run gzip over the message. Then simply add it as attachment to the mail (the mail can then be empty, the body text is ignored).&lt;br /&gt;
&lt;br /&gt;
=== Let tinderbox know whether it is a plaintext log or a gzipped one ===&lt;br /&gt;
In order to let tinderbox know that it is a gzipped compressed logfile, add a custom header to your mail:&lt;br /&gt;
* if your log is in the message body add&lt;br /&gt;
 X-Tinder: cookie&lt;br /&gt;
* if your log is attached as a gzipped attachment add&lt;br /&gt;
 X-Tinder: gzookie&lt;br /&gt;
&lt;br /&gt;
The address to send the mails to is ooo &amp;lt;at&amp;gt; go-oo.org btw :-)&lt;br /&gt;
The above info should be enough to allow reporting your logs to tinderbox. If you seek more comport, set up a framework that automates building of OOo (see further below)&lt;br /&gt;
&lt;br /&gt;
=== How many mails should I send? ===&lt;br /&gt;
Well, at the bare minimum you only need to send one single mail, but sending two mails (one when the build starts and one when the build finishes) allows the tinderbox to give estimations on when a build will be finished (and allow other buildslaves of a similar setup to skip the tree and build another one instead. &lt;br /&gt;
Another good way is to send a third mail in between, after configure/bootstrap is finished. That way one can check out whether patches that are added were applied successfully and whether configure setup is OK.&lt;br /&gt;
&lt;br /&gt;
= Framework to automate the process =&lt;br /&gt;
The framework that is described in the following sections can be used to build &amp;quot;new&amp;quot; and &amp;quot;Ready-for-QA&amp;quot; CWSs and MWSs of the 680er codeline. The source is fetched from cvs.&lt;br /&gt;
&lt;br /&gt;
See [http://www.go-oo.org/tinderbox/ this] webpage for a list of the currently accepted tags. You will find the build logs (providing there are any) when you click on the corresponding tag.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A mininimal framework to build OOo CWSs and MWSs and sent the reports to the tinderbox at go-oo.org is created by the following files.&lt;br /&gt;
&lt;br /&gt;
These three files from [http://go-ooo.org/tinder-scripts/ this] directory are needed to refresh the build tree and send the build log after the build:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;(Files partially updated: 2006.07.02)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 tin-main.pl&lt;br /&gt;
 tinget.pl&lt;br /&gt;
 tinsend.pm&lt;br /&gt;
&lt;br /&gt;
In principle any build/preparation script can be used but the following two files (also from [http://go-ooo.org/tinder-scripts/ here]) work together with the main tinderbox slave script mentioned above (tin-main.pl):&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;(Files partially updated: 2006.06.25)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 tinprep.sh&lt;br /&gt;
 tinbuild.sh&lt;br /&gt;
&lt;br /&gt;
If you want to use your own scripts instead make sure to adapt the lines that call tinprep.sh and tinbuild.sh in tin-main.pl.&lt;br /&gt;
&lt;br /&gt;
In addition to these files you need to install the Sender.pm Perl module from CPAN. See the [[CPAN_install]] page for details about getting/installing perl modules.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
A few files have to be adapted to match your local setup. Changes only have to be done in areas marked with:&lt;br /&gt;
 &amp;quot;# -- End of Things to tweak --&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;tin-main.pl&amp;lt;br&amp;gt;These variables need to be adapted (Follow the example in the source):&amp;lt;pre&amp;gt;&lt;br /&gt;
$tinsend::FROMADDRESS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For smtpservers that doesn&amp;#039;t need authentification just enter the server name:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$tinsend::SMTPAUTH = &amp;#039;&amp;#039;;&lt;br /&gt;
$tinsend::SMTPSERVER = &amp;#039;smtpserver.without_pw.org&amp;#039;;&lt;br /&gt;
$tinsend::SMTPAUTHID = &amp;#039;&amp;#039;;&lt;br /&gt;
$tinsend::SMTPAUTHPW = &amp;#039;&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the smtpserver needs authentification set $SMTPAUTH to &amp;#039;LOGIN&amp;#039; and set your username and password:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$tinsend::SMTPAUTH = &amp;#039;LOGIN&amp;#039;;&lt;br /&gt;
$tinsend::SMTPSERVER = &amp;#039;smtpserver.without_pw.org&amp;#039;;&lt;br /&gt;
$tinsend::SMTPAUTHID = &amp;#039;userid&amp;#039;;&lt;br /&gt;
$tinsend::SMTPAUTHPW = &amp;#039;password&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;tinbuild.sh&amp;lt;br&amp;gt;Set the options to configure your OOo build.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;tinprep.sh&amp;lt;br&amp;gt;OOo needs some things prepared before it can be build. Things like that go into this file.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Start the tinderbox build ==&lt;br /&gt;
The build is then started with:&lt;br /&gt;
&lt;br /&gt;
 ./tin-main.pl &amp;quot;OOoW32(opti)&amp;quot; /cygdrive/d/w1/SRC680_m146 SRC680_m146 co send&lt;br /&gt;
&lt;br /&gt;
The first parameter sets the name the build identifies itself, the second gives the target directory the source is build in, the third sets which CWS/MWS is used (see [http://www.go-oo.org/tinderbox/ here] for allowed values), the fourth how the source is obtained/treated (checked out from cvs in this case) and the last one says that the buildlog is send to the tinderbox. The parameters are discussed in detail later in this document.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
The following part describes the used scripts and useful parameters. (The markup needs a brush-up.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tin-main.pl&lt;br /&gt;
Syntax (all five parameters are needed):&lt;br /&gt;
tin-main.pl buildstring src_path ws {co|up|cont|clean} {send|nosend} [buildshell]&lt;br /&gt;
  buildstring - Name that will appear in the tinderbox&lt;br /&gt;
  src_path    - Pointing to source to be used&lt;br /&gt;
  ws          - Which workspace shall be build. It accepts CWSs names (from the&lt;br /&gt;
                list in &amp;lt;http://go-oo.org/tinderbox/tags/tag-list&amp;gt;) or all MWSs&lt;br /&gt;
                starting with ???680_m*.&lt;br /&gt;
  co|up|cont|clean - Tells the script what to do with src_path. Fresh checkout,&lt;br /&gt;
                update a current repo (this also deletes modified/extra files),&lt;br /&gt;
                do nothing, just start/continue with current repo, and clean&lt;br /&gt;
                removes all wntmsci10.pro before rebuilding.&lt;br /&gt;
  send|nosend - send the logfile to the tinderbox (or not)&lt;br /&gt;
  buildshell  - Choose from tcsh, bash or 4nt which shell to use for the build.&lt;br /&gt;
                This parameter is optional, the default is tcsh.&lt;br /&gt;
&lt;br /&gt;
The main program that starts the build, captures the logfile and sends it to&lt;br /&gt;
the tinderbox.&lt;br /&gt;
&lt;br /&gt;
Example: ./tin-main.pl &amp;quot;OOoW32(opti)&amp;quot; /cygdrive/d/w1/SRC680_m146 SRC680_m146 co send&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tinsend.pl&lt;br /&gt;
This module handles sending of mails with attachments. This was necessary&lt;br /&gt;
because the windows build logs are easily 30MB or more and in our early&lt;br /&gt;
setups this was just to much to be handled by some SMTP servers and also&lt;br /&gt;
for go-oo.org. See some documentation inline in that file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tinget.pl&lt;br /&gt;
Syntax (all four parameters are needed):&lt;br /&gt;
tinget.pl ws buildlog src_path {co|up|cont|clean}&lt;br /&gt;
  ws          - See tinder-main.pl.&lt;br /&gt;
  buildlog    - logfile name (this is send to the tinderbox)&lt;br /&gt;
  src_path    - See tinder-main.pl.&lt;br /&gt;
  {co|up|cont|clean} - See tinder-main.pl.&lt;br /&gt;
&lt;br /&gt;
This script does the workspace (src_path) handling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tinbuild.sh&lt;br /&gt;
Syntax:&lt;br /&gt;
tinbuild.sh ws buildlog src_path [buildshell]&lt;br /&gt;
  Parameter see tinder-main.pl, buildshell is optional.&lt;br /&gt;
&lt;br /&gt;
The actual build script that starts the build and captures the logfile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tinprep.sh&lt;br /&gt;
Syntax:&lt;br /&gt;
tinprep.sh src_path [ws] [buildshell]&lt;br /&gt;
  Parameter see tinder-main.pl, ws and buildshell are optional.&lt;br /&gt;
&lt;br /&gt;
Prepare the workspace for the build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Alternative tinderbox script =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Please note that this script is independent of the framework mentioned above. Don&amp;#039;t mix the instructions!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
If you don&amp;#039;t want to use the modular framework you can still use the former, not mail-compressing version. Get the [http://go-ooo.org/tinder-scripts/tinder-build tinder-build] script and edit it to suit your needs:&lt;br /&gt;
&lt;br /&gt;
The script will get http://go-oo.org/tinderbox/tags/tag-list and build all of the included CWSs. You will want to change that.&lt;br /&gt;
&lt;br /&gt;
Choose a buildname&lt;br /&gt;
 $BUILDNAME = &amp;#039;My BuildName&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
This script already includes a build script. You have to work through this to adapt it to your needs.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mailer&amp;#039;&amp;#039;&amp;#039; - you need a mailer to send mail with tinder-build, check that you have sendmail configured right, or hack the script to use your mailer.&lt;br /&gt;
 $MTA = &amp;#039;/usr/bin/mail&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
= Problem - It sends fine but nothing shows up =&lt;br /&gt;
&lt;br /&gt;
There are two issues that may cause this. First, the tinderbox web-pages are re-built every 10 minutes using a cron job; so wait for 11 before getting to concerned.&lt;br /&gt;
&lt;br /&gt;
The second thing is more crucial, since the tinderbox organises the logs chronologically, it is vital to ensure that your system time is not ahead of the tinderbox&amp;#039;s, and that it is in the same decade, week, hour, minute etc.&lt;br /&gt;
&lt;br /&gt;
Finally, it&amp;#039;s possible that someone else has sent in corrupt logs that are stopping the script completing. See [http://go-ooo.org/tinderbox/tinderbox.log here] if the mail arrived, [http://go-ooo.org/tinderbox/tinderbox2.log here] if there were errors processing it and [http://go-ooo.org/tinderbox/err-log here] for any potential error messages from the demon.&lt;br /&gt;
&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Helpcontent2&amp;diff=105811</id>
		<title>Helpcontent2</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Helpcontent2&amp;diff=105811"/>
		<updated>2008-12-29T03:27:44Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What it contains==&lt;br /&gt;
The directory helpcontent2 contains all files for the OpenOffice.org help system.&lt;br /&gt;
==How it is organized==&lt;br /&gt;
The following directory hierarchy applies&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=1 cellpadding=2&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Directory&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Contents&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|- &lt;br /&gt;
| helpcontent2&lt;br /&gt;
| The module&amp;#039;s main directory&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/helpers&lt;br /&gt;
| Files that are not used by the help content itself, like the help file DTD&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/helpers/helpauthoring&lt;br /&gt;
| The help authoring environment&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/prj&lt;br /&gt;
| The build and deliver lists&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/source&lt;br /&gt;
| The files used to build the application help&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/source/auxiliary&lt;br /&gt;
| Auxiliary files that are needed for building the help, style sheets, configuration files&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/source/text&lt;br /&gt;
| The help content source files, the makefiles for the help compiler, and the localized content. Every subdirectory contains its own makefile and a file with all localized content for that directory&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/source/text/sbasic&lt;br /&gt;
| Help files specific to BASIC and the IDE&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/source/text/scalc&lt;br /&gt;
| Help files specific to the Calc module&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/source/text/schart&lt;br /&gt;
| Help files specific to charts (Chart used to be a module of its own)&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/source/text/sdraw&lt;br /&gt;
| Help files specific to the Draw module&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/source/text/shared&lt;br /&gt;
| Help files common to two or more modules&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/source/text/simpress&lt;br /&gt;
| Help files specific to the Impress module&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/source/text/smath&lt;br /&gt;
| Help files specific to the Math module&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/source/text/swriter&lt;br /&gt;
| Help files specific to the Writer module&lt;br /&gt;
|-&lt;br /&gt;
|helpcontent2/util&lt;br /&gt;
| The linker makefiles for the help sections&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:source directories]]&lt;br /&gt;
[[Category:Documentation/OnlineHelp]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Windows_Installer_Hacking&amp;diff=105810</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=105810"/>
		<updated>2008-12-29T03:27:03Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&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 Directory.idt), etc.  &lt;br /&gt;
KeyPath is the First file in the component (in Sequence order) (?)&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;br /&gt;
&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=VBA&amp;diff=105809</id>
		<title>VBA</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=VBA&amp;diff=105809"/>
		<updated>2008-12-29T03:24:13Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[VBA zh|中]]&lt;br /&gt;
&lt;br /&gt;
[http://vba.openoffice.org VBA interoperability] project is a joint Novell &amp;amp; Sun incubator project whose aim is to deliver a way to run Excel and Word macros natively in imported documents.&lt;br /&gt;
* Noel Power (lead)&lt;br /&gt;
* Andreas Breagas (co-lead)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Visual Basic for Applications&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;VBA&amp;#039;&amp;#039;&amp;#039;) is an implementation of Microsoft&amp;#039;s  [[wikipedia:Visual Basic|Visual Basic]] which is built into all Microsoft Office applications. &lt;br /&gt;
 &lt;br /&gt;
== Latest news ==&lt;br /&gt;
* {{CWS|npower6|SRC680}} has been integrated into {{m|211}}&lt;br /&gt;
* Update Wiki Page with latest info&lt;br /&gt;
* [http://blogs.sun.com/GullFOSS/entry/sun_and_novell_work_together Novell and Sun to work together] on the VBA incubator project&lt;br /&gt;
* I am delighted that Andreas Bregas now joins me to co-lead the vba incubator project&lt;br /&gt;
&lt;br /&gt;
== Terminology ==&lt;br /&gt;
&lt;br /&gt;
* [[helperapi]] - The compatibility API generously donated by Sun that was part of their migration toolkit &lt;br /&gt;
* [[oovbaapi]] - the ooo-build vba interoperability solution originally implemented by Novell + object implementations from the helperapi.  Note: [[Ooo-build]] contains the latest VBA model and patches which allows you to run macros from your Microsoft Office documents. This model is under heavy development by Novell and others and the changes are continuously ported to openoffice. It is expected that many macros won&amp;#039;t run for now.&lt;br /&gt;
&lt;br /&gt;
== Dashboard ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* {{CWS|npower8|SRC680}} (nearly complete) (contains)&lt;br /&gt;
    * some helperapi object porting &lt;br /&gt;
    * changes to include new multi-inheritance style idl and new style service definitions&lt;br /&gt;
    * removal of idl for compatibilty constants[1]&lt;br /&gt;
* {{CWS|npower7|SRC680}} integrated&lt;br /&gt;
* {{CWS|npower6|SRC680}} integrated&lt;br /&gt;
&lt;br /&gt;
[1] these will be generated using the mechanism from the helperapi (basically the idl is generated from metadata files, the idl files are not preserved (or needed) but the types database generated from the idl files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Task queue and status (in order of priority)&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
| Feature || Description|| Issue # || Planned cws || State || Milestone integrated || &lt;br /&gt;
|-&lt;br /&gt;
| autogenerate constants in oovbaapi || port helperapi constant solution to oovbaapi module || {{Bug|75551}} || {{CWS|npower8|SRC680}} || done  || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| ooo-build api sync || synchronise ooo-build api changes with upstream || {{Bug|77189}} || {{CWS|npower8|SRC680}} || in progress  || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| array of array indexing  || in vba array of array indexing is very common, e.g. &amp;lt;tt&amp;gt;myArray(1)(2)&amp;lt;/tt&amp;gt;|| n/a || n/a || n/a  || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| toolbox control event support  || these controls support a loose binding where the presence of a macro event handler of the form &amp;lt;tt&amp;gt;controlname_xxx e.g. controlname_click&amp;lt;/tt&amp;gt;  results in the appropriate macro getting called when the associated action takes place || n/a || n/a || n/a  || n/a |||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Completed Features&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
| Feature || Description|| Issue # || Planned cws || State || Milestone integrated || &lt;br /&gt;
|-&lt;br /&gt;
| vba constants || adjust basic runtime to be &amp;#039;conditionally&amp;#039; aware of the vba constants defined in oovbaapi module || {{Bug|68897}} || {{CWS|npower7|SRC680}} || complete  || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| support dim of vba object || adjust basic runtime to be &amp;#039;conditionally&amp;#039; allow a vba compatibilty api object to be used like &amp;lt;tt&amp;gt;Dim r1 as Range&amp;lt;/tt&amp;gt; || {{Bug|68897}} || {{CWS|npower7|SRC680}} || complete || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| compatible erase array || in vba compatibility mode erase does not behave as expected || {{Bug|70380}} || {{CWS|npower7|SRC680}} || complete  || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| null variant behaviour || in vba compatibility mode operations on null variant objects behave differently || {{Bug|71827}} || {{CWS|npower7|SRC680}} || complete  || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;Like&amp;#039;  || new &amp;#039;Like&amp;#039; operator for basic || {{Bug|73830}} || {{CWS|npower7|SRC680}} || complete  || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| Module scope variable  || in vba module scope variables lifetime is tied to the document containing the macro ||  {{Bug|76819}} || {{CWS|npower7|SRC680}} || complete  || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| support simple range short cut references || in vba the evaluate function is used for resolving many things, one of theses is short cut range references  e.g. &amp;#039;[a1:b2]&amp;#039; || {{Bug|68898}} || {{CWS|npower7|SRC680}} || complete  || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| fix accent handling || in vba mode accents in modules or macros are not handled || {{Bug|76818}} || {{CWS|npower7|SRC680}} || complete  || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| fix object comparison || in vba mode there is a problem comparing objects with default paramaters (when the default is not specified) ||  {{Bug|76820}} || {{CWS|npower7|SRC680}} || complete  || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| class module import || when class modules are imported the correct &amp;#039;option&amp;#039; should be set ||  {{Bug|76822}} || {{CWS|npower7|SRC680}} || complete || n/a ||&lt;br /&gt;
|-&lt;br /&gt;
| migrate ooo-build code || suck in the mountain of idl and implementation code from ooo-build  || {{Bug|74096}} || {{CWS|npower6|SRC680}} || complete || {{m|211}} ||&lt;br /&gt;
|-&lt;br /&gt;
| import vba code || conditionally import (uncommented) vba code and set appropriate  module options || {{Bug|64570}} || {{CWS|npower6|SRC680}} || complete  || {{m|211}} ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Broader scope tasks that need more investigation (and splitting into smaller tasks) (to be added)&lt;br /&gt;
&lt;br /&gt;
create list of items that may need promoting from vba compatibility to &amp;lt;tt&amp;gt;Standard&amp;lt;/tt&amp;gt; ooo-basic behaviour e.g. like {{Bug|70380}}&lt;br /&gt;
&lt;br /&gt;
== How to enable the VBA model ==&lt;br /&gt;
&lt;br /&gt;
The VBA model is enabled by default in the current ooo-build. It&amp;#039;s enough to [[Getting It|get]], [[Building with ooobuild|build]], [[Installing|install]], and [[Running|be able to run]] it. &lt;br /&gt;
&lt;br /&gt;
If you are using upstream OpenOffice.org and wish to play with this feature then check out and build the {{CWS|npower6|SRC680}} which contains the initial code drop for the oovbaapi &lt;br /&gt;
&lt;br /&gt;
== How to disable the VBA model ==&lt;br /&gt;
&lt;br /&gt;
Depending on how your version of OpenOffice.org delivers the VBA feature to you, there are a number of ways to disable it. &lt;br /&gt;
&lt;br /&gt;
If you have an Openoffice.org built by a linux distro (or a windows one from Novell) that has the vba interop feature then all you need do is navigate to the &amp;#039;Tools.Options.Load/Save.VBAProperties&amp;#039; page and uncheck the &amp;#039;Load Excelbasic code to edit&amp;#039; option.&lt;br /&gt;
&lt;br /&gt;
If you are using an own build (incorporating) {{CWS|npower6|SRC680}} the above method will always work. But if you built the vba interop feature as an office extension then you can of course disable or delete the vbaapi.oxt extension using the Extension Manager.&lt;br /&gt;
&lt;br /&gt;
== How can I help you? ==&lt;br /&gt;
&lt;br /&gt;
We need help in a couple of areas, [[Porting notes|porting]] objects from the [[helperapi]], understanding the VBA usage patterns, implementation and testing; see below.&lt;br /&gt;
&lt;br /&gt;
== Porting Objects from the HelperApi ==&lt;br /&gt;
&lt;br /&gt;
What is the [[helperapi]]?&lt;br /&gt;
&lt;br /&gt;
Have a look at the [[porting notes]]&lt;br /&gt;
&lt;br /&gt;
Have a look at a [[porting example]]&lt;br /&gt;
&lt;br /&gt;
[[Porting_notes#Calc_Objects_to_port|list]] of objects that need porting&lt;br /&gt;
&lt;br /&gt;
[[Porting_notes#Missing_attributes.2Fmethods_to_port|list]] of methods (to be ported from [[helperapi]]) to existing objects&lt;br /&gt;
&lt;br /&gt;
== Understanding the VBA usage patterns ==&lt;br /&gt;
&lt;br /&gt;
VBA model is huge and we need help in understanding the VBA usage patterns for prioritizing as we progress. It&amp;#039;s important to receive as many Microsoft Office documents with macros as possible for analysis. &amp;#039;&amp;#039;&amp;#039;We are interested in documents from developers and regular people too.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Dumping the VBA from your MS Office documents ===&lt;br /&gt;
&lt;br /&gt;
==== libgsf ====&lt;br /&gt;
&lt;br /&gt;
If you&amp;#039;re worried about the sheet data you can use &amp;#039;&amp;#039;test-msvba&amp;#039;&amp;#039; from the [http://freshmeat.net/projects/libgsf/ libgsf]. Download the latest [http://cvs.gnome.org/viewcvs/libgsf/tests/test-msvba.c test-msvba.c] file and compile it with the following command:&lt;br /&gt;
&lt;br /&gt;
 gcc `pkg-config --libs --cflags libgsf-1` -o test-msvba test-msvba.c&lt;br /&gt;
&lt;br /&gt;
Note: you need to have libgsf-devel package installed.&lt;br /&gt;
&lt;br /&gt;
Now, you can dump the VBA from your documents with the following command:&lt;br /&gt;
&lt;br /&gt;
 find -name &amp;#039;*.xls&amp;#039; -exec sh -c &amp;#039;test-msvba {} &amp;gt;&amp;gt; ~/excel-vba-stream-for-noel.bas&amp;#039; \;&lt;br /&gt;
&lt;br /&gt;
==== pole ====&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p&amp;gt;Or you can use [http://pole.berlios.de/ POLE] with GUI. POLE is a portable C++ library to access structured storage. It is designed to be compatible with Microsoft structured storage, also sometimes known as OLE Compound Document.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exporting modules from the Microsoft Excel ===&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p&amp;gt;Open your document and edit associated macros. You can see list of modules on the left side of your screen. Use the right mouse button and select &amp;#039;&amp;#039;Export&amp;#039;&amp;#039; from the context menu. The whole module will be saved as one huge &amp;#039;&amp;#039;*.bas&amp;#039;&amp;#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Where to send ===&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p&amp;gt;If you are going to send pure VBA streams, send them directly to [Noel dot Power at Novell dot com].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== The desired sequence ===&lt;br /&gt;
&lt;br /&gt;
==== Add an extension to the IDL ====&lt;br /&gt;
&lt;br /&gt;
The IDL lives in oovbaapi/org/openoffice/*, the IDL syntax can easily be gleaned from a few other IDL files. Two things are worth bearing in mind:&lt;br /&gt;
* it&amp;#039;s important that the argument names are correct, so that the &amp;lt;tt&amp;gt;MsgBox title:=&amp;quot;hello&amp;quot;&amp;lt;/tt&amp;gt; syntax works correctly.&lt;br /&gt;
* for optional arguments, or variant types you need to use the &amp;lt;tt&amp;gt;any&amp;lt;/tt&amp;gt; type&lt;br /&gt;
&lt;br /&gt;
Having edited the IDL extension you need to:&lt;br /&gt;
* run: &amp;lt;tt&amp;gt;build &amp;amp;&amp;amp; deliver&amp;lt;/tt&amp;gt; in oovbaapi (perhaps remove types.db first),&lt;br /&gt;
&lt;br /&gt;
==== Add the extension to the implementation ====&lt;br /&gt;
&lt;br /&gt;
The impl. code lives in &amp;lt;tt&amp;gt;sc/source/ui/vba/&amp;lt;/tt&amp;gt; - create the right header and source files.&lt;br /&gt;
Add the method (with the correct prototype) to the header - often it&amp;#039;s easiest to cut/paste that from the compiled C++ headers in &amp;lt;tt&amp;gt;sc/unxlngixxx/inc/org/openoffice/vba/&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then implement the method itself in the .cxx file. Run &amp;lt;tt&amp;gt;build debug=true&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Running it ====&lt;br /&gt;
&lt;br /&gt;
You did use [linkoo] right ? - in which case - just re-run soffice.bin (killall -9 soffice.bin first to ensure there is no lurking factory process).&lt;br /&gt;
&lt;br /&gt;
Now of course - you want to add a new test to exercise it to ooo-build/test/macro/*. And of course loop back to the beginning.&lt;br /&gt;
Once you&amp;#039;ve got something you want to share - a simple &amp;lt;tt&amp;gt;cvs diff -u | tee /tmp/foo.diff&amp;lt;/tt&amp;gt; in ooo-build/scratch will yield a patch you can mail to Noel / the ooo-build mailing list to get your code folded in.&lt;br /&gt;
NB. it&amp;#039;s important you sign the [http://www.openoffice.org/licenses/jca.pdf JCA] first.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;It&amp;#039;s extremely important to test the work which is already done. You can use test cases from the &amp;#039;&amp;#039;ooo-build/test/macro&amp;#039;&amp;#039; directory, you can extend them or you can write your own test cases.&amp;lt;/p&amp;gt;&lt;br /&gt;
It&amp;#039;s a good idea to write test cases directly in the Microsoft Excel?&lt;br /&gt;
&lt;br /&gt;
== Accessing the VBA API from other languages ==&lt;br /&gt;
&lt;br /&gt;
The VBA API is implemented by an UNO service, the service is accessible via a singleton. As such it is possible to use the API from any language that has an UNO binding. The main entry points to the API are certain global variables { Application, ActiveWorkbook and ActiveSheet } or methods { WorkSheets, WorkBooks } exported by the service. Using these globals as a starting point the rest of the api can be accessed.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NOTE:&amp;#039;&amp;#039;&amp;#039;  Beaware the idl is not stable, (nor won&amp;#039;t be for the forseeable future be &amp;#039;published&amp;#039;) it WILL change, so if you are using a language that has a binary dependency on the interface (like c++ &amp;amp; java) then consider yourselves warned. &lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
 vba = uno.getComponentContext().getByName(&amp;quot;/singletons/org.openoffice.vba.theGlobals&amp;quot;)&lt;br /&gt;
 sheet = vba.ActiveSheet&lt;br /&gt;
 book = vba.ActiveWorkbook&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.openoffice.vba.*;&lt;br /&gt;
&amp;quot;&lt;br /&gt;
// getComponentCtxFromSomewhere is a fictional&lt;br /&gt;
// routine representing acquisition of the component context&lt;br /&gt;
// from e.g. remote ServiceManage if the code is a remote client&lt;br /&gt;
// or from the XScriptContext if this were a java ScriptingFramework script &lt;br /&gt;
&lt;br /&gt;
XComponentContext ctx = getComponentCtxFromSomewhere(); &lt;br /&gt;
Object oGlobs = ctx.getValueByName(&lt;br /&gt;
                &amp;quot;/singletons/org.openoffice.vba.theGlobals&amp;quot;);&lt;br /&gt;
XGlobals xGlobs = AnyConverter.toObject(&lt;br /&gt;
                new Type(XGlobals.class), oGlobs);&lt;br /&gt;
XWorkBook xWBook =  xGlobs.getActiveWorkbook();&lt;br /&gt;
XWorkSheet xSheet = xGlobs.getActiveWorkSheet();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OO Basic ===&lt;br /&gt;
&lt;br /&gt;
Basic allows access to the global variables automatically just like VBA does, there is no need to create any services or access any singletons to use the API&lt;br /&gt;
&lt;br /&gt;
 msgbox &amp;quot;Name of the current document is &amp;quot; &amp;amp;amp; ActiveWorkbook.Path&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Visual Basic ===&lt;br /&gt;
&lt;br /&gt;
Visual Basic, VBA, VBScript and other COM-enabled languages supports accessing OpenOffice VBA API via COM-UNO bridge &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Set oServiceManager = CreateObject(&amp;quot;com.sun.star.ServiceManager&amp;quot;)&lt;br /&gt;
Set oDesktop = oServiceManager.createInstance(&amp;quot;com.sun.star.frame.Desktop&amp;quot;)&lt;br /&gt;
Dim aNoArgs()&lt;br /&gt;
Set oCalcDoc = oDesktop.loadComponentFromURL(&amp;quot;private:factory/scalc&amp;quot;, &amp;quot;_blank&amp;quot;, 0, aNoArgs)&lt;br /&gt;
    &lt;br /&gt;
Set v = oServiceManager.DefaultContext.getValueByName(&amp;quot;/singletons/org.openoffice.vba.theGlobals&amp;quot;)&lt;br /&gt;
Set ooApp = v.Application&lt;br /&gt;
MsgBox ooApp.Version&lt;br /&gt;
Set cell = ooApp.ActiveCell&lt;br /&gt;
cell.Value = &amp;quot;Hello!&amp;quot;&lt;br /&gt;
Set r = ooApp.Range(&amp;quot;B1&amp;quot;, &amp;quot;B1&amp;quot;)&lt;br /&gt;
r.Value = &amp;quot;Hi1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CHM Help file generated from oovbaapi IDL:&lt;br /&gt;
http://community.i-rs.ru/index.php?action=dlattach;topic=6096.0;attach=4431&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=CWS&amp;diff=105808</id>
		<title>CWS</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=CWS&amp;diff=105808"/>
		<updated>2008-12-29T03:17:32Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CWS here is meant as the acronym for [[ChildWorkSpace]]. For a lengthier cws explanation see the [http://tools.openoffice.org/servlets/ReadMsg?list=dev&amp;amp;msgNo=5044 introduction], the [http://tools.openoffice.org/#CWS Overview, Tools] (still focused on CVS though) and the [[CWS Policies]] page. This text is some really, really bare bones for the quickest, most simple cws usage.&lt;br /&gt;
&lt;br /&gt;
The basic overview here is that a CWS is a SVN branch, tied to a service with a database backend called [[EIS]]. The cws tooling talks to both the SVN server and (via SOAP) to the [[EIS]] service. It makes maintaining branches more efficient, standardises their use &amp;amp; integrates with QA nicely.&lt;br /&gt;
&lt;br /&gt;
All code that goes into OO.o has to go through a CWS. A CWS is a fairly heavy-weight beast - thus it&amp;#039;s well worth aggregating several commits / bug-fixes into one.&lt;br /&gt;
&lt;br /&gt;
NB. Since this &amp;#039;howto&amp;#039; was written an even quicker way of committing patches to a cws has been created for people who use ooo-build: [http://cvs.gnome.org/viewcvs/ooo-build/bin/cws-commit-patch?view=log bin/cws-commit-patch].&lt;br /&gt;
&lt;br /&gt;
{{Documentation/Note| As of the migration to Subversion the CWS tools have been reworked and there is just one cws command with different subcommands. Resyncing a CWS is different, adding modules isn&amp;#039;t necessary anymore, and other details changed. This page has been adapted for SVN. }}&lt;br /&gt;
&lt;br /&gt;
For more information on SVN specific CWS handling please read [[OOo and Subversion]]. If you need to work on a CWS based on legacy CVS for an OOo release 3.0.x or earlier please see an [http://wiki.services.openoffice.org/w/index.php?title=CWS&amp;amp;oldid=104789 older permanent revision] of this page here.&lt;br /&gt;
&lt;br /&gt;
{{LinkBanner}}&lt;br /&gt;
&lt;br /&gt;
== Basic setup / Assumptions ==&lt;br /&gt;
&lt;br /&gt;
It is assumed that you have fixed some bug / created some feature, and you have a live build tree. It is also assumed that you have sourced the &amp;#039;&amp;#039;LinuxIntelEnv.Set.sh&amp;#039;&amp;#039;, &amp;#039;&amp;#039;winenv.set&amp;#039;&amp;#039; or &amp;#039;&amp;#039;winenv.set.sh&amp;#039;&amp;#039; script as appropriate, and as a result your shell is set up correctly with various environment variables pointing to the build tree. &lt;br /&gt;
&lt;br /&gt;
It is also assumed that you have an up-stream OOo account with the appropriate commit privileges in SVN and your DSA public key file assigned for the svn+ssh protocol, and of course your DSA private key needs to be accessible to ssh on your machine, best by having added it to &amp;#039;&amp;#039;ssh-agent&amp;#039;&amp;#039; with &amp;#039;&amp;#039;ssh-add&amp;#039;&amp;#039; so you won&amp;#039;t have to type your passphrase over and over again.&lt;br /&gt;
&lt;br /&gt;
=== cws config file (.cwsrc) ===&lt;br /&gt;
&lt;br /&gt;
You also need to have a CWS configuration file named .cwsrc in your home directory (~/.cwsrc) for any of the cws command-line tools to work.  The following is an example of a typical .cwsrc file.&lt;br /&gt;
&lt;br /&gt;
 [CWS_CONFIG]&lt;br /&gt;
 CWS_DB_SERVER_1=https://eis.services.openoffice.org/soap/servlet/rpcrouter&lt;br /&gt;
 CVS_ID=foouser&lt;br /&gt;
 CVS_PASSWORD=SDhiod0=s&lt;br /&gt;
 CVS_SERVER_ROOT=:pserver:foouser@localhost:/cvs&lt;br /&gt;
 SVN_SERVER=svn+ssh://svn@svn.services.openoffice.org/ooo&lt;br /&gt;
&lt;br /&gt;
The value for the &amp;#039;&amp;#039;CVS_PASSWORD&amp;#039;&amp;#039; attribute is taken from your ~/.cvspass file once you cvs login through the tunnel to legacy CVS.  You can also use a script like [http://www.perlmonks.org/?node_id=457764 this one] to encrypt your password the way CVS does it. Of course Subversion will not access the CVS repository, but the &amp;#039;&amp;#039;CVS_ID&amp;#039;&amp;#039; and &amp;#039;&amp;#039;CVS_PASSWORD&amp;#039;&amp;#039; fields are also used by the &amp;#039;&amp;#039;cws&amp;#039;&amp;#039; tool for [[EIS]] access.&lt;br /&gt;
&lt;br /&gt;
== Creating the cws ==&lt;br /&gt;
&lt;br /&gt;
You have to think of an imaginative name for your cws; if it&amp;#039;s just some general bug fixing thing, people tend to use account-name&amp;amp;lt;index&amp;amp;gt; otherwise some more descriptive name. The examples on this page here use the name &amp;#039;&amp;#039;link01&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
For details of the &amp;lt;tt&amp;gt;cws create&amp;lt;/tt&amp;gt; command please see [[OOo_and_Subversion#Create_a_CWS]].&lt;br /&gt;
&lt;br /&gt;
You need to have perl SOAP::Lite module installed for &amp;lt;tt&amp;gt;cws create&amp;lt;/tt&amp;gt; to work.  See [[CPAN install]] page for how to install Perl modules.&lt;br /&gt;
&lt;br /&gt;
== Filling out the details in EIS ==&lt;br /&gt;
&lt;br /&gt;
[http://eis.services.openoffice.org/EIS2/Logon Login] with your OpenOffice.org email address to [[EIS]]. Navigate the DEV300 &amp;#039;new&amp;#039; tree - find your CWS (or better simply look it up under &amp;#039;&amp;#039;Child workspaces&amp;#039;&amp;#039; - &amp;#039;&amp;#039;My CWSs&amp;#039;&amp;#039; or to a full search with the name of your CWS &amp;#039;&amp;#039;Child workspaces&amp;#039;&amp;#039; - &amp;#039;&amp;#039;Search&amp;#039;&amp;#039;). &lt;br /&gt;
&lt;br /&gt;
Then click on the underlined link at the top. Fill out the details, as there are:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Owner&amp;#039;&amp;#039;&amp;#039;, select your account from the list if it&amp;#039;s not already prefilled.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;QA representative&amp;#039;&amp;#039;&amp;#039;, check with the project you&amp;#039;re working on or ask on the dev@qa mailing list who the proper QA-rep for your CWS would be and select from the list. If no QA-rep is assigned, the CWS shows up under the &amp;#039;&amp;#039;&amp;#039;SeekQA&amp;#039;&amp;#039;&amp;#039; menu and someone might jump on it. However, it may also stay there for weeks if nobody does, so better communicate with your project. See also how to [[find a QA representative]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;, give a reasonable description of the CWS (not just &amp;#039;bugfixes&amp;#039;).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Release&amp;#039;&amp;#039;&amp;#039;, the release target, e.g. &amp;#039;&amp;#039;OOo2.3&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Estimated due date &amp;quot;ready for QA&amp;quot;&amp;#039;&amp;#039;&amp;#039;, an estimate when you plan to have it &amp;#039;&amp;#039;ready for QA&amp;#039;&amp;#039;, in format 2002-11-23. This is to give QA an idea when the CWS will be ready.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Estimated due date&amp;#039;&amp;#039;&amp;#039;, when the CWS should be ready for integration. Note that the time span between ready-for-QA date and the final due date needs to be communicated with the QA-rep, usually it&amp;#039;s sufficient to add 2 more weeks to give time for QA and enter that as the final due date, in format 2002-11-23. This is to give release engineering an idea when a CWS will show up for integration.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Level of impact&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;One Application&amp;#039;&amp;#039; if working on a specific application&amp;#039;s code, &amp;#039;&amp;#039;Two or more applications&amp;#039;&amp;#039; if working on a library used by several applications, &amp;#039;&amp;#039;Whole Office&amp;#039;&amp;#039; if touching code that is used throughout the entire office suite or affects general behavior.&lt;br /&gt;
&lt;br /&gt;
== Setting up the environment ==&lt;br /&gt;
&lt;br /&gt;
Now we created a cws - we need to tell the tooling we&amp;#039;re working with this cws; we do:&lt;br /&gt;
&lt;br /&gt;
 export CWS_WORK_STAMP=&amp;#039;&amp;#039;link01&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
On Windows, if using tcsh the equivalent command is:&lt;br /&gt;
&lt;br /&gt;
 setenv CWS_WORK_STAMP &amp;#039;&amp;#039;link01&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Adding tasks ==&lt;br /&gt;
&lt;br /&gt;
The CWS (in order to ever get merged) has to have a number of issues associated with it, describing the bugs fixed in this CWS. The developer should mark these as &amp;#039;&amp;#039;FIXED&amp;#039;&amp;#039; as he commits/tests &amp;amp; QA should mark these bugs &amp;#039;&amp;#039;VERIFIED&amp;#039;&amp;#039;. See issue handling in [[CWS#When_you.27re_happy | When you&amp;#039;re happy]] further down.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s also important to get the Milestone correct in the bug. To associate the task with the CWS do:&lt;br /&gt;
&lt;br /&gt;
 cws task &amp;#039;&amp;#039;i24253&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
NB. cws task: SOAP only, no SVN access.&lt;br /&gt;
&lt;br /&gt;
== Create a new module ==&lt;br /&gt;
&lt;br /&gt;
{{Documentation/Caution| This is the procedure for legacy CVS and needs to be rewritten for SVN! }}&lt;br /&gt;
&lt;br /&gt;
(Taken from [http://tools.openoffice.org/dev_docs/child_workspace_newmodule.html].)&lt;br /&gt;
&lt;br /&gt;
In case you have to introduce a new module not yet known on the master workspace you have to&lt;br /&gt;
&lt;br /&gt;
* first think hard if a new module is really needed. OOo now has more than 200 modules and things are getting a bit out of hand. Of course, if the new stuff doesn&amp;#039;t really fit anywhere than a new module might be the lesser of two evils.&lt;br /&gt;
* please don&amp;#039;t mix code of the core office and extensions in one module. To bring forward the modularization efforts of OpenOffice.org extensions should be treated extra to the Office code.&lt;br /&gt;
* create that module in cvs.&lt;br /&gt;
** note: if you are adding the module under &amp;#039;&amp;#039;&amp;#039;external&amp;#039;&amp;#039;&amp;#039; project, then creating is a bit more complicated:&lt;br /&gt;
::If you checkout from the CVS the &amp;#039;&amp;#039;external module&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;cvs co external&amp;lt;/code&amp;gt;) you will get actually the &amp;lt;code&amp;gt;util/external&amp;lt;/code&amp;gt;, the directory &amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt; from util project&amp;#039;s CVS. If you create a new directory, it will be committed into the util project that you do not really want. &lt;br /&gt;
::In order to check out the &amp;quot;right&amp;quot; &amp;#039;&amp;#039;external&amp;#039;&amp;#039;, you must checkout one of the directories of external project whose name is not identical to a directory in &amp;lt;code&amp;gt;util/external&amp;lt;/code&amp;gt;. For instance:&lt;br /&gt;
::: &amp;lt;code&amp;gt;cvs co external/libxml2&amp;lt;/code&amp;gt;&lt;br /&gt;
::You will have to position yourselves besides the &amp;lt;code&amp;gt;libxml2&amp;lt;/code&amp;gt; subdirectory (in this case) in the &amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt; directory, create a new directory and commit it using &amp;lt;code&amp;gt;cvs add&amp;lt;/code&amp;gt;. After that, you can checkout your module and work on it as usual, still remembering that you are working on HEAD.&lt;br /&gt;
* get a cvs alias for that module so that it can be checked out by it&amp;#039;s name. See the procedure in http://external.openoffice.org/ and additionally example {{Bug|76452}} (assign it to mh). this is coupled with the legal review of the new external code, so that the new alias will be available once the review has been done.&lt;br /&gt;
* check in for this module to cvs HEAD in your CWS. In contrast to all added modules do not work on a cws-branch but toplevel.&lt;br /&gt;
* assure inter module dependencies (i.e. [[Hacking#prj/build.lst]] files) are correct. Make sure all modules needing something delivered by the new one are dependent on it. If it is not needed by any module at build time, make it a prerequisite of &amp;#039;postprocess&amp;#039;.&lt;br /&gt;
* when the cws is in QA, announce the new module to Hamburg release engineering. You can do this either by writing something in the CWS description field (to RE: CWS contains new module bla) or by sending an email. This is necessary because new modules do not get tracked by CWS tooling and RE has to manually check them out before doing the integration build on the master workspace.&lt;br /&gt;
&lt;br /&gt;
Additionally it is good practice to provide a short description of your new module in [[Source code directories]] table.&lt;br /&gt;
&lt;br /&gt;
== Committing code ==&lt;br /&gt;
&lt;br /&gt;
Committing requires nothing particular new; the database doesn&amp;#039;t track commits. Just commit them to the branched modules.&lt;br /&gt;
&lt;br /&gt;
SVN should add some helpful fields for you &amp;amp; some helpful blurb about what to write here - often it doesn&amp;#039;t. The stock format is:&lt;br /&gt;
&lt;br /&gt;
 Issue number: #i24253#&lt;br /&gt;
 Submitted by: mmeeks&lt;br /&gt;
 Reviewed by: mmeeks&lt;br /&gt;
 This patch fixes a silly bug in linkoo&lt;br /&gt;
&lt;br /&gt;
== When you&amp;#039;re happy ==&lt;br /&gt;
&lt;br /&gt;
Finally - when you&amp;#039;ve committed everything &amp;amp; built &amp;amp; tested it, you need to hand over the CWS to QA.&lt;br /&gt;
&lt;br /&gt;
The issue handling of issues added to the CWS at this stage is&lt;br /&gt;
&lt;br /&gt;
* Verify all issues assigned to the CWS are really fixed in your CWS build.&lt;br /&gt;
* If so, reassign the issue to the QA representative of the CWS.&lt;br /&gt;
* Announce new features and enhancements (not mere bug fixes) using the [[feature announcement]] form within EIS.&lt;br /&gt;
&lt;br /&gt;
Having done all that, login back to the CWS page in [[EIS]] and re-edit the details - marking the state to &amp;#039;&amp;#039;Ready for QA&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Check your changes. If you did some [[Compatible_Builds#What_changes_are_binary_incompatible.3F|binary incompatible change]] mark the corresponding module &amp;#039;&amp;#039;incompatible&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== What next ? ==&lt;br /&gt;
&lt;br /&gt;
You get to wait until the CWS is [[Approve_a_CWS | approved by your QA representative]] and nominated for integration, then it will be merged into HEAD and released.&lt;br /&gt;
&lt;br /&gt;
The approval procedure may take some time. In the meantime the master workspace may change significantly. If changes got into the master touching the same code lines you have changed integrating your CWS will lead to merge conflicts. [[Resolve Merge Conflicts for CWS Integration]] gives some advice how to prevent problems during integration.&lt;br /&gt;
&lt;br /&gt;
== Updating to a newer milestone ==&lt;br /&gt;
&lt;br /&gt;
The long-term CWSes need a resync to a newer milestone from time to time.&lt;br /&gt;
&lt;br /&gt;
For details please read [[OOo_and_Subversion#Rebasing_a_CWS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;See also:&amp;#039;&amp;#039;&amp;#039; [[Merge Parts Of A CWS Into Another CWS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:CWS]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Porting_to_x86-64_(AMD64,_EM64T)&amp;diff=105807</id>
		<title>Porting to x86-64 (AMD64, EM64T)</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Porting_to_x86-64_(AMD64,_EM64T)&amp;diff=105807"/>
		<updated>2008-12-29T03:16:41Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Current status ==&lt;br /&gt;
&lt;br /&gt;
The x86-64 port is essentially complete, modulo possible bugs. But between releases, during the development cycle, it is always likely that for a given milestone that OOo fails to build on x86_64, or that new 32bit-isms are introduced. Help is always appreciated to catch these problems early, or to recognize that there are other more subtle problems that we&amp;#039;re unaware of.&lt;br /&gt;
&lt;br /&gt;
The work was originally based on &amp;#039;&amp;#039;ooo64bit02&amp;#039;&amp;#039; [[CWS|Child Workspace (CWS)]].  It was too huge to be integrated as a whole, so it was split to various smaller CWS&amp;#039;es, and integrated to SRC680 (HEAD); then more fixes were introduced.&lt;br /&gt;
&lt;br /&gt;
More info:&lt;br /&gt;
* [http://artax.karlin.mff.cuni.cz/~kendy/ooo/OOoCon-2005/ OOoCon2005 presentation about the port]&lt;br /&gt;
* [http://artax.karlin.mff.cuni.cz/~kendy/blog/ Jan Holesovsky (Kendy)&amp;#039;s blog]&lt;br /&gt;
* [http://blog.janik.cz/ Pavel Janik&amp;#039;s blog]&lt;br /&gt;
&lt;br /&gt;
== How to get it ==&lt;br /&gt;
&lt;br /&gt;
Get the latest SRC680 development sources, and follow the general [[Getting It]], [[Building_with_ooobuild|Building]], [[Installing]], [[Running]] sections.  Don&amp;#039;t forget to use --with-system-libs while configuring.&lt;br /&gt;
&lt;br /&gt;
It is recommended to use a recent distro for building, like SUSE 10.1 or newer.  gcc should be at least 3.4.1 with enum+visibility patches, 4.x is probably the best choice.&lt;br /&gt;
&lt;br /&gt;
It is very probable that you&amp;#039;ll have problems with Java - some of the VM&amp;#039;s have problems to build OOo on x86-64.&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
&lt;br /&gt;
You have to have a 64bit Java installed.  The following are known to work:&lt;br /&gt;
* gcj 4.0.1 - e.g. in SUSE 10.1 installation, works out of the box&lt;br /&gt;
* [http://www.blackdown.org/ Blackdown Java] - reported to work&lt;br /&gt;
&lt;br /&gt;
== How to help ==&lt;br /&gt;
&lt;br /&gt;
Generally&lt;br /&gt;
&lt;br /&gt;
* Compile it&lt;br /&gt;
* Find a bug (crash, missing functionality, ...)&lt;br /&gt;
* Fix it ;-)  It might be either in the ooo-build patches, or up-stream&lt;br /&gt;
* [http://qa.openoffice.org/issue_handling/submission_gateway.html#code_module File] the problem &amp;amp; the solution to the [http://www.openoffice.org/issues/query.cgi Issuezilla] if it is up-stream, or send it to openoffice@lists.ximian.com if it is in the ooo-build patches&lt;br /&gt;
** Ensure that you CC &amp;#039;kendy&amp;#039;, &amp;#039;pjanik&amp;#039;, and &amp;#039;cmc&amp;#039; on the report to get a quick response&lt;br /&gt;
* If the underlying problem is a new problem archetype - try to find &amp;amp;amp; fix all other instances of it&lt;br /&gt;
&lt;br /&gt;
Should you have questions, please contact &amp;#039;&amp;#039;caolan&amp;#039;&amp;#039;, &amp;#039;&amp;#039;kendy&amp;#039;&amp;#039;, &amp;#039;&amp;#039;martink&amp;#039;&amp;#039;, or &amp;#039;&amp;#039;paveljanik&amp;#039;&amp;#039; on [[IRC_Communication|IRC]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=ReleaseMilestone&amp;diff=105806</id>
		<title>ReleaseMilestone</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=ReleaseMilestone&amp;diff=105806"/>
		<updated>2008-12-29T03:16:16Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;#039;&amp;#039;&amp;#039;Release Milestone&amp;#039;&amp;#039;&amp;#039; number will be increased whenever child workspaces will be integrated during regular development or stabilising phases. When once has been decide to make a milestone ready for release, builds with cws integration will be made on the same milestone with just the build number increased.&lt;br /&gt;
&lt;br /&gt;
-- Martin Hollmichel - 14 Aug 2005&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Commit_Rights&amp;diff=105805</id>
		<title>Commit Rights</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Commit_Rights&amp;diff=105805"/>
		<updated>2008-12-29T03:15:44Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The procedure which will result in you having your OpenOffice.org account upgraded to &amp;#039;[[DomainDeveloper]]&amp;#039; is currently a bit fuzzy. If you are an active participant in discussions on the mailing list governing the piece of OpenOffice.org which interests you, and you intend to contribute source code to the OpenOffice.org project on a regular basis, chances are that you will need CVS commit rights.&lt;br /&gt;
&lt;br /&gt;
The biggest advantage to having such rights is, of course, the ability to contribute code yourself directly into the CVS repository, without having to attach patches to issues and badger another developer into incorporating your changes.&lt;br /&gt;
&lt;br /&gt;
There are a number of steps required to receive CVS commit rights, and to then activate them so that they are useful to you. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Step 1&amp;#039;&amp;#039;&amp;#039;. Sign a SCA (downloadable from http://www.openoffice.org/licenses/sca.pdf). Some of the reasons why you must do this are listed at http://www.openoffice.org/FAQs/faq-licensing.html#jca1. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Step 2&amp;#039;&amp;#039;&amp;#039;. Contribute a couple of quality [[Contributing_Patches|patches]]. That should do the trick to give you some visibility among the project leads. This will results in your account being upgraded to &amp;#039;[[DomainDeveloper]]&amp;#039; status.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Step 3&amp;#039;&amp;#039;&amp;#039;. To enjoyably work with IssueZilla for patch submissions you might want to make yourself comfortable with issue handling and ask for the privileges to change any part of an issue [http://qa.openoffice.org/helping.html].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Step 4&amp;#039;&amp;#039;&amp;#039;. Follow the instructions here: http://www.openoffice.org/scdocs/ddSSHGuide.html on how to set up and create an SSH tunnel.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Step 5&amp;#039;&amp;#039;&amp;#039;. Create a [[CWS]] (Child WorkSpace) for the area of work you intend to do. Directions on how to do this can be found here: http://tools.openoffice.org/dev_docs/ooo-cws-tools-doc.sxw. Note that without CVS commit rights, you cannot create CWSs. Also, if you have already got a specific milestone build, you can avoid the lengthly &amp;#039;Update&amp;#039; process initiated by &amp;#039;cwscreate&amp;#039; by using the -f option. This means, for example, if you are working on the OpenOffice 2.0.0 branch, you might already have the SRC680 m130 source. To avoid the CWS toolset updating you to a milestone you already have, you can enter &amp;#039;cwscreate -f SRC680 m130 &amp;lt;cws name&amp;gt;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
More details on creating CWSs can be found here: http://tools.openoffice.org/dev_docs/child_workspace_policies.html and here [[CWS]].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Step 6&amp;#039;&amp;#039;&amp;#039;. Go to the &amp;#039;Environment Information System&amp;#039; at http://eis.services.openoffice.org/EIS2/servlet/Logon. Browse through the CWSs until you have found the CWS you just created. Once you&amp;#039;ve found it, click on the link at the top of the page, something like &amp;#039;SRC680/&amp;lt;cws name&amp;gt;&amp;#039;. Fill in the relevant details and set yourself to be the owner of the CWS (enter your name into the textfield on the left of the dropdown combo box if you aren&amp;#039;t already listed).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Step 7&amp;#039;&amp;#039;&amp;#039;. Commit your code. Find [[DomainDeveloper#QA_Engineers|someone]] on the relevant mailing list to QA your code, assign the issues to them (note that IssueZilla will reset their status to &amp;#039;New&amp;#039; upon reassignment), then set the QA representative in EIS. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Step 8&amp;#039;&amp;#039;&amp;#039;. As QA personnel generally don&amp;#039;t have the expertise or time necessary to apply your changes and build a patched version of OpenOffice.org, it is necessary to supply them with a build containing your changes. Do a full build, and upload the single download file from your instsetoo_native directory (for example: OOo_2.0_windows_install_en-US.exe) to: http://ooo.services.openoffice.org/pub/OpenOffice.org/cws/upload (note the URL change --[[User:St|stx12]] 17:25, 21 June 2006 (CEST)). You can obtain details on how to upload files to this server from the project lead of of your project, or from one the release engineers.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Step 9&amp;#039;&amp;#039;&amp;#039;. The QA person will test the bugs you have fixed on a standard milestone build, and on your patched version and confirm that the bugs are fixed and that no new bugs have been introduced. Once the QA process is finished, the QA person will merge your changes into the MWS, and you should see them in the next milestone build, and hopefully the next release.&lt;br /&gt;
&lt;br /&gt;
Happy hacking!&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Optimization_Solver&amp;diff=105804</id>
		<title>Optimization Solver</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Optimization_Solver&amp;diff=105804"/>
		<updated>2008-12-29T03:14:57Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The goal of this project is to develop a [[Calc]] add-on component that solves a constrained linear or non-linear programming model for an optimum solution.  An optimum solution in this case is defined as a feasible point that either maximizes or minimizes the objective function while satisfying all given constraints.&lt;br /&gt;
&lt;br /&gt;
This component is written in C++, so a good knowledge of C++ and design pattern helps tremendously if you want to hack at it.  Of course, at least a basic knowledge of operations research is a prerequisite, but you don&amp;#039;t necessarily need to be an expert to get involved.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note that this project is now hosted and maintained externally at http://code.google.com/p/scsolver.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
== Core Developers ==&lt;br /&gt;
* [[User:Kohei|Kohei Yoshida]] --- Lead developer&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* Michael Meeks --- initial integration and general design advice&lt;br /&gt;
* Jody Goldberg --- general advice on optimizer development and overall design&lt;br /&gt;
* Tor Lillqvist --- win32 build fixes&lt;br /&gt;
* Rene Engelhard --- Debian build fixes&lt;br /&gt;
* Laurent Godard --- French translation &amp;amp; UNO API help&lt;br /&gt;
* Kazunari Hirano --- Japanese translation&lt;br /&gt;
* Konstantin Lavrov --- Russian translation &amp;amp; menu integration&lt;br /&gt;
* Rolf Meyer --- German translation&lt;br /&gt;
&lt;br /&gt;
=User Interface=&lt;br /&gt;
== Menu item location ==&lt;br /&gt;
[[image:ScSolverMenu.png|frame|center|Proposed new menu entry location (highlighted) for the solver dialog after integration.]]&lt;br /&gt;
&lt;br /&gt;
== Main Dialog ==&lt;br /&gt;
This is a screen shot of the main dialog after it gets launched for the first time.  All input fields are empty.&lt;br /&gt;
[[image:ScSolverMainDialog.png|frame|center|Main dialog]]&lt;br /&gt;
Some general behaviors of this dialog are as follows:&lt;br /&gt;
* By default, the focus is on the text input field on the immediate right of the &amp;#039;&amp;#039;&amp;#039;Set target cell&amp;#039;&amp;#039;&amp;#039; label.&lt;br /&gt;
* Under &amp;#039;&amp;#039;&amp;#039;Subject to the constraints&amp;#039;&amp;#039;&amp;#039;, the &amp;#039;&amp;#039;&amp;#039;Change&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;Delete&amp;#039;&amp;#039;&amp;#039; buttons are disabled unless there is a highlighted item in the list box on their left.&lt;br /&gt;
* Dismissing the dialog by clicking &amp;#039;&amp;#039;&amp;#039;Close&amp;#039;&amp;#039;&amp;#039; will not clear user input.&lt;br /&gt;
&lt;br /&gt;
===Widget Table===&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!width=&amp;quot;160px&amp;quot;|Name !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Target || text input || This field takes the address of the cell whose value is to be optimized.&lt;br /&gt;
|-&lt;br /&gt;
| Goal || radio button || This radio button defines whether the target cell value is to be maximized or minimized.&lt;br /&gt;
|-&lt;br /&gt;
| Variable cell || text input || This field takes the range address of cells that whose values will change during optimization run.&lt;br /&gt;
|-&lt;br /&gt;
| Constraint box || list box || This list box maintains a list of currently defined constraints.&lt;br /&gt;
|-&lt;br /&gt;
| Add || button || Add a new constraint to the list of constraints.&lt;br /&gt;
|-&lt;br /&gt;
| Change || button || Modify the highlighted constraint definition.&lt;br /&gt;
|-&lt;br /&gt;
| Delete || button || Delete the highlighted constraint definition.&lt;br /&gt;
|-&lt;br /&gt;
| Solve || button || Optimize the current model.&lt;br /&gt;
|-&lt;br /&gt;
| Reset || button || Reset all input values.  This essentially removes all input values.&lt;br /&gt;
|-&lt;br /&gt;
| Options || button || Launch a separate Options dialog.&lt;br /&gt;
|-&lt;br /&gt;
| Save || button || Save the current input values to document&amp;#039;s metadata section.  Note that clicking this button only puts the data into the document model on memory.  The user still need to save the file after clicking this button to permanently save the data to disk.&lt;br /&gt;
|-&lt;br /&gt;
| Load || button || Load input values from document&amp;#039;s metadata section.&lt;br /&gt;
|-&lt;br /&gt;
| Close || button || Close this dialog.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Constraint Dialog ==&lt;br /&gt;
[[image:ScSolverConstraintDialog.png|frame|center|Constraint input dialog]]&lt;br /&gt;
&lt;br /&gt;
===Widget Table===&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!width=&amp;quot;160px&amp;quot;|Name !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Cell Reference || text input || This field takes the address of the cell that represents the left-hand-side (LHS) of a constraint equation.  The value of this field must be a valid cell reference.&lt;br /&gt;
|-&lt;br /&gt;
| Equality || combo box || Defines the relationship between the left hand side (LHS) and the right hand side (RHS) terms.&lt;br /&gt;
|-&lt;br /&gt;
| Constraint || text input || The right-hand-side (RHS) value of the constraint equation.  This can be a cell reference or a numeric value.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Options dialog ==&lt;br /&gt;
[[image:ScSolverOptionsDialog.png|frame|center|Options dialog]]&lt;br /&gt;
&lt;br /&gt;
===Widget Table===&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!width=&amp;quot;160px&amp;quot;|Name !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Assume linear model|| check box || When this box is checked, the Solver uses a linear algorithm to solve the current model.  When this box is not checked, it uses a non-linear algorithm.&lt;br /&gt;
|-&lt;br /&gt;
| Allow only positive values|| check box|| When this box is checked, the Solver tries to find a solution while all variables are positive.&lt;br /&gt;
|-&lt;br /&gt;
| Allow only integer values|| check box|| When this box is checked, the Solver tries to find a solution with all variables being integers.  Fractional values are not allowed.&lt;br /&gt;
|-&lt;br /&gt;
| OK || button || OK button.&lt;br /&gt;
|-&lt;br /&gt;
| Cancel || button || Cancel button.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Optimizer Algorithm =&lt;br /&gt;
&lt;br /&gt;
== Linear Programming ==&lt;br /&gt;
[http://lpsolve.sourceforge.net/ lp_solve] - a Mixed Integer Linear Programming (MILP) solver supervised by Kjell Eikland and Peter Notebaert - is used as the linear optimizer.  lp_solve is released under GPL/LGPL.  It provides the revised simplex method and the Branch-and-Bound method for solving pure LP and MILP.  The lp_solve project provides excellent documentation for [http://lpsolve.sourceforge.net/5.1/ v5.1 - stable branch] and [http://lpsolve.sourceforge.net/5.5/ v5.5 - latest branch].  The latest package can be downloaded from [http://sourceforge.net/projects/lpsolve/ here].&lt;br /&gt;
&lt;br /&gt;
== Non-Linear Programming ==&lt;br /&gt;
Currently a draft implementation of Quasi-Newton with BFGS update is included to optimize unconstrained non-linear models.  But this algorithm is still not very robust and needs massive improvement.&lt;br /&gt;
&lt;br /&gt;
= Hacking Solver =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ooo-build ==&lt;br /&gt;
A somewhat easier way to get started is to download and compile [[ooo-build]] from gnome.org Subversion repository.  To check out ooo-build, run&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
svn co svn://svn.gnome.org/svn/ooo-build/trunk ooo-build&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Solver code is found in &amp;lt;code&amp;gt;ooo-build/scratch/scsolver&amp;lt;/code&amp;gt;.  Build ooo-build normally as instructed in [[ooo-build]] page, and you should have a top level &amp;lt;code&amp;gt;scsolver&amp;lt;/code&amp;gt; module directory at &amp;lt;code&amp;gt;ooo-build/build/[upstream build name]/scsolver&amp;lt;/code&amp;gt;.  The upstream build name here refers to the name of a (semi-)latest milestone that the build script has downloaded for you when you ran &amp;lt;code&amp;gt;configure &amp;amp; download&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Directory Structure ==&lt;br /&gt;
The &amp;lt;code&amp;gt;scsolver&amp;lt;/code&amp;gt; module is structured as follows:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;prj&amp;#039;&amp;#039;&amp;#039; - contains files that are necessary for OO.o build process.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;source&amp;#039;&amp;#039;&amp;#039; - main source directory&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;inc&amp;#039;&amp;#039;&amp;#039; - headers&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;numeric&amp;#039;&amp;#039;&amp;#039; - numerical code (including optimization/matrix codes)&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;service&amp;#039;&amp;#039;&amp;#039; - UNO interface&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;ui&amp;#039;&amp;#039;&amp;#039; - UI code (uses UNO&amp;#039;s dialog framework - fairly rudimentary)&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;tool&amp;#039;&amp;#039;&amp;#039; - utility code used throughout the module.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;util&amp;#039;&amp;#039;&amp;#039; - ?&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;workben&amp;#039;&amp;#039;&amp;#039; - contains files that are not part of the build process.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;optimizer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*** &amp;#039;&amp;#039;&amp;#039;nlp_skel&amp;#039;&amp;#039;&amp;#039; - set of skeleton files for independent non-linear optimizer development.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;addon_pkg&amp;#039;&amp;#039;&amp;#039; - contains files necessary to build a stand-alone Solver as a UNO package.&lt;br /&gt;
&lt;br /&gt;
The backend numerical codes are all found in &amp;lt;code&amp;gt;source/numeric&amp;lt;/code&amp;gt;, whereas all the UI related codes are found in &amp;lt;code&amp;gt;source/ui&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Optimizer Development mini-Framework ==&lt;br /&gt;
===How to set up===&lt;br /&gt;
There is now a way to develop a new optimization algorithm &amp;#039;&amp;#039;without even touching the main code base!&amp;#039;&amp;#039;  This is ideal for someone who just wants to contribute an optimizer code, but doesn&amp;#039;t necessarily have time or desire to build the whole OO.o or even to understand the entire [[scsolver]] module.  Currently this mini-framework support only NLP algorithm development, but in future support for LP algorithm may be added if there is demand.&lt;br /&gt;
&lt;br /&gt;
An example set of source files is in &amp;#039;&amp;#039;&amp;#039;scsolver/workben/optimizer/nlp_skel&amp;#039;&amp;#039;&amp;#039;.  Make a copy of the whole directory as a sibling to the original directory, change into it and compile by typing &amp;#039;&amp;#039;&amp;#039;make&amp;#039;&amp;#039;&amp;#039;.  This will compile a binary executable named &amp;#039;&amp;#039;&amp;#039;skel&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Those who are familiar with the Makefile format can read the provided Makefile to see how the example binary is built.  Here is the gist of how to build a test optimizer program with your own optimizer code:&lt;br /&gt;
&lt;br /&gt;
* Set the header include path to &amp;#039;&amp;#039;&amp;#039;scsolver/source/inc&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* Compile the following files from the main source tree:&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;scsolver/source/numeric/funcobj.cxx&amp;#039;&amp;#039;&amp;#039; (includes class &amp;#039;&amp;#039;&amp;#039;BaseFuncObj&amp;#039;&amp;#039;&amp;#039; - the abstract base class for function object)&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;scsolver/source/numeric/nlpbase.cxx&amp;#039;&amp;#039;&amp;#039; (includes class &amp;#039;&amp;#039;&amp;#039;BaseAlgorithm&amp;#039;&amp;#039;&amp;#039; - the abstract base class for NLP optimizer)&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;scsolver/source/numeric/nlpmodel.cxx&amp;#039;&amp;#039;&amp;#039; (includes class &amp;#039;&amp;#039;&amp;#039;Model&amp;#039;&amp;#039;&amp;#039; - the NLP model class)&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;scsolver/source/numeric/exception.cxx&amp;#039;&amp;#039;&amp;#039; (exception classes that the optimizer can throw during optimization run).&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;scsolver/source/tool/global.cxx&amp;#039;&amp;#039;&amp;#039; (some global functions that are used in the above files).&lt;br /&gt;
* Provide the following:&lt;br /&gt;
** NLP optimizer class derived from &amp;#039;&amp;#039;&amp;#039;BaseAlgorithm&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** A function object class derived from &amp;#039;&amp;#039;&amp;#039;BaseFuncObj&amp;#039;&amp;#039;&amp;#039;.  This will represent an objective function to optimize.&lt;br /&gt;
** The main function.&lt;br /&gt;
You then need to link the object files you compiled from the main source tree with the one(s) you compiled from your own code.&lt;br /&gt;
&lt;br /&gt;
Testing of your algorithm against a variety of objective functions can be done by creating multiple function objects and plugging them to the model instance one at a time for optimization run.  Refer to the files in the &amp;#039;&amp;#039;&amp;#039;nlp_skel&amp;#039;&amp;#039;&amp;#039; directory for basic execution flow and how to use the optimizer API.&lt;br /&gt;
&lt;br /&gt;
===Integration===&lt;br /&gt;
Once the algorithm beomes good enough to be integrated, .... [to be continued]&lt;br /&gt;
&lt;br /&gt;
= TODO List =&lt;br /&gt;
== Core Optimization Algorithms ==&lt;br /&gt;
&lt;br /&gt;
Listed below are algorithms proposed to be included in future versions of Calc Solver.  Some are being actively developed, while the others are still in planning.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!width=&amp;quot;260px&amp;quot;|Name !! Type !! Developer !! Description&lt;br /&gt;
|-&lt;br /&gt;
|Quasi-Newton Method with BFGS Update || NLP || Kohei Yoshida || Handles only unconstrained non-linear models.&lt;br /&gt;
|-&lt;br /&gt;
|Generalized Reduced Gradient (GRG) Method || NLP || Leandro Silveira Monteiro da Silva || Excel Solver&amp;#039;s default algorithm.&lt;br /&gt;
|-&lt;br /&gt;
|Hooke &amp;amp; Jeeves Method [[http://www.mylvin.com/do_techref.pdf documentation]] || NLP || Jorma Kuha || non-linear models with upper and lower boundary constraint for each variable.&lt;br /&gt;
|-&lt;br /&gt;
|[http://en.wikipedia.org/wiki/Levenberg-Marquardt_algorithm Levenberg-Marquardt algorithm] || NLP || || popular in solving curve-fitting equation but may be applicable for general non-linear models.  Suggested by Laurent Godard.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==User Interface (UI) Tasks==&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!width=&amp;quot;160px&amp;quot;|Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Solve for a specified value || Add an additional constraint to emulate solving for a specified value.&lt;br /&gt;
|-&lt;br /&gt;
| Progress window || A separate window with a button to let user abort optimization when the optimization routine is on-going.  Such window should also have a progress bar and a text message area.  The window will disappears once the Solver finds a solution, or fails to find a solution.&lt;br /&gt;
|-&lt;br /&gt;
| Restore original values || Provide an option to restore original values when the user aborts the optimization run or the optimizer fails to find a solution.&lt;br /&gt;
|-&lt;br /&gt;
| Arithmetics on cell (range) address in constraint dialog || Extend the constraint parser to support input such as A2:A4 + B2:B4 &amp;gt; 4.  If the sheet name is missing, assume the current active sheet.&lt;br /&gt;
|-&lt;br /&gt;
| Automatic loading/saving of a model || Currently, loading and saving of a model to its associated document is done by storing the model information as a metadata of the document.  It may be useful to automate some of loading and saving of the model.&lt;br /&gt;
|-&lt;br /&gt;
| Storing multiple models in a single document || Users often want to save multiple models into a single document, whereas currently one model can be saved per document.  It would be nice to add the capability of adding multiple models.  One way to implement this is to save the model data into a region of cells, which would allow storing as many models as the cells can hold in a single file.  It would also be nice to support saving and loading Excel Solver&amp;#039;s model format to allow migration from Excel Solver.&lt;br /&gt;
&lt;br /&gt;
Alternatively, we could also have multiple metadata entries with a nice front-end dialog to implement multiple model storage.  Which approach should be taken is subject to discussion.&lt;br /&gt;
|-&lt;br /&gt;
| Options dialog || We need to create an options dialog to let user configure run-time behavior of the solver.  At a minimum, the following options need to be present:&lt;br /&gt;
&lt;br /&gt;
* algorithm type (LP, MILP, QP, NLP, ...)&lt;br /&gt;
* integer constraint&lt;br /&gt;
* positive variable constraint&lt;br /&gt;
&lt;br /&gt;
The options dialog should also have sensible default values since most users just want to run the solver, get the answer and move on.&lt;br /&gt;
|-&lt;br /&gt;
| Algorithm specific options || Each algorithm requires a different set of parameters to control their run-time behavior.  We need to have a good UI to allow algorithm-specific settings.  The internal data structure to hold the algorithm options must be designed such that it allows variable number of parameters with names that are specific to each optimizer algorithm.&lt;br /&gt;
|-&lt;br /&gt;
| String l10n || Framework is now in place, and the strings are translated for French and Japanese.  Extend the list of translated languages.&lt;br /&gt;
|-&lt;br /&gt;
| Redesign constraint dialog || The current constraint dialog, being separate from the main dialog, causes a focus related problem on Linux platform after returning from range selection mode.  We should probably embed that UI functionality onto the main dialog to avoid focus problem.&lt;br /&gt;
|-&lt;br /&gt;
| User-defined Hessian matrix calculation || There are 3rd party high-performance [http://mathworld.wolfram.com/Hessian.html Hessian] matrix calculation program out there.  It would be nice to add a hook for such 3rd party software, so that the user can use it to speed up iteration.&lt;br /&gt;
|-&lt;br /&gt;
| Options page in OO.o&amp;#039;s Options dialog || Joachim Lingner presented on the possibility of an extension to use OO.o&amp;#039;s Options dialog to store extension specific options.  Find a way to take advantage of that framework.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!width=&amp;quot;160px&amp;quot;|Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Remove boost ublas dependency || The use of boost ublas in the matrix class is causing difficulty porting to other platforms, especially on Solaris.  We need to remove dependency on ublas or make it optional.&lt;br /&gt;
|-&lt;br /&gt;
| Use UNO component version for internal build || Currently, we maintain two versions of Solver, one for the internal version integrated into ooo-build, and one for external UNO component as an extension to the upstream version.  We need to unify these two separate versions by having ooo-build also use the UNO component version to ease maintenance.  This page ([[Extensions Integration into Installation Set]]) explains how that can be done.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Automatic Algorithm Selection===&lt;br /&gt;
We may need an optional mechanism to select appropriate optimization algorithms (LP vs QP, linear vs non-linear) based on the characteristics of a given model.  But such mechanism should be optional so that the user can still pick and choose desired algorithms.&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!width=&amp;quot;160px&amp;quot;|Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| User&amp;#039;s guide || We need a user&amp;#039;s guide.  We don&amp;#039;t even have one. :-(&lt;br /&gt;
|-&lt;br /&gt;
| How-to docs on hacking || Do we really need this?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tasks = &lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
&lt;br /&gt;
=== Build an extension package in scsolver module ===&lt;br /&gt;
&lt;br /&gt;
Completed.&lt;br /&gt;
&lt;br /&gt;
=== Packaging in scp2 module ===&lt;br /&gt;
&lt;br /&gt;
Completed.&lt;br /&gt;
&lt;br /&gt;
=== UNIX packaging in setup_native module ===&lt;br /&gt;
&lt;br /&gt;
Completed.&lt;br /&gt;
&lt;br /&gt;
=== ooo-build ooinstall integration ===&lt;br /&gt;
&lt;br /&gt;
Currently, when scsolver is built as an uno extension package, &amp;lt;code&amp;gt;ooinstall&amp;lt;/code&amp;gt; fails.  This needs to be resolved.&lt;br /&gt;
&lt;br /&gt;
=Resources=&lt;br /&gt;
==Third Party Library==&lt;br /&gt;
Use of a third party library is encouraged, as long as there is no licensing conflict with OpenOffice.org.  We cannot integrate GPL&amp;#039;ed code due to licensing incompatibility.  LGPL-licensed library can be used, as long as such library is de-coupled and completely isolated from the core component code.  BSD-licensed code can be used in a similar fashion, but due to its advertizing clause it cannot be used within the core component that needs to become a part of OO.o (Sun&amp;#039;s requirement?).  So, both LGPL and BSD codes must be completely decoupled from the core Solver code.&lt;br /&gt;
&lt;br /&gt;
TODO: How about CPL?  Does it pose any constraint as far as integration goes? --[[User:Kohei|Kohei]] 06:16, 25 April 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
If you know of any other third party libraries not listed here, feel free to add it below.&lt;br /&gt;
&lt;br /&gt;
;Free Software&lt;br /&gt;
*[http://www.gnu.org/software/glpk/glpk.html GLPK] (GPL)&lt;br /&gt;
*[http://sourceforge.net/projects/lpsolve lp_solve] (GPL/LGPL)&lt;br /&gt;
*[http://www.coin-or.org/index.html COIN-OR] (CPL)&lt;br /&gt;
*[http://www.scipy.org/SciPy SciPy] - Scientific Tools for Python released under BSD license.  Currently for Python only (?)&lt;br /&gt;
*[http://abel.ee.ucla.edu/cvxopt/applications/openoffice-org-spreadsheet-plugin/ CVXOPT] - Convex optimization written in Python.&lt;br /&gt;
*[http://www.koders.com/cpp/fidCD90612B92AAF8550D835237BDD32397256F873D.aspx Non-Linear FitLM]&lt;br /&gt;
*[http://www.koders.com/cpp/fid6D3F5EFA327A3D6721FE7E6E713B782FF47286F4.aspx?s=gmres GMRES]&lt;br /&gt;
*[http://ascendwiki.cheme.cmu.edu/Survey_of_optimisation_software another list of free and non-free optimisation solvers from the ASCEND project]&lt;br /&gt;
&lt;br /&gt;
;Commercial&lt;br /&gt;
*[http://www.dm.unipi.it/cluster-pages/mpsolve/index.htm MPSolve]&lt;br /&gt;
*[http://www.ilog.com/products/cplex/ cplex]&lt;br /&gt;
*[http://lindo.com/products/api/dllm.html LINDO API]&lt;br /&gt;
*[http://www.mosek.com/ MOSEK]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://www.utexas.edu/courses/lasdon/design3.htm Design and Use of the Microsoft Solver]&lt;br /&gt;
* [http://www.go-oo.org/bonsai/cvsquery.cgi?treeid=default&amp;amp;module=all&amp;amp;branch=cws_src680_scsolver02&amp;amp;branchtype=match&amp;amp;dir=sc%2Fscsolver&amp;amp;file=&amp;amp;filetype=match&amp;amp;who=&amp;amp;whotype=match&amp;amp;sortby=Date&amp;amp;hours=2&amp;amp;date=week&amp;amp;mindate=&amp;amp;maxdate=&amp;amp;cvsroot=%2Fvar%2Fcvsup All checkins to the CVS repository in the last week]&lt;br /&gt;
* [http://kohei.us/ooo/solver/ Kohei Yoshida&amp;#039;s Solver Page]&lt;br /&gt;
* [http://www.mylvin.com/ Jorma Kuha&amp;#039;s Direct Optimizer Page]&lt;br /&gt;
* [http://www-fp.mcs.anl.gov/otc/Guide/index.html NEOS Guide]&lt;br /&gt;
* [http://support.microsoft.com/kb/q214115/ XL2000: Solver Uses Generalized Reduced Gradient Algorithm]&lt;br /&gt;
* [http://math-atlas.sourceforge.net/ Automatically Tuned Linear Algebra Software (ATLAS)]&lt;br /&gt;
* Learn to program a simple calc [[SimpleCalcAddIn|Addin]] in C++&lt;br /&gt;
* Learn to program a calc [[CompleteAddIn|Addin]] in C++&lt;br /&gt;
* overview: [http://www.mat.univie.ac.at/~neum/glopt/software_l.html local optimizers] and [http://www.mat.univie.ac.at/~neum/glopt/software_g.html global optimizers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Calc|Statistics]]&lt;br /&gt;
[[Category:To-Do]]&lt;br /&gt;
[[Category:Add-On]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Performance&amp;diff=105803</id>
		<title>Performance</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Performance&amp;diff=105803"/>
		<updated>2008-12-29T03:12:51Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Performance Lead: Liheng  Performance Co-Lead: Matthias Huetsch&lt;br /&gt;
*We have new maillist: [mailto:performance@tools.openoffice.org performance@tools.openoffice.org]. Please send mail to new maillist so that everyone concerned can see it.&lt;br /&gt;
*As George Ou has famously said, &amp;quot;It doesn&amp;#039;t matter how fast the CPU is, OpenOffice is just bloated.&amp;quot;&lt;br /&gt;
== Project Summary ==&lt;br /&gt;
Project will achieve the goal: maintain good performance and evaluate OOo.&lt;br /&gt;
&lt;br /&gt;
== OOo Issues ==&lt;br /&gt;
=== Issues from End-User ===&lt;br /&gt;
...&lt;br /&gt;
=== Known areas for improvement ===&lt;br /&gt;
&lt;br /&gt;
==== Configmgr&amp;#039;&amp;#039;&amp;#039;[new]&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.services.openoffice.org/wiki/Configmgr_Refactoring Configmgr Refactoring]&lt;br /&gt;
* CWS[DEV300/configtune00]&lt;br /&gt;
&lt;br /&gt;
==== Component issues ====&lt;br /&gt;
&lt;br /&gt;
* [[Calc/To-Dos/Performance|Calc]] - lots to do&lt;br /&gt;
* [[Writer_Performance|Writer]]&lt;br /&gt;
* [[Impress_Performance|Impress]]&lt;br /&gt;
* [[Base_performance|Base]] - lots to do&lt;br /&gt;
&lt;br /&gt;
==== system issues ====&lt;br /&gt;
* Linux / Linking - relocation processing is very slow ( [http://ooocon-ljudmila.kiberpipa.org/media/Bloated_Michael_Meeks/video.ogg ogg video],  [http://go-oo.org/~michael/performance.odp odp slides] ) several possible ways to fix that&lt;br /&gt;
** re-ordering symbol &amp;amp; elf hash tables to improve cache locality, lots of good &amp;amp; simple ideas here.&lt;br /&gt;
** -Bdirect implementation [http://sourceware.org/ml/binutils/2005-10/msg00436.html] - gaining little traction.&lt;br /&gt;
** exporting Vague linkage more cleverly &amp;amp; using RTLD_LOCAL where possible&lt;br /&gt;
** basic linker optimizations:&lt;br /&gt;
*** don&amp;#039;t export *UND* in .hash table&lt;br /&gt;
*** sort syms &amp;amp; dynsym entries more intelligently&lt;br /&gt;
*** .hashvals optimisation&lt;br /&gt;
* Linux / I/O scheduling &amp;amp; pre-loading is poor&lt;br /&gt;
&lt;br /&gt;
==== General I/O &amp;amp; memory issues ====&lt;br /&gt;
* Image strip layout - our images strips are huge &amp;amp; unwieldy, layed out [http://blogs.msdn.com/oldnewthing/archive/2005/08/05/448073.aspx horizontally] and are &amp;#039;cached&amp;#039; in scattered files - this is fixed in CWS ka009, which never seems to get integrated.&lt;br /&gt;
* Configuration information scattered across many files &lt;br /&gt;
* UI configuration - tons of scattered files&lt;br /&gt;
* .rdb files - loads of empty space, mmap + random access pattern&lt;br /&gt;
&lt;br /&gt;
== Helpful Tooling and Resources ==&lt;br /&gt;
&lt;br /&gt;
=== Test Environment ===&lt;br /&gt;
Popular reference configuration(use similar env on Hamburg and Beijing)&lt;br /&gt;
 CPU:    Core2 Duo 1.5~2G&lt;br /&gt;
 Memory: 512M&lt;br /&gt;
 OS:     WindowsXP HOME&lt;br /&gt;
&lt;br /&gt;
=== Test &amp;amp; Tuning Tools ===&lt;br /&gt;
&lt;br /&gt;
* [[cold-start-simulator|Linux/cold-start]] simulator&lt;br /&gt;
* [[relocstat]] - dump relocation data&lt;br /&gt;
* [http://tools.openoffice.org/profiling/profiling-howto.html RTL_LOGFILE] - export RTL_LOGFILE=/tmp/foo&lt;br /&gt;
* [[valgrind]] - debug / trace memory usage&lt;br /&gt;
* [[speedprof]] - a quick / hackish sampling full-stack-trace profiler &amp;amp; visualisation tool&lt;br /&gt;
* [[APPR]] - a performance regression tool suite&lt;br /&gt;
* [[Performance Related Test Documents]]&lt;br /&gt;
&lt;br /&gt;
=== Benchmarks &amp;amp; Description ===&lt;br /&gt;
If you have some benchmarks, share them here!&lt;br /&gt;
&lt;br /&gt;
* [http://www.oooninja.com/2008/09/fastest-openofficeorg-edition-benchmark.html The Fastest OpenOffice.org Edition] comparison of four 2.4.1 editions on Fedora 9&lt;br /&gt;
* [http://www.oooninja.com/2008/05/openofficeorg-getting-faster-benchmark.html Is OpenOffice.org Getting Faster?] Comparison of 11 versions from 1.1.5 to 3.0.0 alpha&lt;br /&gt;
&lt;br /&gt;
== Performance Test Results Distribution ==&lt;br /&gt;
&lt;br /&gt;
=== Test results for Different Versions ===&lt;br /&gt;
* [http://www.oooninja.com/2008/05/openofficeorg-getting-faster-benchmark.html Is OpenOffice.org Getting Faster?] benchmarks 5 common operations for OpenOffice.org versions 1.1.5 through 2.4.0 and DEV300_m3&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Contrastive Data &amp;amp; Analysis ===&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
== Work List and Progress == &lt;br /&gt;
* Configmgr re-factor, reduces locking overhead &amp;amp; memory usage cf. CWS configrefactor01&lt;br /&gt;
* [[XML Load]]&lt;br /&gt;
* [[DbConfig|Config refactor]] - reduce seeks/files, better caching &lt;br /&gt;
* [[Disk Access]]&lt;br /&gt;
* -Bdirect linking&lt;br /&gt;
* FIXME - Malte - we should really have your list embedded here ...&lt;br /&gt;
&lt;br /&gt;
== Integrated improvements == &lt;br /&gt;
* [[Integrated_Performance_Improvements]]&lt;br /&gt;
&lt;br /&gt;
== Other Pages == &lt;br /&gt;
This Wiki page should become the ultimate authority on performance issues. Meanwhile, here are links to performance informationat other places&lt;br /&gt;
* [http://tools.openoffice.org/performance/ OpenOffice.org Performance Tuning page]&lt;br /&gt;
* [http://sw.openoffice.org/drafts/optimization.html Writer (SW, XML, Math, Linguistic) specific Optimizations]&lt;br /&gt;
* [http://tools.openoffice.org/performance/performance-activities-overview.html Current &amp;amp; Planned Performance Activities]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Performance]]&lt;br /&gt;
[[Category:Database]]&lt;br /&gt;
[[Category:Effort]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=LinuxIntelEnv.Set&amp;diff=105802</id>
		<title>LinuxIntelEnv.Set</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=LinuxIntelEnv.Set&amp;diff=105802"/>
		<updated>2008-12-29T03:09:52Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it&amp;#039;s for ==&lt;br /&gt;
&lt;br /&gt;
This file is used to ensure a repeatable configuration for building OO.o.&lt;br /&gt;
It achieves this by taking a snapshot of your environment and freezing all your important variables. There are two versions: LinxuIntelEnv.Set (for csh/tcsh [as used in the build itself]) and LinxuIntelEnv.Set.sh (for use by all right-minded bash users).&lt;br /&gt;
Before you do an [[Hacking#My_first_hack|incremental]] build you to &amp;#039;source&amp;#039; this:&lt;br /&gt;
        source ./LinuxIntelEnv.Set.sh&lt;br /&gt;
        dmake&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
&lt;br /&gt;
These files contain the absolute path of the build - thus when you copy or move the build, you need to use the [[relocate]] tool to relocate it to the new position.&lt;br /&gt;
&lt;br /&gt;
== What it looks like ==&lt;br /&gt;
&lt;br /&gt;
    ENABLE_CUPS=&amp;quot;TRUE&amp;quot;&lt;br /&gt;
    ENABLE_FONTCONFIG=&amp;quot;TRUE&amp;quot;&lt;br /&gt;
    ENABLE_DIRECTX=&amp;quot;&amp;quot;&lt;br /&gt;
    VC_STANDARD=&amp;quot;&amp;quot;&lt;br /&gt;
    WITH_GPC=&amp;quot;NO&amp;quot;&lt;br /&gt;
    WITH_LIBART=&amp;quot;NO&amp;quot;&lt;br /&gt;
    ... on and on ...&lt;br /&gt;
    export ... ENABLE_CUPS ENABLE_FONTCONFIG ENABLE_DIRECTX ...&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Writing_warning-free_code&amp;diff=105801</id>
		<title>Writing warning-free code</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Writing_warning-free_code&amp;diff=105801"/>
		<updated>2008-12-29T03:04:33Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We are currently on the way towards a completely warning-free OOo C/C++ code base.  And once we have reached that, we want to keep the code clean!&lt;br /&gt;
&lt;br /&gt;
We reached a first milestone by integrating CWS [http://eis.services.openoffice.org/EIS2/servlet/cws.showCWS?Id=2903&amp;amp;Path=SRC680%2Fwarnings01 warnings01] into SRC680m173.  Since then, and at least on the &amp;lt;code&amp;gt;unxlngi6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unxsoli4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unxsols4&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;wntmsci10&amp;lt;/code&amp;gt; platforms, the C/C++ compilers are used with rather aggressive warning levels, and in most CVS modules warnings are treated as errors that break the build.  Some CVS modules have not yet been made warning-free.&lt;br /&gt;
&lt;br /&gt;
==What changed?==&lt;br /&gt;
&lt;br /&gt;
Since SRC680m173, any new or modified C/C++ code that produces warnings will break the build.  (Unless, of course, you fail to pass &amp;lt;code&amp;gt;--enable-werror&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt;.)  Ideally, to be sure that integrating a CWS will not break the build, the CWS should now be built on every warning-free platform (i.e., at least &amp;lt;code&amp;gt;unxlngi6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unxsoli4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unxsols4&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;wntmsci10&amp;lt;/code&amp;gt;), with all supported compiler versions, in both product and non-product variants, and with and without the &amp;lt;code&amp;gt;debug=x&amp;lt;/code&amp;gt; build switch before nominating it for integration.  Practically, a reasonable subset of these will have to suffice.&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;code&amp;gt;unxlngi6&amp;lt;/code&amp;gt;, we concentrated on GCC&amp;amp;nbsp;3.4.1, GCC 4.0.2/4.0.3, and GCC&amp;amp;nbsp;4.1.1, while other GCC versions probably produce slightly different warnings (that could break the build now on those GCC versions).&lt;br /&gt;
&lt;br /&gt;
Porters are encouraged to make additional platforms warning-free.  Since most ports are using GCC, there should not be too many surprises.  Any necessary changes to the platform-specific &amp;lt;code&amp;gt;.mk&amp;lt;/code&amp;gt; file in &amp;lt;code&amp;gt;solenv/inc&amp;lt;/code&amp;gt; can be modelled after &amp;lt;code&amp;gt;solenv/inc/unxlngi6.mk&amp;lt;/code&amp;gt;.  In short, you need a bunch of &amp;lt;code&amp;gt;CFLAGSxxx&amp;lt;/code&amp;gt; (see [http://www.openoffice.org/servlets/ReadMsg?list=interface-announce&amp;amp;msgNo=758 interface-announce C/C++ compiler warnings]) and &amp;lt;code&amp;gt;MODULES_WITH_WARNINGS&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;COMPILER_WARN_ERRORS&amp;lt;/code&amp;gt; (see [http://www.openoffice.org/servlets/ReadMsg?list=interface-announce&amp;amp;msgNo=942 interface-announce MODULES_WITH_WARNINGS]).&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;wall=x&amp;lt;/code&amp;gt; build switch no longer has any effect on the warning-free platforms.  Once all platforms are warning-free, we can remove it completely.&lt;br /&gt;
&lt;br /&gt;
==The missing modules==&lt;br /&gt;
&lt;br /&gt;
If your job is to clean up a given CVS module, here are some practical guidelines:&lt;br /&gt;
* Remove the module from the &amp;lt;code&amp;gt;MODULES_WITH_WARNINGS&amp;lt;/code&amp;gt; list in the platform-specific &amp;lt;code&amp;gt;.mk&amp;lt;/code&amp;gt; files in &amp;lt;code&amp;gt;solenv/inc&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Make sure your module builds and delivers successfully with &amp;lt;code&amp;gt;build &amp;amp;&amp;amp; deliver&amp;lt;/code&amp;gt; (and all the variants mentioned above).&lt;br /&gt;
* If your module contains external code which we do not want to clean up, set &amp;lt;code&amp;gt;EXTERNAL_WARNINGS_NOT_ERRORS := TRUE&amp;lt;/code&amp;gt; at the beginning of the corresponding &amp;lt;code&amp;gt;makefile.mk&amp;lt;/code&amp;gt;, so that warnings do not lead to errors there.&lt;br /&gt;
* In any case, for any header file delivered from your module, make sure that &amp;lt;code&amp;gt;testhxx&amp;lt;/code&amp;gt; on the delivered header file is successful.  (Note that &amp;lt;code&amp;gt;testhxx&amp;lt;/code&amp;gt; only works for headers delivered to the solver, not for local headers within a CVS module, as it calls the compiler with only a fixed set of include directories.)&lt;br /&gt;
* If you encounter a warning that cannot reasonably be worked around, discuss that problem on &amp;lt;code&amp;gt;dev@openoffice.org&amp;lt;/code&amp;gt;.  One outcome of that discussion can be that we globally disable that particular warning.  To see which warnings are already globally disabled on a given platform, look at the settings for &amp;lt;code&amp;gt;CFLAGSWARNCC&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CFLAGSWARNCXX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CFLAGSWALLCC&amp;lt;/code&amp;gt;, and/or &amp;lt;code&amp;gt;CFLAGSWALLCXX&amp;lt;/code&amp;gt; in the platform-specific &amp;lt;code&amp;gt;.mk&amp;lt;/code&amp;gt; file in &amp;lt;code&amp;gt;solenv/inc&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;unxlngi6.mk&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unxsoli4.mk&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unxsols4.mk&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;wntmsci10.mk&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
See the current [[Warning-free_code_status|warning-free code status]].&lt;br /&gt;
&lt;br /&gt;
==Tips for Warning-free code==&lt;br /&gt;
&lt;br /&gt;
The following is a list of issues you might come across when making existing&lt;br /&gt;
code warning-free, or when writing new, warning-free code:&lt;br /&gt;
&lt;br /&gt;
===Integral conversions===&lt;br /&gt;
&lt;br /&gt;
Sometimes, a cast between integral types is needed to avoid a warning.  In such a case, use &amp;lt;code&amp;gt;sal::static_int_cast&amp;lt;/code&amp;gt;&amp;amp;nbsp;(C++) or &amp;lt;code&amp;gt;SAL_INT_CAST&amp;lt;/code&amp;gt;&amp;amp;nbsp;(C) to make that cast stick out&amp;amp;mdash;it will need to be adapted when the type of any of the involved expressions changes later on:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sal_Int32 n;&lt;br /&gt;
std::vector&amp;lt;char&amp;gt; v;&lt;br /&gt;
if (n &amp;gt;= 0 &amp;amp;&amp;amp; sal::static_int_cast&amp;lt;sal_uInt32&amp;gt;(n) == v.size()) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that you might get the warning C4244 (possible loss of data) on Windows also for the following situation:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
short a = 0, b = 0;&lt;br /&gt;
a += b;  // warning C4244 on Windows&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This is because &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; are converted to &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, then added and the result is then again cast back to &amp;lt;code&amp;gt;short&amp;lt;/code&amp;gt;. This is especially nasty, as it also happens when you use &amp;lt;code&amp;gt;xub_StrLen&amp;lt;/code&amp;gt;, but only if it is a typedf to &amp;lt;code&amp;gt;USHORT&amp;lt;/code&amp;gt; and not to &amp;lt;code&amp;gt;sal_uInt32&amp;lt;/code&amp;gt;, i.e. only as long as &amp;lt;code&amp;gt;STRING32&amp;lt;/code&amp;gt; is not defined in solar.h.&lt;br /&gt;
The warning does not occur when you use &amp;lt;code&amp;gt;operator+&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;operator+=&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
short a = 0, b = 0;&lt;br /&gt;
a = a + b;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Invalid enum case values===&lt;br /&gt;
&lt;br /&gt;
Code like&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
enum E { A=1, B=2, C=4 } e;&lt;br /&gt;
switch (e) {&lt;br /&gt;
case A: ...&lt;br /&gt;
case B|C: ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will cause &amp;lt;code&amp;gt;wntmsci11&amp;lt;/code&amp;gt; to complain with &amp;lt;code&amp;gt;warning C4063: case &amp;#039;6&amp;#039; is not a valid value for switch of enum &amp;#039;E&amp;#039;&amp;lt;/code&amp;gt;. This can be worked around by promoting &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; to is underlying integral type:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
switch (+e) {&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
I think the compiler warning is perfectly valid there (although a little misleading). There is a simple reason for it: because of C++ computing rules for operator|, the second case statement (B|C) has type int and value 6, whilst compiler expects it to have type E. There is not automatic conversion from int to enumeration type; even if there were one, no enumerator from E has value 6. So, in the &amp;quot;work around&amp;quot;, the second case statement is actually &amp;#039;&amp;#039;unreachable&amp;#039;&amp;#039; (well, suppose there are no explicit casts in assignment to e)!&lt;br /&gt;
&lt;br /&gt;
What the author probably wanted is&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
switch (e) {&lt;br /&gt;
case A: ...&lt;br /&gt;
case B:  // No code, falls through to the next statement&lt;br /&gt;
case C: ...  // The code of the original B|C branch&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- dt&lt;br /&gt;
&lt;br /&gt;
===Casting between pointer and integer types===&lt;br /&gt;
&lt;br /&gt;
====C++====&lt;br /&gt;
&lt;br /&gt;
* From pointer-to-(possibly-cv-qualified-)void-or-object type&amp;amp;nbsp;&amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; to unsigned integral type&amp;amp;nbsp;&amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
P p;&lt;br /&gt;
U u = sal::static_int_cast&amp;lt;U&amp;gt;(reinterpret_cast&amp;lt;sal_uIntPtr&amp;gt;(p));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* From unsigned integral type&amp;amp;nbsp;&amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt; to pointer-to-(possibly-cv-qualified-)void-or-object type&amp;amp;nbsp;&amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
U u;&lt;br /&gt;
P p = reinterpret_cast&amp;lt;P&amp;gt;(sal::static_int_cast&amp;lt;sal_uIntPtr&amp;gt;(u));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* From pointer-to-(possibly-cv-qualified-)void-or-object type&amp;amp;nbsp;&amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; to signed integral type&amp;amp;nbsp;&amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
P p;&lt;br /&gt;
S s = sal::static_int_cast&amp;lt;S&amp;gt;(reinterpret_cast&amp;lt;sal_IntPtr&amp;gt;(p));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* From signed integral type&amp;amp;nbsp;&amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; to pointer-to-(possibly-cv-qualified-)void-or-object type&amp;amp;nbsp;&amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
S s;&lt;br /&gt;
P p = reinterpret_cast&amp;lt;P&amp;gt;(sal::static_int_cast&amp;lt;sal_IntPtr&amp;gt;(s));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====C====&lt;br /&gt;
&lt;br /&gt;
* From pointer-to-(possibly-qualified-)void-or-object type&amp;amp;nbsp;&amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; to unsigned integer type&amp;amp;nbsp;&amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
P p;&lt;br /&gt;
U u = SAL_INT_CAST(U, (sal_uIntPtr) p);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* From unsigned integer type&amp;amp;nbsp;&amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt; to pointer-to-(possibly-qualified-)void-or-object type&amp;amp;nbsp;&amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
U u;&lt;br /&gt;
P p = (P) SAL_INT_CAST(sal_uIntPtr, u);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* From pointer-to-(possibly-qualified-)void-or-object type&amp;amp;nbsp;&amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; to signed integer type&amp;amp;nbsp;&amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
P p;&lt;br /&gt;
S s = SAL_INT_CAST(S, (sal_IntPtr) p);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* From signed integer type&amp;amp;nbsp;&amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; to pointer-to-(possibly-qualified-)void-or-object type&amp;amp;nbsp;&amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
S s;&lt;br /&gt;
P p = (P) SAL_INT_CAST(sal_IntPtr, s);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Pointer to function===&lt;br /&gt;
&lt;br /&gt;
A pointer to function is not compatible with a pointer to object, so code like&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void * osl::Module::getSymbol(rtl::OUString const &amp;amp;);&lt;br /&gt;
typedef void (* MyFunc)();&lt;br /&gt;
MyFunc f = module.getSymbol(&amp;quot;myFunc&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will not compile.  The only places were converting between pointer to function and pointer to object (typically &amp;lt;code&amp;gt;void *&amp;lt;/code&amp;gt;) should be necessary are &amp;lt;code&amp;gt;osl::Module::getSymbol&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;osl::Module::getUrlFromAddress&amp;lt;/code&amp;gt;, and in both cases there are additional functions (&amp;lt;code&amp;gt;osl::Module::getFunctionSymbol&amp;lt;/code&amp;gt; and an overload with &amp;lt;code&amp;gt;oslGenericFunction&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;osl::Module::getUrlFromAddress&amp;lt;/code&amp;gt;) that handle the problem internally.  Use them!&lt;br /&gt;
&lt;br /&gt;
===Name hiding===&lt;br /&gt;
&lt;br /&gt;
In C++, use a &amp;lt;code&amp;gt;using&amp;lt;/code&amp;gt; declaration to make visible (virtual) function declarations from a base clase that would be hidden by a function declaration in a derived class:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class Base {&lt;br /&gt;
public:&lt;br /&gt;
  virtual void f(int);&lt;br /&gt;
  virtual void f(double);&lt;br /&gt;
};&lt;br /&gt;
class Derived: public Base {&lt;br /&gt;
public:&lt;br /&gt;
  using Base::f;&lt;br /&gt;
  virtual void f(int);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure to apply the correct access control to the &amp;lt;code&amp;gt;using&amp;lt;/code&amp;gt; declaration:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class Base {&lt;br /&gt;
protected:&lt;br /&gt;
  void f();&lt;br /&gt;
};&lt;br /&gt;
class Derived: public Base {&lt;br /&gt;
public:&lt;br /&gt;
  void f(int);&lt;br /&gt;
protected:&lt;br /&gt;
  using Base::f;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you can, avoid such constructs as in the above example, by chosing different names for the two functions &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;. If on the other hand the function f is clearly meant to be overloaded, then make all instances of &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; virtual in the base class.&lt;br /&gt;
&lt;br /&gt;
===Unused parameters===&lt;br /&gt;
&lt;br /&gt;
There are three cases where a parameter of a function is not actually used in the definition of the function:&lt;br /&gt;
&lt;br /&gt;
* The function has to have a certain signature (it is a virtual function, shall be used with a certain function pointer type, or is part of a stable API that cannot be changed).  In those cases, leave out the paramter name in the function definition (C++) or use&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
(void) paramName; /* avoid warning about unused parameter */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
at the start of the function body (C).&lt;br /&gt;
&lt;br /&gt;
* The function is created by the Macro IMPL_LINK( Class, Method, ArgType, ArgName ) from tools/inc/link.hxx or similar. Use EMPTYARG as Parametername as in&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
IMPL_LINK( Class, Method, ArgType, EMPTYARG )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
EMPTYARG is defined empty, so this will result in leaving out the parameter name as suggested above.&lt;br /&gt;
&lt;br /&gt;
* The function uses the paramter only in an &amp;lt;code&amp;gt;#ifdef&amp;lt;/code&amp;gt;-block, or only in &amp;lt;code&amp;gt;OSL_ASSERT&amp;lt;/code&amp;gt; etc. debug code.  If the first case occurs in C++ code, fix it by using the same &amp;lt;code&amp;gt;#ifdef&amp;lt;/code&amp;gt; around the parameter name in the function header.  In all other cases, fix it by using&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
(void) paramName; /* avoid warning about unused parameter */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
at the start of the function body.&lt;br /&gt;
&lt;br /&gt;
* The function once used the parameter, but does no longer do so.  In that case, clean up the function declaration and all uses of the function.&lt;br /&gt;
&lt;br /&gt;
===When all else fails===&lt;br /&gt;
&lt;br /&gt;
There are cases where the only sensible solution is to suppress warnings for a given chunk of code:&lt;br /&gt;
&lt;br /&gt;
* As explained above, in external code which we do not want to clean up, use &amp;lt;code&amp;gt;EXTERNAL_WARNINGS_NOT_ERRORS := TRUE&amp;lt;/code&amp;gt; so that warnings do not lead to errors there.&lt;br /&gt;
&lt;br /&gt;
* Header files included directly from the system, or header files delivered from external code included in the OOo code base but which we cannot reasonably make &amp;lt;code&amp;gt;testhxx&amp;lt;/code&amp;gt;-clean:  Surround that code (e.g., the &amp;lt;code&amp;gt;#include&amp;lt;/code&amp;gt;-directives for those headers) by&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#if defined __GNUC__&lt;br /&gt;
#pragma GCC system_header&lt;br /&gt;
#elif defined __SUNPRO_CC&lt;br /&gt;
#pragma disable_warn&lt;br /&gt;
#elif defined _MSC_VER&lt;br /&gt;
#pragma warning(push, 1)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
and&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#if defined __SUNPRO_CC&lt;br /&gt;
#pragma enable_warn&lt;br /&gt;
#elif defined _MSC_VER&lt;br /&gt;
#pragma warning(pop)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(probably together with an explanatory comment).  &amp;lt;em&amp;gt;Due to the nature of the GCC solution, this does not work directly within the compilation unit&amp;#039;s main (&amp;lt;code&amp;gt;.c&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.cxx&amp;lt;/code&amp;gt;) file, only within a (&amp;lt;code&amp;gt;.h&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.hxx&amp;lt;/code&amp;gt;) file included directly or indirectly.&amp;lt;/em&amp;gt; Even more important, because the &amp;lt;code&amp;gt;system_header&amp;lt;/code&amp;gt; pragma affects the &amp;#039;&amp;#039;rest of the current header&amp;#039;&amp;#039;, the entire warnings guard mechanism should be separated into a &amp;#039;&amp;#039;header file on its own&amp;#039;&amp;#039;, including just the file in question. From the original file then include that wrapper file.&lt;br /&gt;
&lt;br /&gt;
* Code generated by &amp;lt;code&amp;gt;flex&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bison&amp;lt;/code&amp;gt;:  The solution here is similar to the solution in the previous item&amp;amp;mdash;disable all warnings in the generated code.  However, this has two implications:  For one, it means that also all warnings from our client code integrated into the &amp;lt;code&amp;gt;flex&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;bison&amp;lt;/code&amp;gt; output are suppressed; this is not really that large an issue, given the relatively small number of &amp;lt;code&amp;gt;flex&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;bison&amp;lt;/code&amp;gt; files we use.  For another, due to the nature of the GCC solution, it means that you need to introduce a wrapper file.  The individual steps for a given &amp;lt;code&amp;gt;flex&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;bison&amp;lt;/code&amp;gt; file named &amp;lt;code&amp;gt;example.ly&amp;lt;/code&amp;gt;, translated to &amp;lt;code&amp;gt;$(MISC)$/example.cxx&amp;lt;/code&amp;gt;, are as follows:  First, change &amp;lt;code&amp;gt;example.ly&amp;lt;/code&amp;gt; by adding&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#if defined __GNUC__&lt;br /&gt;
#pragma GCC system_header&lt;br /&gt;
#elif defined __SUNPRO_CC&lt;br /&gt;
#pragma disable_warn&lt;br /&gt;
#elif defined _MSC_VER&lt;br /&gt;
#pragma warning(push, 1)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(probably together with an explanatory comment) at the very end of the initial &amp;lt;code&amp;gt;%{...%}&amp;lt;/code&amp;gt; section (for &amp;lt;code&amp;gt;_MSC_VER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#pragma warning(push, 1)&amp;lt;/code&amp;gt; might not disable all the warnings that occur; in that case, add &amp;lt;code&amp;gt;#pragma warning(disable: NNN1 NNN2 ...)&amp;lt;/code&amp;gt; after it to disable specific warnings &amp;lt;code&amp;gt;NNN1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NNN2&amp;lt;/code&amp;gt;, etc.).  Second, create a new file named &amp;lt;code&amp;gt;wrap_example.cxx&amp;lt;/code&amp;gt; in the same source directory as &amp;lt;code&amp;gt;exmaple.ly&amp;lt;/code&amp;gt;, containing&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;example.cxx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Third, change the corresponding &amp;lt;code&amp;gt;makefile.mk&amp;lt;/code&amp;gt; by adding&lt;br /&gt;
&amp;lt;code&amp;gt;[]&lt;br /&gt;
INCPRE=$(MISC)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
to the top, by changing occurences of &amp;lt;code&amp;gt;example.obj&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;wrap_example.obj&amp;lt;/code&amp;gt;, and by adding&lt;br /&gt;
&amp;lt;code&amp;gt;[]&lt;br /&gt;
$(OBJ)$/wrap_example.obj: $(MISC)$/example.cxx&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
and/or&lt;br /&gt;
&amp;lt;code&amp;gt;[]&lt;br /&gt;
$(SLO)$/wrap_example.obj: $(MISC)$/example.cxx&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
at the bottom.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Education]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=GNU_Linux_Sparc_Porting&amp;diff=105800</id>
		<title>GNU Linux Sparc Porting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=GNU_Linux_Sparc_Porting&amp;diff=105800"/>
		<updated>2008-12-29T03:04:04Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The objective is to maintain the upstream sources so that the GNU/Linux [http://en.wikipedia.org/wiki/SPARC SPARC] platform can be packaged for example by Debian, Gentoo, and others.  Also to provide an upstream &amp;quot;benchmark&amp;quot; version that can be installed for checking who owns any bugs, while not interfering with the distribution&amp;#039;s installed packages. For GNU/Linux SPARC all Java building is done with gcj.&lt;br /&gt;
&lt;br /&gt;
Other projects that need more work:&lt;br /&gt;
&lt;br /&gt;
* fix multimedia&lt;br /&gt;
* more qa needs to be done&lt;br /&gt;
&lt;br /&gt;
The latest upstream release is on OpenOffice.org mirrors under contrib/linuxsparc&lt;br /&gt;
&lt;br /&gt;
== What is SPARC? ==&lt;br /&gt;
&lt;br /&gt;
SPARC means Scalable Processor ARChitecture [http://www.sparc.org/ about SPARC]&lt;br /&gt;
&lt;br /&gt;
The most common hardware implementation is done by [http://www.sun.com/ Sun].&lt;br /&gt;
&lt;br /&gt;
Most GNU/Linux SPARC users are running second-hand hardware which may be quite old and the installed user base and developer resources are relatively small.&lt;br /&gt;
&lt;br /&gt;
There are 2 main flavours of SPARC hardware:&lt;br /&gt;
&lt;br /&gt;
 32 bit known as sparc (uname -m returns sparc)&lt;br /&gt;
 64 bit known as sparc64 (uname -m returns sparc64)&lt;br /&gt;
&lt;br /&gt;
GNU/Linux is ported to run on both sparc and sparc64, there are separate kernels for sparc and sparc64 but the majority of user software is designed to run on both sparc and sparc64.&lt;br /&gt;
&lt;br /&gt;
For example on my system I can find these files:&lt;br /&gt;
 jim@sun:/boot$ file vmlinux-2.6.13&lt;br /&gt;
 vmlinux-2.6.13: ELF 64-bit MSB executable, SPARC V9, version 1 (SYSV), statically linked, not stripped&lt;br /&gt;
&lt;br /&gt;
 jim@sun:~/o147/program$ file soffice.bin&lt;br /&gt;
 soffice.bin: ELF 32-bit MSB executable, SPARC, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped&lt;br /&gt;
&lt;br /&gt;
So the first issue for porting is, how to build the 32 bit product on a 64 bit system? The simple and correct method is to build in a shell where the command &amp;quot;uname -m&amp;quot; will return &amp;quot;sparc&amp;quot; on a &amp;quot;sparc64&amp;quot; machine. This is achieved by using the command &amp;quot;sparc32 bash&amp;quot; or &amp;quot;linux32 bash&amp;quot; to get the shell for building. See here for a [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=251149 more authoritative comment]&lt;br /&gt;
&lt;br /&gt;
== Which shell to use for building, sparc or sparc64? ==&lt;br /&gt;
&lt;br /&gt;
But for maintaining the port I prefer to not use the sparc shell (from the &amp;quot;linux32 bash&amp;quot; command) because that might hide some bugs or bad behaviour. For GNU/Linux Sparc the 32 bit product can be built in the sparc64 shell, by the simple method of:&lt;br /&gt;
&lt;br /&gt;
 compiler flag &amp;quot;-m32&amp;quot; will tell gcc to build sparc and not sparc64&lt;br /&gt;
&lt;br /&gt;
In the past bad behaviour occurred when a module ignores the configured compiler path or compiler flags.  For example:&lt;br /&gt;
&lt;br /&gt;
 configured to build with &amp;quot;/usr/local/4.1/bin/gcc -m32&amp;quot;&lt;br /&gt;
 module builds with a different &amp;quot;gcc&amp;quot; for example /usr/bin/gcc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently there are no examples of this bad behaviour. This will not be easily noticed unless all alternative possible compilers are excluded from the configured environment path.  Still there remains a risk that a module will seek &amp;quot;/usr/local/bin/gcc&amp;quot; and find it. This sometimes seemed to involve using libtool which may have some defaults configured on the build machine?&lt;br /&gt;
&lt;br /&gt;
In summary, building in the sparc shell is the simple and correct method, but building in a sparc64 shell is better for finding bugs.&lt;br /&gt;
&lt;br /&gt;
== Specific code for GNU/Linux SPARC ==&lt;br /&gt;
&lt;br /&gt;
There are only a small number of places where GNU/Linux SPARC requires different code than used by other GNU/Linux platforms. The following list is not complete  but it provides some examples and will be gradually increased. For a full history of the GNU/Linux SPARC port just query Issuezilla for issues where sparcmoz has reported or commented.&lt;br /&gt;
&lt;br /&gt;
===Platform Make file===&lt;br /&gt;
Various compiler and other flags are set in the platform Make file solenv/inc/unxlngs.mk. That file is kept as close as possible to solenv/inc/unxlngi6.mk but the following differences are important:&lt;br /&gt;
&lt;br /&gt;
If the assembler is called directly, it must build for sparc v7 by default (could use v8 safely?) and not v8plus or v9  &lt;br /&gt;
 # mk file for unxlngs&lt;br /&gt;
 ASM=$(CC)&lt;br /&gt;
 AFLAGS=-Wa,-K,PIC -c $(CDEFS)&lt;br /&gt;
&lt;br /&gt;
Code must be compiled with -fPIC, as -fpic will not do for sparc/sparc64&lt;br /&gt;
 PICSWITCH:=-fPIC&lt;br /&gt;
&lt;br /&gt;
Platform specific identifier for shared libs&lt;br /&gt;
 DLLPOSTFIX=ls&lt;br /&gt;
 DLLPRE=lib&lt;br /&gt;
 DLLPOST=.so&lt;br /&gt;
&lt;br /&gt;
===Module sal===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GNU/Linux SPARC did not provide an implementation of frame.h that was needed for backtrace functions. It was also needed to provide the backtrace function without using the crash reporter. (This is out of date - it is no longer required. I need to remove this code from OOo sources). Backtrace is currently broken, possibly something here:&lt;br /&gt;
 sal/osl/unx/backtrace.c&lt;br /&gt;
 sal/osl/unx/backtrace.h&lt;br /&gt;
&lt;br /&gt;
The following code provides runtime detection of the user hardware (sparc or sparc64) and loads some different code at start up.&lt;br /&gt;
 sal/osl/unx/util.c&lt;br /&gt;
 sal/osl/unx/asm/interlck_sparc.s&lt;br /&gt;
&lt;br /&gt;
This file is modified to build the preceding files &lt;br /&gt;
 sal/osl/unx/makefile.mk&lt;br /&gt;
&lt;br /&gt;
===Module sc===&lt;br /&gt;
A number of runtime isssues (crash) were found with the early builds of the spreadsheet using gcc 3.2. A workaround was found to compile certain files with no optimisation. A review of the code suggests similar issues were found with other platforms, but in different files. The files were found fairly quickly by using a binary search pattern to locate the files that caused the crashes (build - test - crash - build half the files again without optimisation). Fortunately this type of work-around is supported by the build system environment variables NOOPTFILES and EXCEPTIONSNOOPTFILES!  It is possible some of these issues have gone away with later compilers, further investigation is needed. Refer to the source code as follows:&lt;br /&gt;
&lt;br /&gt;
 sc/source/core/data/makefile.mk:.IF &amp;quot;$(OS)$(COM)$(CPUNAME)&amp;quot;==&amp;quot;LINUXGCCSPARC&amp;quot;&lt;br /&gt;
 sc/source/core/tool/makefile.mk:.IF &amp;quot;$(OS)$(COM)$(CPUNAME)&amp;quot;==&amp;quot;LINUXGCCSPARC&amp;quot;&lt;br /&gt;
 sc/source/filter/excel/makefile.mk:.IF &amp;quot;$(OS)$(COM)$(CPUNAME)&amp;quot;==&amp;quot;LINUXGCCSPARC&amp;quot;&lt;br /&gt;
 sc/source/ui/unoobj/makefile.mk:.IF &amp;quot;$(OS)$(COM)$(CPUNAME)&amp;quot;==&amp;quot;LINUXGCCSPARC&amp;quot;&lt;br /&gt;
 sc/source/ui/view/makefile.mk:.IF &amp;quot;$(OS)$(COM)$(CPUNAME)&amp;quot;==&amp;quot;LINUXGCCSPARC&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A typical example follows from sc/source/core/data/makefile.mk:&lt;br /&gt;
&lt;br /&gt;
 .IF &amp;quot;$(OS)$(COM)$(CPUNAME)&amp;quot;==&amp;quot;LINUXGCCSPARC&amp;quot;&lt;br /&gt;
 NOOPTFILES= \&lt;br /&gt;
                $(SLO)$/column2.obj \&lt;br /&gt;
                $(SLO)$/column3.obj \&lt;br /&gt;
                $(SLO)$/table3.obj \&lt;br /&gt;
                $(SLO)$/table4.obj  \&lt;br /&gt;
                $(SLO)$/documen4.obj \&lt;br /&gt;
                $(SLO)$/conditio.obj \&lt;br /&gt;
                $(SLO)$/validat.obj&lt;br /&gt;
 EXCEPTIONSNOOPTFILES= \&lt;br /&gt;
        $(SLO)$/cell.obj&lt;br /&gt;
 .ELSE&lt;br /&gt;
 EXCEPTIONSFILES+= \&lt;br /&gt;
         $(SLO)$/cell.obj&lt;br /&gt;
 .ENDIF&lt;br /&gt;
&lt;br /&gt;
===Module bridges===&lt;br /&gt;
The bridges code in bridges/source/cpp_uno/gcc3_linux_sparc is copied exactly from the corresponding gcc3_linux_intel and only the assembler snippets have been changed.&lt;br /&gt;
&lt;br /&gt;
TODO: describe bridges code&lt;br /&gt;
&lt;br /&gt;
TODO: configuration, installation&lt;br /&gt;
&lt;br /&gt;
== Building OOo on GNU/Linux SPARC with OpenJDK ==&lt;br /&gt;
&lt;br /&gt;
This is work in progress. The first step is to build OpenJDK.&lt;br /&gt;
&lt;br /&gt;
No distributions are shipping OpenJDK for sparc yet (please correct me if I&amp;#039;m wrong ;)&lt;br /&gt;
&lt;br /&gt;
On Debain/sid I have got the build dependencies OK, configured and started ./make for icedtea6 from icedtea.classpath.org&lt;br /&gt;
&lt;br /&gt;
For the first build I will play it safe - building in a sparc shell:&lt;br /&gt;
&lt;br /&gt;
 $ linux32 bash&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ ./make&lt;br /&gt;
&lt;br /&gt;
Progress will be tracked at [http://qa.openoffice.org/issues/show_bug.cgi?id=91484 issue 91484]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Building with GCC 4.1.2 (preview) ==&lt;br /&gt;
&lt;br /&gt;
 This section is deprecated - the SPARC build works fine on debian with java-gcj-compat.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;I don&amp;#039;t mention here any issues that affect gcc &amp;lt; 4.1 &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
I normally build using debian gcc/ecj but if it is desired to build gcc too, then GCC 4.1 is built using gcc.gnu.org sources checked out by svn from gcc-4_1-branch and installed in /usr/local/4.1 with these configure flags: --prefix=/usr/local/4.1 --enable-java-awt=gtk,xlib &lt;br /&gt;
&lt;br /&gt;
Also need put ecj.jar in the source file - see gcc instructions for building gcj with ecj&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step 1: get a version of gcc with suitable gcj ===&lt;br /&gt;
&lt;br /&gt;
In my case I get gcc version that builds with ecj, and build gcc into /usr/local/4.1&lt;br /&gt;
&lt;br /&gt;
=== Step 2: set up the required commands for build tools ===&lt;br /&gt;
&lt;br /&gt;
Note that the required compiler can be specified by setting environment variables CC and CXX before running configure. The code expects some &amp;quot;java&amp;quot; commands to be available in the PATH: java jar javadoc. Different distributions provide those commands in different ways, but when using one&amp;#039;s own gcc built from upstream sources then gcc provides instead the corresponding commands: gij fastjar gjdoc. There is an issue with internal ant commands in build files in xmerge so that a symbolic link is needed: javadoc-&amp;gt; gjdoc&lt;br /&gt;
&lt;br /&gt;
=== Step 3: configure ===&lt;br /&gt;
&lt;br /&gt;
In my case the configure commands may be like this:&lt;br /&gt;
&lt;br /&gt;
$ export CC=&amp;quot;ccache /usr/local/bin/gcc -m32&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$ export CXX=&amp;quot;ccache /usr/local/bin/g++ -m32&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$ ./configure --with-jdk-home=/usr/local/4.1 \&lt;br /&gt;
&lt;br /&gt;
--with-ant-home=/usr/local/apache-ant-1.6.5 \&lt;br /&gt;
&lt;br /&gt;
--enable-crashdump=STATIC --enable-symbols=SMALL --enable-build-mozilla \&lt;br /&gt;
&lt;br /&gt;
--with-package-format=rpm \&lt;br /&gt;
&lt;br /&gt;
--with-alloc=system&lt;br /&gt;
&lt;br /&gt;
 Now if configure reports that &amp;quot;ant does not work&amp;quot; try this: export PATH=/path/to/gcj:$PATH&lt;br /&gt;
&lt;br /&gt;
Some additional [http://www.openoffice.org/servlets/ReadMsg?list=dev&amp;amp;msgNo=16375 hoops to jump through] for the crash reporter&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Build ===&lt;br /&gt;
&lt;br /&gt;
 berkeleydb - see [http://qa.openoffice.org/issues/show_bug.cgi?id=54657 issue 54657]&lt;br /&gt;
 berkeleydb has hardcoded &amp;quot;java&amp;quot; command with fallback to JAVA but environment defines JAVAINTERPRETER. the fix is in cws_src680_maho1&lt;br /&gt;
&lt;br /&gt;
 sal: Since m166 some memory alignment problem will cause bus errors (signal 10 or SIGBUS) on GNU/Linux SPARC. &lt;br /&gt;
 This is referenced at  [http://www.openoffice.org/issues/show_bug.cgi?id=65788 issue 65788] and the workaround is configure --with-alloc=system&lt;br /&gt;
&lt;br /&gt;
 moz: some recent change in GCC? (4.1.2)  mimeExternalObjectClass&amp;#039; with &amp;#039;C++&amp;#039; linkage&lt;br /&gt;
 mimemult.cpp:76: error: conflicts with new declaration with &amp;#039;C&amp;#039; linkage&lt;br /&gt;
 [http://qa.openoffice.org/issues/show_bug.cgi?id=66906 issue 66906] (fixed?)&lt;br /&gt;
&lt;br /&gt;
== Installing from rpm without root access ==&lt;br /&gt;
&lt;br /&gt;
The GNU Linux Sparc packages from contrib/linuxsparc should not interfere with installations provided by the various distribution packagers such as debian, gentoo etc. Therefore the supplied rpms can be installed in the user&amp;#039;s home directory using the install_linux.sh script which is available on mirrors at pub/OpenOffice.org/developer/install_scripts/&lt;br /&gt;
&lt;br /&gt;
The rpm command is required but root access is not required&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Infrastructure_Problems&amp;diff=105799</id>
		<title>Infrastructure Problems</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Infrastructure_Problems&amp;diff=105799"/>
		<updated>2008-12-29T03:03:38Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OOo&amp;#039;s SourceCast Instance ==&lt;br /&gt;
&lt;br /&gt;
The OOo instance of SourceCast is based on an extremely old version (2.6), the equivalent up-to-date product is &amp;#039;CollabNet Enterprise Edition&amp;#039;. It is believed that many problems of the current infrastructure are fixed in the latest versions of this (ver 4.0). The use of &amp;#039;SourceCast&amp;#039; hereinafter referrs to the (patched &amp;amp;amp; older) OOo version of this infrastructure.&lt;br /&gt;
&lt;br /&gt;
SourceCast provided services are typically extremely unresponsive - it typically taking longer to log-into SourceCast than search the entire-web at google.com with some complex search. High latencies are also sporadic - there are unpredictable periods of low &amp;amp;amp; high latency.&lt;br /&gt;
&lt;br /&gt;
=== Scaling issues ===&lt;br /&gt;
&lt;br /&gt;
Under heavy load - such as close to a release - it is common for SourceCast to become almost totally unresponsive &amp;amp;amp; unusable, sometimes for days.&lt;br /&gt;
&lt;br /&gt;
=== Constant re-login ===&lt;br /&gt;
&lt;br /&gt;
For unknown reasons SourceCast login infrastructure [http://qa.openoffice.org/issues/show_bug.cgi?id=34822 requires] that you re-log-in when closing and restarting your browser. It&amp;#039;s hard to quantify quite how frequently, but normally for every new bug filed it is necessary to go to the IssueZilla page, log-in, hit back, hit refresh - adding (if you&amp;#039;re lucky) 15seconds or so to any bug filing - prolly more. This latency is not present with other bugzilla derived products. Of course, developers Issue access patterns are typically not those of the casual tester, or heavy SourceCast user - they spend an hour or more fixing a bug, then return to mark the bug fixed (sometimes from one of their other desktop machines) - at which point; re-login is forced on them. A persistant, long-lived client-side authentication cookie would remove this problem entirely.&lt;br /&gt;
&lt;br /&gt;
Some people report not being able to reproduce this frequent re-login issue; it is possible the bug relates closely to the end users&amp;#039; network topology, such as NAT gateways etc. Or - as a serious discussion without exaggeration seems to reveal - it&amp;#039;s just that a session cookie is used and not a persistent one.&lt;br /&gt;
&lt;br /&gt;
=== CVS ===&lt;br /&gt;
&lt;br /&gt;
CVS is &amp;lt;b&amp;gt;extremely slow &amp;lt;/b&amp;gt; ({{Bug|24771}}). This problem is compounded by the OO.o source code being extremely large it is true. &lt;br /&gt;
However an order of magnitude slow-down is due to a simple source-cast design bug of having the CVS .rcs files on a different disk to that of the CVS daemon itself - adding untold latency to each NFS file operation.&lt;br /&gt;
&lt;br /&gt;
Access control - the CVS repository was by default constructed in such a way as to deny even those granted access commit writes to large chunks of it. This was coupled to the formal role request/granting process. Similarly the CVS structure itself (split into separate top-level modules per-project) is confusing (not matching the source directory layout),  also making it not possible to have a &amp;#039;familiar&amp;#039; structure, configure / autogen.sh / README / BUILDING etc. in the top-level directory. [ at least without breaking other CVS operations ]. This artefact also makes the real CVS structure (as seen in LXR etc.) hard to navigate &amp;amp;amp; confusingly different.&lt;br /&gt;
&lt;br /&gt;
CVS also has rather a [http://qa.openoffice.org/issues/show_bug.cgi?id=23306 habit] of loosing cvs tags cf. the [[CvsFAQ]]&lt;br /&gt;
&lt;br /&gt;
== Searching ==&lt;br /&gt;
&lt;br /&gt;
There is no ability to search openoffice.org without logging in, there&amp;#039;s no good reason for that. More seriously googling doesn&amp;#039;t show any results from within the mailing lists! Making them nigh on useless as a resource. &lt;br /&gt;
&lt;br /&gt;
{{Bug|58310}} has been raised to address this issue. The Googlebot web crawler is well behaved, and respects the overly restrictive &amp;#039;robots.txt&amp;#039; files scattered around the OpenOffice.org website, such as this one: http://tools.openoffice.org/source/browse/tools/www/robots.txt. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The consequences of a [http://qa.openoffice.org/robots.txt reduced robots.txt] file for [[Infrastructure_Problems#Scaling_issues|scaling issues]] are checked for the qa project starting 2005-11-21. &lt;br /&gt;
&lt;br /&gt;
Hint: as a workaround, for fast and easy mailing list searches and a threaded archive go to mail-archive.com, e.g. http://www.mail-archive.com/dev@openoffice.org/, combined with Google this leads to something like &amp;#039;&amp;#039;site:mail-archive.com/dev@openoffice.org YourSearchTerm&amp;#039;&amp;#039;, which works in many cases. Of course there are also others like Gmane and such.&lt;br /&gt;
&lt;br /&gt;
== Projects &amp;amp;amp; roles ==&lt;br /&gt;
&lt;br /&gt;
There is an extremely formal project / role structure built on SourceCast&amp;#039;s features in this area, with various roles being requested, and granted via E-mail round-trips. Thankfully this doesn&amp;#039;t impact CVS access these days - with broadly unconstrained CVS accounts being the norm.&lt;br /&gt;
&lt;br /&gt;
== IssueZilla ==&lt;br /&gt;
&lt;br /&gt;
This is rather old and nasty compared with the excellent modern Bugzilla releases, that shows in lots of places - file typing, uploads, comment management, well - tens of usability &amp;amp;amp; cleanup features missing. {{Bug|34665}} contains a good sample of such problems.&lt;br /&gt;
&lt;br /&gt;
== Mailing lists ==&lt;br /&gt;
&lt;br /&gt;
It is critical in any new Free software project to attract developers. One way to drive away newbies is to have an unstated rule that anyone who wants to get a reply from a mailing list post needs to add &amp;quot;please CC me I&amp;#039;m not subscribed - and retain this message so the rest of the thread reaches me&amp;quot; in a prominent place in their E-mail. Thus (I imagine) people regularly ask a question on a list, and &amp;lt;i&amp;gt;receive&amp;lt;/i&amp;gt; no reply, even if one is written.&lt;br /&gt;
&lt;br /&gt;
Futhermore address munging is a hugely bad idea for busy mailing lists - it is not possible to read all (busy) mailing lists on topics that people are interested in in linear time; hence keeping a thread CC&amp;#039;d to one is important, it allows a quick response - while keeping the mailing list informed. This is not possible with collab-net&amp;#039;s Reply-To: mangling - hence discouraging busy people from using or CC&amp;#039;ing the mailing lists.&lt;br /&gt;
&lt;br /&gt;
Also Reply-To: mangling is just a [http://www.unicom.com/pw/reply-to-harmful.html bad idea], cf. Linux Kernel, GNOME et. al&amp;#039;s non-invasive, non-munging policies that encourage contributors &amp;amp;amp; build collaboration.&lt;br /&gt;
&lt;br /&gt;
It may be that one reason behind this mangling is to discourage people from replying off-list to people, - that unfortunately stifles community by not building strong inter-personal relationships, (although clearly off-list replies tend to be short, punchy, amusing, and not the norm). Another reason may be that there exist people out there who don&amp;#039;t know how to use their mailer&amp;#039;s reply-to-all feature.&lt;br /&gt;
&lt;br /&gt;
It is believed that underneath SourceCast uses [http://cr.yp.to/ezmlm.html ezmlm] to handle mail.&lt;br /&gt;
&lt;br /&gt;
== Missing services ==&lt;br /&gt;
&lt;br /&gt;
=== LXR / Bonsai / Tinderbox ===&lt;br /&gt;
&lt;br /&gt;
With 8 million lines of code no-one outside Sun is familiar with, is is essential to have some hard-code code search, change tracking, indexing functionality. Unfortunately SourceCast does not provide this, that makes it way more difficult to collaborate on developing the code.&lt;br /&gt;
&lt;br /&gt;
A central well-maintained Tinderbox server, should be a pre-requisite for any large project with as many complex build issues as OO.o. One is provided at http://go-oo.org/tinderbox/ however.&lt;br /&gt;
&lt;br /&gt;
=== RSS aggregator / &amp;#039;planet&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s not clear why it is not possible eg. to re-direct .openoffice.org domain names to existing solutions here as elsewhere.&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
[[SVNMigration|Migration to SVN]]&lt;br /&gt;
&lt;br /&gt;
[[Infrastructure_Requirements]]&lt;br /&gt;
&lt;br /&gt;
[[Infrastructure_Overview]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Website]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Contributing_Patches&amp;diff=105798</id>
		<title>Contributing Patches</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Contributing_Patches&amp;diff=105798"/>
		<updated>2008-12-29T03:03:07Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sun Contributor Agreement ==&lt;br /&gt;
&lt;br /&gt;
To submit any code to OOo you need to sign the [[Sun Contributor Agreement]] (SCA) that replaces the former [[Joint Copyright Assignment]] (JCA). This process can take some time, so check [[Pending JCAs]] to see if yours is pending legal review.&lt;br /&gt;
&lt;br /&gt;
== Diff style ==&lt;br /&gt;
&lt;br /&gt;
Always use unified diffs &amp;lt;tt&amp;gt;cvs -z3 diff -u&amp;lt;/tt&amp;gt; , since they are the most readable, (and sensible) types of&lt;br /&gt;
diff to read and apply.&lt;br /&gt;
If you&amp;#039;re not using them - most likely you want to setup your [[Tips#CVS_setup|cvsrc]] properly.&lt;br /&gt;
&lt;br /&gt;
== Filing patches  ==&lt;br /&gt;
&lt;br /&gt;
The best hacker centric bug filing interface is&lt;br /&gt;
[http://qa.openoffice.org/issue_handling/submission_gateway.html#code_module here].&lt;br /&gt;
Whack the patch there &amp;amp;amp; wait for feedback.&lt;br /&gt;
&lt;br /&gt;
Sometimes assigning the bug to the code owner helps accelerate the process.&lt;br /&gt;
We can sometimes extract the owner of a module by checking&lt;br /&gt;
for the ADMIN_FILE_OWNER tag; there is a little tool in&lt;br /&gt;
&amp;lt;code&amp;gt;ooo-build/bin/owner &amp;lt;file-name&amp;gt; &amp;lt;/code&amp;gt; that helps you&lt;br /&gt;
find out who to E-mail / interact with about a given module;&lt;br /&gt;
it&amp;#039;s worth assigning very specifically located bugs to that&lt;br /&gt;
person.&lt;br /&gt;
&lt;br /&gt;
== Some interaction ==&lt;br /&gt;
&lt;br /&gt;
It tends to be a good idea to work out how best to implement&lt;br /&gt;
your fix, and/or discuss it with a developer or two before hand.&lt;br /&gt;
Some of the best ways to do this are to post to&lt;br /&gt;
[mailto:dev@openoffice.org] or lurk on IRC at &amp;lt;tt&amp;gt;irc.freenode.net&amp;lt;/tt&amp;gt; on the&lt;br /&gt;
&amp;lt;tt&amp;gt;#dev.OpenOffice.org&amp;lt;/tt&amp;gt; channel. IRC is an awfully poor&lt;br /&gt;
communication medium, but better than no communication.&lt;br /&gt;
&lt;br /&gt;
See [[DomainDeveloper]] to unwind who is whom.&lt;br /&gt;
&lt;br /&gt;
== ooo-build patch creation ==&lt;br /&gt;
&lt;br /&gt;
Once you have created your patch you need to add it to the apply file so it&lt;br /&gt;
can be applied by apply.pl during build time.&lt;br /&gt;
&lt;br /&gt;
Then simply re-run &amp;#039;make&amp;#039; in the toplevel - this should incrementally apply&lt;br /&gt;
your patch to an (untouched) build tree.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Speedy Handling of Patch Submissions==&lt;br /&gt;
&lt;br /&gt;
Developers are encouraged to submit their first code contributions&lt;br /&gt;
as patches - attachments to issues of type PATCH - to IssueZilla for&lt;br /&gt;
review and integration into the main repository. We have been criticized that submitted&lt;br /&gt;
PATCHes are not handled in a reasonable timeframe. To support the timely work on patches we introduced the two metrics as listed below.&lt;br /&gt;
&lt;br /&gt;
The consequences of insufficient responsiveness are contributor&lt;br /&gt;
dissatisfaction, bad reputation for the project and project leads and most significantly that the developer will probably not contribute again.&lt;br /&gt;
&lt;br /&gt;
The number of 5 - 15 submissions per week and a backlog of about&lt;br /&gt;
170 open patches seems to be within our capabilities.&lt;br /&gt;
&lt;br /&gt;
===Initial Response Time (IRT)===&lt;br /&gt;
&lt;br /&gt;
[http://eis.services.openoffice.org/patchreport/irt_index.html Initial Response Time] (IRT) describes the time between submission and first comment or status&lt;br /&gt;
change from someone else than the submitter for open issues of type PATCH. &lt;br /&gt;
&lt;br /&gt;
Please acknowledge the submission within one of the following days and assign the issue to the developer maintaining the code in question.&lt;br /&gt;
&lt;br /&gt;
===Issue Inactivity Time (IIT)===&lt;br /&gt;
&lt;br /&gt;
[http://eis.services.openoffice.org/patchreport/iit_index.html Issue Inactivity Time] (IIT)&lt;br /&gt;
describes the time since the last addition of a comment or status&lt;br /&gt;
change for open issues of type PATCH.&lt;br /&gt;
&lt;br /&gt;
Let&amp;#039;s avoid that patches linger around with unclear status for too long.&lt;br /&gt;
The expectation of a contributor is that he will see his code reviewed and - if applicable - integrated in one of the next microreleases.&lt;br /&gt;
So we should drive the issue towards a resolution and closure.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mono_Integration&amp;diff=105797</id>
		<title>Mono Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mono_Integration&amp;diff=105797"/>
		<updated>2008-12-29T03:00:00Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Notice ==&lt;br /&gt;
&lt;br /&gt;
This functionality is available only in patches associated with [[ooo-build]]/&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
To build this, grab a recent mono - 1.1.8.3 is likely to work.&lt;br /&gt;
Then [[Building_with_ooobuild | Build]] with --enable-mono. [[Installing | Install]] in the normal way.&lt;br /&gt;
&lt;br /&gt;
=== Build sample programs ===&lt;br /&gt;
&lt;br /&gt;
    cd odk/examples/CLI/CSharp/Spreadsheet&lt;br /&gt;
    export CLI_URE=../../../../../cli_ure/unxlngi6.pro/bin&lt;br /&gt;
    mcs SpreadsheetSample.cs SpreadsheetDocHelper.cs -r:$CLI_URE/cli_basetypes.dll \&lt;br /&gt;
      -r:$CLI_URE/cli_types.dll -r:$CLI_URE/cli_cppuhelper.dll -r:$CLI_URE/cli_ure.dll&lt;br /&gt;
    cp SpreadsheetSample.exe /opt/OOInstall/program&lt;br /&gt;
    cd /opt/OOInstall/program&lt;br /&gt;
    mono ./SpreadsheetSample.exe&lt;br /&gt;
&lt;br /&gt;
You should get a nicely auto-generated spreadsheet.&lt;br /&gt;
&lt;br /&gt;
=== With a binary installation ===&lt;br /&gt;
&lt;br /&gt;
You need to grab the files above from: [http://go-oo.org/lxr/source/api/odk/examples/CLI/CSharp/Spreadsheet/ lxr] and whack them in /usr/lib/ooo-2.0/program slightly differently:&lt;br /&gt;
&lt;br /&gt;
    cd /usr/lib/ooo-2.0/program&lt;br /&gt;
    mcs SpreadsheetSample.cs SpreadsheetDocHelper.cs \&lt;br /&gt;
      -r cli_basetypes.dll -r cli_types.dll \&lt;br /&gt;
      -r cli_cppuhelper.dll -r cli_ure.dll&lt;br /&gt;
    mono ./SpreadsheetSample.exe&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=New_Module&amp;diff=105796</id>
		<title>New Module</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=New_Module&amp;diff=105796"/>
		<updated>2008-12-29T02:59:34Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Adding a New module to the OO.o build ==&lt;br /&gt;
&lt;br /&gt;
This process is somewhat complex, an example (adding cairo) is annotated here:&lt;br /&gt;
&lt;br /&gt;
First create a your new module directory eg. &amp;lt;code&amp;gt;libpixman&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;makefile.mk - in your module directory. see following example what it should contain, it is important that your&lt;br /&gt;
tarball is added to the &amp;lt;code&amp;gt;libpixman/download/&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRJ=.&lt;br /&gt;
&lt;br /&gt;
PRJNAME=libpixman&lt;br /&gt;
TARGET=libpixman&lt;br /&gt;
&lt;br /&gt;
# --- Settings -----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
.INCLUDE :	settings.mk&lt;br /&gt;
&lt;br /&gt;
# --- Files --------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
.IF &amp;quot;$(GUI)&amp;quot;==&amp;quot;UNX&amp;quot;&lt;br /&gt;
TARFILE_NAME=libpixman-0.1.5&lt;br /&gt;
&lt;br /&gt;
CONFIGURE_DIR=&lt;br /&gt;
&lt;br /&gt;
CONFIGURE_ACTION=./configure&lt;br /&gt;
CONFIGURE_FLAGS=&lt;br /&gt;
BUILD_DIR=$(CONFIGURE_DIR)&lt;br /&gt;
BUILD_ACTION=$(GNUMAKE)&lt;br /&gt;
&lt;br /&gt;
OUT2LIB= \&lt;br /&gt;
	$/src$/.libs$/libpixman.so.*&lt;br /&gt;
&lt;br /&gt;
OUT2INC= \&lt;br /&gt;
	$/src$/pixman.h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# --- Targets ------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.INCLUDE :	set_ext.mk&lt;br /&gt;
.INCLUDE :	target.mk&lt;br /&gt;
.INCLUDE :	tg_ext.mk&lt;br /&gt;
.ELSE  &lt;br /&gt;
&lt;br /&gt;
dummy:&lt;br /&gt;
	@echo &amp;quot;Nothing to build for your platform&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.ENDIF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;prj/build.lst - see following example and [[Hacking#prj.2Fbuild.lst|detailed description]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pm	libpixman		:	solenv NULL&lt;br /&gt;
pm	libpixman			usr1	-	u	pm_mkout NULL&lt;br /&gt;
pm	libpixman			nmake	-	u	pm_pixman NULL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;prj/d.lst - see following example and [http://ooo.ximian.com/wiki/index.php/Hacking#prj.2Fd.lst detailed description ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir: %_DEST%\inc%_EXT%\pixman&lt;br /&gt;
..\%__SRC%\inc\pixman.h %_DEST%\inc%_EXT%\pixman\pixman.h&lt;br /&gt;
..\%__SRC%\lib\libpixman.* %_DEST%\lib%_EXT%\libpixman.*&lt;br /&gt;
&lt;br /&gt;
linklib: libpixman.so.*.*.*&lt;br /&gt;
linklib: libpixman.dylib.*.*.*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Extra bits for ooo-build ==&lt;br /&gt;
&lt;br /&gt;
Of course, you&amp;#039;ll need to turn all of the above into patch form for [[ooo-build]]; but ooo-build also&lt;br /&gt;
has some infrastructure to help download the source you need easily; those need setting up:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;configure.in - usualy you want your module to be build conditionaly. inspire yourself by looking how mdb or cairo are handled.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AC_ARG_ENABLE(cairo,&lt;br /&gt;
[&lt;br /&gt;
  --enable-cairo          Enables cairo canvas backend.],&lt;br /&gt;
,)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$enable_cairo&amp;quot; != &amp;quot;no&amp;quot;; then&lt;br /&gt;
   CAIRO_ENABLED=TRUE&lt;br /&gt;
   LIBPIXMAN_VER=0.1.5&lt;br /&gt;
   GLITZ_VER=0.4.3&lt;br /&gt;
   CAIRO_VER=0.5.2&lt;br /&gt;
else&lt;br /&gt;
   CAIRO_ENABLED=&lt;br /&gt;
   LIBPIXMAN_VER=&lt;br /&gt;
   GLITZ_VER=&lt;br /&gt;
   CAIRO_VER=&lt;br /&gt;
fi&lt;br /&gt;
AC_SUBST(CAIRO_ENABLED)&lt;br /&gt;
AC_SUBST(LIBPIXMAN_VER)&lt;br /&gt;
AC_SUBST(GLITZ_VER)&lt;br /&gt;
AC_SUBST(CAIRO_VER)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;download.in - add your code to download package from network, best if you place the module tarball on ooo.ximian.com in /var/www/packages/SRC680/ directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%SRC_URLS = (&lt;br /&gt;
    &amp;#039;binutils-.*&amp;#039;			 =&amp;gt; &amp;#039;http://go-ooo.org/packages/support&amp;#039;,&lt;br /&gt;
...&lt;br /&gt;
    &amp;#039;libpixman-*&amp;#039;			 =&amp;gt; &amp;#039;http://go-ooo.org/packages/SRC680&amp;#039;,&lt;br /&gt;
    &amp;#039;cairo-*&amp;#039;			         =&amp;gt; &amp;#039;http://go-ooo.org/packages/SRC680&amp;#039;,&lt;br /&gt;
    &amp;#039;glitz-*&amp;#039;			         =&amp;gt; &amp;#039;http://go-ooo.org/packages/SRC680&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
if (&amp;#039;@CAIRO_ENABLED@&amp;#039; eq &amp;#039;TRUE&amp;#039;) {&lt;br /&gt;
    push @files, ( &amp;#039;libpixman-@LIBPIXMAN_VER@.tar.gz&amp;#039; );&lt;br /&gt;
    push @files, ( &amp;#039;cairo-@CAIRO_VER@.tar.gz&amp;#039; );&lt;br /&gt;
    push @files, ( &amp;#039;glitz-@GLITZ_VER@.tar.gz&amp;#039; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
download_files (\@files, \%SRC_URLS, &amp;#039;@SRCDIR@&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;bin/setup.in - you can set environment variable by autoconf variable values here. the setup is sourced (as in shell terminology) in unpack, so you can use info from configure that way&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
CAIRO_VER=@CAIRO_VER@&lt;br /&gt;
CAIRO_ENABLED=@CAIRO_ENABLED@&lt;br /&gt;
GLITZ_VER=@GLITZ_VER@&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;bin/unpack - create a directory for your module in OOo tree, create another download directory for your tarball and copy it there&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
if test &amp;quot;$CAIRO_ENABLED&amp;quot; == &amp;quot;TRUE&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Making symbolic links of libpixman, cairo and glitz at build location&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    mkdir -p $OOBUILDDIR/libpixman&lt;br /&gt;
    check_tarball $SRCDIR/libpixman-$LIBPIXMAN_VER.tar.gz&lt;br /&gt;
    mkdir -p $OOBUILDDIR/libpixman/download&lt;br /&gt;
    cp -a $SRCDIR/libpixman-${LIBPIXMAN_VER}.tar.gz $OOBUILDDIR/libpixman/download/&lt;br /&gt;
&lt;br /&gt;
    mkdir -p $OOBUILDDIR/glitz&lt;br /&gt;
    check_tarball $SRCDIR/glitz-${GLITZ_VER}.tar.gz&lt;br /&gt;
    mkdir -p $OOBUILDDIR/glitz/download&lt;br /&gt;
    cp -a $SRCDIR/glitz-${GLITZ_VER}.tar.gz $OOBUILDDIR/glitz/download/&lt;br /&gt;
&lt;br /&gt;
    mkdir -p $OOBUILDDIR/cairo&lt;br /&gt;
    check_tarball $SRCDIR/cairo-${CAIRO_VER}.tar.gz&lt;br /&gt;
    mkdir -p $OOBUILDDIR/cairo/download&lt;br /&gt;
    cp -a $SRCDIR/cairo-${CAIRO_VER}.tar.gz $OOBUILDDIR/cairo/download/&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Extra bits for Childworkspaces ==&lt;br /&gt;
Some additional things should be considered when introducing a new module on a [[CWS|Childworkspace]]. Please see &lt;br /&gt;
[[CWS#Create_a_new_module|here]].&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Tips&amp;diff=105795</id>
		<title>Tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Tips&amp;diff=105795"/>
		<updated>2008-12-29T02:59:06Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Tips zh|中]]&lt;br /&gt;
== Getting an OO.o CVS account ==&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      This is the process for getting CVS accounts for the up-stream&lt;br /&gt;
      CVS server, (ooo-build accounts are handled [http://go-oo.org/ooo-build.html#section-2.5.1 differently]).&lt;br /&gt;
      To see how the issue raising process works see eg. issue [http://www.openoffice.org/issues/show_bug.cgi?id=7270 i#7270#]&lt;br /&gt;
      Having got the account setup, you need to tunnel to the secure CVS server&lt;br /&gt;
      something like:&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;code&amp;gt;ssh -f -2 -P -L 2401:localhost:2401 tunnel@openoffice.org sleep 1400 &amp;lt; /dev/null &amp;gt; /dev/null&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Then you need to change your CVSROOT to point at your local&lt;br /&gt;
      machine, since this is the endpoint of the tunnel:&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;code&amp;gt;:pserver:mmeeks@localhost:/cvs&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Your account name and password - will be the same as you use for&lt;br /&gt;
      filing bugs etc. in the SourceCast system. Login, and ... you&amp;#039;ll&lt;br /&gt;
      soon notice that you&amp;#039;ll need to migrate your CVS settings to the&lt;br /&gt;
      new server, to do this without wasting B/W with duplicate&lt;br /&gt;
      checkouts do:&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;bin/re-root /path/to/checkout &amp;quot;:pserver:&amp;lt;account-name-here&amp;gt;@localhost:/cvs&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Of course, to commit anything, you&amp;#039;ll need various project&lt;br /&gt;
      priviliges - and to battle the bureaucracy.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using patch / diff ==&lt;br /&gt;
&lt;br /&gt;
Patch/diff are wonderful tools, however people often provide data that confuses them in a messy and difficult to un-tangle sort of a way. Here are some hints on untangling the mess:&lt;br /&gt;
&lt;br /&gt;
* When creating diffs, &amp;#039;&amp;#039;&amp;#039;please&amp;#039;&amp;#039;&amp;#039; use &amp;lt;code&amp;gt;diff -upN&amp;lt;/code&amp;gt; to create a diff against the revision(s) you checked out.&amp;lt;br/&amp;gt; The options used are:&lt;br /&gt;
*; -u&lt;br /&gt;
*: Create unified context diff.&lt;br /&gt;
*: Chances are much higher that the patch reviewer sees what it is about and is able to apply the patch to code that changed in the meantime.&lt;br /&gt;
*; -p&lt;br /&gt;
*: Show which C function each change is in.&lt;br /&gt;
*: Just informational, be nice to the patch reviewer.&lt;br /&gt;
*; -N&lt;br /&gt;
*: New file, treat absent files as empty,&lt;br /&gt;
*: which effectively includes new files in your diff that otherwise would be missing.&lt;br /&gt;
&lt;br /&gt;
* If at all unsure, run patch with --dry-run first, this will appear to do the patching action, but not actually do it [ this can give bogus results with compound inter-depending patches, but is extremely useful ].&lt;br /&gt;
&lt;br /&gt;
* Mostly use patch -p0; 0 signifies the number of path elements to strip from the beginning of the file path the diff points at.&lt;br /&gt;
&lt;br /&gt;
* When you mess up, and have 1/2 of the patch applied and want to revert to clean, either remove the files and cvs update, or re-patch with the &amp;#039;-R&amp;#039; option, to reverse the effect.&lt;br /&gt;
&lt;br /&gt;
* Sometimes using diff between modules with lots of whitespace changes makes the patch hard to read; the &amp;#039;-w&amp;#039; flag to (cvs) diff makes this easier.&lt;br /&gt;
&lt;br /&gt;
Before committing a patch to ooo-build, test it with &amp;lt;code&amp;gt;make patch.apply&amp;lt;/code&amp;gt; in the top-level, NB. it really pays to have 2 copies of the tree - 1 hacked, 1 pristine.&lt;br /&gt;
&lt;br /&gt;
== Make clean ==&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p&amp;gt;&lt;br /&gt;
    Just use &amp;lt;code&amp;gt;dmake clean&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;build/src680&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
    Or for a more descructive version in ooo-build try &amp;lt;code&amp;gt;rm -Rf build&amp;lt;/code&amp;gt;.&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CVS setup ==&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p&amp;gt;&lt;br /&gt;
    In order to make efficient use of bandwidth, generate sensible&lt;br /&gt;
    diffs by default, and follow the trend, you need this in your&lt;br /&gt;
    ~/.cvsrc.&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -q&lt;br /&gt;
diff -upN &lt;br /&gt;
update -dP&lt;br /&gt;
checkout -P&lt;br /&gt;
status -v &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adding header files to the build ==&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Adding header files to the OO.o build is notoriously clunky.  To&lt;br /&gt;
      add header files under &amp;lt;code&amp;gt;external/&amp;lt;/code&amp;gt;, make sure you list them in&lt;br /&gt;
      &amp;lt;code&amp;gt;external/prj/d.lst&amp;lt;/code&amp;gt; so that they get copied under the&lt;br /&gt;
      &amp;lt;code&amp;gt;solver/680/unxlngi4.pro/inc/external&amp;lt;/code&amp;gt; directory when building.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Finding where to hack ==&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Often there is some GUI element used near the thing you&amp;#039;re&lt;br /&gt;
      trying to locate / fix. So, find some sufficiently unusual&lt;br /&gt;
      string and search for it in [http://go-ooo.org/lxr&amp;quot; LXR&amp;#039;s]&lt;br /&gt;
      &amp;lt;b&amp;gt;text&amp;lt;/b&amp;gt; search; this should reveal an identifier related&lt;br /&gt;
      to that string; eg. SID_AUTOFORMAT, or FN_NUM_BULLET_ON.&lt;br /&gt;
      Having obtained that, do a new text search for that string,&lt;br /&gt;
      and you&amp;#039;ll find the usage [ or a chained define to something&lt;br /&gt;
      else ]. For eg. menus/toolbar buttons the functionality is&lt;br /&gt;
      usually in a case statement eg. case SID_AUTOFORMAT: ...&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adding an UNO interface ==&lt;br /&gt;
&lt;br /&gt;
This is slightly more complex build wise than you might expect.&lt;br /&gt;
*Add IDL file to offapi/com/sun/star/wherever/Foo.idl.&lt;br /&gt;
*If &amp;#039;wherever is &amp;#039;&amp;#039;not&amp;#039;&amp;#039; a new path, add Foo.idl to IDLFILES in wherever/makefile.mk.&lt;br /&gt;
*If &amp;#039;wherever&amp;#039; &amp;#039;&amp;#039;is&amp;#039;&amp;#039; a new path, update offapi/util/makefile.mk to refer to the relevant TARGET .db, prolly &amp;#039;whatever.db&amp;#039;.&lt;br /&gt;
*If &amp;#039;wherever&amp;#039; &amp;#039;&amp;#039;is&amp;#039;&amp;#039; a new path, update offapi/prj/d.lst and build.lst appropriately.&lt;br /&gt;
&lt;br /&gt;
This should result in your type information being built into types.rdb &amp;amp;amp; installed. This is however only part of the mix: the module &amp;#039;offuh&amp;#039; builds &amp;amp;amp; installs the .hdl/.hpp files we need (for C++), so if &amp;#039;wherever&amp;#039; is a new path we need to update offuh/prj/d.lst to install those files too.&lt;br /&gt;
&lt;br /&gt;
Finally, check that the types.rdb in the install set has your types; a &amp;lt;code&amp;gt;regview types.rdb / | grep &amp;#039;whatever&amp;#039; -i &amp;lt;/code&amp;gt; would work well for that. If not, copy it in from the solver.&lt;br /&gt;
&lt;br /&gt;
== Creating a new top-level module ==&lt;br /&gt;
&lt;br /&gt;
See [[New_Module|here]] for technical details about bringing external code into the OOo build environment. How to handle new modules in the Childworkspace process is described in [[CWS#Create_a_new_module|this]] CWS-HowTo.&lt;br /&gt;
&lt;br /&gt;
== Find out which OOo version you are using ==&lt;br /&gt;
&lt;br /&gt;
Open up the About dialog (last entry in the help menu), and hold down the &amp;lt;Ctrl&amp;gt; key, while pressing S D T in a row. The very first line that starts scrolling in (directly below the OK button) gives the internal milestone number, plus the build ID.&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [[Using_Cpp_with_the_OOo_SDK|Using C++ with the OOoSDK]]&lt;br /&gt;
* [[:Category:Developer_Tools|Developer tools]]&lt;br /&gt;
* [[Building OpenOffice.org]]&lt;br /&gt;
* [[CWS|Working with Childworkspaces]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Solenv&amp;diff=105794</id>
		<title>Solenv</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Solenv&amp;diff=105794"/>
		<updated>2008-12-29T02:58:33Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it contains ==&lt;br /&gt;
&lt;br /&gt;
solenv/ contains many of the tools necessary to build and package OO.o. It also contains lots of common makefile fragments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;solenv/&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;bin/&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*** build.pl - aliased to &amp;#039;[[build]]&amp;#039; by [[LinuxIntelEnv.Set]]&lt;br /&gt;
*** cws* - tools for manipulating [[CWS]] &lt;br /&gt;
*** deliver.pl - aliased to &amp;#039;[[deliver]]&amp;#039; by [[LinuxIntelEnv.Set]]&lt;br /&gt;
*** [[relocate]] - built tree relocation tool&lt;br /&gt;
*** [[linkoo]] - rapid devel. iteration tool&lt;br /&gt;
*** make_installer.pl - builds system packages&lt;br /&gt;
*** modules/ - perl tools for cws &amp;amp; installer code&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;inc/&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*** contains fragments common to all makefiles, particularly:&lt;br /&gt;
*** settings.mk - sets up common platform/compiler settings&lt;br /&gt;
*** target.mk - creates default target &amp;amp; rules.&lt;br /&gt;
*** unxlngi6.mk - gcc specific targets (cf. unxlngi4/5, unxlngppc, unxlngx4)&lt;br /&gt;
&lt;br /&gt;
[[Category:source directories]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Config_office&amp;diff=105793</id>
		<title>Config office</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Config_office&amp;diff=105793"/>
		<updated>2008-12-29T02:58:11Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it contains ==&lt;br /&gt;
&lt;br /&gt;
This directory manages the configuration of the OO.o source tree. In a &amp;#039;normal&amp;#039; project this would be expected to be in the toplevel source directory - however, due to a rather unfortunate initial repository setup, this is not possible.&lt;br /&gt;
&lt;br /&gt;
== Configure process ==&lt;br /&gt;
&lt;br /&gt;
The configure script is generated from configure.in by &amp;#039;autoconf&amp;#039; - when checking into a [[cws]] including this module it is best not to update the &amp;#039;configure&amp;#039; script since this creates cws merge problems for releng.&lt;br /&gt;
&lt;br /&gt;
When run the configure script does a load of system checks, and with the result generates &amp;#039;set_soenv&amp;#039; from &amp;#039;set_soenv.in&amp;#039; using the normal autotools substitution rules.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;set_soenv&amp;#039; is then run at the tail of configure, which does more checks, and finally builds [[LinuxIntelEnv.Set]] which contains the environment for this build. This freezes all the significant settings including PATH, LD_LIBRARY_PATH etc. The idea here is to allow this build to be repeated trivially, and to reduce unexpected environment related problems in subsequent builds.&lt;br /&gt;
&lt;br /&gt;
The configure script also creates &amp;#039;bootstrap&amp;#039; in the toplevel - a simple script that builds [[dmake]] - the tool which then is used to build the rest of the project.&lt;br /&gt;
&lt;br /&gt;
== Gotchas ==&lt;br /&gt;
&lt;br /&gt;
In many cases running &amp;#039;configure&amp;#039; when you have [[LinuxIntelEnv.Set]] sourced creates rather subtle problems; configuring from a clean shell is to be recommended.&lt;br /&gt;
&lt;br /&gt;
[[Category:source directories]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Source_code_directories&amp;diff=105792</id>
		<title>Source code directories</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Source_code_directories&amp;diff=105792"/>
		<updated>2008-12-29T02:57:35Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Below is a (somewhat terse) description of the various directories for OpenOffice source code.&lt;br /&gt;
&lt;br /&gt;
If you want to know the build order of the modules check out the [[Module_Build_Order]].&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || &amp;#039;&amp;#039;&amp;#039;Project hosting the module&amp;#039;&amp;#039;&amp;#039; || &amp;#039;&amp;#039;&amp;#039;Informations&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[agg]] ||[http://external.openoffice.org/ external] || antigrain geometry lib (from http://www.antigrain.com/), a software renderer used in canvas&lt;br /&gt;
|-&lt;br /&gt;
| [[animations]] ||[http://graphics.openoffice.org/ graphics]  || Containers for the css::animation UNO API, used in slideshow and sd&lt;br /&gt;
|-&lt;br /&gt;
| [[autodoc]] ||[http://tools.openoffice.org/ tools] ||html pages from c++, java, idl inline documentation&lt;br /&gt;
|-&lt;br /&gt;
| [[automation]] || || Hook for QA automation (TestTool)&lt;br /&gt;
|-&lt;br /&gt;
| [[avmedia]] ||[http://graphics.openoffice.org/ graphics] ||Audio/Video media implementation - requires a working Java Media Framework (JMF)&lt;br /&gt;
* currently can&amp;#039;t play streams only file-system URIs anyway.&lt;br /&gt;
|-&lt;br /&gt;
| [[basctl]] || || controls and dialogs - basic&lt;br /&gt;
|-&lt;br /&gt;
| [[basebmp]] || [http://gsl.openoffice.org  gsl]|| algorithms and data types for bitmap graphics (e.g. line and fill polygon scan conversion, bitmap format iterators, and a SalGraphics-compatible software renderer)&lt;br /&gt;
|-&lt;br /&gt;
| [[basegfx]] ||[http://graphics.openoffice.org/ graphics] || algorithms and data types for graphics (e.g. polygons, vectors, matrices and the like - see that used in canvas)&lt;br /&gt;
|-&lt;br /&gt;
| [[basic]] || || basic interpreter&lt;br /&gt;
|-&lt;br /&gt;
| [[OOoBean|bean]] ||[http://api.openoffice.org/ api] || office bean&lt;br /&gt;
|-&lt;br /&gt;
| [[beanshell]] ||[http://external.openoffice.org/ external] || java interpreter - so you can write java in command shell,&lt;br /&gt;
* interactive java -- good for prototyping /macros&lt;br /&gt;
* from http://www.beanshell.org/ with some patches&lt;br /&gt;
|-&lt;br /&gt;
| [[berkeleydb]] ||[http://external.openoffice.org/ external] || external library. http://www.sleepycat.com/products/db.shtml simple db - used for search in help and galleries&lt;br /&gt;
|-&lt;br /&gt;
| [[Framework/Modules/binfilter|binfilter]] ||[http://framework.openoffice.org/ framework] || [[StarOffice]] 5.2 compatibility layer, the UI and everything. Basically a little SO 5.2 inside OO.o. This is huge - avoid building it by giving &amp;#039;--disable-binfilter&amp;#039; on the configure line.&lt;br /&gt;
|-&lt;br /&gt;
| [[boost]] ||[http://external.openoffice.org/ external] || external (C++ template) library: http://boost.org/native&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Binary/Module/bridges|bridges]] || [http://udk.openoffice.org/ udk] || Bridges from various C++ ABIs, Java JNI, MS .Net to [[Uno/Binary|Binary Uno]]. Also implementation of the [[Uno]] Remote Protocol. And in ooo-build a bridge from Mono to [[Uno]] and back.&lt;br /&gt;
|-&lt;br /&gt;
| [[canvas]] || [http://gsl.openoffice.org  gsl] || new canvas implementation to improve rendering, various backends implement the new XCanvas API eg. cairo / DirectX&lt;br /&gt;
|-&lt;br /&gt;
| [[chart2]] ||[http://graphics.openoffice.org/ graphics] || new, improved chart implementation, arrived in OO.o 2.3&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/CLI/Modules/cli_ure|cli_ure]]  ||[http://udk.openoffice.org/ udk] || &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039;ommon &amp;#039;&amp;#039;&amp;#039;L&amp;#039;&amp;#039;&amp;#039;anguage &amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039;nfrastructure &amp;#039;&amp;#039;&amp;#039;U&amp;#039;&amp;#039;&amp;#039;no &amp;#039;&amp;#039;&amp;#039;R&amp;#039;&amp;#039;&amp;#039;untime &amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039;nvironment -- support assemblies and tools for the MS .Net (and Mono) [[Uno]] binding.&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Binary/Module/codemaker|codemaker]] ||[http://udk.openoffice.org/ udk] || [[Uno]] interface declaration/stub generators for [[Uno/Cpp|C++ Uno]] (headers), [[Uno/Java|Java Uno]] (class files), [[Uno/CLI|CLI (.Net / Mono) Uno]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div id=&amp;quot;configmgr&amp;quot;&amp;gt;[[configmgr]]&amp;lt;/div&amp;gt; || || the configuration database - UNO services and some tools&lt;br /&gt;
|-&lt;br /&gt;
| [[config_office]] ||[http://tools.openoffice.org/ tools] || build configs, configure scripts, autotools, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[connectivity]] ||[http://dba.openoffice.org/ dba] || database pieces, drivers, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[cosv]] ||[http://tools.openoffice.org/ tools] || &amp;quot;Common Services,&amp;quot; part of [[autodoc]]&lt;br /&gt;
|-&lt;br /&gt;
| [[cppcanvas]] || [http://gsl.openoffice.org  gsl]|| helper C++ classes for canvas, plus a GDIMetaFile-to-XCanvas converter&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Binary/Modules/CPPU|cppu]] ||[http://udk.openoffice.org/ udk] || [[Uno/Binary|Binary (read &amp;#039;C&amp;#039;) Uno]] runtime.&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Cpp/Module/CPPUhelper|cppuhelper]] ||[http://udk.openoffice.org/ udk] || [[Uno/Cpp|C++ Uno]] runtime, additionally helpers e.g. templates for implementing Uno components, bootstrapping stuff etc. - get Uno up &amp;amp; running.&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Binary/Module/CPPUtools|cpputools]] ||[http://udk.openoffice.org/ udk] || [[Uno/Binary|Binary Uno]] tools, like uno.exe, regcomp etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[crashrep]] || || reports crashes (Novell disabled that)&lt;br /&gt;
|-&lt;br /&gt;
| [[curl]] ||[http://external.openoffice.org/ external] || external library [http://curl.haxx.se curl] (a URL manipulation engine)&lt;br /&gt;
|-&lt;br /&gt;
| [[dbaccess]] ||[http://dba.openoffice.org/ dba] || data base access tools&lt;br /&gt;
|-&lt;br /&gt;
| [[default_images]] ||[http://external.openoffice.org/ external] || all images and resources&lt;br /&gt;
|-&lt;br /&gt;
| [[desktop]] || [http://framework.openoffice.org/ framework] || what used to be the desktop in SO5 - now the binary&lt;br /&gt;
|-&lt;br /&gt;
| [[dmake]] ||[http://tools.openoffice.org/ tools] || the dmake tool itself, built by running &amp;#039;bootstrap&amp;#039; after configure&lt;br /&gt;
|-&lt;br /&gt;
| [[dtrans]] || [http://gsl.openoffice.org  gsl] || clipboard abstraction - data transfer&lt;br /&gt;
|-&lt;br /&gt;
| [[embeddedobj]] ||[http://framework.openoffice.org/ framework] || Embedding objects&lt;br /&gt;
|-&lt;br /&gt;
| [[embedserv]] ||[http://framework.openoffice.org/ framework] || Embed OOo through OLE2&lt;br /&gt;
|-&lt;br /&gt;
| [[epm]] ||[http://external.openoffice.org/ external] || enhanced package manager- nasty hack for packaging&lt;br /&gt;
* not useful - but default build uses, every linux packager disables this&lt;br /&gt;
|-&lt;br /&gt;
| [[eventattacher]] || || how basic handles events -&lt;br /&gt;
|-&lt;br /&gt;
| [[expat]] ||[http://external.openoffice.org/ external] || external library with added UCS2 support, ... simple SAX parser&lt;br /&gt;
|-&lt;br /&gt;
| [[extensions_(source_code_module)|extensions]]||  || browser plugin, activex control, scanner bits&lt;br /&gt;
|-&lt;br /&gt;
| [[external]] ||[http://external.openoffice.org/ external] || placeholder for extra code needed to build&lt;br /&gt;
|-&lt;br /&gt;
| [[extras]] ||[http://installation.openoffice.org/ installation] || templates, clipart galleries, palettes, symbol font etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[fileaccess]] || || tiny: implements XSimpleFileAccess interface - that makes the UCB interfaces actually usable (via [[Uno]]) and more intuitive.&lt;br /&gt;
|-&lt;br /&gt;
| [[filter]] ||[http://framework.openoffice.org/ framework] || filter registration and some simple filters (also descriptions&lt;br /&gt;
|-&lt;br /&gt;
| [[forms]] || [http://gsl.openoffice.org  gsl] || embedded forms control and pieces (design forms in documents, fields and database driven) &lt;br /&gt;
|-&lt;br /&gt;
| [[fpicker]] || [http://gsl.openoffice.org  gsl] || native file pickers for Unix and Windows (file open dialog) GTK+, KDE, Windows &lt;br /&gt;
|-&lt;br /&gt;
| [[Framework]] ||[http://framework.openoffice.org/ framework] || UI rewrite, toolbars, menus, [[Uno]] stuff, including accelerators &amp;amp; interaction, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[External/Modules/freetype|freetype]]||[http://external.openoffice.org/ external]  || Font rasterrizer.&lt;br /&gt;
|-&lt;br /&gt;
| [[goodies]] ||[http://graphics.openoffice.org/ graphics] || graphics filters, 3d and 2d graqphics pieces&lt;br /&gt;
|-&lt;br /&gt;
| [[helpcontent2]] ||[http://installation.openoffice.org/ installation]  || for OpenOffice.org 2 - english + other languages help content&lt;br /&gt;
|-&lt;br /&gt;
| [[hsqldb]] ||[http://external.openoffice.org/ external] || external library. http://hsqldb.org/ Java database engine. Default database format for OpenOffice.org&lt;br /&gt;
|-&lt;br /&gt;
| [[hwpfilter]] ||[http://sw.openoffice.org/ sw] || filter for a word processor file format popular in Korea. (Hangul Word Processor)&lt;br /&gt;
|-&lt;br /&gt;
| [[i18npool]] ||[http://l10n.openoffice.org/ l10n] || internationalization, counting, calendaring, complex text layout&lt;br /&gt;
|-&lt;br /&gt;
| [[i18nutil]] ||[http://l10n.openoffice.org/ l10n] || small bits of internationalization&lt;br /&gt;
|-&lt;br /&gt;
| [[icc]] ||[http://external.openoffice.org/ external] || External library used to build the sRGB profile for PDF/A-1a export.  http://www.color.org/ with patches. Generated and used at build time only. More details can be found in icc/README.&lt;br /&gt;
|-&lt;br /&gt;
| [[ICU|icu]] ||[http://external.openoffice.org/ external] || external library. International  Components for Unicode, http://www.icu-project.org/ with patches.&lt;br /&gt;
|-&lt;br /&gt;
| [[idl]] ||[http://framework.openoffice.org/ framework] || SvIDL Compiler&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Binary/Module/idlc|idlc]] ||[http://udk.openoffice.org/ udk] || The [[Uno/Specifications/IDL|Uno IDL]] compiler.&lt;br /&gt;
|-&lt;br /&gt;
| [[instsetoo_native]] ||[http://installation.openoffice.org/ installation]  || install set for oo, native installers -&lt;br /&gt;
|-&lt;br /&gt;
| [[Util/Module/IO|io]] || || Provides socket and pipe acceptors / connectors, as well as text input / output streams.&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Java/Module/javaunohelper|javaunohelper]]||[http://udk.openoffice.org/ udk]  || [[Uno/Java|Java Uno]] components implementation helpers.&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Java/Module/JURT|jurt]]||[http://udk.openoffice.org/ udk]  || &amp;#039;&amp;#039;&amp;#039;J&amp;#039;&amp;#039;&amp;#039;ava &amp;#039;&amp;#039;&amp;#039;U&amp;#039;&amp;#039;&amp;#039;no &amp;#039;&amp;#039;&amp;#039;R&amp;#039;&amp;#039;&amp;#039;un&amp;#039;&amp;#039;&amp;#039;t&amp;#039;&amp;#039;&amp;#039;ime - Basically [[Uno/Java|Java Uno]].&lt;br /&gt;
|-&lt;br /&gt;
| [[Util/Module/JUT|jut]] ||[http://udk.openoffice.org/ udk] || &amp;#039;&amp;#039;&amp;#039;J&amp;#039;&amp;#039;&amp;#039;ava &amp;#039;&amp;#039;&amp;#039;U&amp;#039;&amp;#039;&amp;#039;no &amp;#039;&amp;#039;&amp;#039;T&amp;#039;&amp;#039;&amp;#039;ools - Tools for [[Uno/Java|Java Uno]].&lt;br /&gt;
|-&lt;br /&gt;
| [[jvmaccess]], [[jvmfwk]] ||[http://udk.openoffice.org/ udk] || wrappers so you can use all the Java Runtime Environments with their slightly incompatible APIs with ease. Hah.&lt;br /&gt;
|-&lt;br /&gt;
| [[libwpd]] || || external library. Not modified. http://libwpd.sourceforge.net/ wordperfect filter - SAX api - emits callbacks when things happen&lt;br /&gt;
|-&lt;br /&gt;
| [[libxmlsec]] || || external library. (Still) heavily patched. http://www.aleksey.com/xmlsec/ to do XML signing, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[lingucomponent]] ||[http://lingucomponent.openoffice.org/ lingucomponent] || spellcheck, hyphenator, thesaurus, ...&lt;br /&gt;
|-&lt;br /&gt;
| [[linguistic]] ||[http://sw.openoffice.org/ sw] || This component manages all registered linguistic module implementations for spellchecker, hyphenator and thesaurus.&lt;br /&gt;
|-&lt;br /&gt;
| [[lpsolve]] || || external library that provides a mixed integer linear programming (MILP) solver, see http://lpsolve.sourceforge.net&lt;br /&gt;
|-&lt;br /&gt;
| [[mathmldtd]] || || MathMLDTD to implement XML Math format, see http://www.w3.org/TR/REC-MathML&lt;br /&gt;
|-&lt;br /&gt;
| [[msfontextract]] || || external library. http://www.kyz.uklinux.net/libmspack/ for use in FontOOo (unpacking the downloaded Microsoft fonts (webfont))&lt;br /&gt;
|-&lt;br /&gt;
| [[nas]] ||[http://external.openoffice.org/ external] || The Network Audio System (NAS), An Audio Protocol For Networks. See http://radscan.com/nas.html&lt;br /&gt;
|-&lt;br /&gt;
| [[neon]] ||[http://external.openoffice.org/ external] || web library to help deal with WebDAV or other protocols&lt;br /&gt;
|-&lt;br /&gt;
| [[netbeans_integration]] ||  || java?&lt;br /&gt;
|-&lt;br /&gt;
| [[np_sdk]] ||[http://external.openoffice.org/ external] || Netscape Plugin SDK. Header to build Mozilla plugins.&lt;br /&gt;
|-&lt;br /&gt;
| [[odk]] ||[http://api.openoffice.org/ api] || office development kit - implements the first step on the way to the OpenOffice.org SDK tarball&lt;br /&gt;
|-&lt;br /&gt;
| [[offapi]] ||[http://api.openoffice.org/ api] || all of the [[Uno/Specification/IDL|Uno IDL]] files except those in [[#udkapi|udkapi]] - i.e. the interfaces that are specific to the OpenOffice.org application.&lt;br /&gt;
|-&lt;br /&gt;
| [[officecfg]] || || the schema and default settings for the [[#configmgr|OpenOffice.org configuration database]]&lt;br /&gt;
|-&lt;br /&gt;
| [[offuh]] ||[http://api.openoffice.org/ api] || Tiny module to build the generate the [[Uno/Cpp|C++ Uno]] headers.&lt;br /&gt;
|-&lt;br /&gt;
| [[oocustomimages]] || || themes, custom themes&lt;br /&gt;
|-&lt;br /&gt;
| [[oo_extensions]] || [http://extensions.openoffice.org/ extensions] || generic OpenOffice.org extensions module &lt;br /&gt;
|-&lt;br /&gt;
| [[OOX|oox]]||  || [[OpenXML]] parser&lt;br /&gt;
|-&lt;br /&gt;
| [[packages]] ||[http://xml.openoffice.org/ xml] || reading and writing zips&lt;br /&gt;
|-&lt;br /&gt;
| [[padmin]] || [http://gsl.openoffice.org  gsl] || printer administration dialog - used lpr - obsolete with CUPS and fontconfig, but still used for some things&lt;br /&gt;
|-&lt;br /&gt;
| [[External/Modules/portaudio|portaudio]] ||[http://external.openoffice.org/ external] || an audio output library for various sound setups.&lt;br /&gt;
|-&lt;br /&gt;
| [[postprocess]] || || Postprocessing and checking of files delivered by other modules. This module has to be the last one before creating install sets in module &amp;#039;instset_native&amp;#039;.&lt;br /&gt;
|-&lt;br /&gt;
| [[psprint]] || [http://gsl.openoffice.org  gsl] || postscript print - unix only - implements font discovery, interface to CUPS / lpr, query and basic PS - dump PS on print - actual PS rendering inside vcl&lt;br /&gt;
|-&lt;br /&gt;
| [[psprint_config]] || || ppds for use by psprint when not using CUPS&lt;br /&gt;
|-&lt;br /&gt;
| [[pyuno]] ||[http://udk.openoffice.org/ udk] || [[Uno]] binding for python&lt;br /&gt;
|-&lt;br /&gt;
| [[qadevOOo]] || || qa testsuite&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Binary/Module/rdbmaker|rdbmaker]] ||[http://udk.openoffice.org/ udk] || makes registries for openoffice for storing type data, etc./?&lt;br /&gt;
|-&lt;br /&gt;
| [[readlicense_oo]] || || reading oo license when starting up&lt;br /&gt;
|-&lt;br /&gt;
| [[regexp]] || || regular expression matching&lt;br /&gt;
|-&lt;br /&gt;
| [[registry]] ||[http://udk.openoffice.org/ udk] || registry reading, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Binary/Module/remotebridges|remotebridges]] ||[http://udk.openoffice.org/ udk] || [[Uno]] services dealing with interprocess bridges.&lt;br /&gt;
|-&lt;br /&gt;
| [[rhino]] || || java script engine/interpreter&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Java/Module/ridljar|ridljar]] ||[http://udk.openoffice.org/ udk] || Generators [[Uno/Java|Java Uno]] types (like [[offuh]]).&lt;br /&gt;
|-&lt;br /&gt;
| [[rsc]] || [http://gsl.openoffice.org  gsl] || resource compiler - turns resource descriptions src and hrc files scattered throughout.&lt;br /&gt;
|-&lt;br /&gt;
| [[rvpapi]] || [http://gsl.openoffice.org  gsl] || Obsolete.&lt;br /&gt;
|-&lt;br /&gt;
| [[sablot]] ||[http://external.openoffice.org/ external] || external library. yet another xslt implementation in the tree (in C++)&lt;br /&gt;
|-&lt;br /&gt;
| [[Porting/Module/SAL|sal]] || [http://porting.openoffice.org  porting] || system abstraction layer - rtl, osl and sal (rtl - platform independent strings, osl - platform specific stuff, threads, dynamic loading, process, ipc, etc.). Exports only C API and some inline-methods-only C++ API&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Cpp/Module/SALhelper|salhelper]] ||[http://udk.openoffice.org/ udk]  || C++ helpers to make use of sal easier&lt;br /&gt;
|-&lt;br /&gt;
| [[Util/Module/sandbox|sandbox]] || || Generic sandboxing, e.g. used for Java applet embedding stuff. Totally useless without a Sun JDK. Might be obsolet.&lt;br /&gt;
|-&lt;br /&gt;
| [[sane]] ||[http://external.openoffice.org/ external] || external scanner library&lt;br /&gt;
|-&lt;br /&gt;
| [[sax]] ||[http://xml.openoffice.org/ xml] || wrapper around expat using [[Uno]].&lt;br /&gt;
|-&lt;br /&gt;
| [[sc]] ||[http://sc.openoffice.org/ sc] || calc - the Spreadsheet core&lt;br /&gt;
|-&lt;br /&gt;
| [[scaddins]] || || extra functions for calc&lt;br /&gt;
|-&lt;br /&gt;
| [[scp2]] ||[http://installation.openoffice.org/ installation]  || script particles - being rewritten for oo2. all of installation was driven by starbasic - this is now in instsetoo-native&lt;br /&gt;
|-&lt;br /&gt;
| [[scripting]] ||[http://framework.openoffice.org/ framework] || scripting framework - for java, python, etc. to play together and uses UNO&lt;br /&gt;
|-&lt;br /&gt;
| [[scsolver]] || || [[Optimization Solver]] for Calc&lt;br /&gt;
|-&lt;br /&gt;
| [[sd]] ||[http://graphics.openoffice.org/ graphics] || Impress and Draw components. Think of Impress as hack on top of Draw.&lt;br /&gt;
|-&lt;br /&gt;
| [[sdext]] ||[http://graphics.openoffice.org/ graphics] || Extensions for the Impress and Draw applications.&lt;br /&gt;
|-&lt;br /&gt;
| [[sdk_oo]] ||[http://api.openoffice.org/ api]  || software development kit OO - implements the second step on the way to the OpenOffice.org SDK tarball (see odk)&lt;br /&gt;
|-&lt;br /&gt;
| [[setup-native]] ||[http://installation.openoffice.org/ installation]  || ?&lt;br /&gt;
|-&lt;br /&gt;
| [[sfx2]] ||[http://framework.openoffice.org/ framework] || gui code, much of which is now deprecated - list of documents open would be tracked - raw C++ code; gutsy core of document management and loading.&lt;br /&gt;
|-&lt;br /&gt;
| [[shell]] || [http://gsl.openoffice.org  gsl] || system helpers - launching URI, recently used files, system integration, external mailer support, gconf integration etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[sj2]]  || || Java Applet support.&lt;br /&gt;
|-&lt;br /&gt;
| [[slideshow]] ||[http://graphics.openoffice.org/ graphics] || new impress slideshow engine in OO.o 2.0&lt;br /&gt;
|-&lt;br /&gt;
| [[smoketestoo_native]] ||[http://installation.openoffice.org/ installation]  || Test code to launch each component for a smoke test.&lt;br /&gt;
|-&lt;br /&gt;
| [[sndfile]] ||[http://external.openoffice.org/ external] || soundfile - library for loading all kinds of sound - external lib&lt;br /&gt;
|-&lt;br /&gt;
| [[so3]] ||  || StarObject (v3)&lt;br /&gt;
|-&lt;br /&gt;
| [[solenv]] ||[http://tools.openoffice.org/ tools] || make and build infrastructure - solar (think: Sun or Star Division) environment&lt;br /&gt;
|-&lt;br /&gt;
| [[soltools]] || || all sorts of build tools&lt;br /&gt;
|-&lt;br /&gt;
| [[solver]] || || dumping ground for binaries as object output&lt;br /&gt;
|-&lt;br /&gt;
| [[sot]] || || compound file storage tools code (?)&lt;br /&gt;
|-&lt;br /&gt;
| [[starmath]] ||[http://sw.openoffice.org/ sw] || formula editor&lt;br /&gt;
|-&lt;br /&gt;
| [[External/Modules/stlport|stlport]] ||  || external library. STL implementation, from the days when compilers had crappy implementations.&lt;br /&gt;
|-&lt;br /&gt;
| [[Uno/Binary/Module/STOC|stoc]] ||[http://udk.openoffice.org/ udk]|| Core Components for [[Uno/Binary|Binary Uno]] (e.g. registry access, reflection, introspection).&lt;br /&gt;
|-&lt;br /&gt;
| [[store]] || || Storage implementations, used by [[Uno]] registries.&lt;br /&gt;
|-&lt;br /&gt;
| [[svtools]] ||[http://framework.openoffice.org/ framework] || useful code, common dialogs, file and print dialogs, wizards, vcl filters, lots of helper code&lt;br /&gt;
|-&lt;br /&gt;
| [[svx]] ||[http://graphics.openoffice.org/ graphics] || Graphics related helper code - xoutdev - rendering - This is where a lot of work would happen to move to the canvas.  svdraw - transparent gradient stuff. Lot of the Draw and Impress code is in this module. Part if the PPT binary importer is in there too.&lt;br /&gt;
|-&lt;br /&gt;
| [[sw]] ||[http://sw.openoffice.org/ sw] || writer - the word processing core&lt;br /&gt;
|-&lt;br /&gt;
| [[sysui]] || [http://gsl.openoffice.org  gsl] || .desktop files for different distros&lt;br /&gt;
|-&lt;br /&gt;
| [[toolkit]] || [http://gsl.openoffice.org  gsl]  || abstract windowing thing- [[Uno]] implementations of windows stuff - so can be used from basic&lt;br /&gt;
|-&lt;br /&gt;
| [[tools]] ||[http://framework.openoffice.org/ framework] || predates sal - string etc. functions, URL manipulation, stream stuff, polygons, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[transex3]] ||[http://l10n.openoffice.org/ l10n] || translation tools&lt;br /&gt;
|-&lt;br /&gt;
| [[twain]] || || Windows scanner support&lt;br /&gt;
|-&lt;br /&gt;
| [[ucb]] || || &amp;#039;&amp;#039;&amp;#039;U&amp;#039;&amp;#039;&amp;#039;niversal &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039;ontent &amp;#039;&amp;#039;&amp;#039;B&amp;#039;&amp;#039;&amp;#039;roker (has ucp) which do things like convert files to strings in content broker world.&lt;br /&gt;
|-&lt;br /&gt;
| [[ucbhelper]] || || C++ wrappers to help make using content providers easy&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div id=&amp;quot;udkapi&amp;quot;&amp;gt;[[udkapi]]&amp;lt;/div&amp;gt; ||[http://api.openoffice.org/ api] || URE API definition - [[Uno/Specification/IDL|Uno IDL]] files&lt;br /&gt;
|-&lt;br /&gt;
| [[udm]] ||[http://tools.openoffice.org/ tools] || part of [[autodoc]]&lt;br /&gt;
|-&lt;br /&gt;
| [[unixODBC]] || || external lib&lt;br /&gt;
|-&lt;br /&gt;
| [[unocontrols]]|| [http://gsl.openoffice.org  gsl] || separate process and thread for progress bars, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[unoil]] ||[http://udk.openoffice.org/ udk][http://api.openoffice.org/ api] || Like offuh for [[Uno/Java|Java Uno]] - Generates Java class files from OOo application Uno types.&lt;br /&gt;
|-&lt;br /&gt;
| [[unotools]] ||[http://udk.openoffice.org/ udk] || helpers for C++ use of UNO&lt;br /&gt;
|-&lt;br /&gt;
| [[unoxml]] ||[http://framework.openoffice.org/ framework] || [[Uno]] wrappers for XML services&lt;br /&gt;
|-&lt;br /&gt;
| [[unzip]] ||  || used by installer&lt;br /&gt;
|-&lt;br /&gt;
| [[ure]] ||[http://udk.openoffice.org/ udk] || beginnings of standalone UNO distribution foo.&lt;br /&gt;
|-&lt;br /&gt;
| [[uui]] || || An Interaction Handler for the UCB.  It uses VCL to visualize and handle interaction requests, for eg. authentication dialogs for file operations.&lt;br /&gt;
|-&lt;br /&gt;
| [[vcl]] || [http://gsl.openoffice.org  gsl] || base windowing toolkit abstraction Visual Class Libraries, and graphical output layer - includes backends for unix &amp;amp; Win32&lt;br /&gt;
|-&lt;br /&gt;
| [[vigra]] || || Template framework from [http://kogs-www.informatik.uni-hamburg.de/~koethe/vigra/ here]. VIGRA stands for &amp;quot;Vision with Generic Algorithms&amp;quot;. Used from [[basebmp]].&lt;br /&gt;
|-&lt;br /&gt;
| [[vos]] ||[http://udk.openoffice.org/ udk] || (Virtual Object System) - deprecated but still used, lots of sal like stuff&lt;br /&gt;
|-&lt;br /&gt;
| [[wizards]] ||[http://installation.openoffice.org/ installation]  || java wizards for db setup, importing, tutorials, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[writerperfect]]||[http://framework.openoffice.org/ framework] || word perfect filter - wrapper for libwpd&lt;br /&gt;
|-&lt;br /&gt;
| [[X11_extensions]] || || headers for XRender support&lt;br /&gt;
|-&lt;br /&gt;
| [[xalan]] ||[http://external.openoffice.org/ external] || external library. java xslt implementation&lt;br /&gt;
|-&lt;br /&gt;
| [[xmerge]] ||[http://xml.openoffice.org/ xml] || The XMerge SDK provides a Java-based framework for converting documents between different formats using conversion plugins to read and write each format. See http://xml.openoffice.org/xmerge&lt;br /&gt;
|-&lt;br /&gt;
| [[xml2cmp]] || || Comes with the OO SDK. xml2cmp is launched in general by a makefile to extract types from a xml file&lt;br /&gt;
|-&lt;br /&gt;
| [[xmlhelp]] || || Help reader and viewer for online help&lt;br /&gt;
|-&lt;br /&gt;
| [[xmloff]] ||[http://xml.openoffice.org/ xml] || OpenDocument import / export filter.&lt;br /&gt;
|-&lt;br /&gt;
| [[xmlscript]] || || Implements XML dialogs serialization. &lt;br /&gt;
|-&lt;br /&gt;
| [[xmlSearch]] ||  || ?&lt;br /&gt;
|-&lt;br /&gt;
| [[xmlSecurity]] ||[http://xml.openoffice.org/ xml] || Document signing&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Source directories]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Environment_Variables&amp;diff=105791</id>
		<title>Environment Variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Environment_Variables&amp;diff=105791"/>
		<updated>2008-12-29T02:57:09Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenOffice.org runtime environment variables ==&lt;br /&gt;
&lt;br /&gt;
This page documents environment variables you can export in your environment to change the OpenOffice.org behaviour at runtime. It does not include variables used by the configuration system, or by the build system in general.&lt;br /&gt;
&lt;br /&gt;
==What&amp;#039;s an environment variable, Where do I find them and how do I edit them?==&lt;br /&gt;
&lt;br /&gt;
Environment variables are key-value pairs stored on your system. The operating system / the shell is responsible for managing and make them visible for all applications.&lt;br /&gt;
&lt;br /&gt;
The user can change values of those variables, completely undefine or define new variables.&lt;br /&gt;
&lt;br /&gt;
In the following, managing variables is explained on different operating systems:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Linux Bash Shell&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Display all set variables with &amp;#039;export&amp;#039;&lt;br /&gt;
** Set value: &amp;#039;export varname=&amp;quot;new value of variable&amp;quot;&amp;#039; Embrace the new value with inverted commas if they contain spaces.&lt;br /&gt;
** Refer to value: &amp;#039;echo $varname&amp;#039; Echo prints out the variable contents of varname.  Referring is indicated by a preceeding dollar sign.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Windows XP&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Display all set variables with &amp;#039;set&amp;#039;&lt;br /&gt;
** Set value: &amp;#039;set varname=&amp;quot;new value of variable&amp;quot;&lt;br /&gt;
** Refer to value: &amp;#039;echo %varname%&amp;#039;&lt;br /&gt;
** Set variable through the GUI Interface:&lt;br /&gt;
*** Start - Settings - Control Panel - System - Advanced - Environment Variables&lt;br /&gt;
*** You can manage your user and system variables independently.&lt;br /&gt;
&lt;br /&gt;
== Environment variables for users ==&lt;br /&gt;
&lt;br /&gt;
Variables that users could use, or should know about.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Users&amp;quot; includes people developping applications based on OOo (macros, UNO applications).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
!| OS&lt;br /&gt;
!| Belongs to&lt;br /&gt;
!| Description&lt;br /&gt;
|-&lt;br /&gt;
| AUDIODEV&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Tells which audio device to use if your sound support is of type /dev/audio.&lt;br /&gt;
|-&lt;br /&gt;
| AUDIOSERVER&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Tells the server to connect to if your sound support is of type rptp.&lt;br /&gt;
|-&lt;br /&gt;
| AVOID_BURN_IN_FOR_GALLERY_THEME&lt;br /&gt;
||all &lt;br /&gt;
||gallery&lt;br /&gt;
||When putting shapes into the gallery, normally style-governed attributes are converted to hard attributes and stored at the gallery object. If you want to create your own custom gallery, whose objects should adapt to style changes, use this variable. &lt;br /&gt;
|-&lt;br /&gt;
| DISPLAY&lt;br /&gt;
|| unx&lt;br /&gt;
|| system&lt;br /&gt;
|| X11 display string (ex &amp;quot;localhost:0&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| GALLERY_ENABLE_ID_DIALOG&lt;br /&gt;
||all &lt;br /&gt;
||gallery &lt;br /&gt;
||Adds a new menu elemet to the Gallery context menu to assing themes with IDs. IDs are added in the source when you want to create localized gallery in build time.&lt;br /&gt;
|-&lt;br /&gt;
| GALLERY_SHOW_HIDDEN_THEMES&lt;br /&gt;
||all &lt;br /&gt;
||gallery &lt;br /&gt;
||Show the hidden gallery element like AutoShape, Web, Fontwork gallery. You can add more element by selecting the object, press CTRL + click and drag it into gallery. &lt;br /&gt;
|-&lt;br /&gt;
| GALLERY_SHOW_PRIVATE_TITLE&lt;br /&gt;
||all &lt;br /&gt;
||gallery&lt;br /&gt;
||Shows the internal gallery title, instead of the translated UI name. &lt;br /&gt;
|-&lt;br /&gt;
| HOME&lt;br /&gt;
|| unx&lt;br /&gt;
|| system&lt;br /&gt;
|| User&amp;#039;s personal directory&lt;br /&gt;
|-&lt;br /&gt;
| LANG&lt;br /&gt;
|| unx&lt;br /&gt;
|| system&lt;br /&gt;
|| This variable determines the locale category for native language, local customs and coded character set in the absence of the LC_ALL and other LC_* (LC_COLLATE, LC_CTYPE, LC_MESSAGES, ...) environment variables. This can be used by applications to determine the language to use for error messages and instructions, collating sequences, date formats, and so forth. See environ(5) for details.&lt;br /&gt;
|-&lt;br /&gt;
| LC_ALL&lt;br /&gt;
|| unx&lt;br /&gt;
|| system&lt;br /&gt;
|| This variable determines the values for all locale categories. The value of the LC_ALL environment variable has precedence over any of the other environment variables starting with LC_ (LC_COLLATE, LC_CTYPE, LC_MESSAGES, ...) and the LANG environment variable. See environ(5) for details.&lt;br /&gt;
|-&lt;br /&gt;
| LC_COLLATE&lt;br /&gt;
|| unx&lt;br /&gt;
|| system&lt;br /&gt;
|| This variable determines the locale category for character collation. It determines collation information for regular expressions and sorting, including equivalence classes and multi-character collating elements. See environ(5) for details.&lt;br /&gt;
|-&lt;br /&gt;
| LC_CTYPE&lt;br /&gt;
|| unx&lt;br /&gt;
|| system&lt;br /&gt;
|| This variable determines the locale category for character handling functions, such as tolower(), toupper() and isalpha(). This environment variable determines the interpretation of sequences of bytes of text data as characters (for example, single- as opposed to multi-byte characters), the classification of characters (for example, alpha, digit, graph) and the behaviour of character classes. See environ(5) for details.&lt;br /&gt;
|- &lt;br /&gt;
| LC_MESSAGES&lt;br /&gt;
|| unx&lt;br /&gt;
|| system&lt;br /&gt;
|| This variable determines the locale category for processing affirmative and negative responses and the language and cultural conventions in which messages should be written. See environ(5) for details.&lt;br /&gt;
|-&lt;br /&gt;
| MOZILLA_CERTIFICATE_FOLDER&lt;br /&gt;
|| unx &lt;br /&gt;
|| system&lt;br /&gt;
|| Specify where digital certificates detection should look for, override auto detection in mozilla/firefox/thunderbird&amp;#039;s user profile path.&lt;br /&gt;
|-&lt;br /&gt;
| OOO_CALC_USE_ENGLISH_FORMULAS&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| &amp;#039;&amp;#039;&amp;#039;Experimental (!)&amp;#039;&amp;#039;&amp;#039; If set to &amp;#039;&amp;#039;1&amp;#039;&amp;#039; or &amp;#039;&amp;#039;Yes&amp;#039;&amp;#039; (or any other value starting with &amp;#039;&amp;#039;y&amp;#039;&amp;#039;) the UI uses English function names and decimal separator in spreadsheet formulas, and only in formulas, cell input and displayed values are not affected. Since milestone DEV300_m2.&lt;br /&gt;
|-&lt;br /&gt;
| OOO_FORCE_DESKTOP&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Override the desktop detection (also implies usage of the appropriate plugin, see SAL_USE_VCLPLUGIN).  Possible values: &amp;quot;kde&amp;quot; (KDE), &amp;quot;gnome&amp;quot; (Gnome), &amp;quot;none&amp;quot; (other)&lt;br /&gt;
|-&lt;br /&gt;
| SAL_ACCESSIBILITY_ENABLED&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Set to nonempty value enforce accessibility bridging.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_DISABLE_OWN_IM_STATUS&lt;br /&gt;
|| solaris&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Set to nonempty value to disable OOo displaying an input method status window.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_ENABLE_NATIVE_XFONTS&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| 0 will disable OOo&amp;#039;s use of native X11 fonts&lt;br /&gt;
|-&lt;br /&gt;
| SAL_USE_VCLPLUGIN&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| The VCL plugin to use.  Possible values: &amp;quot;kde&amp;quot; (KDE) or &amp;quot;gtk&amp;quot; (Gnome) or &amp;quot;gen&amp;quot; (generic X11)&lt;br /&gt;
|-&lt;br /&gt;
| SAL_DISABLE_NATIVE_ALPHA&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| When set, disables usage of the new system-level alpha rendering. Use this if e.g. your Xrender implementation is flaky.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_DISABLE_SYNCHRONOUS_PRINTER_DETECTION&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| If set to nonempty value disables synchronous printer detection. This can help on startup e.g. if your CUPS server is very slow.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_DECIMALSEP_ENABLED&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Set to any value to force localized decimal separator in vcl settings.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_NOOPENGL&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Disables usage of OpenGL if set to &amp;quot;true&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_VISUAL&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Explicitly set the X11 visual id to use. See xdpyinfo(1) for information on available X11 visuals and the current default visual. There are only some very rare cases where an X11 server would offer multiple visuals and the default visual would not be suitable for use with OOo. But in these cases this variable provides a method to override the default visual for OOo.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_WHEELLINES&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Specifies the number of lines a wheel mouse event will scroll. Default is 3 lines. Setting this to something larger than 10 results in page-wise scrolling.&lt;br /&gt;
|-&lt;br /&gt;
| SystemRoot&lt;br /&gt;
|| win&lt;br /&gt;
|| system&lt;br /&gt;
|| OS specific variable pointing to OS System Directory. If not set external UNO communication to the OOo process will not work. This is relevant when using OOo as component in other applications, for example.&lt;br /&gt;
|-&lt;br /&gt;
| USE_XOPENIM&lt;br /&gt;
|| Solaris &lt;br /&gt;
|| ooo&lt;br /&gt;
|| Force use of XOpenIM instead of XvaOpenIM. Changes behaviour of X11 input method (used in generic and kde vcl plugin).&lt;br /&gt;
|-&lt;br /&gt;
| SAL_USEINPUTMETHOD&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| set to empty value to disable internationalized input (used in generic and kde vcl plugin).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Environment variables for OOo developers == &lt;br /&gt;
&lt;br /&gt;
For testing, debugging, getting system information, etc.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
!| OS&lt;br /&gt;
!| Belongs to&lt;br /&gt;
!| Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div id=&amp;quot;CFG_LOGFILE&amp;quot;&amp;gt;CFG_LOGFILE&amp;lt;/div&amp;gt;&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Is used by the sample configuration logger implementation from [[Source code directories#configmgr|configmgr]]/source/workben/logger. This logger service can be used to get diagnostic output from the configuration services. By default that logger logs to stderr. If CFG_LOGFILE is set to a file name or path, the log output is redirected there.&lt;br /&gt;
|-&lt;br /&gt;
| CFG_LOGLEVEL&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Is used by the sample configuration logger implementation (see [[#CFG_LOGFILE|CFG_LOGFILE]]) to control how much detail should be logged. See API documentation for com.sun.star.util.logging.LogLevel [http://api.openoffice.org/docs/common/ref/com/sun/star/util/logging/LogLevel.html] for available values. Only numeric values are accepted. Default is to log messages from WARNING(=900) and up. Use lower numbers for more detail.&lt;br /&gt;
|-&lt;br /&gt;
| DISABLE_SAL_DBGBOX&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Disable the OSL assertion dialogs for the non-product builds&lt;br /&gt;
|-&lt;br /&gt;
| ENVCFGFLAGS&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Will be deprecated or obsoleted soon! Controls an older trace output facility in [[Source code directories#configmgr|configmgr]] that is active only in non-product builds or debug versions of the library. Has a rather obscure syntax. &lt;br /&gt;
|-&lt;br /&gt;
| help_debug&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Enables additional debug facilities of the help system. In particular, if you press Shift-F1 and hover over an element in the OOo UI, the tooltip will now show you the help id of the element, and the help module where its help text is looked up.&lt;br /&gt;
|-&lt;br /&gt;
| OOO_CALC_GENPARCLASSDOC&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| If Calc&amp;#039;s sc/source/core/tool/parclass.cxx was compiled with OSL_DEBUG_LEVEL defined &amp;gt; 1 and this variable is set, generate Calc&amp;#039;s parameter classification documentation to stdout, similar to what&amp;#039;s available at http://specs.openoffice.org/calc/compatibility/cac/parameter_classification.txt  Available since SRC680_m67.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;OOO_DISABLE_RECOVERY&amp;lt;/b&amp;gt;&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo-build&lt;br /&gt;
|| If set this stops the recovery dialog prompting you as OO.o starts up - instead the recovery files are just silently accumulated.&lt;br /&gt;
|-&lt;br /&gt;
| OOO_ENABLE_LOCALE_DATA_CHECKS&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Check locale data in product builds. For a full description see comment in i18npool/source/localedata/data/locale.dtd  Available since SRC680_m109.&lt;br /&gt;
|-&lt;br /&gt;
| OOO_FORCE_SYSALLOC&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo-build&lt;br /&gt;
|| If set this disables the internal OO.o allocators, in favour of the system allocators - this means it is possible to get useful valgrind data out of a production build.&lt;br /&gt;
|-&lt;br /&gt;
| PROT_REMOTE&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Set the file name prefix for logging in bridges/remote modules&lt;br /&gt;
|-&lt;br /&gt;
| PROT_REMOTE_FAST&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Keep the logging file always open for logging in bridges/remote modules&lt;br /&gt;
|-&lt;br /&gt;
| PROT_REMOTE_ACTIVATE&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| If existing in env activate logging in bridges/remote modules&lt;br /&gt;
|-&lt;br /&gt;
| U_RBBIDEBUG&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| For testing the &amp;quot;rule based break iterator&amp;quot; for ICU&lt;br /&gt;
|-&lt;br /&gt;
| SAL_ANTIALIAS_DISABLE&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Disables all AA - useful for debugging&lt;br /&gt;
|-&lt;br /&gt;
| SAL_DISABLE_BITMAPS_OPTS&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Disables a relatively new templatized fast-path for outputting bitmaps (setting the variable reverts to the old, slow method)&lt;br /&gt;
|-&lt;br /&gt;
| SAL_DISABLE_STACKING_CHECK&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Disables selecting events on the window manager&amp;#039;s window.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_ENABLE_GLX_XFREE4&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| If set enables usage of OpenGL extension on XFree &amp;gt;= 4.0 servers &lt;br /&gt;
|-&lt;br /&gt;
| SAL_FLOATWIN_NOAPPFOCUSCLOSE&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Set to nonempty value to prevent floating windows from closing if the application loses focus.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_HIGHPRIORITY_REPAINT&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo &lt;br /&gt;
|| Forces quasi-synchronous paints if set. Only known use case: automated screenshots.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_IGNOREXERRORS&lt;br /&gt;
|| unix&lt;br /&gt;
|| ooo &lt;br /&gt;
|| if set X window system errors are ignored by soffice.bin (Use only if you know what you do. Handle with care!)&lt;br /&gt;
|-&lt;br /&gt;
| SAL_NO_NWF&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Set to nonempty value to disable native widget rendering. Widgets will be painted with the generic vcl methods.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_PROPERTIES&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| If set contains a bitfield activating various bug Xserver bug workarounds. Not very useful nowadays.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_RTL_ENABLED&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo &lt;br /&gt;
|| Unconditionally enable Right-To-Left layout of UI elements independently from language/script used.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_SYNCHRONIZE&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Reports X server errors on the calls that made them rather than asynchronously - vital for X debugging.&lt;br /&gt;
|-&lt;br /&gt;
| STAR_RESOURCEPATH&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| resource files are searched in ${STAR_RESOURCEPATH} instead of the &amp;quot;resource&amp;quot; subdirectory next to the tools library&lt;br /&gt;
|-&lt;br /&gt;
| STAROFFICE_USERTYPE&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Used in crash report handling. Valid values are &amp;quot;qa&amp;quot;, &amp;quot;developer&amp;quot; and &amp;quot;internal&amp;quot;. Will be included in crash report if set and marks the report as belonging to a certain usertype group. The only usage of that setting is that the crash report database can be asked afterwards how many reports there where of those groups as opposed to normal users.&lt;br /&gt;
|-&lt;br /&gt;
| XLSDUMPER&lt;br /&gt;
|| all&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Path to the configuration file of the XLS file dumper. The XLS file dumper is built into debug versions of OOo Calc and allows to create text dumps of every MS Excel file loaded into OOo Calc. The configuration file is part of the sc module and can be found in the CVS repository: /sc/sc/source/filter/excel/xldumper.dat. If this environment variable is set and points to an existing configuration file, the file dumper is enabled (also dependent from the settings in the configuration file). Effective from SRC680m164.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Environment variables not classified yet ==&lt;br /&gt;
&lt;br /&gt;
Remaining to be done&lt;br /&gt;
&lt;br /&gt;
An authoritative version of this list can easily be generated from [[LXR]] by searching for &amp;#039;getenv&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
!| OS&lt;br /&gt;
!| Belongs to&lt;br /&gt;
!| Description&lt;br /&gt;
|-&lt;br /&gt;
| all_proxy&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| ALL_PROXY&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| AUDIOHOST&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| BMP_COLLECT_FILE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| BMP_FSYS_RESOURCES&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| BOOST_PRG_MON_CONFIRM&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| BOOST_TEST_CATCH_SYSTEM_ERRORS&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| CHARSET&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| C_INCLUDE_PATH&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| CLASSPATH&lt;br /&gt;
|| all&lt;br /&gt;
|| java &lt;br /&gt;
|| Path with Directories and jar files to search for .class files.&lt;br /&gt;
|-&lt;br /&gt;
| COLUMNS&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| COMMAND_SHELL&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| COMP_ENV&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| COMSPEC&lt;br /&gt;
|| win&lt;br /&gt;
|| system&lt;br /&gt;
|| Path to the batch file command interpreter eg. command.com or 4nt.exe.&lt;br /&gt;
|-&lt;br /&gt;
| CPLD_ACCESSPATH&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| CURL_CA_BUNDLE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| CURL_DEBUG_NETRC&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| CURL_MEMDEBUG&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| CURL_MEMLIMIT&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| CURL_TRACE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| CURL_TRACE &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| DBGSV_INIT&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| DBGSV_LOG&lt;br /&gt;
|| &lt;br /&gt;
|| ooo &lt;br /&gt;
|| debugging logfile (can be used within debug versions of OOo)&lt;br /&gt;
|-&lt;br /&gt;
| DB_HOME&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| DEBUG&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| DESKTOP_LAUNCH&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| DYLD_LIBRARY_PATH&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| EMXSHELL&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| EPMLIST&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| ERRORREPORT_PROXYPORT&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| ERRORREPORT_PROXYSERVER&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| ERRORREPORT_SENDERADDRESS&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| FT2_ALLOC_COUNT_MAX&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| FT2_ALLOC_TOTAL_MAX&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| FT2_DEBUG&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| FT2_DEBUG_MEMORY&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| FTP_PROXY&lt;br /&gt;
|| unix&lt;br /&gt;
|| system&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| ftp_proxy_password&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| ftp_proxy_user&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| GAI&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| GNOME_DESKTOP_SESSION_ID&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| GTK_MODULES&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| GUISTDIO_KEEPRUNNING&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| HelpEx&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| http_proxy&lt;br /&gt;
|| unix&lt;br /&gt;
|| system&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| HTTP_PROXY&lt;br /&gt;
|| unix&lt;br /&gt;
|| system&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| ICU_DATA&lt;br /&gt;
|| &lt;br /&gt;
|| OOo&lt;br /&gt;
|| libicu related&lt;br /&gt;
|-&lt;br /&gt;
| INCLUDE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| JAVA_HOME&lt;br /&gt;
|| all&lt;br /&gt;
|| java&lt;br /&gt;
|| Path to java installation.&lt;br /&gt;
|-&lt;br /&gt;
| JPEGMEM&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| KDE_FULL_SESSION&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| LANGUAGE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| LC_PAPER&lt;br /&gt;
|| unix&lt;br /&gt;
|| system&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| LD_LIBRARY_PATH&lt;br /&gt;
|| unix &lt;br /&gt;
|| system&lt;br /&gt;
|| usage of [[LD_LIBRARY_PATH]] is a bad idea&lt;br /&gt;
|-&lt;br /&gt;
| LIBRARY_PATH&lt;br /&gt;
|| unix &lt;br /&gt;
|| system&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| LOCALINI&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| LOCPATH&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| MAKE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| MALLOC_CKCHAIN&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| MALLOC_ERRFILE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| MALLOC_FATAL&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| MALLOC_WARN&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| MIXERDEV&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| NAS_EMPTY_SIZE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| NETPATH&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| no_proxy&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| NO_PROXY&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| NPX_PLUGIN_PATH&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| OLDSLOTHANDLING&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| OOO_PRINT_PS_DIRECTLY&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| OPENOFFICE_MOZILLA_FIVE_HOME&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PA_LATENCY_ENV_NAME&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PA_MIN_LATENCY_MSEC&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PA_MIN_LATEWNCY_MSEC&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PATH&lt;br /&gt;
|| all&lt;br /&gt;
|| system&lt;br /&gt;
|| Directories searched for finding programs and depending on OS also shared libraries.&lt;br /&gt;
|-&lt;br /&gt;
| POSIXLY_CORRECT&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PRODUCTNAME&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PRODUCTVERSION&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| ProgramFiles&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PSPRINT_ENABLE_TTF_COPYRIGHTAWARENESS&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONCASEOK&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONDEBUG&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONDUMPREFS&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONEXECUTABLE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONHOME&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONINSPECT&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONMALLOCSTATS&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONOPTIMIZE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONPATH&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONSTARTUP&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONUNBUFFERED&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONVERBOSE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| PYTHONY2K&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| RESOURCE_NAME&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| RPMDIR&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| RSC_LANG_ISO&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SAL_ACCESSIBILITY_ENABLE_MENU_SELECTED&lt;br /&gt;
|| &lt;br /&gt;
|| ooo &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SAL_ANTIALIAS_DISABLE&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| font related debugging feature&lt;br /&gt;
|-&lt;br /&gt;
| SAL_AUTOHINTING_PRIORITY&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| font related debugging feature (prefer hinted scan-converted glyph shapes)&lt;br /&gt;
|-&lt;br /&gt;
| SAL_EMBEDDED_BITMAP_PRIORITY&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo &lt;br /&gt;
|| font related debugging feature (prefer embedded glyph bitmaps if available)&lt;br /&gt;
|-&lt;br /&gt;
| SAL_ANTIALIASED_TEXT_PRIORITY&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| font related debugging feature (allows embedded glyph bitmap for monochrome text, hinted glyph for grayscaled text)&lt;br /&gt;
|-&lt;br /&gt;
| SAL_CHANGENOTIFIER_UPDATEINTERVAL&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SAL_DEBUG_UPDATES&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SAL_DISABLE_CUPS&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Disable CUPS printing support&lt;br /&gt;
|-&lt;br /&gt;
| SAL_DISABLE_FLOATGRAB&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Prevent grabbing the X pointer and keyboard when showing a float window (e.g. a menu)&lt;br /&gt;
|-&lt;br /&gt;
| SAL_DO_NOT_USE_INVERT50&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Graphics card related (maybe S3 Virge) workaround for a bug triggered by card drivers, do not use the 50 percent pattern used to show docking window positions&lt;br /&gt;
|-&lt;br /&gt;
| SAL_ENABLE_FILE_LOCKING&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| file locking related (a lockd must be running)&lt;br /&gt;
|-&lt;br /&gt;
| SAL_FONTPATH&lt;br /&gt;
|| unix&lt;br /&gt;
|| ooo&lt;br /&gt;
|| the SAL_FONTPATH is added to X fontpath at application start. This allows the usage of private fonts&lt;br /&gt;
|-&lt;br /&gt;
| SAL_MAXFONTHEIGHT&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| some X11 servers have problems with huge native X11 fonts. Setting this environment variable can prevent the problems.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_MOUNT_MOUNTPROG&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SAL_MOUNT_SU_DO&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SAL_MOUNT_UMOUNTPROG&lt;br /&gt;
|| &lt;br /&gt;
|| ooo &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SAL_NOEXPANDFPICKER&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SAL_TRANSPARENT_FLOATS&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SAL_XKEYBOARDGROUP&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SESSION_MANAGER&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SGML_CATALOG_FILES&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SHELL&lt;br /&gt;
|| unix&lt;br /&gt;
|| system&lt;br /&gt;
|| Command shell to use&lt;br /&gt;
|-&lt;br /&gt;
| SOLAR_JAVA&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SOLARSRC&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SOLAR_USER_RTL_TEXTENCODING&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SRC_ROOT&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| STAR_BSERVERROOT&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| STAR_ENABLE_FILE_LOCKING&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| file locking related&lt;br /&gt;
|-&lt;br /&gt;
| STAR_INIROOT&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| STAR_INIROOTOLD&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| STAR_OVERRIDE_DOMAINNAME&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| STAR_PROFILE_LOCKING_DISABLED&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| file locking related&lt;br /&gt;
|-&lt;br /&gt;
| STAR_RESOURCE_LOGGING&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| STAR_SSCOMMON&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| STAR_SSOLARINI&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| STAR_STANDLST&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SWITCHAR&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SW_NOBEEP&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| SYSTEM_REGISTRY_NAME_ENV&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| TCP_DEVICE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| TCP_SERVER&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| temp&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| TEMP&lt;br /&gt;
|| win&lt;br /&gt;
|| system&lt;br /&gt;
|| A pathname of a directory made available for programs that need a place to create temporary files.&lt;br /&gt;
|-&lt;br /&gt;
| TempFolder&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| TERM&lt;br /&gt;
|| unix&lt;br /&gt;
|| system&lt;br /&gt;
|| The kind of terminal for which output is to be prepared.&lt;br /&gt;
|-&lt;br /&gt;
| THREADDEBUG&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| tmp&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| TMP&lt;br /&gt;
|| unx&lt;br /&gt;
|| system&lt;br /&gt;
|| A pathname of a directory made available for programs that need a place to create temporary files.&lt;br /&gt;
|-&lt;br /&gt;
| TMPDIR&lt;br /&gt;
|| unx&lt;br /&gt;
|| system&lt;br /&gt;
|| A pathname of a directory made available for programs that need a place to create temporary files&lt;br /&gt;
|-&lt;br /&gt;
| UPDATER&lt;br /&gt;
|| &lt;br /&gt;
|| ooo&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| USER&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| USER_REGISTRY_NAME_ENV&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| UTAUDIODEV&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| VERBOSE_RUNTESTS&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| XENVIRONMENT&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| XLOCAL&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| XML_CATALOG_FILES&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| XML_DEBUG_CATALOG&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| XMLLINT_INDENT&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| XML_MEM_BREAKPOINT&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| XML_MEM_TRACE&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| XMODIFIERS&lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Deprecated environment variables ==&lt;br /&gt;
&lt;br /&gt;
Were used, but should not be used anymore.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
!| OS&lt;br /&gt;
!| Belongs to&lt;br /&gt;
!| Description&lt;br /&gt;
|-&lt;br /&gt;
| SAL_WM&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Used to force recognition of a certain window manager. Nowadays not used anymore.&lt;br /&gt;
|-&lt;br /&gt;
| SAL_NOSEGV&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Used to continue after fatal errors. Not in use anymore.&lt;br /&gt;
|-&lt;br /&gt;
| XPDISPLAY&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Used to set the display of the Xprint server. Today this is not functional anymore.&lt;br /&gt;
|-&lt;br /&gt;
| XPRINTER&lt;br /&gt;
|| unx&lt;br /&gt;
|| ooo&lt;br /&gt;
|| Used to set the display of the Xprint server, taking priority over XPRINTER. Today this is not functional anymore.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Feedback and Explanation ==&lt;br /&gt;
&lt;br /&gt;
This list is under construction. If you have information about the role of some environment variable(s), please modify this page (using &amp;quot;Edit&amp;quot; tab at the very top of this page).&lt;br /&gt;
&lt;br /&gt;
To add information about some environment variable that is listed here, please move it from the &amp;quot;not classified yet&amp;quot; table to the &amp;quot;user&amp;quot; or &amp;quot;developer&amp;quot; table (use cut and paste). Try respecting the alphabetical order. Do not hesitate to add missing environment variables nor to remove any &amp;quot;variable&amp;quot; that appears here by mistake.&lt;br /&gt;
&lt;br /&gt;
Reminder: these are runtime environment variables. Not build system ones.&lt;br /&gt;
&lt;br /&gt;
Categories tables are:&lt;br /&gt;
&lt;br /&gt;
* [[#Environment variables for users]] = users could use them or should know about them&lt;br /&gt;
* [[#Environment variables for OOo developpers]] = for developpers only (testing, debugging, getting system information, ...)&lt;br /&gt;
* [[#Environment variables not classified yet]] = remaining to be done&lt;br /&gt;
* [[#Deprecated environment variables]] = were used, but should not be used anymore&lt;br /&gt;
&lt;br /&gt;
Operating System (&amp;quot;OS&amp;quot;) field is:&lt;br /&gt;
&lt;br /&gt;
* (empty) = not known yet&lt;br /&gt;
* linux = GNU/Linux&lt;br /&gt;
* mac = Mac OS X&lt;br /&gt;
* solaris = Solaris&lt;br /&gt;
* other = other UNIX-like system&lt;br /&gt;
* win = Microsoft Windows&lt;br /&gt;
* unx = linux + mac + solaris + other&lt;br /&gt;
* all = unx + win&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Belongs to&amp;quot; field is:&lt;br /&gt;
&lt;br /&gt;
* (empty) = not known yet&lt;br /&gt;
* ooo = introduced by OOo&lt;br /&gt;
* system = belongs to the underlying operating system(s)&lt;br /&gt;
&lt;br /&gt;
The original list of the environment variables was extracted from the OOo sources.&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Debugging&amp;diff=105790</id>
		<title>Debugging</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Debugging&amp;diff=105790"/>
		<updated>2008-12-29T02:56:13Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This section assumes use of [[wikipedia:GNU Debugger|gdb]], from the console. There are also specific notes on [[Windows Debugging]]  or graphical tool on Mac OS X ( see : [[MacOSX_Debug_OpenOffice.org_using_XCode]] ) and hints on [[Debug Build Problems|Build Problems Debugging]]&lt;br /&gt;
&lt;br /&gt;
== Building with debugging symbols ==&lt;br /&gt;
&lt;br /&gt;
OO.o includes a way to add debugging code in per module, via&lt;br /&gt;
the &amp;lt;code&amp;gt;build debug=true&amp;lt;/code&amp;gt; command in each module.&lt;br /&gt;
This also adds lots of runtime assertions,&lt;br /&gt;
churning warnings etc. in addition to debug symbols - which&lt;br /&gt;
can be useful. To do just a plain build with debug symbols&lt;br /&gt;
though use &amp;lt;code&amp;gt;build debug=true dbg_build_only=true&amp;lt;/code&amp;gt;&lt;br /&gt;
or in later versions use &amp;lt;code&amp;gt;build debug=true dbglevel=2&amp;lt;/code&amp;gt; for max&lt;br /&gt;
output and dbglevel=1 or 0 for less output.&lt;br /&gt;
&lt;br /&gt;
You can also configure OO.o with --enable-symbols to build with symbolic generation.&lt;br /&gt;
&lt;br /&gt;
== gdb invocation ==&lt;br /&gt;
&lt;br /&gt;
If you debug with gdb, you may find that execution stops due to signals at inappropriate locations, especially if running against libgcj and need to debug ignoring its [http://gcc.gnu.org/java/gdb.html garbage-collection]. Best invocation is...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gdb ./soffice.bin&lt;br /&gt;
(gdb) handle SIGPWR nostop noprint&lt;br /&gt;
(gdb) handle SIGXCPU nostop noprint&lt;br /&gt;
(gdb) handle SIG33 nostop noprint&lt;br /&gt;
(gdb) run -norestore -writer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
replace -writer with -draw/-impress/-calc/... as appropriate. The -norestore option prevents display of the crash reporter (as one frequently kills office during debugging).&lt;br /&gt;
&lt;br /&gt;
== The recommended .gdbinit file ==&lt;br /&gt;
&lt;br /&gt;
You can add the &amp;lt;tt&amp;gt;handle&amp;lt;/tt&amp;gt; commands from above to your &amp;lt;tt&amp;gt;~/.gdbinit&amp;lt;/tt&amp;gt; to save some typing.  Also you can define there macros to print the content of strings even in cases where dbg_dump() does not work.  The following is such recommended &amp;lt;tt&amp;gt;~/.gdbinit&amp;lt;/tt&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set history filename ~/.gdbhistory&lt;br /&gt;
set history save on&lt;br /&gt;
&lt;br /&gt;
handle SIGPWR nostop noprint&lt;br /&gt;
handle SIGXCPU nostop noprint&lt;br /&gt;
handle SIG33 nostop noprint&lt;br /&gt;
&lt;br /&gt;
tabset 4&lt;br /&gt;
&lt;br /&gt;
# define &amp;quot;pu&amp;quot; command to display sal_Unicode *&lt;br /&gt;
def pu&lt;br /&gt;
  set $uni = $arg0&lt;br /&gt;
  set $len = $arg1&lt;br /&gt;
  set $i = 0&lt;br /&gt;
  printf &amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
  while (*$uni &amp;amp;&amp;amp; $i++&amp;lt;$len &amp;amp;&amp;amp; $i&amp;lt;255)&lt;br /&gt;
    if (*$uni &amp;lt; 0x80)&lt;br /&gt;
      printf &amp;quot;%c&amp;quot;, *(char*)$uni++&lt;br /&gt;
    else&lt;br /&gt;
      printf &amp;quot;\\x%x&amp;quot;, *(short*)$uni++&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  printf &amp;quot;\&amp;quot;\n&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# define &amp;quot;pus&amp;quot; command to display rtl_uString&lt;br /&gt;
def pus&lt;br /&gt;
  set $ns = $arg0&lt;br /&gt;
  if ($ns.buffer)&lt;br /&gt;
    pu $ns.buffer $ns.length&lt;br /&gt;
  else&lt;br /&gt;
    print &amp;quot;Invalid/non-initialized rtl_uString.&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# define &amp;quot;pou&amp;quot; command to display rtl::OUString&lt;br /&gt;
def pou&lt;br /&gt;
  set $ns = $arg0&lt;br /&gt;
  if ($ns.pData)&lt;br /&gt;
    pus $ns.pData&lt;br /&gt;
  else&lt;br /&gt;
    print &amp;quot;Invalid/non-initialized OUString.&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# define &amp;quot;ptu&amp;quot; command to display tools (Uni)String&lt;br /&gt;
def ptu&lt;br /&gt;
  set $ns = $arg0&lt;br /&gt;
  if ($ns.mpData)&lt;br /&gt;
    pu $ns.mpData-&amp;gt;maStr $ns.mpData-&amp;gt;mnLen&lt;br /&gt;
  else&lt;br /&gt;
    print &amp;quot;Invalid/non-initialized tools String.&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this, you can use &amp;lt;tt&amp;gt;pou the_OUString&amp;lt;/tt&amp;gt; in gdb to print &amp;lt;tt&amp;gt;OUString&amp;lt;/tt&amp;gt; named &amp;lt;tt&amp;gt;the_OUString&amp;lt;/tt&amp;gt;, similarly &amp;lt;tt&amp;gt;pus the_rtl_uString&amp;lt;/tt&amp;gt; for &amp;lt;tt&amp;gt;rtl_uString&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;pu the_p_sal_Unicode&amp;lt;/tt&amp;gt; for &amp;lt;tt&amp;gt;sal_Unicode *&amp;lt;/tt&amp;gt;. For tools&amp;#039;s UniString (or just String for historical reasons) you can use &amp;lt;tt&amp;gt;ptu the_String&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting at the beginning ==&lt;br /&gt;
&lt;br /&gt;
We start in &amp;#039;main&amp;#039; with a sal wrapper, that calls&lt;br /&gt;
vcl/source/app/svmain.cxx (SVMain). It invokes Main on&lt;br /&gt;
pSVData-&amp;amp;gt;mpApp; but pSVData is an in-line local. To&lt;br /&gt;
debug this use the pImplSVData global variable. eg:&lt;br /&gt;
&lt;br /&gt;
      p pImplSVData-&amp;amp;gt;maAppData&lt;br /&gt;
&lt;br /&gt;
This &amp;#039;Main&amp;#039; method is typically: &amp;lt;code&amp;gt;desktop/source/app/app.cxx (Main).&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examining strings ==&lt;br /&gt;
&lt;br /&gt;
We have [[Hacking#Can_I_get_a_char_.2A.2C_please.3F|already]] seen that OO.o has&lt;br /&gt;
its own set of string classes, none of which gdb understands.&lt;br /&gt;
You need to use:&lt;br /&gt;
&amp;lt;code&amp;gt;(gdb) print dbg_dump(sWhatEver)&amp;lt;/code&amp;gt; to print the contents&lt;br /&gt;
of a UniString/ByteString/rtl::OUString/rtl::OString regardless&lt;br /&gt;
of the type when debugging C++ code. See Caolan&amp;#039;s &lt;br /&gt;
[http://www.skynet.ie/~caolan/TechTexts/GdbUnicodePrinting.html write-up]&lt;br /&gt;
for details.&lt;br /&gt;
&lt;br /&gt;
the functions &amp;lt;code&amp;gt;dbg_dump()&amp;lt;/code&amp;gt; may not be available in gdb due to link. Just copy them in your current source file from &amp;#039;/sal/rtl/source/debug_print&amp;#039; and add the associated includes &amp;lt;code&amp;gt;#include &amp;lt;rtl/strbuf.hxx&amp;gt; #include &amp;lt;rtl/ustring.hxx&amp;gt;&amp;lt;/code&amp;gt;. gdb should recognize them now.&lt;br /&gt;
&lt;br /&gt;
Another way is to use the macros from the [[Debugging#The_recommended_.gdbinit_file|recommended .gdbinit file]].  Unfortunately, so far works only for OUString, sal_Unicode *, and rtl_uString.&lt;br /&gt;
&lt;br /&gt;
== Getting the build order right ==&lt;br /&gt;
&lt;br /&gt;
The build dependencies of the modules are clearly crucial to&lt;br /&gt;
getting a clean build. When you type &amp;#039;build&amp;#039; in a module, first&lt;br /&gt;
build examines prj/build.list, eg.&amp;lt;code&amp;gt;neon/prj/build.lst&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
        xh      neon  :  soltools external expat NULL&lt;br /&gt;
&lt;br /&gt;
this specifies that &amp;#039;soltools&amp;#039;, &amp;#039;external&amp;#039; and &amp;#039;expat&amp;#039; have to&lt;br /&gt;
be satisfactorily built and delivered before neon can be built.&lt;br /&gt;
Occasionally these rules get broken, and people don&amp;#039;t notice for&lt;br /&gt;
a while.&lt;br /&gt;
&lt;br /&gt;
== It crashes, but only in gdb ==&lt;br /&gt;
&lt;br /&gt;
What fun &amp;amp;mdash; you symlinked desktop/unxlngi4.pro/bin/soffice to&lt;br /&gt;
soffice.bin in your install tree didn&amp;#039;t you. That works fine&lt;br /&gt;
if you just run it, but it seems gdb unpacks the symlink and&lt;br /&gt;
passes a fully qualified path as argv[0], which defeats the&lt;br /&gt;
hunting for the binary in the path, so it assigns the program&lt;br /&gt;
base path as &amp;lt;code&amp;gt;/opt/OpenOffice/OOO_STABLE_1/desktop/unxlngi4.pro/bin&amp;lt;/code&amp;gt;&lt;br /&gt;
and starts looking for (eg. applicat.rdb) in there. Of course&lt;br /&gt;
when it fails to find any setup information, it silently&lt;br /&gt;
crashes somewhere else yards away from the original problem.&lt;br /&gt;
&lt;br /&gt;
== It crashes, but doesn&amp;#039;t crash ==&lt;br /&gt;
&lt;br /&gt;
For various reasons signal handlers are trapped and life&lt;br /&gt;
can get rather confusing; thus it&amp;#039;s best for builders to&lt;br /&gt;
apply something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- sal/osl/unx/signal.c&lt;br /&gt;
+++ sal/osl/unx/signal.c&lt;br /&gt;
@@ -188,6 +188,8 @@ static sal_Bool InitSignal()&lt;br /&gt;
             bSetILLHandler = sal_True;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
+       bSetSEGVHandler = bSetWINCHHandler = bSetILLHandler = bDoHardKill = sal_False;&lt;br /&gt;
+&lt;br /&gt;
        SignalListMutex = osl_createMutex();&lt;br /&gt;
 &lt;br /&gt;
        act.sa_handler = SignalHandlerFunction;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I can&amp;#039;t find the code from the trace ==&lt;br /&gt;
&lt;br /&gt;
Some methods, are described as having a special linkage, such that&lt;br /&gt;
they can be used in callbacks; these typically have a prefix:&lt;br /&gt;
&amp;#039;LinkStub&amp;#039;, so search for the latter part of the identifier in a&lt;br /&gt;
freetext search. eg.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      IMPL_LINK( Window, ImplHandlePaintHdl, void*, EMPTYARG )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
builds the &amp;#039;LinkStubImplHandlePaintHdl&amp;#039; method.&lt;br /&gt;
&lt;br /&gt;
== How can I re-build just the files I see in the trace ==&lt;br /&gt;
&lt;br /&gt;
Often when you run gdb on a build without debugging symbols, you get an unhelpful gdb trace, but yet you can&amp;#039;t afford the time/space to recompile all of OO.o with debugging symbols. Thus we have created a small perl helper, which will hunt for and touch files containing the symbols from your trace. This sub-set can then be re-built with debugging enabled for a better trace next time around:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;pre&amp;gt;&lt;br /&gt;
    gdb ./soffice.bin&lt;br /&gt;
    ...&lt;br /&gt;
    bt&lt;br /&gt;
#0  0x40b4e0a1 in kill () from /lib/libc.so.6&lt;br /&gt;
#1  0x409acfe6 in raise () from /lib/libpthread.so.0&lt;br /&gt;
#2  0x447bcdbd in SfxMedium::DownLoad(Link const&amp;amp;amp;) () from ./libsfx641li.so&lt;br /&gt;
#3  0x447be151 in SfxMedium::SfxMedium(String const&amp;amp;amp;, unsigned short, unsigned char, SfxFilter const*, SfxItemSet*) ()&lt;br /&gt;
   from ./libsfx641li.so&lt;br /&gt;
#4  0x448339d3 in getCppuType(com::sun::star::uno::Reference&amp;lt;com::sun::star::document::XImporter&amp;gt; const*) () from ./libsfx641li.so&lt;br /&gt;
...&lt;br /&gt;
    quit&lt;br /&gt;
    cd base/OOO_STABLE_1/sfx2&lt;br /&gt;
    ootouch SfxMedium&lt;br /&gt;
    build debug=true&lt;br /&gt;
    &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus, all files referencing or implementing anything with SfxMedium will be touched, and hence rebuilt with  debugging symbols.&lt;br /&gt;
&lt;br /&gt;
[http://go-oo.org/developers/ooo-build/bin/ootouch ootouch] is not available upstream: it is available through ooo-build.&lt;br /&gt;
&lt;br /&gt;
== How can I re-build all the files in one source directory ==&lt;br /&gt;
&lt;br /&gt;
If you want to recompile the code in just your current directory, you can&lt;br /&gt;
use the killobj dmake target to remove the object files:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;pre&amp;gt;&lt;br /&gt;
    dmake killobj&lt;br /&gt;
    dmake&lt;br /&gt;
    &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== It always crashes in sal_XErrorHdl ==&lt;br /&gt;
&lt;br /&gt;
You are a victim of asynchronous X error reporting;&lt;br /&gt;
&amp;lt;code&amp;gt;export SAL_SYNCHRONIZE=1&amp;lt;/code&amp;gt; will make all the X traffic&lt;br /&gt;
synchronous, and report the error by the method that caused it,&lt;br /&gt;
it&amp;#039;ll also make OO.o far slower, and the timing different.&lt;br /&gt;
&lt;br /&gt;
== It silently fails to load my word file ==&lt;br /&gt;
&lt;br /&gt;
Caolan suggests: put breakpoints in ww8par.cxx top and tail of&lt;br /&gt;
SwWW8ImplReader::LoadDoc, and confirm that the document gets as far&lt;br /&gt;
as the import filter.&lt;br /&gt;
&lt;br /&gt;
A handy human place to put a breakpoint is in &lt;br /&gt;
SwWW8ImplReader::ReadPlainChars, you can see chunks of text as&lt;br /&gt;
they are read in. Alternatively SwWW8ImplReader::AppendTxtNode as&lt;br /&gt;
each paragraph is inserted.&lt;br /&gt;
&lt;br /&gt;
== How do I use the debug console ? ==&lt;br /&gt;
&lt;br /&gt;
So OO.o contains some hefty debugging infrastructure; pictured&lt;br /&gt;
[http://go-oo.org/images/debug-window.png here]  &amp;#039;&amp;#039;&amp;#039;(FIXME BROKEN LINK)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Enabling it is pretty easy - what you need is a so-called [[Non_Product_Build|Non-Product Build]].&lt;br /&gt;
&lt;br /&gt;
By default, an OpenOffice.org build is a Product Build, i.e. ready for release after completion. If you specify the &amp;lt;code&amp;gt;--enable-dbgutil&amp;lt;/code&amp;gt; switch during &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt;, then your environment will be prepared for a [[Non_Product_Build|Non-Product Build]] - with lots of additional diagnostic tools.&lt;br /&gt;
&lt;br /&gt;
Note that libraries from product and non-product builds are usually incompatible, so don&amp;#039;t mix them in the same installation.&lt;br /&gt;
&lt;br /&gt;
For available tools in non-product builds, have a look at the various &amp;lt;code&amp;gt;DBG_foo&amp;lt;/code&amp;gt; macros in &amp;lt;code&amp;gt;tools/debug.hxx&amp;lt;/code&amp;gt;, or, if you already are knowledgeable about this, let others participate by writing your knowledge down here.&lt;br /&gt;
&lt;br /&gt;
To actually fire up the debug settings dialog, press &amp;lt;ctrl&amp;gt;&amp;lt;alt&amp;gt;&amp;lt;shift&amp;gt;-D.&lt;br /&gt;
&lt;br /&gt;
== Draw/Impress text edit debugging ==&lt;br /&gt;
&lt;br /&gt;
When running a [[Non_Product_Build|Non-Product Build]], live edit mode in Draw/Impress text boxes has an extra debug hotkey: pressing &amp;lt;ctrl&amp;gt;&amp;lt;alt&amp;gt;-F2 writes information about the currently edited text into a debug.log file (currently Windows-only).&lt;br /&gt;
&lt;br /&gt;
== Excel Interop debugging ==&lt;br /&gt;
&lt;br /&gt;
This is fairly easy; define an environment variable XLSDUMPER pointing to the file sc/source/filter/excel/xldumper.dat (full path needed). Then run &amp;lt;code&amp;gt;soffice.bin foo.xls&amp;lt;/code&amp;gt; and you should get a foo.xls.txt in the same directory with the debug data in it.&lt;br /&gt;
&lt;br /&gt;
Note: this requires a debug build of the &amp;lt;code&amp;gt;sc&amp;lt;/code&amp;gt; module.  To easily get such a build, execute the following within your &amp;lt;code&amp;gt;sc&amp;lt;/code&amp;gt; directory: &amp;lt;code&amp;gt;build -- killobj ; build debug=true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The trace shows a crash in &amp;#039;poll&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
OO.o is a fairly threaded program, you&amp;#039;re probably just looking at the wrong thread: there are not likely to be bugs in poll. Use &amp;lt;code&amp;gt;thread apply all backtrace&amp;lt;/code&amp;gt; to get a backtrace of all threads - this will most likely fail. When it does do: &amp;lt;code&amp;gt;thread 1&amp;lt;/code&amp;gt; then &amp;lt;code&amp;gt;bt&amp;lt;/code&amp;gt; - most crashers occur in the &amp;#039;main&amp;#039; thread.&lt;br /&gt;
&lt;br /&gt;
== What does this trace mean ? ==&lt;br /&gt;
&lt;br /&gt;
There are several typical stack-traces that come up again&lt;br /&gt;
and again, one would be:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;pre&amp;gt;#15 0x4164a501 in raise () from /lib/tls/libc.so.6&lt;br /&gt;
#16 0x4164bcd9 in abort () from /lib/tls/libc.so.6&lt;br /&gt;
#17 0x415fb5a5 in std::set_unexpected ()&lt;br /&gt;
   from /home/mnagashree/m72install/program/libstdc++.so.5&lt;br /&gt;
#18 0x415fb5e2 in std::terminate ()&lt;br /&gt;
   from /home/mnagashree/m72install/program/libstdc++.so.5&lt;br /&gt;
#19 0x415fb69c in __cxa_rethrow ()&lt;br /&gt;
    &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section of trace means (essentially) that an&lt;br /&gt;
exception was thrown - but there was no-one trying to&lt;br /&gt;
catch it. Often this means there was a missing&lt;br /&gt;
&amp;#039;try {} catch()&amp;#039; clause in one of the calling frames.&lt;br /&gt;
&lt;br /&gt;
A great way to debug exceptions is to add a breakpoint&lt;br /&gt;
in catch/throw, do this with &amp;lt;code&amp;gt;catch throw&amp;lt;/code&amp;gt; or &lt;br /&gt;
&amp;lt;code&amp;gt;catch catch&amp;lt;/code&amp;gt; in gdb.&lt;br /&gt;
&lt;br /&gt;
== Useful places to put breakpoints ==&lt;br /&gt;
&lt;br /&gt;
If you have compiled with debugging enabled: &amp;lt;code&amp;gt;build debug=true&amp;lt;/code&amp;gt; it is possible that you get some nice churning debug / assertion failure - and you want to get a pleasant &amp;amp;amp; detailed stack-trace: to do that do&lt;br /&gt;
&amp;lt;code&amp;gt;break osl_assertFailedLine&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== STLport and checking iterators ==&lt;br /&gt;
&lt;br /&gt;
The STL is a powerful tool but it also makes it easy - in the grand old C/C++ tradition - to shoot one selves in the foot, as we all know. STL containers and algorithms are now pervasive in OOo, so there is a need to validate the use of STL constructs in OO.o to find hidden problems.&lt;br /&gt;
&lt;br /&gt;
Fortunately the [http://www.stlport.org/ STLport library] - the default STL implementation for OO.o - has a powerful debug mode, and it&amp;#039;s easy to use. Since SRC680 m128 it is possible to use the environment variable &amp;lt;code&amp;gt;USE_STLP_DEBUG&amp;lt;/code&amp;gt; to switch on the STLport debug mode, since SRC680 m150 it works for Windows, too&lt;br /&gt;
&lt;br /&gt;
The most useful part of the STLport debug mode is iterator checking. Doing the OO.o smoke test and some little additional random testing we already found a number of questionable STL constructs.&lt;br /&gt;
&lt;br /&gt;
Only code paths which are exercised will be tested by the STLport debug mode, though. If STLport finds a questionable STL usage it will throw an assertion and terminate. It is usually quite easy to extract a precise stack trace.&lt;br /&gt;
&lt;br /&gt;
Some notes:&lt;br /&gt;
* STLport debug mode iterators are no pointers! We&amp;#039;ve cleaned up all occurrences of the lazy - and wrong - usages of iterators as pointers in SRC680 m128/m150, but maybe something new has already crept in. This clean up also helps with other STL implementations, like the one which comes with gcc-4.x&lt;br /&gt;
* A complete recompile is necessary, the debug modes renders all objects with STL constructs binary incompatible&lt;br /&gt;
* The STLport debug mode breaks the complexity assertions of the STL. Theoretically some operations should be much slower in debug mode than in product mode. In practice I didn&amp;#039;t notice a real slowdown of OO.o.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]][[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Hacking&amp;diff=105789</id>
		<title>Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Hacking&amp;diff=105789"/>
		<updated>2008-12-29T02:55:17Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
== My first hack ==&lt;br /&gt;
&lt;br /&gt;
So - we&amp;#039;ve built and run OO.o, and we want to prove to ourselves that it is in fact possible to hack on it. So in a new terminal do this:&lt;br /&gt;
&lt;br /&gt;
 cd build/src680-m66&lt;br /&gt;
 . ./LinuxX86Env.Set.sh&lt;br /&gt;
 cd vcl&lt;br /&gt;
&lt;br /&gt;
Now have a hack at vcl/source/window/menu.cxx (Menu::SetItemText);&lt;br /&gt;
(near line 1770) I suggest manually applying this change:&lt;br /&gt;
&lt;br /&gt;
 -               pData-&amp;gt;aText = rStr;&lt;br /&gt;
 +               pData-&amp;gt;aText = String(rStr).Reverse();&lt;br /&gt;
&lt;br /&gt;
Then save. ( You can find more sensible things to hack in the [[Tutorials]] )&lt;br /&gt;
&lt;br /&gt;
You&amp;#039;re still in vcl/ yes ? then type &amp;#039;build debug=true&amp;#039;; wait for the scrolling text to stop; (5 seconds?). Now re-run&lt;br /&gt;
&amp;lt;code&amp;gt;soffice -writer&amp;lt;/code&amp;gt;. You should notice the effect in the menus.&lt;br /&gt;
If not, ensure the previous soffice.bin was dead with&lt;br /&gt;
&amp;lt;code&amp;gt;killall -9 soffice.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; for day to day hacking you want to just run &amp;#039;build&amp;#039; inside the source tree. It is also highly recommended to work inside a copy of the build tree, and generate / test patches in an un-hacked version.  To copy just the build/src680-m66 directory elsewhere, you need to use the [[ relocate ]] tool.&lt;br /&gt;
&lt;br /&gt;
== Read the Fine manual ==&lt;br /&gt;
&lt;br /&gt;
With the power of C++ comes the ability to shoot yourself in the foot all the more easily; (and implicitly), cf. &amp;lt;em&amp;gt;Holub, Rules for C and C++ programming, McGraw-Hill, 95&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      The best way to prepare yourself for battle is to read the&lt;br /&gt;
      [http://tools.openoffice.org/CodingGuidelines.sxw OpenOffice coding guidelines], and for the easily confused c&amp;#039;tor / d&amp;#039;tor is short for&lt;br /&gt;
      constructor / destructor.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, there&amp;#039;s an extensive list of [[Recommended_Reading|recommended literature]] about C++ - but that&amp;#039;s of course &amp;lt;em&amp;gt;no prerequisite&amp;lt;/em&amp;gt; to start coding.&lt;br /&gt;
&lt;br /&gt;
== Sending patches ==&lt;br /&gt;
&lt;br /&gt;
The toplevel structure of the OO.o source code is not the same as the layout of the CVS repository [ a good rational for this strange state of affairs is absent ]. Thus to work out what real module a file is in you need to do eg.&lt;br /&gt;
        cd binfilter&lt;br /&gt;
        cat CVS/Repository&lt;br /&gt;
        framework/binfilter&lt;br /&gt;
This shows you that the &amp;#039;[[Framework/Modules/binfilter|binfilter]]&amp;#039; directory is part of the [[Framework|&amp;#039;framework&amp;#039; project]].&lt;br /&gt;
&lt;br /&gt;
These days there is a [http://qa.openoffice.org/issue_handling/submission_gateway.html#code_module hackers bug filing page] that will assign bugs to the correct project, and the correct owner to get rapid attention.&lt;br /&gt;
&lt;br /&gt;
== Starting the right app ==&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      As you start soffice.bin, there are several useful parameters to&lt;br /&gt;
      use to accelerate your debugging experience; particularly&lt;br /&gt;
      &amp;lt;code&amp;gt;-writer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-calc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-draw&amp;lt;/code&amp;gt;,&lt;br /&gt;
      and (the wizardly painful) &amp;lt;code&amp;gt;-impress&amp;lt;/code&amp;gt; arguments.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Understanding D&amp;#039; make (man) ==&lt;br /&gt;
&lt;br /&gt;
While the build system is in similar to many other systems, it is also perhaps slightly different. The overview is that each module is &amp;lt;i&amp;gt;built&amp;lt;/i&amp;gt;, and then the results are &amp;lt;i&amp;gt;delivered&amp;lt;/i&amp;gt; into the [http://www.openoffice.org/dev_docs/source/solver.html solver]. Each module builds against the headers in the solver. Thus there are a few intricacies.&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;li id=&amp;quot;build&amp;quot;&amp;gt;&lt;br /&gt;
	  &amp;lt;i&amp;gt;build&amp;lt;/i&amp;gt; &amp;amp;mdash; this perl script &amp;lt;i&amp;gt;solenv/bin/build.pl&amp;lt;/i&amp;gt; is&lt;br /&gt;
	  used in conjunction with [[Hacking#prj/build.lst|prj/build.lst]]&lt;br /&gt;
	  to ensure that every module that is needed is built first.&amp;lt;br/&amp;gt;&lt;br /&gt;
	  build then un-winds internal module dependencies, and builds&lt;br /&gt;
	  each module with a chdir, dmake pair.&lt;br /&gt;
	&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li id=&amp;quot;deliver&amp;quot;&amp;gt;&lt;br /&gt;
	  &amp;lt;i&amp;gt;deliver&amp;lt;/i&amp;gt; &amp;amp;mdash; this perl script &amp;lt;i&amp;gt;solenv/bin/deliver.pl&amp;lt;/i&amp;gt;&lt;br /&gt;
	  installs headers, and libraries (etc.) into the solver, as&lt;br /&gt;
	  informed by [[Hacking#prj/d.lst|prj/d.lst]]. Crucially&lt;br /&gt;
	  deliver ensures that the date stamp on any file that is&lt;br /&gt;
	  installed to the solver is the same as that in the module&amp;#039;s&lt;br /&gt;
	  directory. This ensures, that (particularly for headers) that&lt;br /&gt;
	  there is no dependency cascade triggering re-builds in other&lt;br /&gt;
	  modules.&lt;br /&gt;
	&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Standard directories ===&lt;br /&gt;
&lt;br /&gt;
There are various standard directories and files in most of the modules that make up OO.o, here are some of the more useful:&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;prj&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
**&amp;#039;&amp;#039;build.lst&amp;#039;&amp;#039; &amp;amp;mdash; this lists directories to be made, &amp;#039;^#&amp;#039; comments are allowed, the order of the list is immaterial see [[Hacking#prj/build.lst | detail]], it is dictates &amp;#039;&amp;#039;build&amp;#039;&amp;#039;&amp;#039;s operation.&lt;br /&gt;
**&amp;#039;&amp;#039;d.lst&amp;#039;&amp;#039; &amp;amp;mdash; this file describes the &amp;#039;&amp;#039;deliver&amp;#039;&amp;#039; process, see [[Hacking#prj/d.lst | detail]].&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;util&amp;#039;&amp;#039;&amp;#039; &amp;amp;mdash; typically the util directory is charged with glueing together the sub-libraries for each sub-module into a single large library, adding system library dependencies, building GUI resource files etc. All the work is described in &amp;#039;&amp;#039;makefile.mk&amp;#039;&amp;#039;, this is usually the last directory to be built in a project.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;inc&amp;#039;&amp;#039;&amp;#039; &amp;amp;mdash; public headers are typically separated into an &amp;#039;inc&amp;#039; directory, these will be installed into the solver by the &amp;#039;deliver&amp;#039; phase (using [[Hacking#prj/d.lst | prj/d.lst]])&lt;br /&gt;
&lt;br /&gt;
Build&amp;#039;s mode of operation is to invoke &amp;#039;dmake&amp;#039; in each of the projects&amp;#039; directories with a given dependency order. dmake then executes the rules in makefile.mk.&lt;br /&gt;
&lt;br /&gt;
=== prj/build.lst ===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
    On first view build.lst looks scary:&lt;br /&gt;
      &amp;lt;pre&amp;gt;&lt;br /&gt;
vc      vcl : NAS:nas FREETYPE:freetype psprint rsc sot ucbhelper unotools sysui NULL&lt;br /&gt;
vc      vcl                      usr1   -       all     vc_mkout NULL&lt;br /&gt;
vc      vcl\source\unotypes      nmake  -       all     vc_unot NULL&lt;br /&gt;
vc      vcl\source\glyphs        nmake  -       all     vc_glyphs vc_unot NULL&lt;br /&gt;
...&lt;br /&gt;
vc	vcl\mac\source\src	 nmake	-	m	vc__srcm vc_unot NULL&lt;br /&gt;
vc	vcl\util		 nmake	-	all	&lt;br /&gt;
vc_util vc__plug.u vc__appa.u vc__appm.m vc__appu.u vc__appw.w vc__gdim.m &lt;br /&gt;
vc__gdiu.u vc__gdiw.w vc__srcm.m vc__srcu.u vc__srcw.w &lt;br /&gt;
vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__du.u &lt;br /&gt;
vc__gtka.u vc__gtkw.u vc__gtkg.u vc__kde.u vc_app &lt;br /&gt;
vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs NULL&lt;br /&gt;
      &amp;lt;/pre&amp;gt;&lt;br /&gt;
so we need to try and un-pack what&amp;#039;s going on here, which is in fact not&lt;br /&gt;
as odd as it might seem at first glance. Firstly lists are terminated&lt;br /&gt;
by the &amp;#039;NULL&amp;#039; string. Every line is prefixed by a shortcut which has to be unique, no two modules are allowed to have the same shortcut.&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;ul&amp;gt;&lt;br /&gt;
         &amp;lt;li&amp;gt;&lt;br /&gt;
	   First active line contains a &amp;#039;:&amp;#039;, this describes the&lt;br /&gt;
	   fact that this project (vcl) depends on these other modules&lt;br /&gt;
	   &amp;#039;nas&amp;#039;, &amp;#039;freetype&amp;#039;, &amp;#039;psprint&amp;#039; etc. to be built first. This is&lt;br /&gt;
	   for inter-project dependencies.&lt;br /&gt;
	 &amp;lt;/li&amp;gt;&lt;br /&gt;
	 &amp;lt;li&amp;gt;&lt;br /&gt;
	   Some modules have a CAPITALS:lowercase arrangement; the first&lt;br /&gt;
	   segment is a conditional, driven by a space delimited list in&lt;br /&gt;
	   the BUILD_TYPE environment variable at build time.&lt;br /&gt;
	 &amp;lt;/li&amp;gt;&lt;br /&gt;
	 &amp;lt;li&amp;gt;&lt;br /&gt;
	   Then we have a redundant line &amp;#039;usr1&amp;#039; [ for fun ? ], in fact&lt;br /&gt;
	   only lines containing the magic string &amp;#039;nmake&amp;#039; are valid after&lt;br /&gt;
	   this.&lt;br /&gt;
	 &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	 &amp;lt;li&amp;gt;&lt;br /&gt;
The next lines describe internal project directory dependencies&lt;br /&gt;
and look like:&lt;br /&gt;
	     &amp;lt;pre&amp;gt;&lt;br /&gt;
[shortcut] [path to dir to build] nmake - [flags] [unique-name] [deps...] NULL&lt;br /&gt;
vc           vcl\source\glyphs    nmake -   all     vc_glyphs   vc_unot   NULL&lt;br /&gt;
	     &amp;lt;/pre&amp;gt;&lt;br /&gt;
	   &amp;lt;i&amp;gt;shortcut&amp;lt;/i&amp;gt; is not used; &amp;lt;i&amp;gt;flags&amp;lt;/i&amp;gt; determines which platforms&lt;br /&gt;
	   this builds on; usually single char platform codes: &amp;#039;dnpum&amp;#039; &amp;#039;u&amp;#039; being&lt;br /&gt;
	   Unix. The higher up the system, the more stuff is flagged &amp;#039;all&amp;#039;.&amp;lt;br/&amp;gt;&lt;br /&gt;
	   &amp;lt;i&amp;gt;unique-name&amp;lt;/i&amp;gt; this is a magic name, used by other lines to&lt;br /&gt;
	   describe an internal dependency. &amp;lt;i&amp;gt;deps...&amp;lt;/i&amp;gt; any number of names of&lt;br /&gt;
	   other directories in this file, that must be built before this one. If such prerequisite dir is built for special platforms only, the platform code has to be appended to its magic name.&lt;br /&gt;
	 &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we see in the vcl case that &amp;lt;i&amp;gt;vcl\source\unotypes&amp;lt;/i&amp;gt; (vc_unot) has to be built before &amp;lt;i&amp;gt;vcl\source\glyphs&amp;lt;/i&amp;gt; (vc_glyphs). For Mac &amp;lt;i&amp;gt;vcl\mac\source\src&amp;lt;/i&amp;gt; (vc__srcm) has to be built before &amp;lt;i&amp;gt;vcl\util&amp;lt;/i&amp;gt; (vc_util) It is &amp;#039;&amp;#039;&amp;#039;important&amp;#039;&amp;#039;&amp;#039; to understand that the order of the list is ~immaterial, and instead of a simple ordered list, we have a more complex internal dependency system &amp;amp;mdash; this contrasts with most other make systems.&lt;br /&gt;
&lt;br /&gt;
There is also documentation [http://tools.openoffice.org/tools/build.html here] on it.&lt;br /&gt;
&lt;br /&gt;
=== deliver, deliver.log and prj/d.lst ===&lt;br /&gt;
&lt;br /&gt;
The syntax of d.lst is more comprehensible than build.lst, it omits&lt;br /&gt;
some default actions, such as copying build.lst into&lt;br /&gt;
      &amp;lt;i&amp;gt;inc/&amp;amp;lt;module&amp;amp;gt;/build.lst&amp;lt;/i&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A line is of the form:&lt;br /&gt;
&lt;br /&gt;
        [action]: [arguments]&lt;br /&gt;
        mkdir:    %_DEST%\inc%_EXT%\external&lt;br /&gt;
&lt;br /&gt;
where if &amp;#039;[action]:&amp;#039; is omitted, it defaults to the &amp;#039;copy&amp;#039; action. Typical actions are &amp;lt;i&amp;gt;copy&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;mkdir&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;touch&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;hedabu&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;dos&amp;lt;/i&amp;gt; and &amp;lt;i&amp;gt;linklib&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;hedabu&amp;#039; action is particularly interesting, inasmuch that it&lt;br /&gt;
cosmetically re-formats the header to shrink it on install and adds the module name to the include path (&amp;#039;&amp;#039;#include &amp;quot;my_header.hxx&amp;quot;&amp;#039;&amp;#039; becomes &amp;#039;&amp;#039;#include &amp;lt;my_module/my_header.hxx&amp;gt;&amp;#039;&amp;#039;). Otherwise it&amp;#039;s much like the copy action.&lt;br /&gt;
&lt;br /&gt;
      During the action, various macro variables are expanded some of which are:&lt;br /&gt;
* %__SRC% &amp;amp;mdash; distribution directory name eg. &amp;lt;i&amp;gt;unxlngi4.pro&amp;lt;/i&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
* %_DEST% &amp;amp;mdash; absolute path into solver eg. &amp;lt;i&amp;gt;/opt/OpenOffice/OOO_STABLE_1/solver/641/unxlngi4.pro&amp;lt;/i&amp;gt;&lt;br /&gt;
* %_EXT% &amp;amp;mdash; (unusual) way of having minor updates eg. 641.1, typically used to version every base sub-directory.&lt;br /&gt;
&lt;br /&gt;
Typically then, if indeed you need to add a rule (cf. implicit directory copies), it will be of the form:&lt;br /&gt;
        ..\%__SRC%\inc\sal\*.h %_DEST%\inc%_EXT%\sal\*.h&lt;br /&gt;
&lt;br /&gt;
NB. relative paths are relative to the &amp;#039;prj/&amp;#039; directory.&lt;br /&gt;
&lt;br /&gt;
Sometimes you might run into the situation where you&amp;#039;d like to remove the delivered files from solver. Your configuration might have changed and they are no longer needed. &amp;quot;deliver -delete&amp;quot; does just that, however you might still need to delete &amp;quot;deliver.log&amp;quot; files manually as well.&lt;br /&gt;
&lt;br /&gt;
== Can I get a &amp;lt;code&amp;gt;char *&amp;lt;/code&amp;gt;, please? ==&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Just barely.  OO.o has at least six string wrappers, although the C&lt;br /&gt;
      implementations are of little interest:&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
	  &amp;lt;code&amp;gt;rtl_String&amp;lt;/code&amp;gt; &amp;amp;mdash; sal/inc/rtl/string.h&amp;lt;br&amp;gt;&lt;br /&gt;
	  &amp;quot;Normal&amp;quot; string plus reference counting.&lt;br /&gt;
	  &amp;lt;code&amp;gt;rtlstring-&amp;lt;/code&amp;gt;&amp;amp;gt;&amp;lt;code&amp;gt;buffer&amp;lt;/code&amp;gt; is useful, as is&lt;br /&gt;
	  &amp;lt;code&amp;gt;rtlstring-&amp;lt;/code&amp;gt;&amp;amp;gt;&amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt;.  This object encapsulates&lt;br /&gt;
	  an generic 8bit string - of unknown encoding. Feel free to treat&lt;br /&gt;
	  &amp;lt;code&amp;gt;rtlstring-&amp;lt;/code&amp;gt;&amp;amp;gt;&amp;lt;code&amp;gt;buffer&amp;lt;/code&amp;gt; as your beloved &amp;lt;code&amp;gt;char *&amp;lt;/code&amp;gt;.&lt;br /&gt;
	  If you really want to look at the implementation of some&lt;br /&gt;
	  &amp;lt;code&amp;gt;rtl_String&amp;lt;/code&amp;gt; function and lxr nor grep can help you, have&lt;br /&gt;
	  a look at sal/rtl/source/strtmpl.c.&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;li&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
	  &amp;lt;code&amp;gt;OString&amp;lt;/code&amp;gt; &amp;amp;mdash; sal/inc/rtl/string.hxx&amp;lt;br&amp;gt;&lt;br /&gt;
	  Simply a rtl_String wrapped inside a &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;; you&lt;br /&gt;
	  can use &amp;lt;code&amp;gt;ostring.pData&amp;lt;/code&amp;gt; to get at the rtl_String&lt;br /&gt;
	  (it&amp;#039;s public).  &amp;lt;code&amp;gt;OString&amp;lt;/code&amp;gt; has reasonably useful&lt;br /&gt;
	  methods for if you need them.&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;li&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
	  &amp;lt;code&amp;gt;rtl_uString&amp;lt;/code&amp;gt; &amp;amp;mdash; sal/inc/rtl/ustring.h&amp;lt;br&amp;gt;&lt;br /&gt;
	  &amp;quot;Normal&amp;quot; Unicode string, similar to rtl_String, and&lt;br /&gt;
	  refcounted as well.  However, this one always comes in UCS-2&lt;br /&gt;
	  encoding, presumably to be compatible with Java&amp;#039;s&lt;br /&gt;
	  questionable choices. &lt;br /&gt;
	  See &amp;lt;code&amp;gt;rtl_String&amp;lt;/code&amp;gt; above to find where the implementation&lt;br /&gt;
	  of some &amp;lt;code&amp;gt;rtl_uString&amp;lt;/code&amp;gt;functions is hidden.&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;li&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
	  &amp;lt;code&amp;gt;OUString&amp;lt;/code&amp;gt; &amp;amp;mdash; sal/inc/rtl/ustring.hxx&amp;lt;br&amp;gt; &lt;br /&gt;
	  An rtl_uString wrapped inside a &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;.  This is&lt;br /&gt;
	  what most of the OO.o code uses to pass strings around.&lt;br /&gt;
	  To convert an &amp;lt;code&amp;gt;OString&amp;lt;/code&amp;gt; to an &amp;lt;code&amp;gt;OUString&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	  it is necessary to specify the character set of the&lt;br /&gt;
	  &amp;lt;code&amp;gt;OString&amp;lt;/code&amp;gt; see; &amp;lt;code&amp;gt;sal/inc/rtl/textenc.h&amp;lt;/code&amp;gt;&lt;br /&gt;
	  &amp;amp;mdash; the only interesting case is &amp;lt;code&amp;gt;RTL_TEXTENCODING_UTF8&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;li&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
	  &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt; &amp;amp;mdash; tools/inc/string.hxx&amp;lt;br&amp;gt;&lt;br /&gt;
	  This is an obsolete string class, aliased to &amp;#039;UniString&amp;#039;.&lt;br /&gt;
	  It has a number of limitations such as a 64k length limit. You can have the buffer with &amp;lt;code&amp;gt;GetBuffer()&amp;lt;/code&amp;gt;, but it&amp;#039;s Utf-16 encoded.&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A couple of conversion functions are really useful here, particularly:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;rtl::OString aOString = ::rtl::OUStringToOString (aOUString, RTL_TEXTENCODING_UTF8);&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;And the reverse:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;rtl::OUString aOUString = ::rtl::OStringToOUString (aOString, RTL_TEXTENCODING_UTF8);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you just want to programattically print out a string for debugging purposes you probably want define a macro like :&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;#define CHAR_POINTER(THE_OUSTRING) ::rtl::OUStringToOString (THE_OUSTRING, RTL_TEXTENCODING_UTF8).pData-&amp;gt;buffer&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;and use it like :&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;printf ( &amp;quot;SvXMLNamespaceMap::AddIfKnown : %s / %s\n&amp;quot;, CHAR_POINTER(rPrefix), CHAR_POINTER(rName) );&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;For the obsolete String class, aliased UniString, it&amp;#039;s like :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;printf ( &amp;quot;rGrfName : %s\n&amp;quot;, ByteString( rGrfName, RTL_TEXTENCODING_UTF8).GetBuffer() );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To print the value of rtl::OUString directly in the debugger, you can use &amp;lt;code&amp;gt;dbg_dump()&amp;lt;/code&amp;gt;.  It is intended to be called interactively from the debugger, in both debug and non-debug builds of OOo.  You can see the definition in sal/rtl/source/debugprint.cxx.&lt;br /&gt;
&lt;br /&gt;
Some code snippets about manipulating those objects can be found on the codesnippets service page : [http://codesnippets.services.openoffice.org/Office/cpp.xml]&lt;br /&gt;
&lt;br /&gt;
== Linkoo &amp;amp; Limitations ==&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Linkoo is the tool that implements the &amp;lt;code&amp;gt;-l&amp;lt;/code&amp;gt;&lt;br /&gt;
      functionality of &amp;lt;tt&amp;gt;[[bin/ooinstall]]&amp;lt;/tt&amp;gt;. It essentially&lt;br /&gt;
      sym-links files of similar names into your local tree,&lt;br /&gt;
      allowing a fast development iteration.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      It is however slightly limited - some of the modules&lt;br /&gt;
      cannot be linked for various reasons; these are:&lt;br /&gt;
      &amp;lt;code&amp;gt;cppuhelper&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;configmgr&amp;lt;/code&amp;gt;,&lt;br /&gt;
      thus in the rare case that these are altered, they&lt;br /&gt;
      must be copied manually into &amp;lt;code&amp;gt;/opt/OOInstall/program&amp;lt;/code&amp;gt;.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition symlinks cannot be used for soffice.bin, and this is more commonly altered - it has to be installed from &amp;lt;code&amp;gt;desktop/unxlngi4.pro/bin/soffice&amp;lt;/code&amp;gt; NB. with an appended &amp;#039;.bin&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Debugging]]&lt;br /&gt;
* [[Using_Cpp_with_the_OOo_SDK|Using C++ with OOoSDK]]&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{{Hacking|Languages}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=FAQ&amp;diff=105788</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=FAQ&amp;diff=105788"/>
		<updated>2008-12-29T02:52:08Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Development FAQ}}&lt;br /&gt;
&lt;br /&gt;
[[Documentation/FAQ|There are also user FAQs!]]&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      So no-one ever asked me these, I just made them up to astro-turf&lt;br /&gt;
      a bit (safer, wipe-clean, more durable questions).&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why do branches like &amp;#039;mws_srx645&amp;#039; have odd numbers in them ? ==&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      By consulting various oracles, entrails etc. it transpires that&lt;br /&gt;
      in theory this number once incremented weekly, there being weekly&lt;br /&gt;
      freezes and hence solvers, development environments.&lt;br /&gt;
      The &amp;#039;mws&amp;#039; stands for &amp;#039;Master Workspace&amp;#039;. Master Workspaces for releases&lt;br /&gt;
      are on CVS branches. Those branches are named with Master Workspace &lt;br /&gt;
      name, f.e. &amp;#039;mws_ooh680&amp;#039; is the name of the branch of workspace OOH680,&lt;br /&gt;
      used for OpenOffice.org 2.4.&lt;br /&gt;
      The latest 3.0 development is done with the DEV300 stem ob CVS HEAD;&lt;br /&gt;
      with auto-incrementing milestones; hence milestone tags like &lt;br /&gt;
      &amp;lt;code&amp;gt;DEV300_m5&amp;lt;/code&amp;gt; would be common.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why does XYZ require Java ? up-stream/Sun are so evil !? ==&lt;br /&gt;
&lt;br /&gt;
Nah up-stream just use the best tool to hand, and have a different set        world-view to you, where Java is an engineering solution to their cross        platform problems. By using Java StarDivision can avoid having to re-invent        and then maintain an essentially competing cross-platform layer. There is        no malice here whatsoever; just pragmatic engineering from a different perspective.&lt;br /&gt;
&lt;br /&gt;
See [[Java and OpenOffice.org]]&lt;br /&gt;
&lt;br /&gt;
== Why is [t]csh so broken ? ==&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      This is rather inscrutable; some particularly curious brokenness&lt;br /&gt;
      would be the way piping commands on stdin is crucially different&lt;br /&gt;
      to inputting them from the tty thus:&lt;br /&gt;
      &amp;lt;code&amp;gt;echo &amp;#039;echo #define DLL_NAME &amp;quot;libsch641li.so&amp;quot; &amp;amp;gt;./foo.hxx&amp;#039; | /bin/tcsh -s&amp;lt;/code&amp;gt;&lt;br /&gt;
      fails to do anything whereas typing the same thing into the shell&lt;br /&gt;
      works just fine. Even more oddly:&lt;br /&gt;
      &amp;lt;code&amp;gt;tcsh -fc &amp;#039;echo #define DLL_NAME &amp;quot;libsch641li.so&amp;quot; &amp;amp;gt;./foo.hxx&amp;#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
      does do the right thing. See also [http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ csh].&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== I just tried to re-locate the build, why doesn&amp;#039;t it work ? ==&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      The simple answer is: you need to run &amp;lt;code&amp;gt;relocate /path/to/new/build&amp;lt;/code&amp;gt;;&lt;br /&gt;
      another more complex answer is:&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Well, &amp;lt;b&amp;gt;assuming&amp;lt;/b&amp;gt; you have re-configured things (LinuxIntelEnv.Set will&lt;br /&gt;
      need paths tweaking too &amp;amp;mdash; and re-importing to your shell) &amp;amp;mdash; then it&amp;#039;s most &lt;br /&gt;
      likely down to the ubiquitous non-relative paths, coded in lots&lt;br /&gt;
      of generated / built files, particularly &amp;#039;.dpc*&amp;#039; (dependency)&lt;br /&gt;
      files. Try:&lt;br /&gt;
      &amp;lt;code&amp;gt;find -name &amp;#039;*.dpc*&amp;#039; -exec rm {} \;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      The stlport does some really broken things, so&lt;br /&gt;
      you will also need to edit the &amp;#039;stl_gcc.h&amp;#039; inside the solver/, and replace the&lt;br /&gt;
      two path instances there (see inc/stl/config/stl_gcc.h. )&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CVS says &amp;#039;Fatal Error aborting. [acc] no such user&amp;#039;, why ? ==&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      While of course it&amp;#039;s possible that your user name is not registered; often&lt;br /&gt;
      this just means your ~/.cvspass got lost and/or that you haven&amp;#039;t logged in.&lt;br /&gt;
      cvs login, and repeat the command.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What does &amp;#039;.pro&amp;#039; in &amp;#039;unxlngi4.pro&amp;#039; mean ? ==&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      &amp;lt;i&amp;gt;Pro&amp;lt;/i&amp;gt;duct &amp;amp;mdash; isn&amp;#039;t it obvious ?&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What does OpenOffice really look like ? ==&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
       Today I found a photograph of it on my system, so I stuck it in here:&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    http://go-oo.org/images/layers.png&amp;lt;br/&amp;gt;Abstraction Layers&lt;br /&gt;
&lt;br /&gt;
SW:  Star Writer&amp;lt;br/&amp;gt;&lt;br /&gt;
SD:  Star Draw&amp;lt;br/&amp;gt;&lt;br /&gt;
SC:  Star Calc&amp;lt;br/&amp;gt;&lt;br /&gt;
SCH: Star Chart&amp;lt;br/&amp;gt;&lt;br /&gt;
SFX: Star Framework ???&amp;lt;br/&amp;gt;&lt;br /&gt;
SVX: Star View X for miscellany ?, it&amp;#039;s a bit of a dumping ground for dialogs and shared between apps code&amp;lt;br/&amp;gt;&lt;br /&gt;
UNO: Universal Network Objects&amp;lt;br/&amp;gt;&lt;br /&gt;
UCB: Universal Content Broker&amp;lt;br/&amp;gt;&lt;br /&gt;
SBL: Scripting And Basic Library&amp;lt;br/&amp;gt;&lt;br /&gt;
SO:  ???&amp;lt;br/&amp;gt;&lt;br /&gt;
VOS: Virtual Operating System&amp;lt;br/&amp;gt;&lt;br /&gt;
VCL: Visual Class Library&amp;lt;br/&amp;gt;&lt;br /&gt;
STL: Standard Template Library&amp;lt;br/&amp;gt;&lt;br /&gt;
RTL: Run Time Library&amp;lt;br/&amp;gt;&lt;br /&gt;
OSL: Operating System Library&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I take a screenshot of OO.o ? ==&lt;br /&gt;
&lt;br /&gt;
OOo does some very odd things with X resources, thus some conventional&lt;br /&gt;
screenshot apps fail to take accurate shots. ImageMagick&amp;#039;s &amp;#039;import&amp;#039;&lt;br /&gt;
however does a good job; use:&lt;br /&gt;
&lt;br /&gt;
 import foo.png&lt;br /&gt;
&lt;br /&gt;
from the console, or&lt;br /&gt;
&lt;br /&gt;
 sleep 2; import -window root foo.png&lt;br /&gt;
&lt;br /&gt;
instead.&lt;br /&gt;
&lt;br /&gt;
NB. unless you want your world to look tiny, you need to turn large toolbar icons first.&lt;br /&gt;
&lt;br /&gt;
You can also use [http://www.gimp.org The GIMP] to Acquire Screenshots of OpenOffice.org.  &lt;br /&gt;
From the Gimp:&lt;br /&gt;
*  Click &amp;#039;&amp;#039;&amp;#039;File&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*  Click &amp;#039;&amp;#039;&amp;#039;Aquire&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*  Click &amp;#039;&amp;#039;&amp;#039;Screen Shot&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Why does the code look so ugly? ==&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      The authors must be using a really strange editor.&lt;br /&gt;
      It &amp;lt;em&amp;gt;thinks&amp;lt;/em&amp;gt; tab stops are on every fourth column.&lt;br /&gt;
      Of course, the files come out ugly in Unix editors which &amp;lt;em&amp;gt;know&amp;lt;/em&amp;gt;&lt;br /&gt;
      that tabs are eight characters wide.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      If you happen to use&lt;br /&gt;
      [http://www.gnu.org/software/emacs/ a Real Editor],&lt;br /&gt;
      we have some pink glasses to sell to you. Paste the contents of&lt;br /&gt;
      [http://go-ooo.org/emacs.el] into your &amp;lt;tt&amp;gt;.emacs&amp;lt;/tt&amp;gt;,&lt;br /&gt;
      or load it with a line like this: &amp;lt;tt&amp;gt;(load &amp;quot;/path/to/that/file.el&amp;quot;)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
      Don&amp;#039;t forget to adapt &amp;lt;tt&amp;gt;my-openoffice-path-regexp&amp;lt;/tt&amp;gt; to your needs.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Henceforth emacs will use 4-column tabs for your OOo source files.&lt;br /&gt;
      (And use &amp;lt;em&amp;gt;C++-Mode&amp;lt;/em&amp;gt; for &amp;lt;tt&amp;gt;sdi&amp;lt;/tt&amp;gt;-, &amp;lt;tt&amp;gt;hrc&amp;lt;/tt&amp;gt;-,&lt;br /&gt;
      and &amp;lt;tt&amp;gt;src&amp;lt;/tt&amp;gt;-files.) Alternatively if you are sufficiently set in&lt;br /&gt;
      your ways that you can&amp;#039;t cope with investing these few seconds do:&lt;br /&gt;
      &amp;lt;code&amp;gt;M-x set-variable\ntab-width 4&amp;lt;/code&amp;gt; &amp;amp;amp; learn to love change.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Apparently if you use vi you can do: &amp;lt;code&amp;gt;:set ts=4 sw=4&amp;lt;/code&amp;gt;, and&lt;br /&gt;
      good luck to you. For a better vim, use &amp;lt;code&amp;gt;:set ts=4 sw=4 et&amp;lt;/code&amp;gt; to also expand tabs to spaces, as this is what new code should use.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Where can I suggest ideas for what OpenOffice.org should do and what I don&amp;#039;t/do like about it? ==&lt;br /&gt;
&amp;#039;&amp;#039;Awaiting an answer from a kind contributor.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== How can OOo be used to author wiki pages at a MediaWiki site?==&lt;br /&gt;
&amp;#039;&amp;#039;Awaiting an answer from a kind contributor.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Can the content of a MediaWiki hosted wiki be exported into OOo? ==&lt;br /&gt;
&amp;#039;&amp;#039;Awaiting an answer from a kind contributor.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The dream idea is to take a complete wiki and flow it into a filter so that it can be exported into a series of OOo documents, or one larger OOo document. This would allow writters to start a wiki and then finish with a book.&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m not sure if they can be exported from MediaWiki to OOo, but the reverse is possible. If you follow :- [[http://wiki.services.openoffice.org/wiki/Odt2Wiki Odt2 To Wiki]]&lt;br /&gt;
&lt;br /&gt;
== How can OOo be used to author blog pages at a Blogspot.com hosted site? ==&lt;br /&gt;
A filter exists for MS Word users to write blog articles -- and then upload the content to the blog easily. A similiar add-on is [http://people.redhat.com/caolanm/oooblogger/ oooblogger] which is an experimental blogger plugin for OOo which is not complete, but is a suitable starting position for a developer (python) who wants to tackle this area&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[CvsFAQ]] - for CVS problems&lt;br /&gt;
* [[OOo_Ergonomics]] - why is it so painful to use ?&lt;br /&gt;
* [[Bibliographic/FAQ]] - for bibliographic problems&lt;br /&gt;
* [[CWS|How to use Childworkspaces]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=OOoHelpOutline&amp;diff=105787</id>
		<title>OOoHelpOutline</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=OOoHelpOutline&amp;diff=105787"/>
		<updated>2008-12-29T02:51:38Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Candidate}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welcome to the outline of existing OpenOffice.org user resources!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;border:1px solid #CC7777; background-color: #FFEDED; padding: 4px; text-align: left; font-weight: bold; margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
[[image:documentation_exclamation.png|40px]] This article is outdated. (But it may still contain a lot of helpful links)&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The OOo Help Outline moved to OpenOffice.org&amp;#039;s Wiki to help open its accessibility as much as possible to the OpenOffice.org community, so that all may help to keep it current and reliable.&lt;br /&gt;
&lt;br /&gt;
See also [[Press coverage on OpenOffice.org]] for various articles, reviews and tips related to OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
==Product==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
* [[Documentation/Dashboard/Application Online Help|Application Online Help]]&lt;br /&gt;
* [http://www.openoffice.org/ OpenOffice.org&amp;#039;s Home Page]&lt;br /&gt;
** [http://www.openoffice.org/product/ OpenOffice.org Product Description]&lt;br /&gt;
** [http://www.openoffice.org/sitemap.html OpenOffice.org&amp;#039;s Site Map]&lt;br /&gt;
** [http://marketing.openoffice.org/2.0/featureguide.html OpenOffice.org 2.0 Office Suite - Guide to New Features]&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/index.html OpenOffice.org User Guide]&lt;br /&gt;
* [http://support.openoffice.org/index.html OpenOffice.org Support Area]&lt;br /&gt;
**List of links to free community support, commercial support and training,&amp;lt;br&amp;gt; OpenOffice.org books, and general community resources.&lt;br /&gt;
&lt;br /&gt;
* [http://openoffice.start4all.com/ openoffice.org.start4all.com]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/OpenOffice.org OpenOffice.org at Wikipedia] ([http://en.wikipedia.org/wiki/Category:OpenOffice.org OpenOffice.org Category])&lt;br /&gt;
&lt;br /&gt;
Related Products&lt;br /&gt;
* [[StarOffice|StarOffice Office Suite]]&lt;br /&gt;
* [http://portableapps.com/apps/office/suites/portable_openoffice Portable OpenOffice.org]&lt;br /&gt;
&lt;br /&gt;
===FAQs===&lt;br /&gt;
&lt;br /&gt;
* [[Documentation/FAQ|Documentation Project FAQs]]&lt;br /&gt;
* [http://www.openoffice.org/faq.html OpenOffice.org&amp;#039;s General FAQs]&lt;br /&gt;
* [http://www.bytebot.net/openoffice/faq.html The OpenOffice.org UnOfficial FAQs by Colin Charles]&lt;br /&gt;
* [http://www.openoffice.org/FAQs/fontguide.html Font Troubleshooting Guide]&lt;br /&gt;
&lt;br /&gt;
Also from this Wiki:&lt;br /&gt;
* [[Font-FAQ]] (in progress)&lt;br /&gt;
* [[Bibliographic/Hints and Tips]]&lt;br /&gt;
* [[VBA|MS Office VBA Macros]]&lt;br /&gt;
&lt;br /&gt;
===Downloads===&lt;br /&gt;
&lt;br /&gt;
* [http://download.openoffice.org/#latest OpenOffice.org Download Central]&lt;br /&gt;
* [http://download.openoffice.org/2.0.2/index.html OpenOffice.org 2.0.2]&lt;br /&gt;
* [http://download.openoffice.org/1.1.5/index.html OpenOffice.org 1.1.5]&lt;br /&gt;
* [http://www.openoffice.org/dev_docs/source/1.0.3/index.html OpenOffice.org 1.0.3.1] (use this for Windows 95)&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/setup_guide2/index.html OpenOffice.org&amp;#039;s Setup Guides for 1.x and 2.x]&lt;br /&gt;
** Good stuff: version 2.x of the Setup Guide provides extensive instructions&amp;lt;br&amp;gt;for installation on &amp;#039;&amp;#039;many&amp;#039;&amp;#039; Linux distros and UNIXes (in addition to Windows):&lt;br /&gt;
*** Linux: RPM-based distro, Debian-based distro, Gentoo, Slackware &lt;br /&gt;
*** UNIX: Solaris, FreeBSD, Mac OS X&lt;br /&gt;
** Another install guide for Debian: [http://www.reallylinux.com/docs/oo2install.shtml Installing OpenOffice.org 2.0 for Debian]&lt;br /&gt;
** [http://www.oooforum.org/forum/viewtopic.phtml?t=33125 Adding interface language to existing OpenOffice.org]&lt;br /&gt;
* [http://www.openoffice.org/dev_docs/instructions.html OOo&amp;#039;s Instructions for Installing and Setting Up OpenOffice.org 1.1.x]&lt;br /&gt;
* [http://download.openoffice.org/index.html OpenOffice.org&amp;#039;s Download Central]&lt;br /&gt;
* [http://user.services.openoffice.org/en/forum/viewforum.php?f=6 OpenOffice.org Forum: Setup and Configuration]&lt;br /&gt;
* [http://user.services.openoffice.org OpenOffice.org Community Forum]&lt;br /&gt;
* [http://www.hypermax.net.au/~settantta/ooo/default.html Alex Fisher&amp;#039;s OpenOffice.org Introduction]&lt;br /&gt;
* [http://www.openoffice.org/FAQs/build_faq.html Build FAQs for OpenOffice.org]&lt;br /&gt;
&lt;br /&gt;
* Dictionaries: Please see [[OOoHelpOutline#Dictionaries|the Dictionaries sub-section]] for further information.&lt;br /&gt;
* Java issues&lt;br /&gt;
** [http://java.com/java/download/index.jsp Java.sun.com] - Download the [[Wikipedia:JRE|Java Runtime]] for use with OpenOffice.org (required by Base and Wizards)&lt;br /&gt;
** See also [[Java and OpenOffice.org]] for more information&lt;br /&gt;
&lt;br /&gt;
* Linux/BSD issues&lt;br /&gt;
** [https://wiki.ubuntu.com/SCIM SCIM IME and OpenOffice.org]: Workaround for the gcc ABI incompatibility issue under Linux/BSD.&lt;br /&gt;
** [http://www.bluethingy.com/linux/rh8menu.html Editing GNOME2 Menus] for Linux/BSD users&lt;br /&gt;
&lt;br /&gt;
* Mac issues: for Mac users, please see &lt;br /&gt;
** [[http://porting.openoffice.org/mac/ Mac OS X Porting project for OpenOffice.org ]] and&lt;br /&gt;
** [[MacOS_X|OpenOffice.org for Mac OS X Development pages]]&lt;br /&gt;
&lt;br /&gt;
===OpenOffice.org Applications===&lt;br /&gt;
&lt;br /&gt;
====Calc====&lt;br /&gt;
&lt;br /&gt;
* [http://sc.openoffice.org/ OpenOffice.org&amp;#039;s Spreadsheet Project]&lt;br /&gt;
* [http://graphics.openoffice.org/chart/chart.html OpenOffice.org Graphics Applications – Charts]&lt;br /&gt;
* [http://documentation.openoffice.org/HOW_TO/index.html OpenOffice.org&amp;#039;s How-To Documents]&lt;br /&gt;
* [[Documentation/FAQ/Calc|Spreadsheet FAQ]]&lt;br /&gt;
* [http://sc.openoffice.org/addin_howto.html How to add-in in OpenOffice.org Calc]&lt;br /&gt;
* [http://user.services.openoffice.org/en/forum/viewforum.php?f=9 OpenOffice.org Community Forum]&lt;br /&gt;
* [[Documentation/OOoAuthors_User_Manual/Getting_Started/Getting_Started_with_Calc|Getting Started with Calc]]&lt;br /&gt;
* [http://www.richhillsoftware.com/ OpenOffice Calc Tips]&lt;br /&gt;
* &amp;lt;!-- http://www.nostabo.net/openoffice.php OpenOffice.org Calc Tutorials and Resources --&amp;gt;&lt;br /&gt;
* [http://spreadsheets.about.com/od/openofficecalc/ OpenOffice Calc Tutorials and Tips]&lt;br /&gt;
* [http://www.erack.de/bookmarks/D.html#SpreadSheet Links: Develop (targets SpreadSheet section)]&lt;br /&gt;
* [http://www.phptr.com/articles/article.asp?p=430837 Make Calc Spreadsheets Dance for You in OpenOffice.org]&lt;br /&gt;
&lt;br /&gt;
====Writer====&lt;br /&gt;
&lt;br /&gt;
* [http://sw.openoffice.org/ OpenOffice.org&amp;#039;s Word Processing Project]&lt;br /&gt;
* [http://graphics.openoffice.org/chart/chart.html OpenOffice.org Graphics applications – Charts]&lt;br /&gt;
* [http://documentation.openoffice.org/HOW_TO/index.html OpenOffice.org&amp;#039;s How-To Documents]&lt;br /&gt;
* [[Documentation/FAQ/Writer|Word Processor FAQ Index Page]]&lt;br /&gt;
* [http://user.services.openoffice.org/en/forum/viewforum.php?f=7 OpenOffice.org Community Forum]&lt;br /&gt;
* [http://prdownloads.sourceforge.net/ooodocs/writer_guide_en_1.0.1.zip?download OpenOffice.org Writer Guide] - for OOo 1.0.1&lt;br /&gt;
* [http://www.taming-openoffice-org.com/writer/index.htm Taming OpenOffice.org on Writer]&lt;br /&gt;
* [http://www.onlineconnections.com.au/public/openoffice/brochureprinting.html Producing a Brochure or Booklet by Kelvin]&lt;br /&gt;
* [http://lingucomponent.openoffice.org/download_dictionary.html Spelling, Hyphenation, and Thesaurus Dictionaries: Download / Installation]&lt;br /&gt;
* [http://ooovidtutors.sf.net/ Ooovidtutors - OpenOffice.org video tutorials by mimooh]&lt;br /&gt;
* [http://www.8daysaweek.co.uk/forums/viewtopic.php?t=34 Page Numbering in OpenOffice.org (a tutorial)]&lt;br /&gt;
* [[Documentation/OOoAuthors_User_Manual/Getting_Started/Getting_Started_with_Writer|GettingStarted with Writer]]&lt;br /&gt;
* [[Documentation/OOoAuthors_User_Manual/Writer_Guide|OpenOffice.org 2.0 Writer Guide]]&lt;br /&gt;
&lt;br /&gt;
====Draw====&lt;br /&gt;
&lt;br /&gt;
* [http://graphics.openoffice.org/ OpenOffice.org Graphics Applications Project]&lt;br /&gt;
* [http://documentation.openoffice.org/HOW_TO/index.html OpenOffice.org&amp;#039;s How-To Documents]&lt;br /&gt;
* [http://documentation.openoffice.org/faqs/drawing_graphics/index.html Drawing FAQ Index Page]&lt;br /&gt;
* [http://user.services.openoffice.org/en/forum/viewforum.php?f=11 OpenOffice.org Community Forum]&lt;br /&gt;
* &amp;#039;&amp;#039;OOoAuthors:&amp;#039;&amp;#039; &lt;br /&gt;
** [http://documentation.openoffice.org/manuals/oooauthors2/0108GS-GettingStartedWithDraw.pdf Getting Started with Draw] (free PDF)&lt;br /&gt;
** [http://documentation.openoffice.org/manuals/oooauthors2/index.html OpenOffice.org 2.0 Draw Guide] (free PDF)&lt;br /&gt;
** [http://www.lulu.com/content/285709 Buy a printed copy of the Draw Guide]&lt;br /&gt;
* Two-page PDF sample reference card for&lt;br /&gt;
** [http://www.cluesheets.com/SO8DrawCS.pdf StarOffice Draw 8.0]&lt;br /&gt;
** [http://www.cuesheets.com/OO2DrawCS.pdf OpenOffice.org Draw 2.0]&lt;br /&gt;
&lt;br /&gt;
====Impress====&lt;br /&gt;
&lt;br /&gt;
* [http://graphics.openoffice.org/ OpenOffice.org Graphics Applications Project]&lt;br /&gt;
* [http://documentation.openoffice.org/faqs/presentation/index.html Presentation FAQ Index Page]&lt;br /&gt;
* [http://user.services.openoffice.org/en/forum/viewforum.php?f=10 OpenOffice.org Community Forum]&lt;br /&gt;
* TUX Magazine: [http://www.tuxmagazine.com/node/1000179 Creating a Slide Show from OOo&amp;#039;s Built-in Templates]&lt;br /&gt;
* James Abela ELT [http://www.jamesabela.co.uk/bus/Impress.html Impress Training]&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;OOoAuthors:&amp;#039;&amp;#039; &lt;br /&gt;
** [http://documentation.openoffice.org/manuals/oooauthors2/0109GS-GettingStartedWithImpress.pdf Getting Started with Impress] (free PDF)&lt;br /&gt;
** [http://documentation.openoffice.org/manuals/oooauthors2/index.html OpenOffice.org 2.x Impress Guide] (free PDF)&lt;br /&gt;
** [http://www.lulu.com/content/881167 Buy a printed copy of the Impress Guide]&lt;br /&gt;
&lt;br /&gt;
====Math / Formula Editor====&lt;br /&gt;
&lt;br /&gt;
* [http://sw.openoffice.org/ OpenOffice.org&amp;#039;s Word Processing Project]&lt;br /&gt;
* [http://documentation.openoffice.org/HOW_TO/index.html Formula Command Reference and How-to]&lt;br /&gt;
* [http://documentation.openoffice.org/faqs/formula/index.html Math FAQ Index Page]&lt;br /&gt;
* [http://user.services.openoffice.org/en/forum/viewforum.php?f=12 OpenOffice.org Community Forum]&lt;br /&gt;
&amp;#039;&amp;#039;OOoAuthors&amp;#039;&amp;#039;&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0111GS-GettingStartedWithMath.pdf Getting Started with Math] (free PDF)&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0216WG-MathObjects.pdf Math Objects: The Equation Editor] (free PDF)&lt;br /&gt;
*: same as &amp;quot;Getting Started with Math&amp;quot; but also includes reference tables.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Third-party add-ons for OpenOffice.org Math&amp;#039;&amp;#039;&lt;br /&gt;
*[http://www.dmaths.org/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=9 Dmaths] (with [http://www.dmaths.com/dmaths/userguide/user_guide_en.html user guide]) - a Math enhancement package for OpenOffice.org licensed under GPL&lt;br /&gt;
*[http://ooolatex.sourceforge.net/ OOoLateX] - a set of OpenOffice.org macros designed to integrate LaTeX equations&lt;br /&gt;
** Check out the [http://www.oooforum.org/forum/viewtopic.phtml?t=36 LaTeX or OpenOffice.org Math] discussion at OOoForum for more detail.&lt;br /&gt;
&lt;br /&gt;
====HTML====&lt;br /&gt;
&lt;br /&gt;
* [http://sw.openoffice.org/ OpenOffice.org&amp;#039;s Word Processing Project]&lt;br /&gt;
&lt;br /&gt;
====Base and Database ====&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/OpenOffice.org_Base OpenOffice.org Base information and links at Wikipedia]&lt;br /&gt;
* [http://dba.openoffice.org/ OpenOffice.org&amp;#039;s Database Access Project]&lt;br /&gt;
** [http://dba.openoffice.org/howto/index.html OpenOffice.org Database How-Tos]&lt;br /&gt;
** [http://dba.openoffice.org/FAQ/index.html OpenOffice.org Database Tips &amp;#039;n&amp;#039; Tricks]&lt;br /&gt;
** [http://documentation.openoffice.org/HOW_TO/index.html Other OpenOffice.org&amp;#039;s How-To Documents]&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0110GS-GettingStartedWithBase.pdf Getting Started with Base]&lt;br /&gt;
* [http://sheepdogguides.com/fdb/fdb1main.htm Tutorials on using ooBase] from Sheepdog Guides &amp;#039;&amp;#039;(updated)&amp;#039;&amp;#039;&lt;br /&gt;
* [http://user.services.openoffice.org/en/forum/viewforum.php?f=13 OpenOffice.org Community Forum]&lt;br /&gt;
&lt;br /&gt;
* Macro and Base: [http://www.pitonyak.org/database/ Andrew Pitonyak&amp;#039;s OOo Base macro document]&lt;br /&gt;
* ODBC and MySQL: [http://www.unixodbc.org/doc/OOoMySQL.pdf OpenOffice.org 1.0, ODBC, and MySQL &amp;#039;How-tos&amp;#039; by John McCreesh]&lt;br /&gt;
&lt;br /&gt;
* [http://homepage.ntlworld.com/garryknight/linux/oodbase.html Creating Flatfile Databases with OOo and SO 6 by Garry Knight]&lt;br /&gt;
* [http://ericzander.com/Publications/OO_MySQL_Tutorial/index.htm OO_MySQL_Tutorial by Eric Zander] (OOo 1.x)&lt;br /&gt;
* [http://kienlein.com/pages/oo.html EDV - Systeme Kienlein]&lt;br /&gt;
* [http://openoffice.homelinux.org/index.php?module=pagemaster&amp;amp;PAGE_user_op=view_page&amp;amp;PAGE_id=4&amp;amp;MMN_position=5:3 Documenation for Database and JRE]&lt;br /&gt;
&lt;br /&gt;
===Advanced Features and Topics===&lt;br /&gt;
&lt;br /&gt;
====Macros====&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/HOW_TO/index.html OpenOffice.org&amp;#039;s How-To Documents]&lt;br /&gt;
* [http://scripting.openoffice.org/ OpenOffice.org&amp;#039;s Scripting Home Page]&lt;br /&gt;
* [http://www.ooomacros.org/ OOoMacros]&lt;br /&gt;
* [http://user.services.openoffice.org/en/forum/viewforum.php?f=20 OpenOffice.org Community Forum - Macro and API]&lt;br /&gt;
* [http://user.services.openoffice.org/en/forum/viewforum.php?f=21 OpenOffice.org Community Forum -  Code Snippets]&lt;br /&gt;
* [http://www.pitonyak.org/oo.php Andrew Pitonyak&amp;#039;s Macro Information]&lt;br /&gt;
* [http://www.darwinwars.com/lunatic/bugs/oo_macros.html Andrew Brown&amp;#039;s OpenOffice.org Macro Page]&lt;br /&gt;
* [http://homepages.paradise.net.nz/hillview/OOo/ Iannz OpenOffice.org Page]&lt;br /&gt;
* [http://www.oooforum.org/forum/viewtopic.phtml?t=4818 How to use OOo with Python on Windows]&lt;br /&gt;
* [http://ooodocs.sourceforge.net/modules.php%3fop=modload&amp;amp;amp;name=Downloads&amp;amp;amp;d_op=viewdownload&amp;amp;amp;cid=23 Templates and Macros from OOoDocs.org]&lt;br /&gt;
* [http://www.linuxjournal.com/article/7802 OOo Off the Wall: Macros and Add-ons]&lt;br /&gt;
* [http://disemia.com/software/openoffice/ dis-Emi-A Software: OpenOffice]&lt;br /&gt;
* [http://home.nikocity.de/sysentw/FAQ/SO-FAQ_English_Version/so-faq_english_version.html SO-FAQ]&lt;br /&gt;
* [http://perso.wanadoo.fr/moutou/index.html#OOoDoclink UNO/C++ programming (SXW and HTML formats)]&lt;br /&gt;
&lt;br /&gt;
====Styles====&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0206WG-IntroductionToStyles.pdf Introduction to Styles] (chapter in &amp;#039;&amp;#039;Writer Guide&amp;#039;&amp;#039;)&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0207WG-WorkingWithStyles.pdf Working with Styles] (chapter in &amp;#039;&amp;#039;Writer Guide&amp;#039;&amp;#039;)&lt;br /&gt;
* [http://www.openoffice.org/servlets/ReadMsg?msgId=685429&amp;amp;amp;listName=users Setting Up to Write Text Vertically]&lt;br /&gt;
&lt;br /&gt;
====Templates====&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0112GS-WorkingWithTemplates.pdf Working with Templates] (chapter in &amp;#039;&amp;#039;Getting Started with OOo&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/Samples_Templates/User/template/index.html User/Templates]&lt;br /&gt;
* [http://ooextras.sourceforge.net/ OOExtras]&lt;br /&gt;
* [http://ooodocs.sourceforge.net/modules.php%3fop=modload&amp;amp;amp;name=Downloads&amp;amp;amp;d_op=viewdownload&amp;amp;amp;cid=23 Templates and Macros from OOoDocs.org]&lt;br /&gt;
* [http://sourceforge.net/project/showfiles.php?group_id=170021&amp;amp;package_id=208656 Downloadable Template Extensions from OxygenOffice Professional Project]&lt;br /&gt;
&lt;br /&gt;
====XML====&lt;br /&gt;
&lt;br /&gt;
* [http://xml.openoffice.org/ OpenOffice.org XML File Format]&lt;br /&gt;
* [http://www.w3.org/XML/ Extensible Markup Language (XML)]&lt;br /&gt;
* [http://blogs.sun.com/roller/page/shudson310 Scotty&amp;#039;s Engineering Log]&lt;br /&gt;
* [http://www.oasis-open.org/committees/office/press.php OASIS Open Office XML Format TC]&lt;br /&gt;
* [http://books.evc-cit.info/ OpenOffice.org XML Essentials]&lt;br /&gt;
* [http://www.zvon.org/ ZVON.org - The Guide to the XML Galaxy]&lt;br /&gt;
* [http://www.logilab.org/projects/xmldiff/ Logilab.org - XmlDiff]&lt;br /&gt;
&lt;br /&gt;
==== Format Conversion ====&lt;br /&gt;
&lt;br /&gt;
* For [[Wikipedia:OpenDocument|OpenDocument]] converters, please see the [[Wikipedia:List_of_applications_supporting_OpenDocument#Programmatic_support.2C_filters.2C_converters|List of applications supporting OpenDocument]] at Wikipedia.&lt;br /&gt;
* [[Firefox ODFReader extension]], still under heavy development&lt;br /&gt;
* [http://xml.openoffice.org/filters.html File Format Filters and Transformation]&lt;br /&gt;
* [http://andreas.web-graphics.com/quickguide-sxw-xhtml/ Converting OpenOffice.org documents to XHTML strict with Writer2LaTeX, by Andreas Bovens]&lt;br /&gt;
* [http://www.indesko.com/en/downloads/ooo2dbk ooo2dbk]: Generating DocBook XML from OpenOffice.org 1.x documents&lt;br /&gt;
** [http://www.tldp.org/LDP/LDP-Author-Guide/html/oo2docbook.html OOo to DocBook guide] from LDP&lt;br /&gt;
* [http://nothickmanuals.info/doku.php?id=ooodokuwiki Publishing with OOo Writer and DokuWiki] -- internal support since 2.3&lt;br /&gt;
* [[Writer2Latex]] for advanced users -- internal support since 2.1&lt;br /&gt;
&lt;br /&gt;
====Dictionaries====&lt;br /&gt;
&lt;br /&gt;
* [[Dictionaries]] Spelling, Hyphenation, and Thesaurus Dictionaries: Download / Installation&lt;br /&gt;
* [http://oooconv.free.fr/wikipedia/wikipedia_en.html OOoWikipedia]: Connect OpenOffice.org to Wikipedia for dictionary and information lookup&lt;br /&gt;
* [http://ooodocs.sourceforge.net/dictinstall/index.html OpenOffice.org Dictionary Installer] (older tool for older versions of OOo)&lt;br /&gt;
* [http://ooodi.sourceforge.net/ OOodi - OpenOffice.org Dictionary Installer for Unix]&lt;br /&gt;
* [http://lingucomponent.openoffice.org The lingucomponent project]&lt;br /&gt;
&lt;br /&gt;
====Clip Art====&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/Samples_Templates/User/gallery/index.html Gallery]&lt;br /&gt;
* [http://ooextras.sourceforge.net/ OOExtras]&lt;br /&gt;
* [http://www.openclipart.org/ Open Clip Art Library]&lt;br /&gt;
* [http://srufaculty.sru.edu/david.dailey/public/public_domain.htm Images in the Public Domain]&lt;br /&gt;
* [http://earth.prohosting.com/anvils/aboutMe/intro.html OOo Xfig Clipart and Network Icons for OOoDraw by Edward Chan]&lt;br /&gt;
* [http://marketing.openoffice.org/art/ OpenOffice.org Art Project]&lt;br /&gt;
* [http://www.kfacts.com/oooart/ OOoArt]&lt;br /&gt;
* [http://ooo.nicubunu.ro/ Nicu&amp;#039;s OpenOffice.org pages]&lt;br /&gt;
* [http://hooboo.free.fr/index.php La Mouette et OpenOffice.org]&lt;br /&gt;
* [http://ooodocs.sourceforge.net/graphics/ OpenOffice.org Marketing Materials]&lt;br /&gt;
* [http://sourceforge.net/project/showfiles.php?group_id=170021&amp;amp;package_id=208656 Downloadable Gallery Extensions from OxygenOffice Professional Project]&lt;br /&gt;
&lt;br /&gt;
===Other Resources and Support Materials===&lt;br /&gt;
&lt;br /&gt;
====General====&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/ OpenOffice.org&amp;#039;s Documentation Project]&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/index.html OpenOffice.org User Guide]&lt;br /&gt;
* [http://ooodocs.sourceforge.net/ OOoDocs]&lt;br /&gt;
* [http://sourceforge.net/project/showfiles.php?group_id=43716 SourceForge.net: Project: OOoDocs: File List]&lt;br /&gt;
* [http://documentation.openoffice.org/thirdparty.html OpenOffice.org&amp;#039;s Page of Third Party Documentation]&lt;br /&gt;
* [http://ooonewsletter.blogspot.com/ The OpenOffice.org Newsletter]&lt;br /&gt;
* [http://user.services.openoffice.org OpenOffice.org Community Forum]&lt;br /&gt;
* [http://www.kaaredyret.dk/openoffice.html OpenOffice.org Links by Kaaredyret.dk]&lt;br /&gt;
* [http://www.kargs.net/openoffice.html OpenOffice.org Resource Page by Steve Karg]&lt;br /&gt;
* [http://www.tutorialsforopenoffice.org/ Tutorials for OpenOffice]&lt;br /&gt;
* [http://www.edafe.org/openoffice/index.html edafe.org: openoffice.org (esp. pointed toward win users)]&lt;br /&gt;
* [http://www.erack.de/bookmarks/O.html Links: OpenSource - OpenOffice.org]&lt;br /&gt;
* [http://www.openoffice-support.net/ Tutorials, Manuals, HowTo&amp;#039;s and more] - OOo 1.x&lt;br /&gt;
* [http://ooo.chbs.dk/links/ OpenOffice.org Links]&lt;br /&gt;
* [http://www.ooo-portal.de/ Das deutsche OpenOffice.org Portal]&lt;br /&gt;
* [http://ooo.ximian.com/hackers-guide.html Unofficial OpenOffice Hacker&amp;#039;s Guide]&lt;br /&gt;
* [http://ooolib.sourceforge.net/ OpenOffice.org Utility Library]&lt;br /&gt;
* [http://ooqstart.sourceforge.net/ Open Office QuickStarter applet]&lt;br /&gt;
* [http://del.icio.us/tag/openoffice del.icio.us/tag/openoffice]&lt;br /&gt;
* [http://why.openoffice.org/ Why OpenOffice.org]&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/index.html Getting Started with OpenOffice.org 2.0]&lt;br /&gt;
&lt;br /&gt;
====Books====&lt;br /&gt;
&lt;br /&gt;
* OpenOffice.org 2.x books&lt;br /&gt;
** [http://www.devguide.net/index.php?q=node/138 OpenOffice.org Calc: Functions &amp;amp; Formulas, First Edition]&lt;br /&gt;
** [http://www.amazon.com/OpenOffice-org-2-Guidebook-Solveig-Haugland/dp/0974312029 OpenOffice.org 2 Guidebook]&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/ASIN/0672328089 Sams Teach Yourself OpenOffice.org 2, Firefox and Thunderbird for Windows All in One]&lt;br /&gt;
** [http://www.lulu.com/content/177729 Getting Started with OpenOffice.org 2.0]&lt;br /&gt;
** [http://www.lulu.com/content/690763 OpenOffice.org 2.x Writer Guide]&lt;br /&gt;
** [http://www.lulu.com/content/881167 OpenOffice.org 2.x Impress Guide]&lt;br /&gt;
** [http://www.lulu.com/content/285709 OpenOffice.org 2.0 Draw Guide]&lt;br /&gt;
** [http://www.lulu.com/content/301623 OpenOffice.org 2.0 Migration Guide]&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/ASIN/1593270720 Hacking Openoffice.org: Tips, Tricks, and Untold Secrets]&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/ASIN/0131879928 Point &amp;amp; Click OpenOffice.org]&lt;br /&gt;
** [http://visibooks.com/writer2.html Visibooks Guide to Writer 2.0]&lt;br /&gt;
** [http://visibooks.com/calc2.html Visibooks Guide Calc 2.0]&lt;br /&gt;
** [http://visibooks.com/impress2.html Visibooks Guide Impress 2.0]&lt;br /&gt;
** [http://visibooks.com/base2.html Visibooks Guide Base 2.0]&lt;br /&gt;
** [http://www.conciseconceptsinc.com/ A Conceptual Guide to OpenOffice.org 2.0]&lt;br /&gt;
** [http://www.cafepress.com/getopenoffice OpenOffice.org and StarOffice Workbooks]&lt;br /&gt;
** [http://www.cluesheets.com/ ClueSheets] - Quick Reference Cards for [[StarOffice]] and OpenOffice.org &lt;br /&gt;
&lt;br /&gt;
* OpenOffice.org 1.x books&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/ASIN/0131407457 OpenOffice.org 1.0 Resource Kit]&lt;br /&gt;
*** [http://www.informit.com/content/downloads/OpenOfficeUpdate.pdf Special Supplement to Changes in OpenOffice.org 1.1] (free PDF download)&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/ASIN/0764542222 OpenOffice.org For Dummies]&lt;br /&gt;
** [http://www.oreilly.com/catalog/openoffice/ OpenOffice.org Writer: The Free Alternative to Microsoft Word]&lt;br /&gt;
** [http://www.hentzenwerke.com/catalog/ooo501.htm OOoSwitch: 501 Things You Wanted to Know About Switching to OpenOffice.org]&lt;br /&gt;
** [http://www.samspublishing.com/title/0672326183 Sams Teach Yourself OpenOffice.org All in One]&lt;br /&gt;
** [http://www.hentzenwerke.com/catalog/tinyooo.htm The Tiny Guide to OpenOffice.org]&lt;br /&gt;
** [http://www.hod-ami.co.il/product.asp?catalog%5Fname=hodami&amp;amp;category%5Fname=Home+and+Office&amp;amp;product%5Fid=59407 עיבוד תמלילים עם OpenOffice 1.x] ([http://www.hod-ami.co.il/images/bookdemo/59407.pdf Sample Chapter])&lt;br /&gt;
&lt;br /&gt;
* [[StarOffice]] books, mostly suitable to OpenOffice.org users&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/tg/detail/-/0789728338/ref=pd_sim_books_5/104-9698914-9518356%3fv=glance&amp;amp;amp;s=books Special Edition Using StarOffice 6.0]&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/tg/detail/-/0130384739/qid=1038357106/sr=8-4/ref=sr_8_4/103-6157785-3887854%3fv=glance&amp;amp;amp;s=books&amp;amp;amp;n=507846 StarOffice 6.0 Office Suite Companion]&lt;br /&gt;
&lt;br /&gt;
* Linux and OpenOffice.org related books&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/ASIN/1886411867 Linux in the Workplace]&lt;br /&gt;
** [http://www.amazon.com/gp/product/0131488724 Point &amp;amp; Click Linux]&lt;br /&gt;
&lt;br /&gt;
* XML, OpenOffice.org Macros and Programming&lt;br /&gt;
** [http://www.hentzenwerke.com/catalog/oome.htm OpenOffice.org Macros Explained]&lt;br /&gt;
** [http://books.evc-cit.info/ OASIS OpenDocument Essentials]&lt;br /&gt;
&lt;br /&gt;
====E Learning====&lt;br /&gt;
&lt;br /&gt;
* [http://training.bytebot.net/ ByteBot.net Training Materials]&lt;br /&gt;
* [http://www.desktoplinux.com/news/NS2978835938.html Free online OpenOffice.org support program]&lt;br /&gt;
* [http://www.itrainonline.org/itrainonline/mmtk/opensource.shtml ItrainOnline: Resources for Trainers: MMTK: Open Source Software]&lt;br /&gt;
&lt;br /&gt;
====Compatible Applications====&lt;br /&gt;
&lt;br /&gt;
* [http://www.zope.org/Products/CMF/ Content Management Framework (CMF)]&lt;br /&gt;
* [http://peccatte.karefil.com/software/Catalogue/CatalogueENG.htm Files Metadata Miner Software]&lt;br /&gt;
* [http://gramps.sourceforge.net/ Gramps]&lt;br /&gt;
* [http://www.icoya.com/ icoya]&lt;br /&gt;
* [http://www.mozilla.org/ Mozilla]&lt;br /&gt;
* [http://www.planamesa.com/neojava/en/index.php NeoOffice/J]&lt;br /&gt;
* [http://www.opengroupware.org/ OpenGroupware.org]&lt;br /&gt;
* [http://plone.org/ Plone]&lt;br /&gt;
* [http://www.bezirksreiter.de/PyOpenOffice.htm PyOpenOffice]&lt;br /&gt;
* [http://www.scholarsaid.com/ Scholar&amp;#039;s Aid]&lt;br /&gt;
* [http://www.hj-gym.dk/~hj/writer2latex/ Writer2LaTeX]&lt;br /&gt;
* [http://www.logilab.org/projects/xmldiff/ XmlDiff]&lt;br /&gt;
* [http://zope.org/ Zope]&lt;br /&gt;
* [http://ooop.sf.net/ OxygenOffice Professional]&lt;br /&gt;
&lt;br /&gt;
==Web Site==&lt;br /&gt;
&lt;br /&gt;
===Search===&lt;br /&gt;
&lt;br /&gt;
* [http://www.openoffice.org/ Search Bar in Upper Right Corner]&lt;br /&gt;
* [http://support.openoffice.org/search.html OOo Site Search using Google]&lt;br /&gt;
* [http://www.openoffice.org/project/www/issues/query.cgi Issue Tracker Query Page]&lt;br /&gt;
* [http://darwinwars.com/lunatic/bugs/quickbugs.html Simplified Bug Finder by Andrew Brown]&lt;br /&gt;
* [http://www.openoffice.org/mail_list.html Mail List Archives]&lt;br /&gt;
* [http://www.openoffice.org/servlets/SearchList?listName=users Search the Users List Archive]&lt;br /&gt;
* [http://search.gmane.org/ Gmane Newsgroup Search Page]&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
&lt;br /&gt;
* [http://www.openoffice.org/nonav/servlets/HelpTOC OpenOffice.org&amp;#039;s Web Site Help TOC]&lt;br /&gt;
* [http://documentation.openoffice.org/ OpenOffice.org&amp;#039;s Documentation Project]&lt;br /&gt;
* [http://lingucomponent.openoffice.org/download_dictionary.html Spelling, Hyphenation, and Thesaurus Dictionaries: Download / Installation]&lt;br /&gt;
* [http://www.openoffice.org/mail_list.html OpenOffice.org&amp;#039;s Mail Lists]&lt;br /&gt;
* [http://www.openoffice.org/servlets/SummarizeList?listName=users Browse the Users List]&lt;br /&gt;
* [http://www.openoffice.org/servlets/SearchList?listName=users Search the Users List Archives]&lt;br /&gt;
* [http://development.openoffice.org/index.html OpenOffice.org for Developers]&lt;br /&gt;
* [http://api.openoffice.org/docs/DevelopersGuide/DevelopersGuide.htm Developer&amp;#039;s Guide]&lt;br /&gt;
* [http://udk.openoffice.org/python/python-bridge.html Python-UNO bridge]&lt;br /&gt;
&lt;br /&gt;
===Issue Tracker===&lt;br /&gt;
&lt;br /&gt;
* [http://qa.openoffice.org/issue_handling/project_issues.html OpenOffice.org&amp;#039;s Bugs and Issues Info]&lt;br /&gt;
* [http://qa.openoffice.org/index.html OpenOffice.org&amp;#039;s QA Project]&lt;br /&gt;
* [http://www.kegel.com/openoffice/triage.html OpenOffice.org Issues by Dan Kegel]&lt;br /&gt;
* [http://www.openoffice.org/project/www/issues/query.cgi Query Page for Existing Issue Reports]&lt;br /&gt;
* [http://darwinwars.com/lunatic/bugs/quickbugs.html Simplified Bug Finder by Andrew Brown]&lt;br /&gt;
* [http://www.openoffice.org/servlets/SearchList?listName=users Search the Users List Archives]&lt;br /&gt;
&lt;br /&gt;
===Community===&lt;br /&gt;
&lt;br /&gt;
* [http://www.openoffice.org/ OpenOffice.org&amp;#039;s Home Page]&lt;br /&gt;
* [http://marketing.openoffice.org/index.html OpenOffice.org Marketing Project]&lt;br /&gt;
* [http://user.services.openoffice.org OpenOffice.org Community Forum]&lt;br /&gt;
* [http://www.openoffice.org/copyright/copyrightapproved.html A list of folks who have filed OOo copyright assignments]&lt;br /&gt;
* [http://www.openoffice.org/welcome/credits.html A list fo folks who have contributed to OOo]&lt;br /&gt;
* [http://www.openoffice.org/mail_list.html OpenOffice.org&amp;#039;s Mail Lists: Browse, Search or Subscribe]&lt;br /&gt;
* [http://www.openoffice.org/project/www/issues/query.cgi Issue Tracker Query Page]&lt;br /&gt;
* IRC chat channel at irc.freenode.net#openoffice.org&lt;br /&gt;
&lt;br /&gt;
===Projects===&lt;br /&gt;
&lt;br /&gt;
* [http://projects.openoffice.org/index.html Project Descriptions, Leaders, and Links to Project Pages]&lt;br /&gt;
&lt;br /&gt;
===Native Languages===&lt;br /&gt;
&lt;br /&gt;
* [http://lingucomponent.openoffice.org/download_dictionary.html Spelling, Hyphenation, and Thesaurus Dictionaries: Download / Installation]&lt;br /&gt;
* [http://ooodocs.sourceforge.net/dictinstall/index.html OpenOffice.org Dictionary Installer] (older tool for older versions of OOo)&lt;br /&gt;
* [http://l10n.openoffice.org/all_supported_languages.html l10n - All Supported Languages]&lt;br /&gt;
* [http://l10n.openoffice.org/languages.html Localization Contact Table]&lt;br /&gt;
* [http://native-lang.openoffice.org/ Native Language Confederation]&lt;br /&gt;
&lt;br /&gt;
=== Third Party Sites ===&lt;br /&gt;
&lt;br /&gt;
* [http://oooauthors.org/ OOoAuthors] for community contributions&amp;lt;br&amp;gt; &amp;amp;nbsp; on [http://oooauthors.org/en/authors/userguide2/ User Guide] and [http://oooauthors.org/en/FAQs/faqfolder_view FAQ] authoring&lt;br /&gt;
* [http://www.digitaldistribution.com/about/lessons/ OpenOffice.org 2.0 lessons in Flash format]&lt;br /&gt;
* [http://business.newsforge.com/article.pl?sid=05/11/09/2044220 OpenOffice.org training videos in Flash]&lt;br /&gt;
* [http://plan-b-for-openoffice.org Plan-B for OpenOffice.org - Support for non technical users]&lt;br /&gt;
* [http://inpics.net/ In Pictures: Online computer tutorials based on pictures]&lt;br /&gt;
** [http://inpics.net/writer2.html Writer 2.0 In Pictures]&lt;br /&gt;
** [http://inpics.net/calc2.html Calc 2.0 In Pictures]&lt;br /&gt;
** [http://inpics.net/impress2.html Impress 2.0 In Pictures]&lt;br /&gt;
** [http://inpics.net/base2.html Base 2.0 In Pictures]&lt;br /&gt;
* [http://user.services.openoffice.org OpenOffice.org Community Forum]&lt;br /&gt;
* [http://ooonewsletter.blogspot.com/ OpenOffice.org Newsletter]&lt;br /&gt;
* [http://ooextras.sourceforge.net/ OOExtras: Extras for OpenOffice.org]&lt;br /&gt;
* [http://www.taming-openoffice-org.com/ Taming OpenOffice.org]&lt;br /&gt;
* [http://openoffice.blogs.com/ OpenOffice.org Tips, Tricks and Ideas]&lt;br /&gt;
* [http://mindmeld.cybersite.com.au/ OpenOffice.org Knowledgebase]&lt;br /&gt;
* [http://www.whatisopenoffice.org/ What is OpenOffice.org?]&lt;br /&gt;
* [http://oooconv.free.fr/wikipedia/wikipedia_en.html OOoWikipedia-Plugin]&lt;br /&gt;
* [http://www.gnome.org/projects/ooo/ GNOME/OpenOffice.org]&lt;br /&gt;
* [http://kde.openoffice.org/ KDE Integration Project]&lt;br /&gt;
* [http://www.opencards.info OpenCards] - A free flashcard learning extension for OpenOffice Impress&lt;br /&gt;
* [http://www.OOoNinja.com OpenOffice.org Ninja: Upcoming features, tips, tutorials, news]&lt;br /&gt;
&lt;br /&gt;
===Developer support===&lt;br /&gt;
&lt;br /&gt;
* [http://development.openoffice.org/ OpenOffice.org for Developers]&lt;br /&gt;
* [http://planet.go-oo.org/ Planet OpenOffice.org - Developer News]&lt;br /&gt;
* [http://perso.wanadoo.fr/moutou/index.html#OOoDoclink UNO automation (in C++)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Stub_build_faq&amp;diff=105786</id>
		<title>Stub build faq</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Stub_build_faq&amp;diff=105786"/>
		<updated>2008-12-29T02:50:31Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added Category:Build_System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a stub for the Build FAQ&lt;br /&gt;
&lt;br /&gt;
[http://www.openoffice.org/FAQs/build_faq.html Build FAQ]&lt;br /&gt;
&lt;br /&gt;
http://www.openoffice.org/FAQs/build_faq.html&lt;br /&gt;
&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Stub_build_faq&amp;diff=105785</id>
		<title>Stub build faq</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Stub_build_faq&amp;diff=105785"/>
		<updated>2008-12-29T02:49:38Z</updated>

		<summary type="html">&lt;p&gt;DavidRoss: added stub page for build faq&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a stub for the Build FAQ&lt;br /&gt;
[http://www.openoffice.org/FAQs/build_faq.html Build FAQ]&lt;/div&gt;</summary>
		<author><name>DavidRoss</name></author>
	</entry>
</feed>