ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: "Arseny Maslennikov" <arseny@altlinux.org>
To: "ALT Linux Team development discussions" <devel@lists.altlinux.org>
Subject: Re: [devel] в защиту __cargo
Date: Wed, 28 Oct 2026 15:11:03 +0300
Message-ID: <DMGGM37N3L6H.3AB5447NX24IE@altlinux.org> (raw)
In-Reply-To: <de9f3654-a7bf-429e-9e25-5f1d5cf47623@altlinux.org>

[-- Attachment #1: Type: text/plain, Size: 9642 bytes --]

On Tue, Dec 06, 2005 at 07:52:44PM +0300, Dmitry V. Levin wrote:
> > > Почему?  Одно другого не исключает.  Чрезмерное
> > > употребление макросов снижает читабельность spec-файлов.
> > Тогда было бы неплохо увидеть более официальное обоснование
> > существования %__mv и компании, чем догадки. :)
> %__mv и компания -- это внутренняя кухня rpmbuild, используется
> для запуска mv и компании внутри rpmbuild.
Это утверждение истинно.
Но ведь rpmbuild в тех местах, где он в коде на Си подставляет фрагменты
шелльного текста, мог бы тоже вызывать `mv` словом, без слоя косвенности.
Зачем-то при разработке rpmbuild вставить _такой_ шарнир (i. e. слой косвенности)
понадобилось. Зачем? Полагаю, что чёткий ответ на этот вопрос нам всем
поможет договориться и прочертить границу между чрезмерным и уместным.

Уточню свою мысль.
Например, в пресловутых участках кода rpmbuild можно было бы фрагменты
целиком (или их контекстно малозависимые части) макрообозвать и вытащить
в macros.in. Но почему-то авторы обернули именно пачку утилит. Видимо,
в таких обёртках есть ценность за пределами участков кода rpmbuild.

> Появление этих
> макросов в spec-файлах, видимо, и есть злоупотребление
> макросами.
В спеках явно обращаться к этим __ (т. е. предусматривать перегрузку)
действительно нужно нечасто.
А вот в сложных макрообёртках вроде %cmake, %configure это полезно, и
торчащих зубов __ в спеке не будет.

Если возражение против %__mv было связано только с тем, что у
человеческого читателя спеков дёргается глаз, то избавиться от этого
можно кучей способов, среди которых %define mv __mv, или же просто
забить и писать в спеке по имени. (Там в PATH есть каталог для
обёрток, он стоит первым. Тот, кто желает разок собрать пакет так, чтобы
в окружении были обёртки, может добавить ещё и нагенерить туда обёрток от души.)

On Wed Oct 28, 2026 at 1:43 PM MSK, Rx wrote:
> Здраствуйте!
>
> Первая мысль которая приходит в голову при виде чего либо, что 
> начинается с "_" это то, что это часть внутреннего интерфейса которую 
> стоит трогать только если ты работаешь над ней и знаешь за что она 
> отвечает.  На этот счёт даже есть отдельная старенькая статья  2009-ого 
> TypicalPackagingErrors/InternalMacros 
> <https://www.altlinux.org/TypicalPackagingErrors/InternalMacros>.
Ага. Я забыл про эту страницу :)

> Я подозревал что все макросы с префиксами __ это глобальное 
> переопределение утилит, но насколько глобальные? Было бы неплохо 
> зафиксировать данное соглашение статьёй либо же полноценной политикой.
По итогам обсуждения в сообществе буду готов составить.

> 28.10.2026 11:13, Arseny Maslennikov пишет:
>> On Wed, Oct 28, 2026 at 11:08:02AM +0300, Arseny Maslennikov wrote:
>>> On Wed, Oct 28, 2026 at 10:27:54AM +0300, Rx wrote:
>>>>         По результатам пересборки пакетов картина следующая:
>>>>
>>>> Из 432 пакетов упало 29:
>>>> phrog   aris - Пакет использует устаревший макрос %__cargo. Исправление:
>>> Здравствуйте!
>>>
>>> Я хотел бы предложить оставить макрос __cargo.
>> И, наверное,
>>
>>      __rustc %_bindir/rustc
>>
>> тоже нужен, если его вдруг нет.
> Не особо представляю потребителя данного макроса, сейчас единственным 
> таким потребителем является сам rust. Все остальные вызовы rustc это 
> извлечение версии llvm, хостовой архитектуры и прочей информации которую 
> можно вывести в отдельные макросы.

Потребитель номер раз — ядро Linux (нас это коснётся в конце концов).
Потребитель номер два — с недавних пор systemd.
> - Only the core, alloc and libc crates. Rust code is no_std and there
>   are no other crates. The libc crate isn't needed yet, the bindings
>   generated from the tree's own headers cover libc. And like the
>   kernel we don't use alloc either. Its collections abort when memory
>   runs out. systemd_shared has its own Box and Vec instead, which work
>   like the kernel's: everything that allocates returns an error and
>   there's no global allocator.
> - C linkage only. libsystemd-shared and the dlopen machinery stay as
>   they are. A program written in Rust links libsystemd-shared
>   dynamically just like the C programs do and declares its dlopen()
>   dependencies in .note.dlopen. The Rust crates are linked statically
>   into the programs using them.
> 
> So nothing of the Rust standard library ends up in a program or in
> libsystemd-shared. Per HACKING.md the stripped test-cli-rust binary is
> 32 KB with LTO against 20 KB for its C twin.
https://github.com/systemd/systemd/commit/021112961bd64aec54a1f1e6a6c8fda8b732b705

Я не сомневаюсь, что последуют ещё. :)

>>> Эти бла-бла в начале не просто так; такой макрос по (конечно, не очень
>>> явному) соглашению предназначен для того, чтобы можно было передефайнить
>>> все обращения к %_bindir/cargo в генерируемых скриптах.
>>> Аналогично устроены __make, __ninja,
>>> __mv, __cp, __rm, __install, __chmod, __chown,
>>> __tar, __cpio, __gzip, __bzip2, __xz,
>>> и все остальные.
>>>
>>> Оператор может заменить любую из этих утилит на собственную обёртку, на подкоманду в
>>> multi-call binary навроде busybox, на taskset -c, что угодно.
>>>
>>>      rpmbuild --define "__tar /usr/local/bin/busybox tar" "$@"
>>>      rpmbuild --define "__ninja taskset -c $(</sys/devices/cpu_atom/cpus) ninja" "$@"
>>>      rpmbuild --define '__make bear -- make' "$@"
>>>
>>> Примеры, ясное дело, не исчерпывающие. :)
>>>
>>> Это предусмотренный в подвижной системе дополнительный шарнир:
>>> он нужен не всем и не всегда, но существует.
>> Можно, конечно, оставить оба.
>> "%__cargo" как обозначение "как вызвать программу cargo",
>> "%cargo" как обращение к прагматике cargo.
>>
>> Тогда packager сможет, например, сказать:
>>
>>      rpmbuild --define 'cargo %__cargo auditable' "$@"
>>
>> и у него заработает всё, что сегодня у вас раскрывает "%cargo".
>>
>> В любом случае надо это всё задокументировать, чтобы не пропало.
>
> Если заменить cargo на cargo auditable для всех пакетов и оставить 
> возможность отката на "оригинальный" cargo, то возможно в таком случае 
> есть смысл сохранить макрос, но как будто бы "%define cargo cargo" будет 
> более чем достаточно.

OK, так тоже можно, убедили.
По этому вопросу я амбивалентен; интеллектуальный оператор и так и
так справится, а детерминированную программу, наверное, можно и
подхакать всегда.
Видимо, надо дойти до результата обсуждения выше и тогда решить. :)

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 870 bytes --]

  parent reply	other threads:[~2026-10-28 12:11 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-15 13:39 ` [devel] Расширение функциональности rpm-build-rust Anton Farygin
2026-09-16  9:27     ` Ivan A. Melnikov
2026-09-16  8:16 ` Artem Semenov
2026-09-16  8:31   ` Ivan A. Melnikov
2026-09-16  8:54     ` Anton Zhukharev
2026-09-16  9:48       ` Paul Wolneykien
2026-09-16 11:16         ` Rx
2026-09-16 11:51             ` Anton Zhukharev
2026-09-16 11:58               ` Anton Zhukharev
2026-09-16 13:16               ` Paul Wolneykien
2026-09-19 13:57         ` Arseny Maslennikov
2026-09-16  9:36     ` Rx
2026-09-16  9:28   ` Rx
2026-09-16 18:17     ` Anton Zhukharev
2026-09-17 11:19   ` Paul Wolneykien
2026-10-28  7:49   ` Yuri Sedunov
2026-10-28  8:07   ` [devel] в защиту __cargo (was: Расширение функциональности rpm-build-rust) Arseny Maslennikov
2026-10-28  8:13     ` Arseny Maslennikov
2026-10-28 12:11         ` Arseny Maslennikov [this message]
2026-10-28 12:55         ` [devel] в защиту __cargo Sergey V Turchin
2026-10-28 13:00           ` Arseny Maslennikov

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=DMGGM37N3L6H.3AB5447NX24IE@altlinux.org \
    --to=arseny@altlinux.org \
    --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