[devel] О сборке программ на GTK / GNOME
Vitaly Lipatov
=?iso-8859-1?q?lav_=CE=C1_altlinux=2Eru?=
Ср Ноя 10 02:22:27 MSK 2004
По результатам переписки разработчиков ALT Linux Team
составлены советы по упаковке программ GTK, GNOME и KDE.
Почему в pkg-config отключена рекурсия
======================================
Рекурсивный сбор --libs в принципе не нужен, более того --
вреден,
хотя бы потому что является источником огромного числа лишних
зависимостей, которые потом должен обрабатывать apt и rpm
Если программа не линкуется с какой-либо библиотекой, то весьма
вероятно, что это ошибка в сборке библиотеки - библиотека
использует функции из других библиотек, но с ними не слинкована.
Ошибка эта практически везде, кроме как
в ALT Linux прикрыта стандартным поведением pkg-config.
Файлы информации о mime-типах
=============================
В этих файлах хранится описание форматов файлов
(их mime-type, комментарием, способом определения принадлежности
к
формату по MAGIC value и шаблону...)
1. Если в пакете есть файлы /usr/share/mime/packages/*.xml,
то при его установке, удалении, обновлении необходимо
обновить и кеш базы mime-типов с использованием в spec-файле
макросов
%update_mimedb и %clean_mimedb.
То есть в спеке должны быть секции:
%post
%update_mimedb
%postun
%clean_mimedb
И указаны зависимости:
Requires(post,postun): shared-mime-info >= 0.15-alt2
2. Файлы из каталога
%_datadir/mime-info/*
не используется GNOME-программами, которые получают
mime-информацию из пакета shared-mime-info.
Тем не менее эти файлы используются рядом программ (например
KDE),
так что их тоже надо паковать.
Файлы schemas
=============
При сборке в пакете установку schemas надо отключать:
%configure --disable-schemas-install
В спеке должны быть секции:
%post
%gconf2_install %name
%preun
if [ $1 = 0 ]; then
%gconf2_uninstall %name
fi
в качестве параметров к %gconf2-(un)unstall может
быть указано несколько названий.
Образец оформления секции %files:
%config %_sysconfdir/gconf/schemas/*
В зависимостях пакета должно быть:
Requires(post): GConf2
BuildPreReq: GConf2
Файлы scrollkeeper
==================
Нельзя упаковывать каталог и файлы из
%_localstatedir/scrollkeeper,
если они получаются при сборке, их надо удалить командой
%__rm -rf %buildroot%_var/lib/scrollkeeper
в секции %install
В спеке должны быть секции:
%post
%update_scrollkeeper
%postun
%clean_scrollkeeper
В зависимостях пакета должно быть:
Requires(post,postun): scrollkeeper
Если %make_install вызывает scrollkeeper-update и
сборка прерывается по ошибке - перед %make_install
нужно сделать
export OMF_DIR=%buildroot%_var/lib/scrollkeeper
Поиск файлов локализации - %find_lang
====================================
%find_lang вызывается в секции %install
Для программ GNOME указывается:
%find_lang --with-gnome %name
При этом find-lang кроме файлов переводов в %_datadir/locale ищет
файлы
справки Гном в %_datadir/gnome/help и .omf файлы в %_datadir/omf
Поэтому не нужно указывать в секции %files каталоги с locale, а
также
%_datadir/omf/%name
%_datadir/gnome/help/
Для программ KDE указывается:
%find_lang --with-kde %name
При этом find-lang ищет файлы справки KDE в %_docdir/HTML
Далее секция %files оформляется следующим образом:
%files -f %name.lang
Файлы меню
===========
Файл меню либо создаётся непосредственно заданием
его содержимого, либо формируется.
Как правило программа содержит файл .desktop,
из него можно получить файл меню следующей командой
в разделе %install:
freedesktop2menu.pl %name "Путь разделов меню" \
%buildroot%_datadir/applications/%name.desktop \
%buildroot%_menudir/%name
При использовании этого скрипта в пакете
должна быть указана зависимость:
BuildPreReq: menu-devel
Каталог для файлов меню обычно создают командой:
%__mkdir_p %buildroot%_menudir
Созданный файл меню устанавливается в каталог %_menudir.
При установке или удалении пакета меню должно переформироваться,
для этого в спеке должны быть секции:
%post
%update_menus
%postun
%clean_menus
В секции %files:
%_menudir/*
%_datadir/applications/*
и возможно
%_datadir/application-registry/*
Обновление базы данных по меню
==============================
В файлах desktop обычно хранится информация о том, какие
форматы способна обрабатывать та или иная программа.
это нужно только в случае если в %_datadir/applications/*.desktop
есть
$ grep -i mime //usr/share/applications/*.desktop
MimeType=application/postscript;
В спеке должны быть секции:
%post
%update_desktopdb
%postun
%clean_desktopdb
В пакете должна быть указана зависимость:
Requires(post,postun): desktop-file-utils
BuildPreReq: desktop-file-utils
Используется вне зависимости от типа программы в пакете,
и всегда должно быть указано.
Файлы bonobo
============
Пока ничего не знаю кроме того, что в %files пишется
%_libdir/bonobo/servers/*
Установка файлов
================
В секции %install для установки файлов используется либо строка
%make_install install DESTDIR=%buildroot
(в случае если используется схема Makefile с DESTDIR)
либо
%makeinstall
(она задаёт prefix и остальные пути по типу
prefix=/home/lav/tmp/%{name}-buildroot/usr)
Это для программ, которые не пытаются запоминать пути,
куда их устанавливают, при установке, а делают это
при configure
Примеры использования
=====================
Смотрите в Сизифе пакеты
ggv2, rythmbox, eog2, gthumb, totem
conglomerate, inkscape
"Yuri N. Sedunov" <aris на altlinux.ru>, 2004
Vitaly Lipatov <lav на altlinux.ru>, 2004
09.11.2004
--
Lav
Виталий Липатов
Санкт-Петербург
GNU! ALT Linux Team! LaTeX! LyX!
Подробная информация о списке рассылки Devel