Bug 6010 - макрос для сравнения версий
: макрос для сравнения версий
Status: ASSIGNED
: Sisyphus
(All bugs in Sisyphus/rpm-build)
: unstable
: all Linux
: P2 enhancement
Assigned To:
:
:
:
:
: 7079 7371 8068
  Show dependency tree
 
Reported: 2005-02-02 22:43 by
Modified: 2017-11-17 11:48 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2005-02-02 22:43:08
макрос бы, сравнивающий версии, чтоб можно было использовать в %if и с 
операциями >, <, >=, <= и ==
------- Comment #1 From 2005-06-16 19:59:27 -------
Чтоб под 3.0 собирать пакеты из Сизифа легче было. 
------- Comment #2 From 2005-06-16 20:00:45 -------
Т.е. для M24 это использовать нельзя, а если не будет исправлено, то опять до 
следующего дистрибутива ждать. 
------- Comment #3 From 2005-06-16 20:03:38 -------
Функционально это аналог %_release_tag или как там народ хотел, но более 
гибкий. 
------- Comment #4 From 2005-06-16 20:19:56 -------
Эээ... я там когда-то чего-то трындел про "выявление фич" дистрибутива, тыкая
пальцем в apache.spec.

Возможно, это тоже имеет отношение?

...mid-air...

(In reply to comment #3)
> Функционально это аналог %_release_tag или как там народ хотел, но более 
> гибкий. 
Да-да-да-да-да :-)
------- Comment #5 From 2005-06-30 01:07:43 -------
Придумайте сам макрос, тогда и обсудим.
------- Comment #6 From 2005-06-30 19:39:00 -------
(In reply to comment #5) 
> Придумайте сам макрос, тогда и обсудим. 
Упаковать в отдельный пакет и без обсуждения можно ;-) 
------- Comment #7 From 2005-07-15 10:01:42 -------
Я не вижу смысла воспринимать ALT Linux 3.0 как платформу, о которой стоит
заботиться.  Вот и Антон убрал #7079 blocker.
------- Comment #8 From 2005-09-30 19:01:06 -------
(In reply to comment #7) 
> Я не вижу смысла воспринимать ALT Linux 3.0 как платформу, о которой стоит 
> заботиться.  Вот и Антон убрал #7079 blocker. 
А вот мне приходиться заботиться, поэтому не надо менять тему. Баг я вешал. 
см. https://bugzilla.altlinux.org/show_bug.cgi?id=8068 
 
------- Comment #9 From 2005-10-10 18:12:57 -------
Будьте добры пример макроса и пример использования, иначе мне не понятно, чего
именно вы хотите.
------- Comment #10 From 2005-10-10 19:56:42 -------
Типа 
%if %{rpmvercmp "1.1.2" >= "1.1.1z"} 
 
------- Comment #11 From 2005-10-10 19:59:00 -------
Я бы даже не отказался, чтоб он в отдельном пакете был  
------- Comment #12 From 2005-10-10 20:01:40 -------
А, теперь понятно.
------- Comment #13 From 2006-11-17 00:58:58 -------
%define if_ver_gt() %if "%(rpmvercmp '%1' '%2')" > "0"
%define if_ver_gteq() %if "%(rpmvercmp '%1' '%2')" >= "0"
%define if_ver_lt() %if "%(rpmvercmp '%2' '%1')" > "0"
%define if_ver_lteq() %if "%(rpmvercmp '%2' '%1')" >= "0"
------- Comment #14 From 2007-03-16 16:38:31 -------
А почему rpmvercmp ? Не сразу очевидна связь между версией rpm и дистрибутивом, 
да и версия rpm одна может оказаться в двух дистрибутивах. 
Может %_distr_version ? А пример использования какой-нибудь такой:

BuildRequires: libdb4-devel libmailutils-devel libpam-devel mailutils

%if %_distr_version = "M24"
BuildRequires: flex
%elsif %_distr_version = "M30"
BuildRequires: flex
%else
BuildRequires: flex-old
%endif

Если с синтаксисом if не ошибся - я это немного наобум написал.
------- Comment #15 From 2007-03-16 16:40:19 -------
Кстати, Compact 3.0 вот упустили, баг то ведь до выхода завели... Может не 
затягивать до выхода Master 3.1 ? :-)
------- Comment #16 From 2007-03-16 18:11:32 -------
(In reply to comment #14)
> Не сразу очевидна связь между версией rpm и дистрибутивом, 
А зачем она?
------- Comment #17 From 2007-03-16 18:12:05 -------
Вариант со значением переменной типа "M30" или "M24" не слишком сильно 
применим. Особенно для бэкпортов, где версии софта могут сильно влиять на 
сборку/функционал.
Например: qt4 у меня собирается без dbus при детекте ее старой версии, но если 
в бэкпортс выложат новый, то успешно соберется с ним и появиться 
соответствующий подпакет.
------- Comment #18 From 2007-03-16 22:33:56 -------
> > Не сразу очевидна связь между версией rpm и дистрибутивом, 

> А зачем она?

В общем-то незачем. Потому мне rpmver... и не понравилось.

>Вариант со значением переменной типа "M30" или "M24" не слишком сильно 
>применим. Особенно для бэкпортов, где версии софта могут сильно влиять на 
>сборку/функционал.

Можно расширить: M31u и M31b. Ну а дальше бакпортер или апдейтер пусть список 
пакетов отслеживают. Или автомат придумывают, но, всё равно, наверное, это 
будет уже проще, когда знаешь диапазон ограничений.
------- Comment #19 From 2007-03-19 16:12:34 -------
(In reply to comment #18)
> > > Не сразу очевидна связь между версией rpm и дистрибутивом, 
> > А зачем она?
> В общем-то незачем. Потому мне rpmver... и не понравилось.
rpmvercmp универсаден, поэтому не дает никакой связи с дистрибутивом.
Ваш вариант малоприменим в бэкпортс и вообще не применим в сизифе.
------- Comment #20 From 2010-09-15 14:59:10 -------
Дима, а эти макросы ещё не втащил в rpm ?

Я, видимо, тоже начну использовать - удобно для бэкпорта.
------- Comment #21 From 2010-09-23 19:18:21 -------
Какие всё-таки макросы?

Я вот сомневаюсь, что сравнения <, > и пр. актуальны, а вот определить макросы,
по которым можно узнать, где же пакет собирается, было бы хорошо.
------- Comment #22 From 2010-09-27 18:10:41 -------
(В ответ на комментарий №21)
> Какие всё-таки макросы?
#13

> Я вот сомневаюсь, что сравнения <, > и пр. актуальны
Я приводил пример, абсолютно актуальный на тот момент.

>, а вот определить макросы,
> по которым можно узнать, где же пакет собирается, было бы хорошо.
Это может быть система с _любым_ набором пакетов. В идеале пакет должен
собираться правильно под нее. Т.е. не вижу смысла.
------- Comment #23 From 2010-10-04 14:08:05 -------
(В ответ на комментарий №22)
...
> >, а вот определить макросы,
> > по которым можно узнать, где же пакет собирается, было бы хорошо.
> Это может быть система с _любым_ набором пакетов. В идеале пакет должен
> собираться правильно под нее. Т.е. не вижу смысла.
Я рассматриваю задачу сборки через girar, тут ничего любого нет, есть
определённые версии (4.1, 5.1, sisyphus). Для моих задач мне было бы важно
знать версию. Только вот altlinux-release сейчас предоставляется чем попало и в
/etc/altlinux-release лежит случайный файл
------- Comment #24 From 2010-10-04 16:47:38 -------
(В ответ на комментарий №23)
> Я рассматриваю задачу сборки через girar
Я тоже

>, тут ничего любого нет, есть
> определённые версии (4.1, 5.1, sisyphus).
Нет такой версии -- sisyphus. Это и 5.1 и 4.1 и всё вместе взятое в разные
моменты времени.

> Для моих задач мне было бы важно знать версию.
Это понятно. Такое актуально только при сборке для кучи разных дистрибутивов.
------- Comment #25 From 2010-10-04 16:53:11 -------
(В ответ на комментарий №24)
> (В ответ на комментарий №23)
> > Я рассматриваю задачу сборки через girar
> Я тоже
> 
> >, тут ничего любого нет, есть
> > определённые версии (4.1, 5.1, sisyphus).
> Нет такой версии -- sisyphus. Это и 5.1 и 4.1 и всё вместе взятое в разные
> моменты времени.

Если вы тоже говорите про girar, то я бы предложил опираться на
$ ssh git.alt acl --list
sisyphus
p5
5.1
5.0
4.1
4.0

> > Для моих задач мне было бы важно знать версию.
> Это понятно. Такое актуально только при сборке для кучи разных дистрибутивов.
Да. И, вряд ли к сожалению, ALT Linux выпустил больше чем один дистрибутив,
разные версии которых требуют отличий в сборке.
------- Comment #26 From 2010-10-04 17:15:04 -------
(В ответ на комментарий №25)
> И, вряд ли к сожалению, ALT Linux выпустил больше чем один дистрибутив,
> разные версии которых требуют отличий в сборке.
Вот, столько выпустил
ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/backports
Ну, и "ALT Linux выпустил" не особо при чем.
------- Comment #27 From 2010-10-04 17:18:33 -------
(В ответ на комментарий №25)
> Если вы тоже говорите про girar, то я бы предложил опираться на
> $ ssh git.alt acl --list
А я все еще предлагаю опираться на версии пакетов.
А для вас есть пакет rpm-macros-branch, в котором макрос branch_release,
который на вскидку не работает и вы могли бы помочь мантейнеру его исправить
;-)
------- Comment #28 From 2010-10-07 16:45:41 -------
(В ответ на комментарий №26)
...
> Вот, столько выпустил
> ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/backports
Ну я бы смотрел сюда:
ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/

> Ну, и "ALT Linux выпустил" не особо при чем.
Я говорю о списке различных платформ, под которые возможна сборка.


(В ответ на комментарий №27)
> А для вас есть пакет rpm-macros-branch, в котором макрос branch_release,
> который на вскидку не работает и вы могли бы помочь мантейнеру его исправить
> ;-)
Я не понимаю, как это могло бы работать, так что вряд ли смогу помочь.
------- Comment #29 From 2010-10-11 15:13:49 -------
(В ответ на комментарий №28)
> Ну я бы смотрел сюда:
А вы смотрите туда, куда я ответил на ваш вопрос.

> > Ну, и "ALT Linux выпустил" не особо при чем.
> Я говорю о списке различных платформ, под которые возможна сборка.
Неправда, т.к. в вашем списке есть "платформа" sisyphus.

> > А для вас есть пакет rpm-macros-branch, в котором макрос branch_release,
> > который на вскидку не работает и вы могли бы помочь мантейнеру его исправить
> > ;-)
> Я не понимаю, как это могло бы работать, так что вряд ли смогу помочь.
Тогда отпишитесь от этой баги, пожалуйста, т.к. она получается точно не для
вас.
------- Comment #30 From 2012-01-03 03:18:49 -------
tracked at https://bugs.launchpad.net/rpm/+bug/911031
------- Comment #31 From 2013-04-11 15:16:59 -------
Я, например, давно сделал себе в rpm-macros-kde-common-devel набор макросов,
как в комментарии #13 и давно успешно его использую.
В некоторых других пакетах, например qt4, держу отдельную копию в .spec .
------- Comment #32 From 2017-11-15 12:51:31 -------
А в паре с rpm-build-ubt можно, например,
%if_ver_gteq %ubt_id M90C
Obsolete: kde4
%endif
------- Comment #33 From 2017-11-17 11:48:39 -------
Расширенный набор:
%if_ver_gt() %if "%(rpmvercmp '%1' '%2')" > "0"
%if_ver_gteq() %if "%(rpmvercmp '%1' '%2')" >= "0"
%if_ver_lt() %if "%(rpmvercmp '%2' '%1')" > "0"
%if_ver_lteq() %if "%(rpmvercmp '%2' '%1')" >= "0"
%if_ver_eq() %if "%(rpmvercmp '%1' '%2')" == "0"
%if_ver_not_gt() %if "%(rpmvercmp '%1' '%2')" <= "0"
%if_ver_not_gteq() %if "%(rpmvercmp '%1' '%2')" < "0"
%if_ver_not_lt() %if "%(rpmvercmp '%2' '%1')" <= "0"
%if_ver_not_lteq() %if "%(rpmvercmp '%2' '%1')" < "0"
%if_ver_not_eq() %if "%(rpmvercmp '%1' '%2')" != "0"