GIMP 2.8.2 под Debian или да здравствует однооконность


Не так давно вышел GIMP 2.8, в котором, кроме всего прочего, наконец-то сделали полноценный однооконный режим. На самом деле, в бета-режиме он работал и в версиях 2.7.x, но теперь есть и стабильный релиз. Наша задача - собрать это все под Debian 6.

Что имеем: Debian 6.0.6 "Squeeze", amd64.
Что хотим: нормально работающий GIMP 2.8.

Итак, приступим.
Для начала нам нужно скачать исходные коды самого GIMP`а, тех его зависимостей, которых нет в стандартных репозиториях, а также зависимостей зависимостей :) .

gimp-2.8.2 - ftp://ftp.gimp.org/pub/gimp/v2.8/gimp-2.8.2.tar.bz2, зеркало
babl-0.1.10 - ftp://ftp.gtk.org/pub/babl/0.1/babl-0.1.10.tar.bz2, зеркало
glib-2.34.0 - ftp://ftp.gtk.org/pub/glib/2.34/glib-2.34.0.tar.xz, зеркало
gegl-0.2.0 - ftp://ftp.gimp.org/pub/gegl/0.2/gegl-0.2.0.tar.bz2, зеркало
atk-2.2.0 - http://download.gnome.org/sources/atk/2.2/atk-2.2.0.tar.bz2, зеркало
gdk-pixbuf-2.24.1 - http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/2.24/gdk-pixbuf-2.24.1.tar.xz, зеркало
gtk+-2.24.10 - http://ftp.gnome.org/pub/gnome/sources/gtk+/2.24/gtk+-2.24.10.tar.xz, зеркало
cairo-1.11.4 - http://www.cairographics.org/snapshots/cairo-1.11.4.tar.gz, зеркало
graphite2-1.2.0 - http://downloads.sourceforge.net/project/silgraphite/graphite2/graphite2-1.2.0.tgz, зеркало
harfbuzz-0.9.12 - http://www.freedesktop.org/software/harfbuzz/release/harfbuzz-0.9.12.tar.bz2, зеркало
fontconfig-2.10.91 - http://www.freedesktop.org/software/fontconfig/release/fontconfig-2.10.91.tar.bz2, зеркало
pango-1.32.6 - http://ftp.gnome.org/pub/GNOME/sources/pango/1.32/pango-1.32.6.tar.xz, зеркало
libcroco-0.6.8 - http://ftp.acc.umu.se/pub/GNOME/sources/libcroco/0.6/libcroco-0.6.8.tar.xz, зеркало
librsvg-2.37.0 - http://ftp.acc.umu.se/pub/GNOME/sources/librsvg/2.37/librsvg-2.37.0.tar.xz, зеркало

Как-то так. Вообще-то, надо бы еще собрать gobject-introspection для atk и librsvg, но мне так и не удалось это сделать. Раз он такой  хитровывернутый - обойдемся без него :) .

Затем установим несколько необходимых пакетов, которые понадобятся нам для компиляции (в системе должны быть подключены deb-src репозитории!):
apt-get build-dep gimp babl glib2.0 gegl gtk+2.0 pango1.0
apt-get install asciidoc valac vala-utils enscript libjasper1 \
libjasper-dev graphviz graphviz-dev libexiv2-dev libumfpack5.4.0 \
libsuitesparse-dev libspectre-dev gobject-introspection libgs-dev \
libgirepository1.0-dev libgudev-1.0-dev sed liblua5.1-0-dev \
libsdl1.2-dev libavformat-dev libavcodec-dev libavfilter-dev \
libbz2-dev libcurl4-gnutls-dev libperl-dev cmake libgl1-mesa-dev \
libglu1-mesa-dev libglu1-xorg-dev

Собирать будем, по традиции, в каталоге /usr/src. Ставить - в /opt/gimp-2.8.2. В /usr или в /usr/local ставить не рекомендую, так как будем собирать в том числе и gtk+, который немного (минорных версий так на 10) новее того, что стоит в системе, да и glib любит поломать все, до чего дотягивается. Закидываем скачанные архивы в наш /usr/src и приступаем. Дальнейшие работы проводятся от суперпользователя (root), но параноики могут сделать и по-правильному, через всякие fakeroot и т.п.. На мой взгляд, в этом нет необходимости.

Так как мы будем собирать в нестандартный каталог, пропишем необходимые переменные окружения:
export LD_LIBRARY_PATH=/opt/gimp-2.8.2/lib
export PKG_CONFIG_PATH=/opt/gimp-2.8.2/lib/pkgconfig

Сначала соберем babl. Пусть он будет с поддержкой SSE и MMX:
tar -xvf babl-0.1.10.tar.bz2
cd babl-0.1.10
./configure --enable-mmx --enable-sse --with-pic --prefix=/opt/gimp-2.8.2
make
make install
cd ..

Затем соберем glib. Почему сразу такую версию? Дело в том что его много кто в дальнейшем захочет.
tar -xJvf glib-2.34.0.tar.xz
cd glib-2.34.0
./configure --with-pic --prefix=/opt/gimp-2.8.2
make
make install
cd ..

Теперь gegl, опять с поддержкой SSE и MMX:
tar -xvf gegl-0.2.0.tar.bz2
cd gegl-0.2.0
./configure --enable-mmx --enable-sse --with-pic --prefix=/opt/gimp-2.8.2
make
make install
cd ..

atk будем конфигурировать с опцией --enable-introspection=no, так как по вышеуказанным причинам у нас нет gobject-introspection.
tar -xvf atk-2.2.0.tar.bz2
cd atk-2.2.0
./configure --with-pic --prefix=/opt/gimp-2.8.2 --enable-introspection=no
make
make install
cd ..

Теперь очередь gdk-pixbuf. Все стандартно:
tar -xJvf gdk-pixbuf-2.24.1.tar.xz
cd gdk-pixbuf-2.24.1
./configure --with-pic --prefix=/opt/gimp-2.8.2
make
make install
cd ..

Пока собирается gtk+, можно попить чайку:
tar -xJvf gtk+-2.24.10.tar.xz
cd gtk+-2.24.10
./configure --with-pic --prefix=/opt/gimp-2.8.2
make
make install
cd ..

Для GIMP`а нужен pango с поддержкой cairo (необязательный компонент, но почему бы и нет?). Что ж, соберем с начала cairo, включив побольше всяких плюшек, нам не жалко.
tar -xvf cairo-1.11.4.tar.gz
cd cairo-1.11.4
./configure --with-pic --enable-tee --enable-xml --enable-qt --enable-gl --enable-glx --prefix=/opt/gimp-2.8.2
make
make install
cd ..

Ну и, как обычно, кучу всяких дополнительных штуковин для pango. graphite2:
tar -xvf graphite2-1.2.0.tgz
cd graphite2-1.2.0
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt/gimp-2.8.2 -G "Unix Makefiles" ..
make
make test
make install
cd ../..

harfbuzz:
tar -xvf harfbuzz-0.9.12.tar.bz2
cd harfbuzz-0.9.12
./configure --with-pic --prefix=/opt/gimp-2.8.2
make
make install
cd ..

fontconfig:
tar -xvf fontconfig-2.10.91.tar.bz2
cd fontconfig-2.10.91
./configure --with-pic --prefix=/opt/gimp-2.8.2
make
make install
cd ..

Теперь и сам pango:
tar -xJvf pango-1.32.6.tar.xz
cd pango-1.32.6
./configure --with-pic --prefix=/opt/gimp-2.8.2
make
make install
cd ..

Для поддержки SVG файлов нужен librsvg (также необязательный компонент), а он, в свою очередь, хочет libcroco. Хочет - пусть получает:
tar -xJvf libcroco-0.6.8.tar.xz
cd libcroco-0.6.8
./configure --with-pic --prefix=/opt/gimp-2.8.2
make
make install
cd ..

Также librsvg желает gobject-introspection, но у нас его нет. Поэтому --enable-introspection=no.
tar -xJvf librsvg-2.37.0.tar.xz
cd librsvg-2.37.0
./configure --with-pic --prefix=/opt/gimp-2.8.2 --enable-introspection=no
make
make install
cd ..

Ну вот, пришло время собирать сам gimp. Пусть он также будет с поддержкой SSE и MMX. Снова можно попить чаю :)
tar -xvf gimp-2.8.2.tar.bz2
cd gimp-2.8.2
./configure --enable-mmx --enable-sse --enable-static --with-pic --prefix=/opt/gimp-2.8.2
make
make install
cd ..

Ну вот, основное сделали. Теперь косметика.
Мы собирали в /opt/gimp-2.8.2, а это значит, что при запуске GIMP`а необходимо указать GTK+, где искать темы оформления (хотя, на самом деле можно просто скопировать нужные темы в /opt/gimp-2.8.2/share/themes/ , но это не наш метод).Так как в /opt/gimp-2.8.2/bin/gimp находится симлинк на /opt/gimp-2.8.2/bin/gimp-2.8, вместо симлинка поместим bash-скрипт:
#!/bin/bash
export GTK_DATA_PREFIX=/usr
/opt/gimp-2.8.2/bin/gimp-2.8 "$@"

UPD: Вместо этого также можно сделать следующее:
rm -r /opt/gimp-2.8.2/share/themes
ln -s /usr/share/themes /opt/gimp-2.8.2/share/

Попробуем запустить. Запустилось! Замечательно.
Теперь добавим наш GIMP в системное меню:
cp /opt/gimp-2.8.2/share/icons/hicolor/16x16/apps/gimp.png /usr/share/icons/hicolor/16x16/apps/gimp.png
cp /opt/gimp-2.8.2/share/icons/hicolor/22x22/apps/gimp.png /usr/share/icons/hicolor/22x22/apps/gimp.png
cp /opt/gimp-2.8.2/share/icons/hicolor/24x24/apps/gimp.png /usr/share/icons/hicolor/24x24/apps/gimp.png
cp /opt/gimp-2.8.2/share/icons/hicolor/32x32/apps/gimp.png /usr/share/icons/hicolor/32x32/apps/gimp.png
cp /opt/gimp-2.8.2/share/icons/hicolor/48x48/apps/gimp.png /usr/share/icons/hicolor/48x48/apps/gimp.png
cp /opt/gimp-2.8.2/share/icons/hicolor/256x256/apps/gimp.png /usr/share/icons/hicolor/256x256/apps/gimp.png
cat /opt/gimp-2.8.2/share/applications/gimp.desktop | grep -v X-GNOME-Bugzilla | sed 's/gimp-2.8/\/opt\/gimp-2.8.2\/bin\/gimp/' > /usr/share/applications/gimp-2.8.2.desktop
update-menus

Однооконный режим включается в меню Windows->Single-Window Mode. Опционально, в настройках можно указать русский язык.
Цель можно считать достигнутой. Получилось как-то так (кликабельно):


UPD: При выходе, как выяснилось, возникает небольшой segfault в libfontconfig.so.1.6.2. Однако на работе программы это никак не сказывается (во всяком случае, я не заметил ничего подозрительного).

UPD2: Также, для поддержки тем, может потребоваться сборка gtk2-engines, gtk2-engines-murrine или прочих, в зависимости от используемой темы. Собираются они абсолютно аналогично.

Peter , 31.01.2013


#1 Андрэ Friday, 01-Feb-13 23:58:58 NOVT
It`s cool, I`d like to test it!