rpm-build-gir-0.7.3-alt3.1 /usr/lib/rpm/gir-python.req берёт из `from gi.repository import X` только имена модулей и всегда выдаёт `typelib(X)` без версии. Вызовы `gi.require_version("X", "VER")` не учитываются. При этом провайдеры typelib версионированы: libgtk+3-gir даёт `typelib(Gtk) = 3.0`, libgtk4-gir — `typelib(Gtk) = 4.0`, glib2 — `typelib(GLib) = 2.0`, libat-spi2-core-gir — `typelib(Atspi) = 2.0`. Поэтому безверсионный `typelib(Gtk)` удовлетворяется любым из них, и пакет, которому нужен GTK3, ставится в систему только с GTK4 и падает при запуске: ValueError: Namespace Gtk not available for version 3.0 Пример: dogtail 2.1.0 (dogtail/utils.py, dogtail/rawinput.py делают gi.require_version("Gtk", "3.0") / ("Gdk", "3.0")), пришлось добавлять ручные `Requires: typelib(Gtk) = 3.0`. Та же проблема потенциально у всех python-пакетов, которые требуют конкретную версию typelib при наличии нескольких (Gtk 3/4, Gdk, WebKit2, Soup 2/3, GtkSource и т.п.). Предлагаю (патч во вложении, проверен на тестовых файлах): 1. В gir-python.req для каждого файла собирать пары из `gi.require_version("Name", "Version")` (двойные/одинарные кавычки, пробелы) и, если для модуля версия в файле однозначна, выдавать `typelib(Name) = Version`; если версий несколько (например, try 4.0 / except 3.0) или вызова нет — как раньше, `typelib(Name)`. 2. В TypeLibReq_Skip сравнивать шаблоны RPM_TYPELIB_REQ_SKIPLIST ещё и с именем без версии (`${req%% *}`), чтобы существующие skip-шаблоны вида `typelib(Gtk)` продолжали работать для версионных зависимостей. Результат на тестовом файле: gi.require_version("Gtk", "3.0"); gi.require_version('Gdk', '3.0'); gi.require_version ( "Atspi" , "2.0" ) from gi.repository import Gtk, Gdk, Atspi, GLib было: typelib(Gtk) typelib(Gdk) typelib(Atspi) typelib(GLib) стало: typelib(Gtk) = 3.0, typelib(Gdk) = 3.0, typelib(Atspi) = 2.0, typelib(GLib)
(Ответ для Vitaly Lipatov на комментарий #0) > Предлагаю (патч во вложении, проверен на тестовых файлах): Юзер, как это обычно бывает, забыл приложить файл.
Created attachment 22357 [details] gir-python.req: versioned typelib() from gi.require_version(); skiplist matches the name Патч прикладываю (против rpm-build-gir-0.7.3-alt3.1, пути /usr/lib/rpm/..., применять patch -p1 от корня). Проверено: на тестовом файле из описания даёт typelib(Gtk) = 3.0, typelib(Gdk) = 3.0, typelib(Atspi) = 2.0, typelib(GLib); с RPM_TYPELIB_REQ_SKIPLIST='typelib(Gtk)' версионная зависимость на Gtk по-прежнему пропускается.
Предлагаю потестить. https://packages.altlinux.org/tasks/435881
(Ответ для Yuri N. Sedunov на комментарий #3) > Предлагаю потестить. > https://packages.altlinux.org/tasks/435881 Проверил rpm-build-gir-0.7.4-alt1 из #435881: изменения gir-python.req и rpm-build-gir.functions применены целиком, работает. Тестовый файл из описания: typelib(Gtk) = 3.0, typelib(Gdk) = 3.0, typelib(Atspi) = 2.0, typelib(GLib) try: require_version("Gtk", "4.0") / except: require_version("Gtk", "3.0"): typelib(Gtk) (без версии, как и задумано) RPM_TYPELIB_REQ_SKIPLIST='typelib(Gtk)': typelib(Gtk) = 3.0 пропускается, остальные на месте На исходниках dogtail (25 *.py): было: typelib(Gdk) typelib(GdkPixbuf) typelib(GLib) typelib(Gtk) typelib(Wnck) стало: typelib(Gdk) = 3.0 typelib(GdkPixbuf) typelib(GLib) typelib(Gtk) = 3.0 typelib(Wnck) = 3.0 Все версионные зависимости разрешаются в Sisyphus: libgtk+3-gir даёт typelib(Gtk/Gdk) = 3.0, libwnck3-gir -- typelib(Wnck) = 3.0, libat-spi2-core-gir -- typelib(Atspi) = 2.0. Одно замечание: в пакет попал лишний файл /usr/lib/rpm/gir-python.req.lav -- это копия старого gir-python.req 0.7.3 (видимо, бэкап от %patch -b .lav).
(Ответ для Vitaly Lipatov на комментарий #4) > (Ответ для Yuri N. Sedunov на комментарий #3) > > Предлагаю потестить. > > https://packages.altlinux.org/tasks/435881 > > Проверил rpm-build-gir-0.7.4-alt1 из #435881: изменения gir-python.req и > rpm-build-gir.functions применены целиком, работает. Алексей главный в rpm-build-gir, подождем его решения. > Одно замечание: в пакет попал лишний файл /usr/lib/rpm/gir-python.req.lav -- > это копия старого gir-python.req 0.7.3 (видимо, бэкап от %patch -b .lav). Это я поправлю перед отправкой в сизиф.