Buildreq: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
[[Category:Devel]]
[[Категория:Devel]]
[[Category:Sisyphus]]
[[Категория:Sisyphus]]
{{Викифицировать}}
{{Stub}}
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/spectips/buildreq}}
<tt>buildreq</tt> — утилита для автоматизированного поиска сборочных зависимостей пакетов. Находится в пакете <tt>rpm-utils</tt>.


При написании spec-файла возникает необходимость указывать сборочные зависимости в теге BuildRequires. Для упрощения этого процесса в ALT Linux используется специальный скрипт, который называется '''buildreq''' и находится в пакете '''rpm-utils'''.
Использование:
$ buildreq example.spec


Использовать его просто:
== Принцип действия ==


<pre>$ buildreq example.spec</pre>
<tt>buildreq</tt> производит почти такую же работу, как и при обычной сборке пакета. В процессе сборки программы он отслеживает все используемые пакеты и по окончанию сборки добавляет в спек тег <tt>BuildRequires</tt> с отслеженными сборочными зависимостями.


Скрипт производит почти такую же работу, как и при сборке пакета. В процессе сборки программы он отслеживает все используемые пакеты и в результате добавляет в спек тег BuildRequires с нужными сборочными зависимостями.
<tt>buildreq</tt> не обладает искусственным интеллектом, и поэтому может ошибаться в «большую» сторону, добавляя в зависимости ненужные пакеты (результатом работы являются ''достаточные'', но не ''необходимые'' пакеты). При этом <tt>buildreq</tt> не пропускает необходимые зависимости.


Надо сказать, что скрипт не самый совершенный и иногда бывает, что зависимости не очень правильные -- они могут указывать на пакеты совсем не нужные при сборке. В таком случае, выявить и отсеять лишнее вам придется самостоятельно. Другими словами, buildreq производит лишь оценку сверху -- перечисляет ''достаточные'', но необязательно ''необходимые'' пакеты.
== Особенности использования ==


Также, если в спеке уже прописан тег ''BuildRequires'', то после buildreq он будет удален. Чтобы этого не происходило вам следует использовать тег ''BuildPreReq''. Эти два тега равносильны и единственное отличие состоит в том, что второй не "затирается" при использовании buildreq.
<tt>buildreq</tt> затирает уже имеющийся тэг <tt>BuildRequires</tt>, но не трогает равносильный ему тэг <tt>BuildPreReq</tt> — этим можно пользоваться в своих целях.


По умолчанию, отслеживаются лишь зависимости для стадий %prep и %build. Это можно изменить ключом -b, указывающим стадию, после которой надо остановиться. Так, -bi указывает, что отслеживать надо стадии %prep, %build и %install.
По умолчанию отслеживаются лишь зависимости для стадий <tt>%prep</tt> и <tt>%build</tt>. Это можно изменить ключом <tt>-b</tt>, указывающим стадию, после которой надо остановиться. Так, <tt>-bi</tt> указывает, что отслеживать надо стадии <tt>%prep</tt>, <tt>%build</tt> и <tt>%install</tt>.
 
Для трассировки упоминаний файла/пакета во время работы <tt>buildreq</tt> (например, для определения того, почему какой-то пакет оказывается в сборочных зависимостях) можно пользоваться ключами <tt>--trace-file=FILE</tt> и <tt>--trace-package=PACKAGE</tt>).
 
== Известные проблемы ==


<pre>Date: Tue, 18 Oct 2005 01:10:33 +0400
<pre>Date: Tue, 18 Oct 2005 01:10:33 +0400
Строка 34: Строка 39:
макросов.  В alternatives вроде такое было.</pre>
макросов.  В alternatives вроде такое было.</pre>


<pre>> Интересно зачем для сборки нужен lint? Он там *действительно*
== Лицензия ==
> используется? telnet в списке тоже несколько смущает...
GPLv2 or later.
 
Для более точного отслеживания нежелательных пакетов можно использовать
e.g. buildreq --trace-p=lclint --trace-p=telnet *.spec
 
Полное название опций
--trace-package=PKG
--trace-file=FILE</pre>
''[http://lists.altlinux.org/pipermail/devel/2008-March/071889.html at@ in devel@]''


== Ссылки ==
== Исходный код ==
* [[Rpm/AutoReq]]
[http://git.altlinux.org/people/ldv/packages/rpm-utils.git rpm-utils.git]

Версия от 04:44, 21 августа 2008

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

buildreq — утилита для автоматизированного поиска сборочных зависимостей пакетов. Находится в пакете rpm-utils.

Использование:

$ buildreq example.spec

Принцип действия

buildreq производит почти такую же работу, как и при обычной сборке пакета. В процессе сборки программы он отслеживает все используемые пакеты и по окончанию сборки добавляет в спек тег BuildRequires с отслеженными сборочными зависимостями.

buildreq не обладает искусственным интеллектом, и поэтому может ошибаться в «большую» сторону, добавляя в зависимости ненужные пакеты (результатом работы являются достаточные, но не необходимые пакеты). При этом buildreq не пропускает необходимые зависимости.

Особенности использования

buildreq затирает уже имеющийся тэг BuildRequires, но не трогает равносильный ему тэг BuildPreReq — этим можно пользоваться в своих целях.

По умолчанию отслеживаются лишь зависимости для стадий %prep и %build. Это можно изменить ключом -b, указывающим стадию, после которой надо остановиться. Так, -bi указывает, что отслеживать надо стадии %prep, %build и %install.

Для трассировки упоминаний файла/пакета во время работы buildreq (например, для определения того, почему какой-то пакет оказывается в сборочных зависимостях) можно пользоваться ключами --trace-file=FILE и --trace-package=PACKAGE).

Известные проблемы

Date: Tue, 18 Oct 2005 01:10:33 +0400
From: Alexey Tourbin <at@>
To: ALT Devel discussion list <devel@>
Subject: [devel] Re: webalizer-2.01.10-alt6

On Mon, Oct 17, 2005 at 10:30:28PM +0300, Michael Shigorin wrote:
> On Mon, Oct 17, 2005 at 11:23:38PM +0400, Dmitry V. Levin wrote:
> > > И что с этим предлагается делать?
> > Просто добавить apache-devel в список сборочных зависимостей.
> М-да.  Даже мысли не допустил, что его там могло не быть...

Это известная засада: buildreq "не ловит" файлы в /etc/rpm/macros.d.
Workaround: где-нибудь в этих макросах делать stat за пределы
/etc/rpm/macros.d.  stat будет срабатывать только при раскрытии
макросов.  В alternatives вроде такое было.

Лицензия

GPLv2 or later.

Исходный код

rpm-utils.git