Bug 39327

Summary: There is no BuildRequires(check) to match conditions implemented in %check
Product: Sisyphus Reporter: Vitaly Lipatov <lav>
Component: rpm-buildAssignee: placeholder <placeholder>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: arseny, glebfm, imz, ldv, mike, placeholder, viy, vt
Version: unstable   
Hardware: x86_64   
OS: Linux   
See Also: https://bugzilla.altlinux.org/show_bug.cgi?id=6838

Description Vitaly Lipatov 2020-11-21 14:49:42 MSK
Что происходит:

Успешно собирается пакет, в спеке которого указано
%if_with check
BuildRequires: hahaha > 100500
%endif

Что ожидается:
Поскольку выполнение секции %check можно включить через --without check, ожидается, что без такого указания должно срабатывать
%if_with check


По мотивам
https://lists.altlinux.org/pipermail/devel/2020-November/212508.html
Comment 1 Vitaly Lipatov 2020-11-21 14:52:58 MSK
Забыл указать для примера успешно собравшееся задания с такой конструкцией в спеке:
http://git.altlinux.org/tasks/262211/
Comment 2 Dmitry V. Levin 2020-11-21 15:00:20 MSK
(In reply to Vitaly Lipatov from comment #0)
> Что происходит:
> 
> Успешно собирается пакет, в спеке которого указано
> %if_with check
> BuildRequires: hahaha > 100500
> %endif

%if_with check по сути ничем не отличается от
%if_with hahaha

Вы точно так же можете пожаловаться, что
%if_with hahaha
BuildRequires: hahaha > 100500
%endif
не работает без --with=hahaha

Ответ: если вы хотите такого поведения, то перед первым
должно быть
%def_with hahaha
или
%def_without hahaha

В противном случае
%if_with hahaha
отвечает на вопрос, был ли указан --with=hahaha.
Comment 3 Vitaly Lipatov 2020-11-21 15:17:15 MSK
(Ответ для Dmitry V. Levin на комментарий #2)
...
> Ответ: если вы хотите такого поведения, то перед первым
> должно быть
> %def_with hahaha
> или
> %def_without hahaha
> 
> В противном случае
> %if_with hahaha
> отвечает на вопрос, был ли указан --with=hahaha.

К поведению if_with у меня нет претензий. Я о том, что у нас можно выключить секцию
%check добавлением --without check

То есть подразумевается, что по умолчанию у нас есть --with check.


Очевидно, я о том, что
зависимости, необходимые для выполнения секции check, логично хочется указывать в обрамлении
%if_with check
BuildRequires:
%endif
Comment 4 Vitaly Lipatov 2020-11-21 16:06:36 MSK
Для каких-то целей же делался код, где-то управляющий секцией check, с псевдовизуализацией принятого решения (логика которой построена на предположении, что где-то в другом месте check выключается по такой же логике, как сообщается через echo).

commit 23e6847c11a99d8d8454194f926e1aa2288ed1a3
Author: Dmitry V. Levin <ldv@altlinux.org>
Date:   Tue Sep 8 21:02:16 2009 +0000

    platform.in: Override %__spec_check_pre

diff --git a/platform.in b/platform.in
index 4f06aef..96a139d 100644
--- a/platform.in
+++ b/platform.in
@@ -267,6 +267,16 @@
 @alt@%{__spec_install_custom_pre}\
 @alt@%nil
 @alt@
+@alt@%__spec_check_pre\
+@alt@%{?!_enable_check:%{?_disable_check:echo 'Check is turned off by --disable check' >&2; exit 0}}\
+@alt@%{?!_with_check:%{?_without_check:echo 'Check is turned off by --without check' >&2; exit 0}}\
+@alt@%{?!_enable_test:%{?_disable_test:echo 'Check is turned off by --disable test' >&2; exit 0}}\
+@alt@%{?!_with_test:%{?_without_test:echo 'Check is turned off by --without test' >&2; exit 0}}\
+@alt@%{?__buildreqs:echo 'Check is turned off in buildreq mode' >&2; exit 0}\
+@alt@%{___build_pre}\
+@alt@%{__spec_check_custom_pre}\
+@alt@%nil
+@alt@
 @alt@%__spec_clean_post\


Я хотел бы подчеркнуть очевидную вещь:
секцию check при сборке выключают для того, чтобы
1. она не выполнялась
2. не требовались сборочные зависимости, необходимые для её выполнения.
Comment 5 Dmitry V. Levin 2020-11-21 16:35:18 MSK
(In reply to Vitaly Lipatov from comment #4)
> Для каких-то целей же делался код, где-то управляющий секцией check, с
> псевдовизуализацией принятого решения (логика которой построена на
> предположении, что где-то в другом месте check выключается по такой же
> логике, как сообщается через echo).

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

> commit 23e6847c11a99d8d8454194f926e1aa2288ed1a3
> Author: Dmitry V. Levin <ldv@altlinux.org>
> Date:   Tue Sep 8 21:02:16 2009 +0000
> 
>     platform.in: Override %__spec_check_pre
> 
> diff --git a/platform.in b/platform.in
> index 4f06aef..96a139d 100644
> --- a/platform.in
> +++ b/platform.in
> @@ -267,6 +267,16 @@
>  @alt@%{__spec_install_custom_pre}\
>  @alt@%nil
>  @alt@
> +@alt@%__spec_check_pre\
> +@alt@%{?!_enable_check:%{?_disable_check:echo 'Check is turned off by
> --disable check' >&2; exit 0}}\
> +@alt@%{?!_with_check:%{?_without_check:echo 'Check is turned off by
> --without check' >&2; exit 0}}\
> +@alt@%{?!_enable_test:%{?_disable_test:echo 'Check is turned off by
> --disable test' >&2; exit 0}}\
> +@alt@%{?!_with_test:%{?_without_test:echo 'Check is turned off by --without
> test' >&2; exit 0}}\
> +@alt@%{?__buildreqs:echo 'Check is turned off in buildreq mode' >&2; exit
> 0}\
> +@alt@%{___build_pre}\
> +@alt@%{__spec_check_custom_pre}\
> +@alt@%nil
> +@alt@
>  @alt@%__spec_clean_post\
> 
> 
> Я хотел бы подчеркнуть очевидную вещь:
> секцию check при сборке выключают для того, чтобы
> 1. она не выполнялась
> 2. не требовались сборочные зависимости, необходимые для её выполнения.

Вы можете написать такую же развесистую клюкву, которую я сделал для %check, и для условных BuildRequires.
Comment 6 Dmitry V. Levin 2020-11-21 16:45:33 MSK
Условная конструкция BuildRequires, эквивалентная условной конструкции в %check,
может выглядеть, например, так:

%{!?__buildreqs:%{!?_disable_check:%{!?_without_check:%{!?_disable_test:%{!?_without_test:BuildRequires: needed-for-tests}}}}}
Comment 7 Dmitry V. Levin 2020-11-21 16:52:54 MSK
В качестве демонстрации:

%define BR4T() %{!?__buildreqs:%{!?_disable_check:%{!?_without_check:%{!?_disable_test:%{!?_without_test:BuildRequires: %*}}}}}

%BR4T list of packages needed for tests

На самом деле вы хотите
BuildRequires(check): ist of packages needed for tests
но это нигде не реализовано.
Comment 8 Vitaly Chikunov 2020-11-21 22:11:48 MSK
> На самом деле вы хотите
> BuildRequires(check): ist of packages needed for tests
> но это нигде не реализовано.

Да это же гениально!