Эта статья написана для самых любопытных пользователей программы — тех, кто готов самостоятельно собирать её из текущего исходного кода.
Статья подразумевает использование Linux, в частности, Ubuntu 11.04. Общие принципы, тем не менее, применимы и к другим дистрибутивам.
Используемые библиотеки
GIMP опирается на некоторое количество библиотек, предоставляющих разнообразную функциональность. Некоторые из них в свою очередь опираются на другие библиотеки и приложения.
Для GIMP ключевыми являются следующие библиотеки:
- GTK+, набор элементов графического интерфейса;
- babl, библиотека преобразования между растровыми форматами;
- GEGL, новый движок обработки и рендеринга графики.
Чтобы не искать все нужные библиотеки по очереди, можно просто установить все зависимости. В Ubuntu это делается следующей командой:
$ sudo apt-get build-dep gimp
Если вы никогда ничего не собирали, вместе с библиотеками будет установлен компилятор и базовые вспомогательные инструменты для сборки приложений в Linux.
Обратите внимание: вместе с ними будут установлены библиотеки babl и GEGL. Если вы планируете собирать их самостоятельной, после выполнения предыдущей команды их нужно удалить. Но сначала установим библиотеки, необходимые для сборки и функционирования babl и GEGL:
$ sudo apt-get build-dep babl
$ sudo apt-get build-dep gimp
Поскольку GIMP зависит от GEGL, а GEGL зависит от babl, удаляем babl:
$ sudo apt-get remove libbabl-0.0-0
Теперь у нас есть все основные библиотеки, необходимые для сборки babl, GEGL и GIMP. Есть некоторое количество дополнительных библиотек и приложений, обеспечивающих работу необязательных функций GEGL и GIMP. Вот они:
- enscript и asciidoc, сборка документации GEGL;
- exiv2, определение экспозиции при сборке HDR в GEGL;
- lua5.0, поддержка языка программирования Lua в GEGL;
- ruby1.8поддержка языка программирования Ruby в GEGL;,
- gtk-doc-tools, сборка документации для разработчиков GIMP.
Обращаю ваше внимание на то, что описанные выше действия по большому счёту предполагают самостоятельную сборку всего, что связано с GIMP. Т.е. если вы захотите установить из репозитория Ubuntu какое-то дополнение, вам придётся держать установленной стабильную версию GIMP и сопутствующих библиотек из репозитория, а нестабильную версию устанавливать в другой каталог. Ну или вовсе отказаться от стабильной версии и собирать всё самостоятельно.
Получение и обновление файлов из Git
Теперь нам необходимо получить копию репозиториев с исходным кодом babl, GEGL и GIMP. Репозиторий — это хранилище данных с контролем версий файлов для возможности отката изменений. Для обеспечения совместной работы программистов и переводчиков проектом используется децентрализованная система контроля версий Git.
Децентрализованность Git выражается в том, что вы можете сохранять свои изменения локально. Ближе к концу статьи вы увидите, зачем это нужно.
Итак, вытаскиваем babl:
$ git clone git://git.gnome.org/babl
Затем GEGL:
$ git clone git://git.gnome.org/gegl
Наконец, GIMP:
$ git clone git://git.gnome.org/gimp
В каждом случае будет создан локальный клон сетевого репозитория.
Для синхронизации локального клона с текущим сетевым репозиторием используется команда pull. Здесь есть очень важный момент, который нужно понимать, если вы вносите какие-то изменения в существующие файлы.
У команды pull есть ключ --rebase. Если вы его не используете, git просто добавит в ваш локальный клон изменения из сетевого репозитория. Но если вы используете --rebase, ваш локальный клон будет полностью синхронизирован с сетевым, а все лично ваши изменения придётся либо отложить, либо внести в локальный клон.
Изменения откладываются следующим образом:
$ git stash
После это команды вы сможете запустить
$ git pull --rebase
а затем вернуть отложенные изменения:
$ git stash apply
Внести изменения можно командой commit:
$ git commit изменённый_файл -m "Описание изменения"
Хотите вы собирать библиотеки и GIMP прямо в локальных клонах, или же предпочитаете копировать их в другой каталог и собирать уже там — ваше личное дело.
Сборка
У разработчиков babl, GEGL и GIMP не совсем обычный подход к испоользованию типовых сценариев сборки. Когда вы собираете взятый из Git код, сценарий ./configure вы не запускаете в принципе. Команда конфигурации, сборки и установки для всех трёх выглядит так:
$ ./autogen.sh && make && sudo make install
Вы можете указать префикс сборки — в какой каталог будут установлены библиотеки и программа. По умолчанию это /usr/local, что считается достаточно безопасным. Но если вы уверены в своих действиях, можно сделать так:
$ ./autogen.sh --prefix=/usr && make && sudo make install
В этом случае библиотеки попадут в /usr/lib, а исполняемые файлы — в /usr/bin.
Префикс может быть абсолютно любым, надо только помнить, что не все каталоги по умолчанию находятся в окружении PATH. Поэтому если для вас критична возможность набрать из консоли
$ gimp имя_файла
переменную PATH придётся скорректировать. В подавляющем же большинстве случаев установки в /usr/local по умолчанию более чем достаточно.
Для ./autogen.sh в GEGL можно также указать ключ --enable-workshop. В этом случае вы соберёте дополнительные операции (актуально для проекта GSoC2011 по портированию фильтров).
Создание собственных веток
В проекте часто параллельно ведётся разработка разных интересных новшеств, для чего используются так называемые ветки — своего рода ответвления от основного «дерева» с исходным кодом, которое в Git называется master.
Каждый раз переключаться между ветками для тестирования несколько утомительно. Этого можно избежать, если создать собственную локальную ветку, в которую можно просто по мере надобности вносить изменения из выбранных веток.
Давайте рассмотрим это на примере GEGL и создадим собственную ветку, основанную на master и объединяющую все ветки с кодом Google Summer of Code
1. Обновляем активный клон основного репозитория:
$ git pull --rebase
2. Создаём собственную ветку с отслеживанием изменений в master:
$ git branch -t gsoc2011-all
3. Переключаемся на неё:
$ git checkout gsoc2011-all
4. Получаем список доступных веток:
$ git branch -a
К примеру, вы увидите ветку remotes/origin/soc-2011-warp с операциями GEGL, обеспечивающими работу интерактивной версии фильтра iWarp. Префикс “remotes” в названии просто указывает на то, что это ветка в сетевом репозитории, и она в вашем локальном репозитории неактивна.
5. Теперь вносим изменения из этой ветки:
git merge origin/soc-2011-warp
6. Вносим изменения из ветки с портом фильтров GIMP в операции GEGL:
$ git merge origin/soc-2011-ops
7. Вносим изменения из ветки с реализацией поддержки OpenCL:
$ git merge origin/gsoc2011-opencl
Далее вам нужно будет просто запускать
$ git pull --rebase
для получения и применения изменений и
$ git merge origin/ветка
для внесения очередных изменений из выбранных веток.
Остаётся лишь собрать GEGL в этой ветке и повторить процедуру для GIMP.
В принципе, можно работать прямо в клоне основной ветки master, и если что-то поломается, вы сможете начать заново, не вытаскивая весь репозиторий с нуля:
$ git reset --hard origin/master
Если же вы предпочитаете работать в своей ветке, при возникновении каких-то проблем её можно просто удалить и начать заново:
$ git branch -d gsoc2011-all
Создание патчей
Раз уж речь зашла об использовании Git, давайте осветим вопрос создания сформатированных для Git патчей.
Что значит патч, сформатированный для Git? Это значит, что в файл патча также влючается ваше имя, дата изменения и комментарий к нему. В децентрализованных системах контроля версий это означает, что ваше имя будет автоматически фигурировать в журнале изменений.
Если вы никогда ранее не пользовались Git, начните с конфигурации. Укажите имя латиницей:
$ git config --global user.name "Имя Фамилия"
Затем укажите адрес почты, который будет виден в журнале изменений:
$ git config --global user.email адрес@почты.com
После этого можно готовить патчи. Сначала вносим изменения в систему контроля версий:
$ git commit изменённый файл -m "Комментарий на английском"
Создаём патч. Будем считать, что вы сейчас в локальном клоне master:
$ git format-patch origin/master
Git создаст файл 0001-Комментарий-на-английском.patch, который можно отправить разработчикам на рассмотрение.
Обязательно ли пользоваться консолью? Вовсе нет. Вы можете установить любой из существующих графических интерфейсов, например, gitg:
Так или иначе, теперь вы знаете, как самостоятельно собирать GIMP из Git и готовить изменения. Если же вам достаточно сборки только нестабильной версии из master, в случае с Ubuntu достаточно подключить репозиторий с готовыми сборками
$ sudo apt-add-repository ppa:matthaeus123/mrw-gimp-svn
$ sudo apt-get update
$ sudo apt-get install gimp
Следует лишь помнить, что сборки в нём не всегда актуальны.
Add a comment