Devenvolvimento/CompilandoNoLinux

    From The Document Foundation Wiki
    This page is a translated version of the page Development/BuildingOnLinux and the translation is 60% complete.
    Outdated translations are marked like this.

    Aviso introdutório

    Uma vez que este é um problema comum com novatos, observe: não construa como root! Isso interromperá sua compilação e, como resultado, você precisará limpar tudo (incluindo o ccache) e começar de novo. As etapas que precisam de elevação usam sudo explicitamente na explicação a seguir.

    Leia também nossas dicas genéricas de compilação.

    Compilar dependências

    Em geral, a maneira mais fácil de compilar o LibreOffice é no Linux.

    Nota: Windows Subsystem for Linux não é suportado!

    Note pin.svg

    Note:
    Normalmente, as ramificações mais recentes do que o pacote da sua distro (especialmente master) têm requisitos adicionais, que a etapa autogen.sh indicará para você; Geralmente esses requisitos são opcionais e têm um argumento --disable-foo ou --without-foo correspondente, ou o requisito pode ser satisfeito com uma opção para usar um pacote copiar via argumento --without-system-foo (que já deve ser o padrão). Se nenhum for o caso, então você precisa instalar algum pacote de desenvolvimento em seu sistema. Veja o que configure está reclamando especificamente e use apt-cache search ou yum search para encontrar pacotes relevantes, geralmente com -dev ou -devel no nome.

    Debian e Ubuntu

    Instalar dependências

    sudo apt-get install git build-essential zip ccache junit4 libkrb5-dev nasm graphviz python3 python3-dev python3-setuptools qtbase5-dev libkf5coreaddons-dev libkf5i18n-dev libkf5config-dev libkf5windowsystem-dev libkf5kio-dev libqt5x11extras5-dev autoconf libcups2-dev libfontconfig1-dev gperf openjdk-17-jdk doxygen libxslt1-dev xsltproc libxml2-utils libxrandr-dev libx11-dev bison flex libgtk-3-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev ant ant-optional libnss3-dev libavahi-client-dev libxt-dev
    
    Note pin.svg

    Note:

    Since Sept 22 2023, gcc/g++ must be at least version 12. sudo apt install gcc-12 g++-12 and then sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 60 --slave /usr/bin/g++ g++ /usr/bin/g++-12

    You may need to first add a PPA (and then get version 13 instead) with sudo add-apt-repository ppa:ubuntu-toolchain-r/test


    openSUSE

    As dependências podem ser instaladas no Tumbleweed com este comando:

    sudo zypper in git autoconf automake bison make gcc gcc-c++ cups-devel fontconfig-devel gperf java-17-openjdk-devel libxslt-devel python3-devel krb5-devel libX11-devel libXext-devel libICE-devel libSM-devel libXt-devel libXrender-devel libXrandr-devel flex gtk3-devel gstreamer-devel gstreamer-plugins-base-devel ant junit nasm ccache binutils-gold mozilla-nss-devel
    

    on Leap gcc12 and gcc12-c++ distro packages should be installed and the following lines should be added to autogen.input:

    CC=gcc-12
    CXX=g++-12
    

    Fedora/Red Hat

    sudo dnf builddep libreoffice

    Arch Linux

    Essas dependências make são copiadas do oficial PKGBUILD do Arch Build System (com algumas modificações, pois inclui coisas que não são necessárias).

    sudo pacman -S --needed 'base-devel' 'git' 'ccache' 'ant' 'apr' 'beanshell' 'bluez-libs' 'clucene' \
                            'coin-or-mp' 'cppunit' 'curl' 'dbus-glib' \
                            'desktop-file-utils' 'doxygen' 'flex' 'gcc-libs' \
                            'gdb' 'glm' 'gobject-introspection' 'gperf' 'gpgme' \
                            'graphite' 'gst-plugins-base-libs' 'gtk3' \
                            'harfbuzz-icu' 'hicolor-icon-theme' 'hunspell' \
                            'hyphen' 'icu' 'java-environment' 'junit' \
                            'lcms2' 'libabw' 'libatomic_ops' 'libcdr' 'libcmis' \
                            'libe-book' 'libepoxy' 'libepubgen' 'libetonyek' \
                            'libexttextcat' 'libfreehand' 'libgl' 'libjpeg' \
                            'liblangtag' 'libmspub' 'libmwaw' 'libmythes' \
                            'libnumbertext' 'libodfgen' 'liborcus' 'libpagemaker' \
                            'libqxp' 'libstaroffice' 'libtommath' 'libvisio' \
                            'libwpd' 'libwpg' 'libwps' 'libxinerama' 'libxrandr' \
                            'libxslt' 'libzmf' 'lpsolve' 'mariadb-libs' \
                            'mdds' 'nasm' 'neon' 'nspr' 'nss' 'pango' \
                            'plasma-framework5' 'poppler' 'postgresql-libs' \
                            'python' 'qt5-base' 'redland' 'sane' 'serf' 'sh' \
                            'shared-mime-info' 'ttf-liberation' 'unixodbc' \
                            'unzip' 'xmlsec' 'zip' 'gtk4' 'qt6-base' 'zxing-cpp' \
                            'abseil-cpp'

    Se você não planeja trabalhar com Java, pode remover o ant, beanshell, java-environment e junit desta lista, pois o LibreOffice geralmente é executado sem ele.

    Se 'gcc-libs-multilib' estiver instalado, você terá que remover a dependência 'gcc-libs'.

    Slackware

    ./autogen.sh --without-java --disable-postgresql-sdbc --disable-gstreamer-1-0

    BSDs

    • DragonFlyBSD cd /usr/dports/editors/libreoffice && make patch
    • FreeBSD cd /usr/ports/editors/libreoffice && make patch
    • NetBSD cd /usr/pkgsrc/misc/libreoffice && make depends

    Clonando e compilando

    Em seguida, nós clone o repositório e começamos a compilar:

    $ git clone https://gerrit.libreoffice.org/core libreoffice
    $ cd libreoffice


    Neste ponto, você pode querer considerar opções adicionais para passar para autogen com

    $ ./autogen.sh --help

    Por exemplo, considere adicionar uma Opção de depuração. A alteração de algumas dessas opções exigirá uma recompilação completa: por exemplo, adicionar --enable-dbgutil. Como o seguinte comando make leva muito tempo para ser executado pela primeira vez, você provavelmente gostaria de economizar tempo especificando as configurações necessárias, dependendo do objetivo final de sua compilação. Em caso de dúvida, talvez seja bom pedir conselhos no #libreoffice-dev.

    Você deve ter uma configuração adequada para a compilação que você colocou dentro do arquivo autogen.input. Mas você pode começar com um conjunto mínimo de opções e personalizá-las posteriormente. Um exemplo de autogen.input para construir o LibreOffice no Linux pode ser o seguinte, habilitar a compilação de depuração e também desabilitar o doxygen para economizar tempo. Como o comando make pode levar muito tempo para ser executado pela primeira vez, essas opções são úteis.

    --enable-dbgutil
    --without-doxygen

    Então você pode preparar arquivos de compilação usando:

    $ ./autogen.sh


    Agora você está pronto para compilar usando make. Tenha em atenção que a compilação completa (todos os componentes, não incremental) pode demorar até 24 horas e ocupa cerca de 20 GB de espaço em disco. É uma boa ideia executar primeiro o make, para que você tenha uma compilação funcional caso o make check falhe posteriormente.

    It is a good idea to first run make, so you have a working build in case make check later fails.

    $ make
    $ make check

    Executando sua compilação

    A etapa anterior cria uma boa instalação local, com a qual você pode começar:

    $ instdir/program/soffice --writer
    $ instdir/program/soffice --calc


    Video Tutoriais

    Introdução ao desenvolvimento do LibreOffice

    Please accept this video. By accepting you will be accessing content from YouTube, a service provided by an external third party.

    YouTube privacy policy

    O vídeo ilustra o processo de configuração e construção de um ambiente de desenvolvimento. No entanto, use a documentação do wiki para sua configuração em vez de tentar anotar as coisas do que você vê no vídeo.

    Dicas

    Executando em um depurador

    Para iniciar sua compilação diretamente em um depurador:

    $ make debugrun

    Então você pode abrir o Writer com o comando:

       (gdb) run --writer
    

    Observe que soffice.bin será encerrado na primeira vez que for executado diretamente (ou via make debugrun), isso é normal, você simplesmente precisa executá-lo novamente para usá-lo. A execução do soffice resolverá isso para você.

    Habilitar avisos

    Várias versões do GCC são bem conhecidas por emitir avisos more/unhelpful/bogus em níveis de otimização mais altos. Nem tente combinar a compilação --disable-debug --enable-werror com o GCC.

    Desempenho

    Compilar o LibreOffice leva tempo, muito tempo. Exatamente quanto depende de quão poderosa é sua máquina. Mas existem ferramentas que você pode usar para acelerar as coisas.

    ccache

    ccache é uma ferramenta que armazena em cache os resultados da compilação C/C++ para tentar reutilizá-los posteriormente. Não vai acelerar sua construção inicial (pelo contrário, vai desacelerá-la um pouco), mas pode acelerar drasticamente a reconstrução posterior. Se você planeja alterar muitos arquivos de cabeçalho no LibreOffice, vale a pena ter essa ferramenta.

    Por padrão, o ccache será ativado automaticamente se for encontrado em seu sistema. Para obter melhores resultados, você pode querer aumentar o tamanho do cache ou habilitar a compactação do cache, `man ccache` é seu amigo.

    Observe que o tamanho do cache padrão é de apenas 5 GB, o que é muito pequeno para ser útil para uma compilação do LibreOffice; para uma compilação sem símbolos de depuração, você deve ter pelo menos 8 GB de cache e, para uma compilação com símbolos de depuração para tudo, provavelmente 32 GB é um ponto de partida útil. Você pode definir o tamanho assim (Observe que essa configuração é armazenada dentro do diretório de cache, se você alterar o local definindo $CCACHE_DIR, deverá refazê-lo):

    ccache --max-size 32G
    

    O ccache também oferece suporte à compactação, o que provavelmente é uma boa ideia ativar (alguém tem números concretos?), especialmente se você estiver usando um meio de armazenamento pequeno ou lento, como um SSD ou HD de laptop. Você pode ativar a compactação adicionando isso ao seu .bashrc ou equivalente:

    export CCACHE_COMPRESS=1
    

    Icecream / distcc

    Se você estiver em um ambiente onde você tem acesso a várias máquinas com ciclos de CPU extras, você pode dar uma olhada em icecream ou distcc ferramentas para compilação distribuída. Icecream é recomendado e mais fácil de configurar.

    O suporte para Icecream está embutido no LibreOffice, basta adicionar --enable-icecream a ./autogen.sh, e o processo de configuração pré-definirá o número de trabalhos usar e tentará encontrar os icecream gcc wrappers em /usr/lib/icecc/bin ou em /opt/icecream/bin. Se você os tiver em outro lugar, use a opção --with-gcc-home=/path/to/your/icecream/bin para substituir isso.

    Para fazer uso do distcc, primeiro instale e inicie distccd em todas as máquinas de compilação e certifique-se de que todas as versões do compilador sejam compatíveis (isso é importante para o código C++). Agora, na máquina principal, instale e configure distcc para usar os outros hosts de compilação. Em seguida, passe --with-parallelism=N para autogen.sh, onde N é o número total de CPUs disponíveis em seu cluster e execute distcc-pump make CC=distcc CXX=distcc para iniciar a compilação distribuída.

    Cabeçalhos pré-compilados

    Passar --enable-pch para autogen.sh permite o uso de cabeçalhos pré-compilados (PCH), que reduzem o tempo de compilação à custa de mais espaço em disco e mais arquivos de origem possivelmente reconstruídos quando um cabeçalho muda. A opção tem vários níveis (sistema, base, normal, completo), quanto maior o nível, maior o ganho possível, mas também uso de espaço em disco e chance de reconstruções maiores nas alterações.

    --with-parallelism

    O processo de compilação pode ser instruído a executar várias tarefas em paralelo. O paralelismo é controlado pelo parâmetro autogen.sh --with-parallelism. Se você tiver memória suficiente, descobri que usar --with-parallelism=n onde n é o número de núcleos ou 2 para --with-parallelism se você tiver apenas 1 núcleo, para o tempo de compilação mais rápido.

    --with-parallelism já padroniza para o número de núcleos/CPUs em seu sistema, a menos que você use --enable-icecream - então para 10.

    --with-system-libs

    Compilar com bibliotecas existentes pode acelerar sua compilação, mas você precisa mexer nas dependências.

    Tempos de compilação aproximados

    A primeira compilação ou uma compilação limpa leva aproximadamente 8/number_cores horas em um processador recente. Com o ccache, o tempo de compilação diário subsequente varia entre 2 e 10 minutos (dependendo do número de arquivos modificados ou adicionados e de sua complexidade).

    Criação detalhada

    Make ocultará exatamente as execuções de comandos. Para ver o que make faz exatamente para uma única execução, pode-se executa-lo como

    $ make verbose=1

    Using verbose=1, in turn sets this option for the child make invocations, and also deals with externals. In the verbose mode, every single command used to build LibreOffice is shown, which can be used for troubleshooting build problems.

    Multiplos Work Dirs

    Se você quiser trabalhar no branch master e no(s) branch(s) de lançamento atual ao mesmo tempo, você pode compartilhar repositórios git e tarballs de fonte externa (observe que a economia pode ser significativa, especialmente se você também usar o enorme repositório l10n). Observe que alternar entre diferentes ramificações de lançamento dentro do mesmo diretório de trabalho não é recomendado; mesmo que não haja problemas de dependência, a quantidade de coisas que você teria que reconstruir é praticamente igual a uma reconstrução limpa. Se você puder pagar pelo espaço em disco, manter árvores separadas é a maneira recomendada.

    Existem dois métodos para compartilhar repositórios git em diretórios de trabalho: git clone --reference e git-new-workdir. Um clone referenciado pode evitar o novo download do repositório, mas o novo workdir ainda terá seu próprio .git/config, etc. Isso é suportado por desenvolvedores (upstream) git. git-new-workdir, no entanto, não é suportado e pode causar problemas se você tentar verificar a mesma ramificação em dois diretórios de trabalho, etc

    Configuração

    Prepare a primeira compilação em seu disco como explicado acima. Para a segunda e todas as outras compilações, faça isso para clonar o repositório principal inicial:

    $ git clone --reference /path/to/master --branch name-of-branch ssh://logerrit/core /dir/to/be/created

    Você notará uma operação de clonagem muito mais rápida. Depois disso, configure o novo diretório de trabalho com estas duas opções extras de configuração (ou autogen.sh):

    $ ./autogen.sh ... --with-referenced-git=/path/to/master --with-external-tar=/path/to/master/external/tarballs

    Novamente, a clonagem será muito mais rápida. Você deve usar um caminho absoluto para a opção --with-external-tar. Depois disso, prossiga com a compilação exatamente como no caso do diretório de trabalho único.

    A opção --with-referenced-git só é necessária se você habilitou alguns submódulos (traduções, dicionários ou ajuda) ou se está construindo a branch libreoffice-4-0 (ou um ainda mais antigo). Nas ramificações mais recentes, os submódulos são desabilitados por padrão.

    Se você quiser escolher entre os diretórios de trabalho, você pode configurar sua cópia local do git para agir como um controle remoto, assim:

    $ cd /path/to/stable-workingcopy
    $ git remote add unstable /path/to/master/.git
    $ cd /path/to/master
    $ git remote add stable /path/to/stable-workingcopy/.git

    Em seguida, você apenas escolha os commits como faria com um controle remoto "verdadeiro" em outro servidor.

    Verificando uma branch de lançamento

    run autogen.sh on master with the specific parameters you need, then run make fetch to fetch the submodules that may be needed depending on the parameters you passed to autogen.sh

    then switch branch with

    $ ./g checkout -b libreoffice-4-0 origin/libreoffice-4-0


    rpm not found/ant not found/no package gnome-vfs-2.0

    --disable-epm This will fix "rpm not found", as autogen.sh expects to find either dpkg or rpm on the system.

    --without-java This will fix "ant not found"

    As of the master towards LibreOffice 3.6, to build the UNO SDK you need to have Doxygen installed so that HTML documentation for the C++ UNO interface can be generated. One option is to install Doxygen from its website and make sure the doxygen executable is found on the PATH, or specify its exact location via --with-doxygen=pathname configure switch. Another option is to configure --without-doxygen, in which case the HTML documentation for the C++ UNO interface will be missing from the UNO SDK being built. A third option is to configure --disable-odk, in which case the UNO SDK is not built at all.

    Note: Installing 'libgnomevfs2-dev' package on Ubuntu manually will fix "No package 'gnome-vfs-2.0' found" on older release branches. It should not be needed anymore on master by now. Use synaptic package manager or run in terminal

    $ sudo apt-get install libgnomevfs2-dev

    Build DEB and/or RPM Packages

    If you are wanting to build DEB or RPM packages, add the appropriate options to your autogen.input file:

    RPM

    --with-package-format=rpm
    --enable-epm

    DEB

    --with-package-format=deb
    --enable-epm

    The basic TDF distro configs can be found in the distro-configs module. For Linux, look at distro-configs/LibreOfficeLinux.conf.

    Onde estão os pacotes?

    Look for the files in the ./workdir/installation/ directory. There is a folder for each of the different sets of packages that includes subfolder[s] for the type or types of packages, either DEB, RPM, or both. Inside the subfolder[s] is another folder called install, and it includes two subfolders. One subfolder contains an archive of all of the packages zipped together (the ..._download folder) and the other contains a DEBS/RPMS folder with each individual package. The rest should be self-explanitory!

    Lidando com line endings e Git's autocrlf

    If autogen.sh produces output like the following:

    ./autogen.sh: line 1: $':\r': command not found
    ' '--srcdir=/home/user/libreoffice' '--enable-option-checking=fatal'
    configure: WARNING: you should use --build, --host, --target
    configure: WARNING: invalid host type: 
    ********************************************************************
    *
    *   Running LibreOffice build configuration.
    *
    ********************************************************************
    
    ' not recognized system type... Invalid configuration `
     failedre: error: /bin/bash ./config.sub 
    Error running configure at ./autogen.sh line 241.

    ... then you probably have line-ending problems. This might occur if you mistakenly set Git's core.autocrlf=true.

    To fix the issue, run these commands (WARNING: uncommitted changes will be lost!):

    git config --unset core.autocrlf
    git rm --cached -r .
    git reset --hard
    git clean -x -f
    ./autogen.sh

    Building translated user interface with .po files TDF Weblate

    LibreOffice's user interface is translated using .po files hosted on TDF Weblate server and translations are updated and packaged as language packs with every new release for every branch respectively. That often means language pack is not reflecting all the improvements made in-between releases and nightly builds exists only for a handful of languages. Translators might benefit from testing their work before new release been published and but early adopters could test translations before the official release.

    First make sure you managed build dependencies and then try to clone and run your build.

    Compilando interface de usuário traduzida

    1. Firstly you need to download .po files from TDF Weblate. You might log-in to TDF Weblate to download .po files.
    2. rebuild the source with language pack option on using command ./autogen.sh --with-lang="<langCode>" and don't forget to replace <langCode> with actual language code. If using an autogen.input file, no quotes are used, so this becomes: --with-lang=de ja ar
    3. extract downloaded .po files and copy content to relevant directories in source tree using command (on GNU/Linux) cp -R <langCode>/libo_ui/* libreoffice/translations/source/<langCode>/ and don't forget to replace <langCode> (two occurrences) with actual language code
    4. this step might be tricky. It seems that some extracted .po files are named 'messages.po' and some are named differently. What you need is every .po file converted to .mo file and
      1. for files that are **not named** 'messages.po', conversion is done by running make build-l10n-only
      2. for files that **are** named 'messages.po' you need to convert to .mo files manually running msgfmt -o instdir/program/resource/<langCode>/LC_MESSAGES/<moFile><dir>/messages.po for every such file. Here three things must be changed: <langCode> to actual language code, <moFile> with data from the left column of the table below and <dir> with data from right side of table below. Just make sure you prefix path '<dir>/messages.po' with full path from current working to destination.

    As mentioned in step 4, some .po files are named 'messages.po' and some are named differently. The table below lists directories that might hold 'messages.po' files and on which step 4.2 should be applied.

    <mofile> <dir>
    acc.mo accessibility
    avmedia.mo avmedia
    basctl.mo basctl
    chart.mo chart2
    cnr.mo connectivity
    cui.mo cui
    dba.mo dbaccess
    dkt.mo desktop
    editeng.mo editeng
    filter filter
    for.mo formula
    fps.mo fpciker
    frm.mo forms
    fwk.mo framework
    pcr.mo extensions
    rpt.mo reportdesign
    sb.mo basic
    sc.mo sc
    sca.mo scaddins
    scc.mo sccomp
    sd.mo sd
    sfx.mo sfx2
    sm.mo starmath
    svl.mo svl
    svt.mo svtools
    svx.mo svx
    sw.mo sw
    uui.mo uui
    vcl.mo vcl
    wiz.mo wizards
    wpt.mo writerperfect
    xsc.mo xmlsecurity

    Last step in process is to run sudo make install to install with newly added translations.

    If you would like to build LibreOffice-master and check the translation, you may need "make translations" to merge .po file with the .pot files.

    Compilando arquivos de Ajuda traduzidos

    Help files are also translated on TDF Weblate so for translated Help files this can be done

    1. by downloading .po files of translated Help
    2. run ./autogen.sh --with-help --with-lang="<langCode>" replacing <langCode> with actual language code. If you want to build Help as HTML files, do --with-help=HTML. If using an autogen.input file, no quotes are used, so this becomes: --with-lang=de ja ar
    3. run make
    4. run cp -fR <langCode>/libo_help/* libreoffice/translations/source/<langCode>/helpcontent2/source/text/, but remember to replace two instances of <langCode> with actual language code and make sure you navigate to this folder correctly from current working directory
    5. run mv libreoffice/translations/source/<langCode>/helpcontent2/source/text/auxiliary.po libreoffice/translations/source/<langCode>/helpcontent2/source/. Replace two instances of <langCode> with actual language code and make sure you navigate to this folder correctly from current working directory
    6. run make build-l10n-only
    7. run sudo make install

    (Graças a Kiyotaka e Jihui)