diff options
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 000000000..9e77bef9b --- /dev/null +++ b/README.md @@ -0,0 +1,136 @@ +# LibreOffice +[![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) + +<img align="right" width="150" height="200" src="https://opensource.org/files/OSIApproved.png"> + +LibreOffice is an integrated office suite based on copyleft licenses +and compatible with most document formats and standards. Libreoffice +is backed by The Document Foundation, which represents a large +independent community of enterprises, developers and other volunteers +moved by the common goal of bringing to the market the best software +for personal productivity. LibreOffice is open source, and free to +download, use and distribute. + +A quick overview of the LibreOffice code structure. + +## Overview + +You can develop for LibreOffice in one of two ways, one +recommended and one much less so. First the somewhat less recommended +way: it is possible to use the SDK to develop an extension, +for which you can read the [API docs](https://api.libreoffice.org/) +and [Developers Guide](https://wiki.documentfoundation.org/Documentation/DevGuide). +This re-uses the (extremely generic) UNO APIs that are also used by +macro scripting in StarBasic. + +The best way to add a generally useful feature to LibreOffice +is to work on the code base however. Overall this way makes it easier +to compile and build your code, it avoids any arbitrary limitations of +our scripting APIs, and in general is far more simple and intuitive - +if you are a reasonably able C++ programmer. + +## The Build Chain and Runtime Baselines + +These are the current minimal operating system and compiler versions to +run and compile LibreOffice, also used by the TDF builds: + +* Windows: + * Runtime: Windows 7 + * Build: Cygwin + Visual Studio 2019 version 16.10 +* macOS: + * Runtime: 10.13 + * Build: 12 (13 for aarch64) + Xcode 14 +* Linux: + * Runtime: RHEL 7 or CentOS 7 + * Build: either GCC 7.0.0; or Clang 8.0.1 with libstdc++ 7.3.0 +* iOS (only for LibreOfficeKit): + * Runtime: 11.4 (only support for newer i devices == 64 bit) + * Build: Xcode 9.3 and iPhone SDK 11.4 +* Android: + * Build: NDK r19c and SDK 22.6.2 +* Emscripten / WASM: + * Runtime: a browser with SharedMemory support (threads + atomics) + * Build: Qt 5.15 with Qt supported Emscripten 1.39.8 + * See [README.wasm](static/README.wasm.md) + +Java is required for building many parts of LibreOffice. In TDF Wiki article +[Development/Java](https://wiki.documentfoundation.org/Development/Java), the +exact modules that depend on Java are listed. + +The baseline for Java is Java Development Kit (JDK) Version 11 or later. It is +possible to build LibreOffice with JDK version 9, but it is no longer supported +by the JDK vendors, thus it should be avoided. + +If you want to use Clang with the LibreOffice compiler plugins, the minimal +version of Clang is 12.0.1. Since Xcode doesn't provide the compiler plugin +headers, you have to compile your own Clang to use them on macOS. + +You can find the TDF configure switches in the `distro-configs/` directory. + +To setup your initial build environment on Windows and macOS, we provide +the LibreOffice Development Environment +([LODE](https://wiki.documentfoundation.org/Development/lode)) scripts. + +For more information see the build instructions for your platform in the +[TDF wiki](https://wiki.documentfoundation.org/Development/How_to_build). + +## The Important Bits of Code + +Each module should have a `README.md` file inside it which has some +degree of documentation for that module; patches are most welcome to +improve those. We have those turned into a web page here: + +<https://docs.libreoffice.org/> + +However, there are two hundred modules, many of them of only +peripheral interest for a specialist audience. So - where is the +good stuff, the code that is most useful. Here is a quick overview of +the most important ones: + +Module | Description +----------|------------------------------------------------- +[sal/](sal) | this provides a simple System Abstraction Layer +[tools/](tools) | this provides basic internal types: `Rectangle`, `Color` etc. +[vcl/](vcl) | this is the widget toolkit library and one rendering abstraction +[framework/](framework) | 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 +[sfx2/](sfx2) | legacy core framework used by Writer/Calc/Draw: document model / load/save / signals for actions etc. +[svx/](svx) | drawing model related helper code, including much of Draw/Impress + +Then applications + +Module | Description +----------|------------------------------------------------- +[desktop/](desktop) | this is where the `main()` for the application lives, init / bootstrap. the name dates back to an ancient StarOffice that also drew a desktop +[sw/](sw/) | Writer +[sc/](sc/) | Calc +[sd/](sd/) | Draw / Impress + +There are several other libraries that are helpful from a graphical perspective: + +Module | Description +----------|------------------------------------------------- +[basegfx/](basegfx) | algorithms and data-types for graphics as used in the canvas +[canvas/](canvas) | new (UNO) canvas rendering model with various backends +[cppcanvas/](cppcanvas) | C++ helper classes for using the UNO canvas +[drawinglayer/](drawinglayer) | View code to render drawable objects and break them down into primitives we can render more easily. + +## Rules for #include Directives (C/C++) + +Use the `"..."` form if and only if the included file is found next to the +including file. Otherwise, use the `<...>` form. (For further details, see the +mail [Re: C[++]: Normalizing include syntax ("" vs +<>)](https://lists.freedesktop.org/archives/libreoffice/2017-November/078778.html).) + +The UNO API include files should consistently use double quotes, for the +benefit of external users of this API. + +`loplugin:includeform (compilerplugins/clang/includeform.cxx)` enforces these rules. + + +## Finding Out More + +Beyond this, you can read the `README.md` files, send us patches, ask +on the mailing list libreoffice@lists.freedesktop.org (no subscription +required) or poke people on IRC `#libreoffice-dev` on irc.libera.chat - +we're a friendly and generally helpful mob. We know the code can be +hard to get into at first, and so there are no silly questions. |