ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Ivan Zakharyaschev <vanyaz@mccme.ru>
To: <devel@linux.iplabs.ru>
Subject: [devel] RPM: build procedure
Date: Sat, 25 Nov 2000 13:04:14 +0300 (MSK)
Message-ID: <Pine.LNX.4.30L.0011250008330.3252-100000@zephyrous.ru> (raw)

	Добрый день!

Хоть и комментарии по поводу разных targets для подпакетов уже были, я
расскажу более подробно о своем видении проблемы.

Возможность создавать некоторые подпакеты из общего spec-файла без
предназначения для определенной платформы я бы представил в spec-файле
тэгом ForceTarget: noarch, включаемым в заголовок подпакета. Это
заставляло бы RPM помечать этот пакет как noarch независимо от того, для
какой общей target происходит сборка. Обеспечение того, что в этот пакет
не попадает платформозависимых файлов, лежало бы на совести packager'а
(ему могли бы помогать какие-нибудь утилиты, анализирующие состав
подпакета).

От ExclusiveArch этот тэг принципиально отличался бы вот в чем:

- ExclusiveArch стремится главным образом определить архитектуру машины,
на которой может собираться пакет, а не target (устанавливаться);

- ExclusiveArch в случае несовпадения указанного значения с реальным
прерывает сборку, а не заставляет пойти против.

В принципе, можно было бы указать в качестве значения и другую архитектуру
в соответсвии с таблцами совместимости (что-то такое было упомянуто в
письме, пересланном Дмитрием).


Идея же, высказанная в том письме, о создании для каждой архитектуры своей
процедуры сборки со своей независимой стадией %build мне кажется не очень
удачной (неудобно, когда раздел %build длинный).

Я же что-то похожее предлагал в письме про дополнительную документацию.
Там я писал о независимых стадиях %prepdoc, %builddoc и %installdoc,
работающих в своем файловом пространстве. Почему такое нужно/возможно?
Потому что обработка дополнительной документации совершенно независима от
компиляции программы -- нужны только их результаты, соединенные в едином
дереве $RPM_BUILD_ROOT, эмулирующем target-систему.

Можно этот подход обобщить: выделять среди исходных данных модули, внутри
состоящие из зависимых друг от друга элементов, а между собой не
связанные.  Каждый такой модуль проходит свою обработку: распаковывается
(%prep), перерабатывается (%build) в своем файловом пространстве. Эти
действия с каждым из модулей могут происходить независимо от других, т.е.
параллельно им (необязательно во времени). Потом результаты переработки
этих модулей нам все-таки нужны вместе -- иначе какой смысл объединять их
в один пакет?  И для этого у каждого модуля есть своя процедура %install:
она из своего файлового пространства устанавливает результаты сборки в
единое дерево.  После этого про модули можно забыть. Теперь другое
разбиение получившейся системы: на подпакеты, т.е. на группы элементов,
объединенных по сфере применения и независимых во время
выполнения/использования.  (Модули были независимы во время сборки.)

Таким образом spec-файл разбивается на две части: то, что перед %install,
и то, что после. Сама стадия %install (на самом деле их много у каждого
модуля) связывает эти две части: с одной стороны, она объединяет
результаты бывших до этого момента независимыми модулей, а с другой
стороны, предоставляет единую систему для последующего переразбиения на
подпакеты.

Такое разделение spec-файла на две части может быть обосновано: пакет --
посредник между пользователем (его ОС) и исходным кодом программы (ее
создателем). Т.е. с одной стороны, RPM должна понимать нужды пользователя,
структуру его системы, предосталять ему возможность строить свою систему в
соответсвии с потребностями. Для этого нужны (под)пакеты -- единицы
структуры для пользователя. С другой стороны, RPM должна понимать
создателя программы, то, как обращаться с его кодом, как его
компилировать, как извлечь из него что-то (максимум) полезного. И это
задача первой части сборки пакета, каждый модуль для особой части исходных
данных. И в каком-то месте эти две вещи (нацеленность на
пользователя и приспособленность к разработчику) должны стыковаться.
Прямого соответсвия между модулями и подпакетами быть не должно и не может
-- они сгруппированы по разным принципам. Способ оcуществить переход от
одних к другим -- свалить все в кучу на стадии install.

Пример, который я уже приводил: работа с дополнительной документацией.
Других реальных примеров возможного такого устройства процедуры сборки
пакета я не вижу.

-- 
Best regards,
      Ivan Z.


_______________________________________________
Devel mailing list
Devel@linux.iplabs.ru
http://www.logic.ru/mailman/listinfo/devel


                 reply	other threads:[~2000-11-25 10:04 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=Pine.LNX.4.30L.0011250008330.3252-100000@zephyrous.ru \
    --to=vanyaz@mccme.ru \
    --cc=devel@linux.iplabs.ru \
    /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