From: Alexey Tourbin <at@altlinux.ru> To: devel@lists.altlinux.org Subject: Re: [devel] mono: распил *-sharp пакетов Date: Sun, 25 Nov 2007 19:23:12 +0300 Message-ID: <20071125162312.GO361@solemn.turbinal> (raw) In-Reply-To: <1196002322l.8429l.0l@ildar.innovations.kz> [-- Attachment #1: Type: text/plain, Size: 4398 bytes --] On Sun, Nov 25, 2007 at 08:52:02PM +0600, Ildar Mulyukov wrote: > >Я посмотрел как собраны некоторые моновские пакеты. Есть вот какая > >претензия: не нужно делать отдельно напр. libgtk-sharp2-devel пакета, > >в котором единcтвенное что есть это *.pc файлы. Точнее, не надо > >класть *.pc файлы в отдельный *-devel пакет, если правильное > >использование *.pc файла не дает ГАРАНТИРОВАННОГО использования > >каких-либо ДРУГИХ файлов из этого пакета (типа include'ов и симлинка > >для линковки в более типичном случае). > > > >Иначе buildreq не обнаружит зависимость на такие пакеты, т.к. *.pc > >файлы сами по себе игнорируются buildreq'ом. А если buildreq не > >обнаруживает зависимости то это очень плохо с точки зрения технологии > >разработки. > > Это всё очень плохо. Что же делать? Реально для сборки какого-нибудь > пакета нужны %name.dll (бинарь) и %name.pc для вытаскивания других > бинарей по зависимостям. > Можно было бы *.pc класть в основной пакет, но в этом случае при > установке пакета %name будут вытягиваться по зависимости все *-devel, а > это может быть немалый довесок. Для сборки как правило требуется не бинарь под /usr/lib/mono/gac/, а специальный симлинк где-то приблизительно под /usr/lib/mono/%name. Поэтому достаточно будет переместить этот каталог в *-devel пакет. > >Ещё претензия по сборке mono: убрать всё зависимости, выставленные > >вручную. Например, сейчас mono требует libicu. Я так и не нашёл, > >где там зашита зависимость на libuci. Это наверное просто наколка. > > Нет. Раньше libicu использовался для i18n в Моно. Сейчас - не знаю, > надо проверить. Вроде не используется, я грепал и так и сяк. :) > >В общем, лучшее, что может сделать maintainer по части зависимостей > >-- это ПРОСТО запускать buildreq. Всё остальное должно волшебным > >образом получиться автоматически, а если что-то не получается, значит > >надо фиксить сборочную среду/технологию сборки. Таково мое понимание > >технологичности разработки пакетов. > > Выглядит заманчиво, но я не поведусь ;) Уж я не знаю, что сделали для > этого за последние полгода - я просто был в оффлайне всё это время. Но: > 1. не все используемые внешние библиотеки прописаны в *.dll.config > (были, и, поручусь, ещё есть)2. (Пока) Нет способа полностью > автоматизированно выловить директивы использования внешних библиотек в > коде. (Вам же не приходит в голову прочёсывать C-программу в поисках > dlopen()?) А какие есть способы "прятать" использование внешних библиотек в коде? В случае с ELF'ами мы и не вылавливаем dlopen, но мы можем выловить DT_NEEDED (явные зависимости на разделяемые библиотеки). Так и в случае с mono, мы должны вылавливать явные зависимости из 'monodis --moduleref'. Если кто-то "прячет" зависимости в dlopen или куда-то ещё, то он лишается благ цивилизации. С неполными или неправильными данными в *.dll.config самая сложная проблема. Чтобы это более-менее работало нужно сделать как минимум две нетривиальные вещи: 1) Желательно в rpm-build реализовать новую модульную подсистему fixup, по аналогии с requires и provides. Типа чтобы можно было сделать скрипт /usr/lib/rpm/mono.fixup и он автоматически исправлял *.dll.config файлы в %buildroot. 2) Сейчас нет "системного" способа работы с XML файлами, даже для чтения, а нужно делать inplace edit. Вот нужно найти такой способ чтобы было дёшево и сердито. Я склоняюсь к какому-нибудь перловому модулю, типа perl-XML-Simple, но это нужно пробовать. Несколько неприятно, что потянутся перловые модули, но если "системного" способа всё равно нет, то придётся утилизировать какой-то несистемный. Ну и 3) Нужно понять как сам mono работает когда в *.dll.config неполная информация, т.е. как он выходит на "настоящую" библиотеку с сонеймом, и мимикрировать эту логику в mono.fixup. > В конце замечу, что, Алексей, Вы меня несказанно радуете участием в > нашей скорбной участи поддержки mono-пакетов ;-) Большое Вам спасибо! На данном этапе я по минимуму передалал почти всё что хотел, при этом сломалось минимальное число пакетов. Думаю что теперь Mono Team следует перепилить *-sharp пакеты как обсужадлось, чтобы работал buildreq. Лучше это делать в топологическом порядке, т.е. начинать с "наиболее базовых" пакетов и заканчивая теми, которые уже зависят от базовых. [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
prev parent reply other threads:[~2007-11-25 16:23 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2007-11-22 6:17 Alexey Tourbin 2007-11-25 14:52 ` Ildar Mulyukov 2007-11-25 16:23 ` Alexey Tourbin [this message]
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20071125162312.GO361@solemn.turbinal \ --to=at@altlinux.ru \ --cc=devel@lists.altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git