четверг, 11 декабря 2008 г.

Пересборка libwxgtk2.8 в Debian, без зависимостей от gconf и gstreamer

libwxgtk2.8-0 мне понадобился для amule. Оказалось он зависит от libgconf2-4. Хотя самого gconf он не требует, я всё же решил пересобрать. Убедится в том, что ни gconf, ни gstreamer этой версии wxgtk не требуются мне помог gentoo-portage.com.

wxGTK-2.8.8.1

dev-libs/expat

odbc?
( dev-db/unixODBC )

sdl?
( media-libs/libsdl )

X?
( >=x11-libs/gtk+-2.4 >=dev-libs/glib-2.4 media-libs/jpeg media-libs/tiff x11-libs/libSM x11-libs/libXinerama x11-libs/libXxf86vm gnome?
( gnome-base/libgnomeprintui )
gstreamer?
( >=media-libs/gstreamer-0.10 )
opengl?
( virtual/opengl )
)
Стабильная версия в Gentoo чуть свежее. Как видно gstreamer и libgnomeprintui - опциональны. Скачал wxGTK-2.8.8.1.ebuild на всякий случай.

Скачиваем wxwidgets2.8_2.8.7.1-1.1.dsc, wxwidgets2.8_2.8.7.1.orig.tar.gz, wxwidgets2.8_2.8.7.1-1.1.diff.gz и копируем их в папку wxwidgets2.8 в домашнем каталоге.

Нам понадобятся dpkg-dev и fakeroot.

1. Извлечём исходники с наложением патчей:
~/wxwidgets2.8$ dpkg-source -x wxwidgets2.8_2.8.7.1-1.1.dsc
2. Перейдём в каталог с распакованными исходниками (wxwidgets2.8-2.8.7.1). Чтобы избавиться от зависимостей нужно отредактировать опции сборки. Они находятся в файле rules в каталоге debian. Обнаружим:
# build options
COMMON_CONFIGURE_OPTIONS = \
--prefix=/usr \
--cache-file=$(config_cache) \
--with-flavour=$(DEBIAN_WXFLAVOUR) \
--with-zlib=sys \
--disable-reserved_virtual \

BASE_CONFIGURE_OPTIONS = $(COMMON_CONFIGURE_OPTIONS) \
--disable-gui \

GTK_CONFIGURE_OPTIONS = $(COMMON_CONFIGURE_OPTIONS) \
--with-gtk \
--enable-mediactrl \
--enable-sound \
--with-sdl \
--enable-display \
--enable-geometry \
--enable-graphics_ctx \
--with-libjpeg=sys \
--with-libpng=sys \
--with-libtiff=sys \
Опции сборки мы нашли, но что нужно убрать/добавить нам подскажет wxGTK-2.8.8.1.ebuild:
# wxGTK options
# --enable-graphics_ctx - needed for webkit, editra
# --without-gnomevfs - bug #203389

use X && \
myconf="${myconf}
--enable-graphics_ctx
--enable-gui
--with-libpng
--with-libxpm
--with-libjpeg
--with-libtiff
$(use_enable gstreamer mediactrl)
$(use_enable opengl)
$(use_with opengl)
$(use_with gnome gnomeprint)
--without-gnomevfs"
Итак нас интересуют опции mediactrl и gnomeprint. Из файла configure.in в каталоге исходников узнаём что mediactrl по умолчанию выключена, а gnomeprint включена, но игнорируется, если libgnomeprintui не найден. Следовательно нам нужно удалить --enable-mediactrl из файла rules.

3. Просмотрим файл control в каталоге debian на предмет определения зависимостей пакета libwxgtk2.8-0:
Package: libwxgtk2.8-0
Architecture: any
Section: libs
Depends: ${shlibs:Depends}
Suggests: libgnomeprintui2.2-0
В зависимостях указано ${shlibs:Depends}. Данная конструкция позволяет программе dh_gencontrol заполнить данное поле названиями пакетов разделяемых библиотек, которыми пользуется программа (Руководство начинающего разработчика Debian). Так и оставляем. Рекомендации Suggests: libgnomeprintui2.2-0 удаляем.

4. Устанавливаем пакеты, необходимые для сборки (Build-Depends), узнать их можно в файле wxwidgets2.8_2.8.7.1-1.1.dsc. Разумеется не все: debhelper, gettext, python-central, bc и dpatch у меня в системе есть (притянуты по зависимостям), а чтобы не устанавливать libgnomeprintui2.2-dev, libgconf2-dev, libgstreamer0.10-dev, libgstreamer-plugins-base0.10-dev мы всё это и затеяли. Я выполнил:
# apt-get install flex bison libgtk2.0-dev python-all-dev python-all-dbg zlib1g-dev libjpeg62-dev libpng12-dev libtiff4-dev libsm-dev libgl1-mesa-dev libglu1-mesa-dev libesd0-dev
5. Всё готово, можно приступить к сборке. Переходим в каталог исходников и выполняем:
~/wxwidgets2.8/wxwidgets2.8-2.8.7.1$ fakeroot debian/rules build
6. Если сборка прошла успешно, создаём пакеты (как собрать и создать только libwxgtk2.8-0 я не знаю):
~/wxwidgets2.8/wxwidgets2.8-2.8.7.1$ fakeroot debian/rules binary
Пакеты будут созданы на каталог выше, т.е. в ~/wxwidgets2.8. Проверяем:
$ dpkg --info ~/wxwidgets2.8/libwxgtk2.8-0_2.8.7.1-1.1_i386.deb | grep Depends
Depends: libatk1.0-0 (>= 1.20.0), libc6 (>= 2.7-1), libexpat1 (>= 1.95.8), libgcc1 (>= 1:4.1.1), libgl1-mesa-glx | libgl1, libglib2.0-0 (>= 2.16.0), libglu1-mesa | libglu1, libgtk2.0-0 (>= 2.12.0), libjpeg62, libpango1.0-0 (>= 1.20.3), libpng12-0 (>= 1.2.13-4), libsm6, libstdc++6 (>= 4.1.1), libtiff4, libwxbase2.8-0 (>= 2.8.7.1), libxinerama1, zlib1g (>= 1:1.1.4)
Как видите ни gconf, ни gstreamer нет, можно устанавливать.

Пакет нужно заPin'нить, чтобы пересобранная локальная версия не была заменена на версию из репозитория при обновлении. Добавьте в /etc/apt/preferences следующие строки:
Package: libwxgtk2.8-0
Pin: origin Local
Pin-Priority: 1001
Конструктивная критика и дополнения приветствуются.

Комментариев нет:

Отправить комментарий