[devel] mono: распил *-sharp пакетов
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Чт Ноя 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'ом при
линковке с диелелями.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20071122/5be3dc58/attachment-0002.bin>
Подробная информация о списке рассылки Devel