Что происходит: Успешно собирается пакет, в спеке которого указано %if_with check BuildRequires: hahaha > 100500 %endif Что ожидается: Поскольку выполнение секции %check можно включить через --without check, ожидается, что без такого указания должно срабатывать %if_with check По мотивам https://lists.altlinux.org/pipermail/devel/2020-November/212508.html
Забыл указать для примера успешно собравшееся задания с такой конструкцией в спеке: http://git.altlinux.org/tasks/262211/
(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.
(Ответ для 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
Для каких-то целей же делался код, где-то управляющий секцией 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. не требовались сборочные зависимости, необходимые для её выполнения.
(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.
Условная конструкция BuildRequires, эквивалентная условной конструкции в %check, может выглядеть, например, так: %{!?__buildreqs:%{!?_disable_check:%{!?_without_check:%{!?_disable_test:%{!?_without_test:BuildRequires: needed-for-tests}}}}}
В качестве демонстрации: %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 но это нигде не реализовано.
> На самом деле вы хотите > BuildRequires(check): ist of packages needed for tests > но это нигде не реализовано. Да это же гениально!