Приведённые ниже команды подготовят вашу систему к построению 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)'
Сперва вам необходимо получить локальную копию исходных кодов. Это можно сделать скачав '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 – это распределённая система управления версиями файлов. Это очень мощная, но в тоже время и простая система, но если вы не знаете что такое система управления версиями (DVCS), то вы можете запутаться разбираясь что к чему. К счастью, в интернете есть хорошие ресурсы посвящённые обучению работы с системой Git. Если вы не знакомы с Git, посетите сайт http://git-scm.com/ . Далее эта статья будет подразумевать, что вы уже имеете базовые знания для работы с Git.
Из-за большого размера проекта, исходный код LibreOffice разбросан по 19 Git репозиториям. Это создаёт новые проблемы даже для продвинутых git пользователей.
Одной из основных проблем является то, что вы поймёте, что нужно запускать одну и ту же 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 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 -
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.
...
Список простых хаков был собран специально для того чтобы помочь вам найти для себя первое задание. Конечно, у нас также есть багтрекер (система отслеживания ошибок) open issues. И вот ещё список сумасшедших идей, которые некоторые люди хотят воплотить в жизнь.
Если вы начали писать код для LibreOffice, то есть смысл выдерживать единый стиль кода OpenOffice.org и соблюдать конвенцию кода (схемы именования переменных и т.д.).
Anonymous