Bug 46988

Summary: --runstatedir и %_runstatedir
Product: Sisyphus Reporter: Anton Zhukharev <ancieg>
Component: rpm-buildAssignee: placeholder <placeholder>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: enhancement    
Priority: P5 CC: arseny, glebfm, imz, iv, lav, ldv, placeholder, vt
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 42349    

Description Anton Zhukharev 2023-07-20 12:27:57 MSK
Почему бы ради добуквенного совпадения не добавить макрос:

%_runstatedir %_runtimedir

либо 

%_runstatedir %_var/run

?

Плюс было бы неплохо его также передавать в %configure.

Такая идея пришла в голову после нахождения runstatedir здесь: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html и ненахождения %_runstatedir у нас.

Было бы удобно, так как заменить %_localstatedir на /var не получилось: #34083
Comment 1 Anton Zhukharev 2023-07-20 13:40:41 MSK
(In reply to Anton Zhukharev from comment #0)
> Плюс было бы неплохо его также передавать в %configure.
Вот это предложение блокировано багом #42349.
Comment 2 Gleb F-Malinovskiy 2023-07-21 00:01:24 MSK
Речь же по обоим предложениям не про rpm, а про rpm-build, верно?

Для полноты картины, такая попытка уже была:
https://lore.altlinux.org/devel/20210825082756.GA16086@altlinux.org/T/#u
Comment 3 Anton Zhukharev 2023-07-21 08:55:27 MSK
(In reply to Gleb F-Malinovskiy from comment #2)
> Речь же по обоим предложениям не про rpm, а про rpm-build, верно?

Не помню почему повесил на rpm (ошибка?)...
Comment 4 Dmitry V. Levin 2023-07-21 11:11:02 MSK
(In reply to Anton Zhukharev from comment #0)
> Плюс было бы неплохо его также передавать в %configure.

Очень плохо передавать неизвестные параметры в configure.
Мы попробовали 2 года назад, в результате сломалась сборка около 900 пакетов, откатили на следующий день, и больше не будем пробовать такое.

Поскольку макрос %_runtimedir уже есть, непонятно, зачем нужен %_runstatedir, если его всё равно нельзя системно передавать в %configure.
Comment 5 Anton Zhukharev 2023-07-21 11:32:04 MSK
(In reply to Dmitry V. Levin from comment #4)
> (In reply to Anton Zhukharev from comment #0)
> > Плюс было бы неплохо его также передавать в %configure.
> 
> Очень плохо передавать неизвестные параметры в configure.
> Мы попробовали 2 года назад, в результате сломалась сборка около 900
> пакетов, откатили на следующий день, и больше не будем пробовать такое.
Чтобы configure не считал этот параметр неизвестным и не падал при запуске, необходимо обновить autoconf хотя бы до этого коммита (либо черрипикнуть его):
http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commit;h=a197431414088a417b407b9b20583b2e8f7363bd

> Поскольку макрос %_runtimedir уже есть, непонятно, зачем нужен
> %_runstatedir, если его всё равно нельзя системно передавать в %configure.
Скорее косметическое предложение - "ради добуквенного совпадения".

Плюс недавно встретил проект, который относительно активно развивается и использует localstatedir как префикс для /run, что у нас вызывает проблемы, поскольку у нас %_localstatedir/run != /var/run.
При этом перезапись в configure --localstatedir=%_var тоже вызывает вопросы, поскольку эта переменная затем также попадает в конфигурационный файл проекта.
Проект поддерживает модульность, поэтому такой вариант перезаписи меня не устраивает из-за потенциальных проблем связанных с тем, что подмодули будут тоже класть свои файлы не туда куда нужно.
В связи с этим написал в апстрим просьбу рассмотреть использование runstatedir, а не полагаться на то, что везде runstatedir == localstatedir/run. Затем чуток пропатчил Makefile.in, добавил опцию --runstatedir=%_runtimedir, запустил сборку и увидел, как наш autoconf понятия не имеет что это за runstatedir такой.

После этого решил предложить добавить нам такой макрос %_runstatedir (для добуквенного совпадения с тем, что используют в стандартах GNU), обновить autoconf и добавлять этот макрос в %configure.
Comment 6 Ivan A. Melnikov 2023-07-21 11:44:44 MSK
(In reply to Anton Zhukharev from comment #5)
> (In reply to Dmitry V. Levin from comment #4)
> > (In reply to Anton Zhukharev from comment #0)
> > > Плюс было бы неплохо его также передавать в %configure.
> > 
> > Очень плохо передавать неизвестные параметры в configure.
> > Мы попробовали 2 года назад, в результате сломалась сборка около 900
> > пакетов, откатили на следующий день, и больше не будем пробовать такое.
> Чтобы configure не считал этот параметр неизвестным и не падал при запуске,
> необходимо обновить autoconf хотя бы до этого коммита (либо черрипикнуть
> его):
> http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commit;
> h=a197431414088a417b407b9b20583b2e8f7363bd

Не во всех использующих %сonfigure пакетах ./confiugre получен autoconf'ом. Даже в тех, где он получен autoconf'ом, не все делают %autoreconf, и часто у них на это есть объективные причины.
Comment 7 Anton Zhukharev 2023-07-21 12:07:43 MSK
(In reply to Ivan A. Melnikov from comment #6)
> (In reply to Anton Zhukharev from comment #5)
> > (In reply to Dmitry V. Levin from comment #4)
> > > (In reply to Anton Zhukharev from comment #0)
> > > > Плюс было бы неплохо его также передавать в %configure.
> > > 
> > > Очень плохо передавать неизвестные параметры в configure.
> > > Мы попробовали 2 года назад, в результате сломалась сборка около 900
> > > пакетов, откатили на следующий день, и больше не будем пробовать такое.
> > Чтобы configure не считал этот параметр неизвестным и не падал при запуске,
> > необходимо обновить autoconf хотя бы до этого коммита (либо черрипикнуть
> > его):
> > http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commit;
> > h=a197431414088a417b407b9b20583b2e8f7363bd
> 
> Не во всех использующих %сonfigure пакетах ./confiugre получен autoconf'ом.
> Даже в тех, где он получен autoconf'ом, не все делают %autoreconf, и часто у
> них на это есть объективные причины.

Отличный аргумент, сам встречался с таким несколько раз.
В таком случае добавление опции к %configure - действительно очень сложное решение. 

В таком случае лучше обойтись только обновлением autoconf и тем кому надо, смогут использовать эту опцию явно.

Поэтому ради лишь добуквенного совпадения прошу добавить синоним вида:

%_runstatedir %_runtimedir

(кстати, почему у нас именно runtimedir, а не runstatedir?)

Также интересно было бы узнать, сколько пакетов "не смогут переварить" runstatedir на данный момент.
Comment 8 Repository Robot 2023-07-24 00:48:53 MSK
rpm-build-4.0.4.190-alt1 -> sisyphus:

 Sun Jul 23 2023 Gleb F-Malinovskiy <glebfm@altlinux> 4.0.4.190-alt1
 - Added the new %_runstatedir macro as an alias to %_runtimedir (ALT#46988).
 - Modified the behavior of the %configure macro (ALT#46988):
   + to pass the --runstatedir option when it is supported by the configure
   script;
   + to disable detection and passing of the --runstatedir if the
   %_configure_use_runstatedir macro is undefined.