[devel] mono: распил *-sharp пакетов

Alexey Tourbin at на altlinux.ru
Чт Ноя 22 09:17:05 MSK 2007


Напоминаю проблему.  Крайне нежелательна ситуация, когда в *-devel
пакете лежит всего лишь *.pc файл, и штатное использование *.pc
файла в *-devel пакете не предполагает использование каких-либо
других файлов в этом пакете.

buildreq сейчас игнорирует использование *.pc файлов.  Следовательно,
зависимость на такой *-devel пакет, в котором по сути нет ничего кроме
*.pc файла, будет проигнорирована.  Это несколько сомнительно, но в этом
есть свой резон, потому что это енфорсит определённую (правильную)
логику распила пакетов.

Правильная логика распила пакетов такова, что штатное использование
*.pc файла должно приводить к использованию других файлов в пакете.
Например, если это сишная библиотека, то использование *.pc файла
должно впоследствии "трогать" *.h и *.so файлы иэ этого пакета.

В соответствии с этим есть два варианта более правильного распила
*-sharp пакетов.

1) Не отпиливать *-devel пакет вообще.  В *-devel пакете, как правило,
содержится какая-то "метаинформация", которая не нужна для работы
программ, но нужна для сборки других пакетов.  Типичный пример -- *.h
файлы у сишных библиотек.  В моне нет никакой внешней метаинформации,
все *.dll файлы самодостаточны как по рантайму, так и по возможности
линковки с ними.  Значит, нет резона отпиливать *-devel пакет, в который
можно было бы выносить специальные вещи, которые не нужны для рантайма,
но нужны только для сборки.

2) Сохранить *-devel пакеты.  Насколько я понмаю, в моне для линковки
с диелелями есть симлинки которые похожи на *.so симлинки в сишных
*-devel пакетах.  Пример.

$ cat test.cs
class A { public static void Main() {  }}
$ filereq /dev/stdout mcs -pkg:glib-sharp-2.0 test.cs |grep /usr/lib/mono/
/usr/lib/mono/1.0/I18N.Other.dll
/usr/lib/mono/1.0/I18N.dll
/usr/lib/mono/1.0/System.Xml.dll
/usr/lib/mono/1.0/System.dll
/usr/lib/mono/1.0/mcs.exe
/usr/lib/mono/1.0/mcs.exe.config
/usr/lib/mono/1.0/mscorlib.dll
/usr/lib/mono/gac/glib-sharp/2.10.0.0__35e10195dab3c99f/glib-sharp.dll.config
/usr/lib/mono/gtk-sharp-2.0/glib-sharp.dll
/usr/lib/mono/gac/I18N.Other/1.0.5000.0__0738eb9f132ed756/I18N.Other.dll
/usr/lib/mono/gac/I18N/1.0.5000.0__0738eb9f132ed756/I18N.dll
/usr/lib/mono/gac/System.Xml/1.0.5000.0__b77a5c561934e089/System.Xml.dll
/usr/lib/mono/gac/System/1.0.5000.0__b77a5c561934e089/System.dll
/usr/lib/mono/gac/glib-sharp/2.10.0.0__35e10195dab3c99f/glib-sharp.dll
$

То есть линковка с моновскими диелелями идёт не через /usr/lib/mono/gac/
а через специальные симлинки которые указаны в *.pc файлах.  В данном
случае это /usr/lib/mono/gtk-sharp-2.0/glib-sharp.dll.

Поэтому есть возможность переместить эти симлинки в *-devel пакет,
а в основном пакете оставить только GAC ассемблию.  То есть распил
получается примерно такой:

%files
/usr/lib/mono/gac/*

%files devel
%dir /usr/lib/mono/gtk-sharp-2.0
/usr/lib/mono/gtk-sharp-2.0/*.dll

Тогда эти симлинки из *-devel пакета будут вылавливаться buildreq'ом при
линковке с диелелями.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: отсутствует
Url     : http://lists.altlinux.org/pipermail/devel/attachments/20071122/5be3dc58/attachment-0001.bin 


Подробная информация о списке рассылки Devel