RPM

макрос для сравнения версий

Bug #911031 reported by Jeff Johnson
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
RPM
New
Undecided
Unassigned
ALT Linux
In Progress
Wishlist

Bug Description

<translation here please>
Version comparison macros? Might better be implemented as macro primitives

Tags: macros alt
Revision history for this message
In , Zerg-e (zerg-e) wrote :

макрос бы, сравнивающий версии, чтоб можно было использовать в %if и с
операциями >, <, >=, <= и ==

Revision history for this message
In , Zerg-e (zerg-e) wrote :

Чтоб под 3.0 собирать пакеты из Сизифа легче было.

Revision history for this message
In , Zerg-e (zerg-e) wrote :

Т.е. для M24 это использовать нельзя, а если не будет исправлено, то опять до
следующего дистрибутива ждать.

Revision history for this message
In , Zerg-e (zerg-e) wrote :

Функционально это аналог %_release_tag или как там народ хотел, но более
гибкий.

Revision history for this message
In , Tfa7 (tfa7) wrote :

Эээ... я там когда-то чего-то трындел про "выявление фич" дистрибутива, тыкая
пальцем в apache.spec.

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

...mid-air...

(In reply to comment #3)
> Функционально это аналог %_release_tag или как там народ хотел, но более
> гибкий.
Да-да-да-да-да :-)

Revision history for this message
In , Dmitry V. Levin (ldv) wrote :

Придумайте сам макрос, тогда и обсудим.

Revision history for this message
In , Zerg-e (zerg-e) wrote :

(In reply to comment #5)
> Придумайте сам макрос, тогда и обсудим.
Упаковать в отдельный пакет и без обсуждения можно ;-)

Revision history for this message
In , Tfa7 (tfa7) wrote :

Я не вижу смысла воспринимать ALT Linux 3.0 как платформу, о которой стоит
заботиться. Вот и Антон убрал #7079 blocker.

Revision history for this message
In , Zerg-e (zerg-e) wrote :

(In reply to comment #7)
> Я не вижу смысла воспринимать ALT Linux 3.0 как платформу, о которой стоит
> заботиться. Вот и Антон убрал #7079 blocker.
А вот мне приходиться заботиться, поэтому не надо менять тему. Баг я вешал.
см. https://bugzilla.altlinux.org/show_bug.cgi?id=8068

Revision history for this message
In , Dmitry V. Levin (ldv) wrote :

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

Revision history for this message
In , Zerg-e (zerg-e) wrote :

Типа
%if %{rpmvercmp "1.1.2" >= "1.1.1z"}

Revision history for this message
In , Zerg-e (zerg-e) wrote :

Я бы даже не отказался, чтоб он в отдельном пакете был

Revision history for this message
In , Dmitry V. Levin (ldv) wrote :

А, теперь понятно.

Revision history for this message
In , Anubix (anubix) wrote :

%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"

Revision history for this message
In , Asy-m (asy-m) wrote :

А почему 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 не ошибся - я это немного наобум написал.

Revision history for this message
In , Asy-m (asy-m) wrote :

Кстати, Compact 3.0 вот упустили, баг то ведь до выхода завели... Может не
затягивать до выхода Master 3.1 ? :-)

Revision history for this message
In , Zerg-e (zerg-e) wrote :

(In reply to comment #14)
> Не сразу очевидна связь между версией rpm и дистрибутивом,
А зачем она?

Revision history for this message
In , Zerg-e (zerg-e) wrote :

Вариант со значением переменной типа "M30" или "M24" не слишком сильно
применим. Особенно для бэкпортов, где версии софта могут сильно влиять на
сборку/функционал.
Например: qt4 у меня собирается без dbus при детекте ее старой версии, но если
в бэкпортс выложат новый, то успешно соберется с ним и появиться
соответствующий подпакет.

Revision history for this message
In , Asy-m (asy-m) wrote :

> > Не сразу очевидна связь между версией rpm и дистрибутивом,

> А зачем она?

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

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

Можно расширить: M31u и M31b. Ну а дальше бакпортер или апдейтер пусть список
пакетов отслеживают. Или автомат придумывают, но, всё равно, наверное, это
будет уже проще, когда знаешь диапазон ограничений.

Revision history for this message
In , Zerg-e (zerg-e) wrote :

(In reply to comment #18)
> > > Не сразу очевидна связь между версией rpm и дистрибутивом,
> > А зачем она?
> В общем-то незачем. Потому мне rpmver... и не понравилось.
rpmvercmp универсаден, поэтому не дает никакой связи с дистрибутивом.
Ваш вариант малоприменим в бэкпортс и вообще не применим в сизифе.

Revision history for this message
In , Rider-i (rider-i) wrote :

Дима, а эти макросы ещё не втащил в rpm ?

Я, видимо, тоже начну использовать - удобно для бэкпорта.

Revision history for this message
In , Lav-7 (lav-7) wrote :

Какие всё-таки макросы?

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

Revision history for this message
In , Zerg-e (zerg-e) wrote :

(В ответ на комментарий №21)
> Какие всё-таки макросы?
#13

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

>, а вот определить макросы,
> по которым можно узнать, где же пакет собирается, было бы хорошо.
Это может быть система с _любым_ набором пакетов. В идеале пакет должен собираться правильно под нее. Т.е. не вижу смысла.

Revision history for this message
In , Lav-7 (lav-7) wrote :

(В ответ на комментарий №22)
...
> >, а вот определить макросы,
> > по которым можно узнать, где же пакет собирается, было бы хорошо.
> Это может быть система с _любым_ набором пакетов. В идеале пакет должен
> собираться правильно под нее. Т.е. не вижу смысла.
Я рассматриваю задачу сборки через girar, тут ничего любого нет, есть определённые версии (4.1, 5.1, sisyphus). Для моих задач мне было бы важно знать версию. Только вот altlinux-release сейчас предоставляется чем попало и в /etc/altlinux-release лежит случайный файл

Revision history for this message
In , Zerg-e (zerg-e) wrote :

(В ответ на комментарий №23)
> Я рассматриваю задачу сборки через girar
Я тоже

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

> Для моих задач мне было бы важно знать версию.
Это понятно. Такое актуально только при сборке для кучи разных дистрибутивов.

Revision history for this message
In , Lav-7 (lav-7) wrote :

(В ответ на комментарий №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 выпустил больше чем один дистрибутив, разные версии которых требуют отличий в сборке.

Revision history for this message
In , Zerg-e (zerg-e) wrote :

(В ответ на комментарий №25)
> И, вряд ли к сожалению, ALT Linux выпустил больше чем один дистрибутив,
> разные версии которых требуют отличий в сборке.
Вот, столько выпустил ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/backports
Ну, и "ALT Linux выпустил" не особо при чем.

Revision history for this message
In , Zerg-e (zerg-e) wrote :

(В ответ на комментарий №25)
> Если вы тоже говорите про girar, то я бы предложил опираться на
> $ ssh git.alt acl --list
А я все еще предлагаю опираться на версии пакетов.
А для вас есть пакет rpm-macros-branch, в котором макрос branch_release, который на вскидку не работает и вы могли бы помочь мантейнеру его исправить ;-)

Revision history for this message
In , Lav-7 (lav-7) wrote :

(В ответ на комментарий №26)
...
> Вот, столько выпустил
> ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/backports
Ну я бы смотрел сюда:
ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/

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

(В ответ на комментарий №27)
> А для вас есть пакет rpm-macros-branch, в котором макрос branch_release,
> который на вскидку не работает и вы могли бы помочь мантейнеру его исправить
> ;-)
Я не понимаю, как это могло бы работать, так что вряд ли смогу помочь.

Revision history for this message
In , Zerg-e (zerg-e) wrote :

(В ответ на комментарий №28)
> Ну я бы смотрел сюда:
А вы смотрите туда, куда я ответил на ваш вопрос.

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

> > А для вас есть пакет rpm-macros-branch, в котором макрос branch_release,
> > который на вскидку не работает и вы могли бы помочь мантейнеру его исправить
> > ;-)
> Я не понимаю, как это могло бы работать, так что вряд ли смогу помочь.
Тогда отпишитесь от этой баги, пожалуйста, т.к. она получается точно не для вас.

Revision history for this message
In , Jeff Johnson (n3npq) wrote :
tags: added: alt macros
Revision history for this message
In , Zerg-e (zerg-e) wrote :

Я, например, давно сделал себе в rpm-macros-kde-common-devel набор макросов, как в комментарии #13 и давно успешно его использую.
В некоторых других пакетах, например qt4, держу отдельную копию в .spec .

Revision history for this message
In , Zerg-e (zerg-e) wrote :

А в паре с rpm-build-ubt можно, например,
%if_ver_gteq %ubt_id M90C
Obsolete: kde4
%endif

Revision history for this message
In , Zerg-e (zerg-e) wrote :

Расширенный набор:
%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"

Revision history for this message
In , Rider-i (rider-i) wrote :

На днях был удивлён, что в rpm spec невозможно стандартным способом без внешних утилит выполнить сравнение версий.

Это же функция rpm, почему бы не обернуть её макросом ?

Revision history for this message
In , Dmitry V. Levin (ldv) wrote :

(In reply to Anton Farygin from comment #34)
> На днях был удивлён, что в rpm spec невозможно стандартным способом без
> внешних утилит выполнить сравнение версий.
>
> Это же функция rpm, почему бы не обернуть её макросом ?

Почему-то никто этого не делал. Может быть, никому не показалось это нужно.
В rpm несколько функций, которые сравнивают версии.
Есть rpmvercmp, которая сравнивает именно версии,
есть rpmVersionCompare, сравнивающая epoch:version-release:disttag,
есть функции, сравнивающие диапазоны.

Revision history for this message
In , Rider-i (rider-i) wrote :

у нас я насчитал 33 пакета, использующих что-то подобное:
%if "%(rpmvercmp %libsshver 0.8 )" >= "0"

Да, нужно не часто, но когда нужно было бы неплохо иметь без костылей.

Revision history for this message
In , Zerg-e (zerg-e) wrote :

(Ответ для Dmitry V. Levin на комментарий #35)
> Почему-то никто этого не делал.
Этот-самый никто и дальше не будет делать, а я, например, делаю последние 15 лет. ;-)

Changed in altlinux:
importance: Unknown → Wishlist
status: Unknown → In Progress
Revision history for this message
In , Zerg-e (zerg-e) wrote :

(Ответ для Dmitry V. Levin на комментарий #35)
> Есть rpmvercmp, которая сравнивает именно версии,
> есть rpmVersionCompare, сравнивающая epoch:version-release:disttag,
> есть функции, сравнивающие диапазоны.
Этот же самый "никто" не против появления макросов для всех вышеперечисленных функций.

Revision history for this message
In , Zerg-e (zerg-e) wrote :

(Ответ для Dmitry V. Levin на комментарий #35)
> Есть rpmvercmp, которая сравнивает именно версии,
> есть rpmVersionCompare, сравнивающая epoch:version-release:disttag,
Может, получится объединить?

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.