Menu

Development Log in to Edit

Alexey Doroshenko

Требуемые библиотеки/зависимости

Приведённые ниже команды подготовят вашу систему к построению LibreOffice.

Ubuntu (10.10, возможно и более поздние версии):

 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)'


Обзор Git репозиториев

Сперва вам необходимо получить локальную копию исходных кодов. Это можно сделать скачав 'root' репозиторий,

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

а затем, используя следующие команды, скачать оставшуюся часть исходных кодов из всех других репозиториев.

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

Шаг ./download займёт некоторое время. Это потому, что git загружает всю историю проекта. Но не волнуйтесь, только первая загрузка займёт длительное время. Далее git будет скачивать только то, что изменилось с вашего последнего получения копии.

После выполнения вышеприведённых действий, в директории git должна появиться директория loroot, содержимое которой должно выглядеть примерно следующим образом:

 ~/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' содержит все другие репозитории установки. В директории 'rawbuild' содержится всё для построения «чистого» libre-office.

Давайте взглянем на директорию 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

Вот они, 20 git репозиториев, 19 вышеперечисленных плюс root репозиторий.

Первая сборка

Давайте перейдём к директории 'rawbuild'

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

Эта директория содержит множество ссылок, указывающих на содержимое наших 19 git репозиториев, которые содержатся в директории 'clone', плюс на несколько файлов необходимых для сборки LibreOffice.

Вам необходимо настроить среду сборки. Существует множество опций. Вы можете увидеть их все, запустив:

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

Но если вы запускаете процесс на стандартной Linux системе, то используйте следующие опции, они должны обеспечить «безопасное» выполнение настройки:

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

В вышеприведённой команде замените число 5 на количество процессоров (ядер?) в вашей системе + 1.

Теперь вы можете запустить непосредственно саму сборку. В процессе построения будет выводится много сообщений... В большинстве случаев вам не нужно иметь с ними дело, но иногда, например, чтобы выяснить, что произошло в процессе сборки, всё-таки нужно, поэтому я обычно перенаправляю вывод сообщений в файл, чтобы в случае необходимости можно было посмотреть лог сборки:

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

Теперь найдите себе другое занятие, вынесите мусор, постирайте бельё... Процесс полной сборки легко может занять несколько часов (with an s).

Если всё прошло хорошо и построение успешно завершилось, то теперь вы можете запустить:

 ~/git/loroot/rawbuild make dev-install

И если этот шаг также завершился успехом, вы должны увидеть что-то вроде этого:

 ...
 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

Это говорит о том, что процесс инсталляции завершён и указывает путь, где вы можете найти ваш, только что собранный, запускаемый бинарный файл, libreoffice!

Сборка не удалась... Что делать ?

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.

Вот пример неудачной сборки. Моя сборка завершилась со следующими сообщениями:

 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

Итак, для начала: не отправляйте это в мэйлинг-лист. Единственная полезная информация из всего этого, что модуль 'connectivity' не может быть построен по каким-то, неизвестным для нас причинам.

Так как получить более осмысленную выходную информацию, чтобы отследить что произошло или чтобы кто-то другой смог вам помочь ?

Первое что вы должны сделать, это 'source' для файла *Env.Set.sh (у меня 64-битная linux система, так что в моём случае файл называется LinuxX86-64Env.Set.sh)

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

Далее вы должны перейти в директорию, название которой совпадает с названием модуля на котором сборка остановилась с ошибкой, в данном случае это '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. Чтобы сделать это, выполните команду:

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

И оттуда же вы можете перезапустить процесс сборки отдельно этого модуля командой 'build'.

Вот вывод (частично) команды 'build':

 $ 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'

Теперь уже лучше. Я посмотрел в указанный файл и понял, что я случайно (на самом деле специально, для примера) удалил букву T перед TimeValue, которое должно быть на самом деле TTimeVaue... Я быстро исправил эту проблему вновь выполнил команду 'build' чтобы убедиться, что проблема исчезла. Затем я вернулся назад в дирректорию rawbuild и опять запустил команду make.

Если вы не можете понять что произошло, вы можете попытаться быстро пересобрать этот модуль. Причина сделать это заключается в том, что иногда программа построения ('make') не может правильно получить всех зависимостей. Чтобы сделать это, вы должны удалить директорию *.pro которая располагается в директории с собираемым модулем и вновь запустить команду 'build'.

Использование Git для разработки LibreOffice

Git – это распределённая система управления версиями файлов. Это очень мощная, но в тоже время и простая система, но если вы не знаете что такое система управления версиями (DVCS), то вы можете запутаться разбираясь что к чему. К счастью, в интернете есть хорошие ресурсы посвящённые обучению работы с системой Git. Если вы не знакомы с Git, посетите сайт http://git-scm.com/ . Далее эта статья будет подразумевать, что вы уже имеете базовые знания для работы с Git.

Из-за большого размера проекта, исходный код LibreOffice разбросан по 19 Git репозиториям. Это создаёт новые проблемы даже для продвинутых git пользователей.

./bin/g

Одной из основных проблем является то, что вы поймёте, что нужно запускать одну и ту же git команду для всех 19 репозиториев. В основном репозитории есть маленькая утилита, названная g, располагается в ./bin/g (path are given relative to your root LibreOffice git repository.)

Большинство таких команд git xxxx, могут быть набраны как ./bin/g xxxx и это означает 'выполнить команду git xxxx для каждого репозитория, содержащегося в ./clone/'

По умолчанию, для большинства git команд, если возникает ошибка при выполнении этой команды для любого из git репозиториев LibreOffice, то ./bin/g останавливает выполнение этой команды для других оставшихся репозиториев. Можно изменить поведение утилиты запустив её с префиксом ./bin/g -f xxxx.

Простейшее использование ./bin/g

./bin/g is normally not in your PATH. You could, of course, put it in your PATH, but that would prevent you from having multiple copies of the code base. Due to the time it takes to do a full clean build, I prefer having a second copy of the repositories, where I do mostly fresh make out of the development tip.

./bin/g not being in your PATH, makes typing the command cumbersome and error prone. The following little script - which is to be put in a directory that is in your PATH, under the name find-lo-bin - provides a solution for this problem:

 #!/bin/bash

 current_dir=`pwd`
 while [ ${current_dir} != "/" -a -d "${current_dir}" -a ! -d "${current_dir}/.git" ] ;
 do
 current_dir=$(dirname "${current_dir}")
 done
 if [ $(basename $(dirname ${current_dir})) = "clone" ] ; then
 current_dir=$(dirname $(dirname "${current_dir}"))
 fi
 echo "${current_dir}/bin"
 unset current_dir

Now you can add this to your alias list (in your .bashrc for example):

 alias g='$(find-lo-bin)/g'

With that in place, you can now just type 'g xxxx' as long as you are in a directory somewhere inside of the root LibreOffice repository.

Another limitation of ./bin/g is that it applies only to the git repositories in ./clone/ and not on the root git repository itself. More often than not, you will find yourself typing git xxx && ./bin/g xxx.

The following little script, called 'ga' provides a wrapper for just that:

 #!/bin/bash

 cd $(find-lo-bin)/..
 if [ "$1" = "-f" ] ; then
 shift
 git "$@"
 ./bin/g -f "$@"
 else
 git "$@" && ./bin/g "$@"
 fi
 cd -

Grepping

You can use git grep instead of grep as it is much faster on large source trees by only looking at the files under revision control. And you can use g grep or ga grep to search on all the git repositories at once.

Управление ветками git

...

Как принять участие

Простые хаки

Список простых хаков был собран специально для того чтобы помочь вам найти для себя первое задание. Конечно, у нас также есть багтрекер (система отслеживания ошибок) open issues. И вот ещё список сумасшедших идей, которые некоторые люди хотят воплотить в жизнь.

Подготовка патчей

Если вы начали писать код для LibreOffice, то есть смысл выдерживать единый стиль кода OpenOffice.org и соблюдать конвенцию кода (схемы именования переменных и т.д.).


Discussion

Anonymous
Anonymous

Add attachments
Cancel





Monday.com Logo