[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