Supervisión del Código

From The Document Foundation Wiki
Jump to: navigation, search

Como compilar LibreOffice

Getting you first successful build of LibreOffice can be an intimidating and daunting task. Here is a walkthrough that should guide you towards getting your first build finished.

Librerias requeridas/Dependencias

Linux

The commands below should prepare a regular system into one able to build LibreOffice, it is by far the easiest way to use the existing package to bootstrap your build dependencies.

sudo apt-get build-dep openoffice.org && sudo apt-get install git libgnomeui-dev gawk # Debian & derivatives
sudo zypper si -d OpenOffice_org-bootstrap # for OpenSUSE
sudo yum-builddep openoffice.org # for Fedora & derivatives

If this fails, on some Ubuntu systems (10.10, maybe earlier versions) try this:

sudo apt-get install git build-essential gawk libxml2-dev libfontconfig1-dev \
libpam0g-dev libpng12-dev flex bison libgtk2.0-dev openjdk-6-jdk libcups2-dev \
gperf libxaw7-dev libgnomeui-dev libgstreamer-plugins-base0.10-dev \
libgl1-mesa-dev libglu1-mesa-dev
sudo perl -MCPAN -e 'CPAN::Shell->install(Archive::Zip)'

Windows

Cygwin

On Windows, you must first install cygwin from www.cygwin.com, once you've run the the setup.exe utility, switch the package view mode to 'Full', then select the following packages for installation:


  1. autoconf
  2. automake
  3. bison
  4. cabextract
  5. flex
  6. gcc-g++
  7. git
  8. gnupg
  9. gperf
  10. libxml2-devel
  11. libpng12-devel
  12. make
  13. mintty
  14. openssh
  15. openssl
  16. patch
  17. perl
  18. pkg-config
  19. readline
  20. rsync
  21. unzip
  22. wget
  23. zip

Herramientas de Windows

A Microsoft Compiler and debugger is also required, and should be downloaded from: http://www.microsoft.com/express/Downloads/, Visual Studio 2008 Express should work, and work is underway to ensure that VS 2010 is also supported.

Nombre de directorios y rutas

To have a successful build, we recommend that you use a short directory name in the root directory of one your hard disks, such as c:\lo, as long path names can cause the build to fail in weird and wonderful ways. Secondly, the build system requires you to use

'cygdrive' paths, which encode the current drive as well as the path in the form of: /cygdrive/c/lo for example. To ensure that these paths

are used, enter the directory containing the git repository by using, for example:

~$ cd /cygdrive/c/lo

Supervisión de los recursos de Git

First you need to have a copy of the source code. This is done by first downloading the 'root' repository,

~/git$ git clone git://anongit.freedesktop.org/git/libreoffice/build loroot

and then using the first few step of the build process to pull all the other repositories.

~/git$ cd loroot
~/git/loroot$ ./autogen.sh --with-git --with-num-cpus=2
~/git/loroot$ ./download

The ./download step will take a while. This is because git is downloading the entire history of the project. But don't worry, only the first download will take a long time. After this git will only fetch new things that have been added since the last time you pulled.

Now you should have a loroot that looks something similar to:

~/git/loroot (master)$ ls
AUTHORS                         aclocal.m4                      download.in                     intltool-update
COPYING                         autogen.sh                      download.list                   intltool-update.in
COPYING.LGPL                    autom4te.cache                  download_external_sources.sh    m4
ChangeLog                       bin                             download_tests_dependencies.sh  man
INSTALL                         build                           emacs.el                        missing
MAINTAINERS                     clone                           etc                             patches
Makefile                        config.log                      extensions                      po
Makefile.am                     config.status                   git                             rawbuild
Makefile.in                     configure                       git-hooks                       scratch
Makefile.shared                 configure.in                    install-sh                      src
NEWS                            desktop                         intltool-extract                stamp
README                          distro-configs                  intltool-extract.in             templates
TODO                            doc                             intltool-merge                  test
TOTEST                          download                        intltool-merge.in

'clone' is the directory where all the other repositories are setup. 'rawbuild' is where you go to build a pure libre-office.

Let's have a closer look at clone:

~/git/loroot$ ls clone
artwork         calc            extras          impress         libs-extern-sys repos_changed   ure
base            components      filters         libs-core       libs-gui        sdk             writer
bootstrap       extensions      help            libs-extern     postprocess     testing

So here you are, 20 git repos, the 19 listed above plus the root repository.

For a more detailed discussion of each of these directories, and what they contain - please see the Code Overview for more details.

Primera compilación

On a fresh download, the rawbuild directory is not created yet. Let's fix that:

~/git/loroot $ ./bin/g pull -r

Now, go to the directory named 'rawbuild'

~/git/loroot $ cd rawbuild
~/git/loroot/rawbuild $


This directory contains dozens of links, pointing back to the content of our 19 git repositories contained in 'clone', plus a few files needed to be able to build.

You need to configure your build environment. There are plenty of options. You can see them all by running:

~/git/loroot/rawbuild $ ./autogen.sh --help

But if you are running a fairly standard recent Linux box, the following should be safe:

~/git/loroot/rawbuild $ ./autogen.sh --with-num-cpus=5 --without-junit --disable-kde

Replace the 5 above by your number of processors + 1.

Now you can actually launch the build itself. The build produces a lot of messages... Most of the time you need not be concerned with them, but sometimes you need to figure out what happened, so I usually redirect the ouput to a file, to be able to mine through it later if need be:

~/git/loroot/rawbuild make 2>&1 | tee build.log

At this point, you can find something else to do... A full build can easily take hours (with an s).

If everything went well, the build is successful and now you can run:

~/git/loroot/rawbuild make dev-install

And if that step was successful too, you should see something like:

...
soffice files [soffice.bin] [bootstraprc] [intro.bmp] [share]
Creating '~/git/loroot/rawbuild/install/LibreOffice/installed/install/en-US/program/ooenv'
link librecentfile.so

linkoo finished, please don't forget to source ooenv before ./soffice.

Developer installation finished, you can find it here:
~/git/loroot/rawbuild/install/LibreOffice/installed/install/en-US

Which tells you where to find your brand new libreoffice executable!

La compilación fallo... Que puedo hacer?

Using a cutting edge development branch means that you are, more often than not, going to get cut. Things will not quite work as expected.

Here is an example of a failed build. My build messages ended with:

Module 'slideshow' delivered successfully. 0 files copied, 4 files unchanged
drawinglayer deliver
Module 'drawinglayer' delivered successfully. 0 files copied, 99 files unchanged
odk deliver
Module 'odk' delivered successfully. 1 files copied, 3 files unchanged

1 module(s): 
connectivity
need(s) to be rebuilt 

Reason(s):

ERROR: error 65280 occurred while making ~/git/loroot/rawbuild/connectivity/source/cpool

Attention: if you fix the errors in above module(s) you may continue the build issuing the following command:

build --from connectivity

make: *** [all] Error 1

So, first things: do not post that on the mailing list. The only useful information in all this is that the module 'connectivity' could not be built for some yet unknown to us reason.

So how to get a more useful output, to track down what happened, or at least to provide enough information so that somebody else may be able to help you ?

The first thing you need to do is to 'source' the file *Env.Set.sh (I have 64-bits linux box, so that file is name LinuxX86-64Env.Set.sh in my case)

~/git/loroot/rawbuild $ source *Env.Set.sh

Then you want to go to the directory named after the module that failed, here 'connectivity'

~/git/loroot/rawbuild $ cd connectivity
~/git/loroot/rawbuild/connectivity $

It happens from time to time that some conflicting change needs to remove the previous build output. To do this, run:

~/git/loroot/rawbuild/connectivity $ rm -r $INPATH ; deliver -delete

And from there you can re-start the build for this particular module using the 'build' command. 'build' is a shell alias to a perl-script, that parses prj/build.lst to work out what can be built, and how much parallelism the code can cope with.

Here is the (partial) output for the build command:

$ build
build -- version: 275224


=============
Building module connectivity
=============

Entering ~/git/loroot/rawbuild/connectivity/inc

[....]

Entering ~/git/loroot/rawbuild/connectivity/source/cpool

Compiling: connectivity/source/cpool/ZConnectionPool.cxx
~/git/loroot/clone/libs-core/connectivity/source/cpool/ZConnectionPool.cxx: In constructor 'connectivity::OConnectionPool::OConnectionPool(const  com::sun::star::uno::Reference<com::sun::star::sdbc::XDriver>&, const com::sun::star::uno::Reference<com::sun::star::uno::XInterface>&, const com::sun::star::uno::Reference<com::sun::star::reflection::XProxyFactory>&)':
~/git/loroot/clone/libs-core/connectivity/source/cpool/ZConnectionPool.cxx:97: error: 'TimeValue' is not a member of 'salhelper'
dmake:  Error code 1, while making '../../unxlngx6.pro/slo/ZConnectionPool.obj'

Now, that is better. I look at the indicated file and realize that I accidentally (on purpose for your entertainment) removed a T in front of TimeValue, which should read TTimeVaue... I quickly fix the problem and run the build command again to be sure. Then I can go back to the rawbuild directory to run the make command again.

If you cannot figure out what is going on, you can try to force a rebuild of this module. The rationale for doing that is that sometimes the build system ('make') doesn't get all the dependencies right. To do that you must remove a directory called *.pro located in the module's directory, and then run the 'build' command again.

Que mas debes saber del sistema de compilación?

Internally, LibreOffice uses dmake, and you will have to set some (well, many actually) environment variables to the correct values. On Linux, do that with: 

cd build/libreoffice*
source Linux*Set.sh

On Windows, with: 

cd build/libreoffice*
source win*set.sh

etc. (Note that the "." command can be used instead of "source" and is shorter to type.)

After that you can build single modules with

cd <directory-that-failed>
build



'build' is a  shell alias to a perl-script, that parses prj/build.lst to work out what can be built, and how much parallelism the code can cope with.
You can also run dmake manually after sourceing those environment variables as stated above. Afterwards just issueing

dmake

should work. There are some useful flags to dmake and build - the most important are:

verbose=1 # let me see the compile lines
debug=true # enable assertions and debugging symbols
-P10 # do 10 builds in parallel ;-)