• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

.git-hooks/H07-Oct-2020-566399

.github/H07-Oct-2020-21

UnoControls/H07-Oct-2020-6,1483,304

accessibility/H07-Oct-2020-33,64321,711

android/H03-May-2022-25,96718,644

animations/H07-Oct-2020-2,2161,592

apple_remote/H07-Oct-2020-2,1101,521

avmedia/H07-Oct-2020-11,6277,793

basctl/H07-Oct-2020-39,13629,949

basegfx/H07-Oct-2020-30,78621,616

basic/H07-Oct-2020-74,77358,765

bean/H07-Oct-2020-5,8363,413

bin/H03-May-2022-18,01913,704

binaryurp/H07-Oct-2020-5,7204,239

bridges/H07-Oct-2020-50,83238,037

canvas/H03-May-2022-36,59323,348

chart2/H03-May-2022-190,270144,209

cli_ure/H03-May-2022-13,2779,968

codemaker/H07-Oct-2020-12,20210,357

comphelper/H07-Oct-2020-31,63222,131

compilerplugins/H03-May-2022-90,75977,127

config_host/H07-Oct-2020-940686

configmgr/H07-Oct-2020-16,01512,345

connectivity/H07-Oct-2020-181,751130,986

cppcanvas/H07-Oct-2020-11,7697,772

cppu/H07-Oct-2020-18,70615,152

cppuhelper/H07-Oct-2020-17,44913,945

cpputools/H07-Oct-2020-758541

cui/H07-Oct-2020-166,339142,146

dbaccess/H07-Oct-2020-189,860141,308

desktop/H03-May-2022-68,29949,137

distro-configs/H07-Oct-2020-564505

drawinglayer/H07-Oct-2020-44,75332,012

dtrans/H07-Oct-2020-13,7107,947

editeng/H07-Oct-2020-79,50561,329

embeddedobj/H07-Oct-2020-21,78114,929

embedserv/H07-Oct-2020-9,7536,753

emfio/H03-May-2022-8,0306,420

eventattacher/H07-Oct-2020-972669

extensions/H07-Oct-2020-114,96984,706

external/H07-Oct-2020-63,15347,168

extras/H07-Oct-2020-318,322311,880

filter/H07-Oct-2020-245,446207,398

forms/H07-Oct-2020-65,54143,866

formula/H07-Oct-2020-13,73411,689

fpicker/H07-Oct-2020-24,44216,975

framework/H07-Oct-2020-107,94670,587

helpcompiler/H07-Oct-2020-2,6582,019

helpcontent2/H03-May-2022-324,177247,437

hwpfilter/H07-Oct-2020-22,17716,972

i18nlangtag/H07-Oct-2020-7,9216,354

i18npool/H07-Oct-2020-487,537473,251

i18nutil/H07-Oct-2020-5,7824,993

icon-themes/H07-Oct-2020-2,5952,045

idl/H07-Oct-2020-5,1503,893

idlc/H07-Oct-2020-14,28510,926

include/H07-Oct-2020-388,969202,939

instsetoo_native/H07-Oct-2020-7,3866,560

io/H07-Oct-2020-9,4136,686

ios/H03-May-2022-8,7627,060

javaunohelper/H07-Oct-2020-10,9877,254

jurt/H07-Oct-2020-15,6999,453

jvmaccess/H07-Oct-2020-1,038597

jvmfwk/H07-Oct-2020-8,8375,938

l10ntools/H07-Oct-2020-8,1176,043

librelogo/H07-Oct-2020-2,6872,309

libreofficekit/H03-May-2022-10,7388,256

lingucomponent/H07-Oct-2020-5,4853,722

linguistic/H07-Oct-2020-15,26011,063

lotuswordpro/H07-Oct-2020-78,61943,582

m4/H07-Oct-2020-1,4431,310

nlpsolver/H07-Oct-2020-4,6662,716

o3tl/H07-Oct-2020-1,9991,321

odk/H03-May-2022-101,73763,325

offapi/H07-Oct-2020-331,654258,611

officecfg/H07-Oct-2020-103,04896,507

onlineupdate/H07-Oct-2020-18,15313,095

oovbaapi/H07-Oct-2020-39,36034,229

oox/H07-Oct-2020-123,03797,582

opencl/H07-Oct-2020-2,7352,049

osx/H07-Oct-2020-1,0861,079

package/H07-Oct-2020-39,01827,841

pch/H07-Oct-2020-212104

postprocess/H07-Oct-2020-2,4592,039

pyuno/H07-Oct-2020-11,9928,275

qadevOOo/H07-Oct-2020-203,724110,042

readlicense_oo/H07-Oct-2020-23,74723,489

registry/H07-Oct-2020-9,9217,214

remotebridges/H07-Oct-2020-238130

reportbuilder/H07-Oct-2020-24,32216,648

reportdesign/H07-Oct-2020-61,43846,867

ridljar/H07-Oct-2020-5,3132,780

sal/H07-Oct-2020-222,967191,801

salhelper/H07-Oct-2020-2,0531,164

sax/H07-Oct-2020-13,17210,243

sc/H03-May-2022-2,863,8122,652,302

scaddins/H07-Oct-2020-12,6989,385

sccomp/H07-Oct-2020-2,8971,990

schema/H07-Oct-2020-4837

scp2/H07-Oct-2020-19,66216,268

scripting/H07-Oct-2020-29,53619,957

sd/H07-Oct-2020-506,094420,159

sdext/H07-Oct-2020-142,556126,668

setup_native/H07-Oct-2020-6,5224,231

sfx2/H07-Oct-2020-192,114153,125

shell/H07-Oct-2020-21,22013,106

slideshow/H03-May-2022-60,99936,746

smoketest/H07-Oct-2020-3,3932,402

solenv/H07-Oct-2020-101,14174,104

soltools/H07-Oct-2020-8,1956,303

sot/H07-Oct-2020-13,62810,408

starmath/H07-Oct-2020-52,15340,885

stoc/H07-Oct-2020-31,40823,971

store/H07-Oct-2020-8,3935,120

svgio/H07-Oct-2020-18,14712,961

svl/H03-May-2022-52,80440,605

svtools/H07-Oct-2020-82,06063,001

svx/H03-May-2022-373,675287,086

sw/H07-Oct-2020-1,180,469943,378

swext/H07-Oct-2020-7,3795,554

sysui/H07-Oct-2020-7,4626,310

test/H07-Oct-2020-19,53614,270

testtools/H03-May-2022-15,77812,383

toolkit/H07-Oct-2020-58,22043,351

tools/H07-Oct-2020-24,09418,893

ucb/H07-Oct-2020-101,39368,724

ucbhelper/H07-Oct-2020-9,1546,136

udkapi/H07-Oct-2020-30,77524,082

uitest/H03-May-2022-5,8173,790

unodevtools/H07-Oct-2020-5,4144,376

unoidl/H07-Oct-2020-11,93410,900

unoil/H07-Oct-2020-212116

unotest/H07-Oct-2020-2,3351,437

unotools/H07-Oct-2020-31,42223,932

unoxml/H07-Oct-2020-20,27814,209

ure/H07-Oct-2020-1,9751,370

uui/H07-Oct-2020-9,7347,249

vbahelper/H07-Oct-2020-14,47210,425

vcl/H03-May-2022-519,068401,574

winaccessibility/H07-Oct-2020-24,63916,548

wizards/H07-Oct-2020-90,35874,690

writerfilter/H07-Oct-2020-85,64270,422

writerperfect/H07-Oct-2020-27,72922,874

xmerge/H07-Oct-2020-20,1298,809

xmlhelp/H07-Oct-2020-10,2867,298

xmloff/H07-Oct-2020-190,981142,981

xmlreader/H07-Oct-2020-1,161973

xmlscript/H07-Oct-2020-12,4979,881

xmlsecurity/H07-Oct-2020-47,42734,163

.buckconfigH A D07-Oct-2020223 1410

.buckversionH A D07-Oct-202041 21

.clang-formatH A D07-Oct-20201.4 KiB4746

.editorconfigH A D07-Oct-2020449 2620

.git-blame-ignore-revsH A D07-Oct-20201.2 KiB3231

.gitattributesH A D07-Oct-202077 65

.gitignoreH A D07-Oct-20202.8 KiB181158

.gitmodulesH A D07-Oct-2020325 1312

.gitreviewH A D07-Oct-2020117 86

BUCKH A D07-Oct-20201.2 KiB6053

COPYINGH A D07-Oct-202034.3 KiB675553

COPYING.LGPLH A D07-Oct-20207.5 KiB166128

COPYING.MPLH A D07-Oct-202016.3 KiB374293

ChangeLogH A D07-Oct-2020135.9 MiB2,544,9701,428,089

ChangeLog-helpcontent2H A D07-Oct-20204.1 MiB77,43942,354

Library_merged.mkH A D07-Oct-20201,013 4727

Makefile.fetchH A D07-Oct-202010 KiB237192

Makefile.gbuildH A D07-Oct-20203 KiB5839

Makefile.inH A D03-May-202218.2 KiB488332

README.SolarisH A D07-Oct-20201.1 KiB3822

README.crossH A D07-Oct-20209.4 KiB249192

README.mdH A D07-Oct-20205.7 KiB12495

Repository.mkH A D03-May-202226.8 KiB1,1861,070

RepositoryExternal.mkH A D07-Oct-202085.2 KiB4,1982,945

RepositoryFixes.mkH A D07-Oct-20204.7 KiB10455

RepositoryModule_build.mkH A D07-Oct-20201.5 KiB9885

RepositoryModule_host.mkH A D07-Oct-20204.6 KiB205172

TEMPLATE.SOURCECODE.HEADERH A D07-Oct-20205.5 KiB156126

aclocal.m4H A D07-Oct-202068.5 KiB1,8991,712

autogen.shH A D07-Oct-20209.6 KiB313253

config.guessH A D07-Oct-202047.2 KiB1,6591,447

config.subH A D07-Oct-202030.9 KiB1,7991,642

config_host.mk.inH A D07-Oct-202026.6 KiB660655

config_host_lang.mk.inH A D07-Oct-2020263 97

configureH A D03-May-20221.3 MiB41,87134,667

configure.acH A D03-May-2022457.6 KiB13,10211,860

download.lstH A D07-Oct-202019.9 KiB264262

gH A D07-Oct-20209 KiB383321

hardened_runtime.xcentH A D07-Oct-2020626 1612

install-shH A D07-Oct-202013.7 KiB528351

lo.xcentH A D07-Oct-2020826 2726

logerritH A D07-Oct-20208.3 KiB238228

sanitize-ubsan-blacklistH A D07-Oct-202043 32

setup.cfgH A D07-Oct-202036 32

sources.verH A D07-Oct-202023 21

README.Solaris

1Instructions to compile LO on Solaris with gcc
2
3Disclaimer
4----------
5This is still work in progress
6Compiling LO on Solaris with gcc is a work done by Lanedo ( www.lanedo.com )
7Any inquiry could be sent to office-solaris@lanedo.com
8
9
10Prerequisites
11-------------
12
13A working Oracle Solaris 11 installation
14
15
16Installing Dependencies
17-----------------------
18
19sudo -s
20
21pkg install git make gcc-45 autoconf autogen automake-110 gnu-m4
22
23pkg install pkg:/system/header@0.5.11-0.175.0.0.0.2.1
24pkg install pkg:/developer/gperf@3.0.3-0.175.0.0.0.2.537
25pkg install pkg:/developer/parser/bison@2.3-0.175.0.0.0.2.537
26pkg install pkg:/developer/lexer/flex@2.5.35-0.175.0.0.0.2.537
27pkg install pkg:/developer/documentation-tool/doxygen@1.5.7.1-0.175.0.0.0.2.537
28
29
30Compiling
31---------
32
33CC="gcc" CXX="g++" ./autogen.sh --with-num-cpus=2 --with-max-jobs=4 --without-junit --disable-mozilla --with-system-curl --without-help --disable-cups --without-java --with-system-cairo --with-lang= --enable-gio --disable-gnome-vfs --disable-gstreamer --without-fonts --with-system-dicts --disable-mozilla --without-system-mozilla --disable-xmlsec --with-system-openssl
34
35gmake
36
37
38

README.cross

1Cross-compiling LibreOffice
2***************************
3
4Cross-compilation works, to various degree, to the following
5platforms: iOS, Android, and Raspbian.
6
7Note that this document has not been updated very often, and not
8everything here necessarily is true any more.
9
10
11General
12-------
13
14In GNU Autoconf terminology, "build" is the platform on which you are
15running a build of some software and "host" is the platform on which
16the software you are building will run. Only in the specific case of
17building compilers and other programming tools is the term "target"
18used to indicate the platform for which the tools your are building
19will produce code. As LibreOffice is not a compiler, the "target" term
20should not be used in the context of cross-compilation.
21
22(For a case where all three of "build", "host" and "target" are
23different: consider a gcc cross-compiler running on Windows, producing
24code for Android, where the cross-compiler itself was built on
25Linux. (This is a real case.) An interesting tidbit is that such
26configurations are called "Canadian Cross".)
27
28Even though the LibreOffice build mechanism is highly unorthodox, the
29configure script takes the normal --build and --host options like any
30GNU Autoconf -based configure script. To cross-compile, you basically
31need just to specify a suitable --host option and things should work
32out nicely. In practice, many details need to be handled. See examples
33below.
34
35Note that in the case of LibreOffice, it is uncommon to run the
36configure script directly. Normally one uses the autogen.sh script.
37The autogen.sh script reads command-line options from file called
38autogen.input if it exists. The typical way of working is to keep
39the configure parameters in that file and edit it as needed.
40
41
42What is so hard, then?
43----------------------
44
45Despite the fact that the configure script takes normal --build and
46--host options, that is just the beginning. It was necessary to
47separate tests for "host" and "build" platforms in the configure
48script. See the git log for details. And the reasonably "standard"
49configure.in is just the top level; when we get down to the actual
50makefilery used to build the bits of LibreOffice, it gets much worse.
51
52
53iOS
54***
55
56iOS is the operating system on Apple's mobile devices. Clearly for a
57device like the iPad it would not be acceptable to run a normal
58LibreOffice application with overlapping windows and mouse-oriented
59GUI widgets.
60
61It makes sense to use only a part of LibreOffice's code for iOS. Lots
62of the GUI-oriented code should be left out. iOS apps that want to use
63the applicable LibreOffice code will handle all their GUI in a
64platform-dependent manner. How well it will be possible to do such a
65split remains to be seen.
66
67Obviously we want it to be possible to eventually distribute apps
68using LibreOffice code through the App Store. Technically, one
69important special aspect of iOS is that apps in the App Store are not
70allowed to load own dynamic libraries. (System libraries are used in
71the form of dynamic libraries, just like on macOS, of which iOS is
72a variant.)
73
74Thus all the libraries in LibreOffice that normally are shared
75libraries (DLLs on Windows, shared objects (.so) on Linux, dynamic
76libraries on macOS (.dylib)) must be built as static archives
77instead. This has some interesting consequences for how UNO is
78implemented and used.
79
80An iOS app is a "bundle" that contains a single executable. In an app
81using LibreOffice code, that executable then contains the necessary
82LibreOffice libraries and UNO components statically linked.
83
84The Apple tool-chain for iOS cross-building is available only for OS
85X. In order to be able to run and debug an app on an actual device
86(and not just the iOS Simulator) you need to be registered in the iOS
87Developer Program.
88
89Here is an autogen.input for iOS (device) using Xcode 4.6, on macOS 10.8:
90
91--build=i386-apple-darwin10.7.0
92--host=arm-apple-darwin10
93--enable-dbgutil
94--enable-debug
95--enable-werror
96
97For the iOS Simulator, but note that building for the simulator is
98broken at the moment (July 2014):
99
100--build=i386-apple-darwin10.7.0
101--host=arm-apple-darwin10
102--enable-ios-simulator
103--enable-dbgutil
104--enable-debug
105--enable-werror
106
107You will have to install autoconf and automake yourself before running
108autogen.sh. They are no longer included in Xcode 4.3 and later (not
109even in the add-on "command line tools").
110
111The -mmacosx-version-min=10.7 is necessary when building for the iOS
112simulator to avoid clang replacing simple calls to fprintf with calls
113to fwrite$UNIX2003 which Xcode then warns that doesn't exist on iOS.
114
115
116Android
117*******
118
119From a technical point of view the core Android OS (the kernel) is
120Linux, but everything else is different. Unlike iOS, an Android app
121can use shared objects just fine, so that aspect of UNO doesn't need
122special handling. Except that there is a silly low limit in the
123Android dynamic linker on the number of libraries you can dlopen. This
124is a limitation in user-level (but system-provided and not really
125replaceable) code, not the kernel.
126
127Thus, just like for iOS, also for Android the LibreOffice libraries
128and UNO components are built as static archives. For Android, those
129static archives, and any app-specific native code, are linked into one
130single app-specific shared library, called liblo-native-code.so.
131
132For the GUI, the same holds as said above for iOS. The GUI layer needs
133to be platform-specific, written in Java.
134
135Android cross-compilation work has been done mainly on Linux (openSUSE
136in particular). Earlier also cross-compiling from macOS was tried. The
137Android cross-compilation tool-chain (the "Native Development Kit", or
138NDK) is available for Linux, macOS and Windows, but trying to
139cross-compile LibreOffice from Windows will probably drive you insane.
140
141You will also need the Android SDK as full "make" also builds a couple
142of Android apps where the upper layer is written in Java.
143
144Use the "android" tool from the SDK to install the SDK Tools, SDK
145Platform Tools, the API 15 SDK Platform and the Android Support
146Library. If you want to run the Android apps in the emulator, you of
147course need an appropriate system image for that.
148
149Here is an autogen.input for Android on ARM when cross-compiling
150from Linux:
151
152--enable-dbgutil
153--enable-werror
154--with-distro=LibreOfficeAndroid
155
156And here is an (quite old) autogen.input for Android on X86:
157
158--with-android-ndk=/opt/libreoffice/android-ndk-r8b
159--with-android-ndk-toolchain-version=4.6
160--with-android-sdk=/opt/libreoffice/android-sdk-linux
161--build=i586-suse-linux
162--enable-ccache
163--with-distro=LibreOfficeAndroidX86
164
165A LibreOffice app for Android is being developed progress in the
166android/source directory.
167
168To run the app, do "make install" followed by either "make run" or
169starting it from Android itself. You most likely want to have an "adb logcat"
170running in another window. To debug, run "make debugrun".
171
172NB: If you happen to upgrade to Android SDK Tools 23, and the build (using
173'make verbose=t android') fails for you with:
174
175       [dx] UNEXPECTED TOP-LEVEL EXCEPTION:
176       [dx] java.io.FileNotFoundException: /local/libreoffice/android-sdk-linux/tools/support/annotations.jar (no such file or directory)
177
178you need to copy the annotations.jar from an older sdk; like
179
180wget 'http://dl-ssl.google.com/android/repository/tools_r22.6.2-linux.zip'
181unzip tools_r22.6.2-linux.zip
182cp tools/support/annotations.jar <android-sdk-linux>/tools/support/
183
184Raspbian
185********
186
187In theory, this should work also for another Linux, it does not need to be Raspbian.
188But this cross-compilation work is tested from Debian and openSUSE to Raspbian.
189
190You will need headers, pkg-config files and libraries from a Raspbian
191system to build against. Available at
192https://dev-www.libreoffice.org/extern/ . Look for the latest
193raspbian-root-*.tar.gz . For instance:
194
195$ wget https://dev-www.libreoffice.org/extern/raspbian-root-20140120.tar.gz
196$ mkdir raspbian-root
197$ cd raspbian-root
198$ tar -xf raspbian-root-20140120.tar.gz
199
200You can build cross-compiler yourself or get the executables here:
201$ git clone git://github.com/raspberrypi/tools
202
203tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian is known to work.
204
205Then create pkg-config wrapper, something like:
206$ cat > pkg-config-wrapper-host << _EOF
207#!/bin/sh
208
209if [ "$CROSS_COMPILING" = TRUE ]; then
210   SYSROOT=$HOME/lo/raspbian-root
211   export PKG_CONFIG_PATH=${SYSROOT}/usr/lib/arm-linux-gnueabihf/pkgconfig:${SYSROOT}/usr/share/pkgconfig
212   export PKG_CONFIG_LIBDIR=${SYSROOT}/usr/lib/pkgconfig
213   export PKG_CONFIG_SYSROOT_DIR=${SYSROOT}
214fi
215
216exec pkg-config "\$@"
217_EOF
218$ chmod +x pkg-config-wrapper-host
219
220This does not work with pkg-config 0.23. 0.26 is known to work.
221
222And you are ready to build with autogen.input similar to:
223
224PKG_CONFIG=<path-to-pkg-config-wrapper-host>
225CC=<path-to-arm-linux-gnueabihf-gcc> --sysroot=<path-to-raspbian_rootfs>
226CXX=<path-to-arm-linux-gnueabihf-g++> --sysroot=<path-to-raspbian_rootfs>
227--build=x86_64-unknown-linux-gnu
228--host=arm-unknown-linux-gnueabihf
229--disable-sdk
230--enable-python=system
231PYTHON_CFLAGS=-I<path-to-raspbian_rootfs>/usr/include/python2.7
232PYTHON_LIBS=-lpython2.7
233--with-java
234JAVAINC=-I<path-to-raspbian_rootfs>/usr/lib/jvm/java-6-openjdk-armhf/include
235--with-system-cairo
236--with-system-cppunit
237--with-system-icu
238--with-system-neon
239--with-system-nss
240--with-system-openldap
241--with-system-openssl
242--with-system-redland
243
244Finally, when you are ready to run the binaries in Raspbian,
245you may need to get more system libraries, who knows.
246$ sudo apt-get install libreoffice # or similar
247That installs libreoffice too, which you don't need because you have
248just built one, but I don't know how to avoid it easily.
249

README.md

1# LibreOffice
2[![Coverity Scan Build Status](https://scan.coverity.com/projects/211/badge.svg)](https://scan.coverity.com/projects/211) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/307/badge)](https://bestpractices.coreinfrastructure.org/projects/307) [![Translation status](https://weblate.documentfoundation.org/widgets/libo_ui-master/-/svg-badge.svg)](https://weblate.documentfoundation.org/engage/libo_ui-master/?utm_source=widget)
3
4LibreOffice is an integrated office suite based on copyleft licenses
5and compatible with most document formats and standards. Libreoffice
6is backed by The Document Foundation, which represents a large
7independent community of enterprises, developers and other volunteers
8moved by the common goal of bringing to the market the best software
9for personal productivity. LibreOffice is open source, and free to
10download, use and distribute.
11
12A quick overview of the LibreOffice code structure.
13
14## Overview
15
16You can develop for LibreOffice in one of two ways, one
17recommended and one much less so. First the somewhat less recommended
18way: it is possible to use the SDK to develop an extension,
19for which you can read the API docs [here](https://api.libreoffice.org/)
20and [here](https://wiki.openoffice.org/wiki/Documentation/DevGuide).
21This re-uses the (extremely generic) UNO APIs that are also used by
22macro scripting in StarBasic.
23
24The best way to add a generally useful feature to LibreOffice
25is to work on the code base however. Overall this way makes it easier
26to compile and build your code, it avoids any arbitrary limitations of
27our scripting APIs, and in general is far more simple and intuitive -
28if you are a reasonably able C++ programmer.
29
30## The build chain and runtime baselines
31
32These are the current minimal operating system and compiler versions to
33run and compile LibreOffice, also used by the TDF builds:
34
35* Windows:
36    * Runtime: Windows 7
37    * Build: Cygwin + Visual Studio 2017 version 15.7
38* macOS:
39    * Runtime: 10.10
40    * Build: 10.13.2 + Xcode 9.3
41      Build: 10.14.x (Mojave) + Xcode 11.x for TDF builds (tdf#122218)
42* Linux:
43    * Runtime: RHEL 7 or CentOS 7
44    * Build: either GCC 7.0.0; or Clang 5.0.2 with libstdc++ 7.3.0
45* iOS (only for LibreOfficeKit):
46    * Runtime: 11.4 (only support for newer i devices == 64 bit)
47    * Build: Xcode 9.3 and iPhone SDK 11.4
48* Android:
49    * Build: NDK r19c and SDK 22.6.2
50
51If you want to use Clang with the LibreOffice compiler plugins, the minimal
52version of Clang is 5.0.2. Since Xcode doesn't provide the compiler plugin
53headers, you have to compile your own Clang to use them on macOS.
54
55You can find the TDF configure switches in the distro-configs/ directory.
56
57To setup your initial build environment on Windows and macOS, we provide
58the LibreOffice Development Environment
59([LODE](https://wiki.documentfoundation.org/Development/lode)) scripts.
60
61For more information see the build instructions for your platform in the
62[TDF wiki](https://wiki.documentfoundation.org/Development).
63
64## The important bits of code
65
66Each module should have a `README` file inside it which has some
67degree of documentation for that module; patches are most welcome to
68improve those. We have those turned into a web page here:
69
70https://docs.libreoffice.org/
71
72However, there are two hundred modules, many of them of only
73peripheral interest for a specialist audience. So - where is the
74good stuff, the code that is most useful. Here is a quick overview of
75the most important ones:
76
77Module    | Description
78----------|-------------------------------------------------
79sal/      | this provides a simple System Abstraction Layer
80tools/    | this provides basic internal types: 'Rectangle', 'Color' etc.
81vcl/      | this is the widget toolkit library and one rendering abstraction
82framework | UNO framework, responsible for building toolbars, menus, status bars, and the chrome around the document using widgets from VCL, and XML descriptions from */uiconfig/* files
83sfx2/     | legacy core framework used by Writer/Calc/Draw: document model / load/save / signals for actions etc.
84svx/      | drawing model related helper code, including much of Draw/Impress
85
86Then applications
87
88Module    | Description
89----------|-------------------------------------------------
90desktop/  | this is where the 'main' for the application lives, init / bootstrap. the name dates back to an ancient StarOffice that also drew a desktop
91sw/       | Writer
92sc/       | Calc
93sd/       | Draw / Impress
94
95There are several other libraries that are helpful from a graphical perspective:
96
97Module    | Description
98----------|-------------------------------------------------
99basegfx/  | algorithms and data-types for graphics as used in the canvas
100canvas/   | new (UNO) canvas rendering model with various backends
101cppcanvas/ | C++ helper classes for using the UNO canvas
102drawinglayer/ | View code to render drawable objects and break them down into primitives we can render more easily.
103
104## Rules for #include directives (C/C++)
105
106Use the `"..."` form if and only if the included file is found next to the
107including file. Otherwise, use the `<...>` form. (For further details, see the
108mail [Re: C[++]: Normalizing include syntax ("" vs
109<>)](https://lists.freedesktop.org/archives/libreoffice/2017-November/078778.html).)
110
111The UNO API include files should consistently use double quotes, for the
112benefit of external users of this API.
113
114loplugin:includeform (compilerplugins/clang/includeform.cxx) enforces these rules.
115
116
117## Finding out more
118
119Beyond this, you can read the `README` files, send us patches, ask
120on the mailing list libreoffice@lists.freedesktop.org (no subscription
121required) or poke people on IRC `#libreoffice-dev` on irc.freenode.net -
122we're a friendly and generally helpful mob. We know the code can be
123hard to get into at first, and so there are no silly questions.
124