Bug 6010 - макрос для сравнения версий
Summary: макрос для сравнения версий
Status: ASSIGNED
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-build (show other bugs)
Version: unstable
Hardware: all Linux
: P2 enhancement
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks: 7079 7371 8068
  Show dependency tree
 
Reported: 2005-02-02 22:43 MSK by Sergey V Turchin
Modified: 2022-10-14 12:30 MSK (History)
13 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sergey V Turchin 2005-02-02 22:43:08 MSK
макрос бы, сравнивающий версии, чтоб можно было использовать в %if и с 
операциями >, <, >=, <= и ==
Comment 1 Sergey V Turchin 2005-06-16 19:59:27 MSD
Чтоб под 3.0 собирать пакеты из Сизифа легче было. 
Comment 2 Sergey V Turchin 2005-06-16 20:00:45 MSD
Т.е. для M24 это использовать нельзя, а если не будет исправлено, то опять до 
следующего дистрибутива ждать. 
 
Comment 3 Sergey V Turchin 2005-06-16 20:03:38 MSD
Функционально это аналог %_release_tag или как там народ хотел, но более 
гибкий. 
Comment 4 Michael Shigorin 2005-06-16 20:19:56 MSD
Эээ... я там когда-то чего-то трындел про "выявление фич" дистрибутива, тыкая
пальцем в apache.spec.

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

...mid-air...

(In reply to comment #3)
> Функционально это аналог %_release_tag или как там народ хотел, но более 
> гибкий. 
Да-да-да-да-да :-)
Comment 5 Dmitry V. Levin 2005-06-30 01:07:43 MSD
Придумайте сам макрос, тогда и обсудим.
Comment 6 Sergey V Turchin 2005-06-30 19:39:00 MSD
(In reply to comment #5) 
> Придумайте сам макрос, тогда и обсудим. 
Упаковать в отдельный пакет и без обсуждения можно ;-) 
Comment 7 Michael Shigorin 2005-07-15 10:01:42 MSD
Я не вижу смысла воспринимать ALT Linux 3.0 как платформу, о которой стоит
заботиться.  Вот и Антон убрал #7079 blocker.
Comment 8 Sergey V Turchin 2005-09-30 19:01:06 MSD
(In reply to comment #7) 
> Я не вижу смысла воспринимать ALT Linux 3.0 как платформу, о которой стоит 
> заботиться.  Вот и Антон убрал #7079 blocker. 
А вот мне приходиться заботиться, поэтому не надо менять тему. Баг я вешал. 
см. https://bugzilla.altlinux.org/show_bug.cgi?id=8068 
 
Comment 9 Dmitry V. Levin 2005-10-10 18:12:57 MSD
Будьте добры пример макроса и пример использования, иначе мне не понятно, чего
именно вы хотите.
Comment 10 Sergey V Turchin 2005-10-10 19:56:42 MSD
Типа 
%if %{rpmvercmp "1.1.2" >= "1.1.1z"} 
 
Comment 11 Sergey V Turchin 2005-10-10 19:59:00 MSD
Я бы даже не отказался, чтоб он в отдельном пакете был  
Comment 12 Dmitry V. Levin 2005-10-10 20:01:40 MSD
А, теперь понятно.
Comment 13 Zerg 2006-11-17 00:58:58 MSK
%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 Sergey Y. Afonin 2007-03-16 16:38:31 MSK
А почему 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 Sergey Y. Afonin 2007-03-16 16:40:19 MSK
Кстати, Compact 3.0 вот упустили, баг то ведь до выхода завели... Может не 
затягивать до выхода Master 3.1 ? :-)
Comment 16 Sergey V Turchin 2007-03-16 18:11:32 MSK
(In reply to comment #14)
> Не сразу очевидна связь между версией rpm и дистрибутивом, 
А зачем она?
Comment 17 Sergey V Turchin 2007-03-16 18:12:05 MSK
Вариант со значением переменной типа "M30" или "M24" не слишком сильно 
применим. Особенно для бэкпортов, где версии софта могут сильно влиять на 
сборку/функционал.
Например: qt4 у меня собирается без dbus при детекте ее старой версии, но если 
в бэкпортс выложат новый, то успешно соберется с ним и появиться 
соответствующий подпакет.
Comment 18 Sergey Y. Afonin 2007-03-16 22:33:56 MSK
> > Не сразу очевидна связь между версией rpm и дистрибутивом, 

> А зачем она?

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

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

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

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

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

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

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

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

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

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

> > А для вас есть пакет rpm-macros-branch, в котором макрос branch_release,
> > который на вскидку не работает и вы могли бы помочь мантейнеру его исправить
> > ;-)
> Я не понимаю, как это могло бы работать, так что вряд ли смогу помочь.
Тогда отпишитесь от этой баги, пожалуйста, т.к. она получается точно не для вас.
Comment 30 Jeff Johnson 2012-01-03 03:18:49 MSK
tracked at https://bugs.launchpad.net/rpm/+bug/911031
Comment 31 Sergey V Turchin 2013-04-11 15:16:59 MSK
Я, например, давно сделал себе в rpm-macros-kde-common-devel набор макросов, как в комментарии #13 и давно успешно его использую.
В некоторых других пакетах, например qt4, держу отдельную копию в .spec .
Comment 32 Sergey V Turchin 2017-11-15 12:51:31 MSK
А в паре с rpm-build-ubt можно, например,
%if_ver_gteq %ubt_id M90C
Obsolete: kde4
%endif
Comment 33 Sergey V Turchin 2017-11-17 11:48:39 MSK
Расширенный набор:
%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"
Comment 34 Anton Farygin 2021-03-29 13:51:26 MSK
На днях был удивлён, что в rpm spec невозможно стандартным способом без внешних утилит выполнить сравнение версий.

Это же функция rpm, почему бы не обернуть её макросом ?
Comment 35 Dmitry V. Levin 2021-03-29 14:31:41 MSK
(In reply to Anton Farygin from comment #34)
> На днях был удивлён, что в rpm spec невозможно стандартным способом без
> внешних утилит выполнить сравнение версий.
> 
> Это же функция rpm, почему бы не обернуть её макросом ?

Почему-то никто этого не делал.  Может быть, никому не показалось это нужно.
В rpm несколько функций, которые сравнивают версии.
Есть rpmvercmp, которая сравнивает именно версии,
есть rpmVersionCompare, сравнивающая epoch:version-release:disttag,
есть функции, сравнивающие диапазоны.
Comment 36 Anton Farygin 2021-03-29 14:37:30 MSK
у нас я насчитал 33 пакета, использующих что-то подобное:
%if "%(rpmvercmp %libsshver 0.8 )" >= "0"

Да, нужно не часто, но когда нужно было бы неплохо иметь без костылей.
Comment 37 Sergey V Turchin 2021-03-29 14:44:32 MSK
(Ответ для Dmitry V. Levin на комментарий #35)
> Почему-то никто этого не делал.
Этот-самый никто и дальше не будет делать, а я, например, делаю последние 15 лет. ;-)
Comment 38 Sergey V Turchin 2022-10-14 12:09:13 MSK
(Ответ для Dmitry V. Levin на комментарий #35)
> Есть rpmvercmp, которая сравнивает именно версии,
> есть rpmVersionCompare, сравнивающая epoch:version-release:disttag,
> есть функции, сравнивающие диапазоны.
Этот же самый "никто" не против появления макросов для всех вышеперечисленных функций.
Comment 39 Sergey V Turchin 2022-10-14 12:30:08 MSK
(Ответ для Dmitry V. Levin на комментарий #35)
> Есть rpmvercmp, которая сравнивает именно версии,
> есть rpmVersionCompare, сравнивающая epoch:version-release:disttag,
Может, получится объединить?