<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>60845</bug_id>
          
          <creation_ts>2026-10-07 09:01:22 +0300</creation_ts>
          <short_desc>gir-python.req ignores gi.require_version(): typelib requires are unversioned (GTK3 apps get satisfied by GTK4)</short_desc>
          <delta_ts>2026-10-24 22:27:35 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>rpm-build-gir</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>53639</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Vitaly Lipatov">lav</reporter>
          <assigned_to name="Alexey Shabalin">shaba</assigned_to>
          <cc>aris</cc>
    
    <cc>shaba</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>301380</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2026-10-07 09:01:22 +0300</bug_when>
    <thetext>rpm-build-gir-0.7.3-alt3.1

/usr/lib/rpm/gir-python.req берёт из `from gi.repository import X` только имена модулей и всегда выдаёт `typelib(X)` без версии. Вызовы `gi.require_version(&quot;X&quot;, &quot;VER&quot;)` не учитываются.

При этом провайдеры 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(&quot;Gtk&quot;, &quot;3.0&quot;) / (&quot;Gdk&quot;, &quot;3.0&quot;)), пришлось добавлять ручные `Requires: typelib(Gtk) = 3.0`. Та же проблема потенциально у всех python-пакетов, которые требуют конкретную версию typelib при наличии нескольких (Gtk 3/4, Gdk, WebKit2, Soup 2/3, GtkSource и т.п.).

Предлагаю (патч во вложении, проверен на тестовых файлах):
1. В gir-python.req для каждого файла собирать пары из `gi.require_version(&quot;Name&quot;, &quot;Version&quot;)` (двойные/одинарные кавычки, пробелы) и, если для модуля версия в файле однозначна, выдавать `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(&quot;Gtk&quot;, &quot;3.0&quot;); gi.require_version(&apos;Gdk&apos;, &apos;3.0&apos;); gi.require_version ( &quot;Atspi&quot; , &quot;2.0&quot; )
    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)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301385</commentid>
    <comment_count>1</comment_count>
    <who name="Yuri N. Sedunov">aris</who>
    <bug_when>2026-10-07 09:42:13 +0300</bug_when>
    <thetext>(Ответ для Vitaly Lipatov на комментарий #0)


&gt; Предлагаю (патч во вложении, проверен на тестовых файлах):

Юзер, как это обычно бывает, забыл приложить файл.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301458</commentid>
    <comment_count>2</comment_count>
      <attachid>22357</attachid>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2026-10-07 19:05:11 +0300</bug_when>
    <thetext>Created attachment 22357
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=&apos;typelib(Gtk)&apos; версионная зависимость на Gtk по-прежнему пропускается.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301467</commentid>
    <comment_count>3</comment_count>
    <who name="Yuri N. Sedunov">aris</who>
    <bug_when>2026-10-07 20:54:06 +0300</bug_when>
    <thetext>Предлагаю потестить.

https://packages.altlinux.org/tasks/435881</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301473</commentid>
    <comment_count>4</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2026-10-07 23:35:11 +0300</bug_when>
    <thetext>(Ответ для Yuri N. Sedunov на комментарий #3)
&gt; Предлагаю потестить.
&gt; 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(&quot;Gtk&quot;, &quot;4.0&quot;) / except: require_version(&quot;Gtk&quot;, &quot;3.0&quot;):
    typelib(Gtk)                              (без версии, как и задумано)
RPM_TYPELIB_REQ_SKIPLIST=&apos;typelib(Gtk)&apos;:
    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).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301480</commentid>
    <comment_count>5</comment_count>
    <who name="Yuri N. Sedunov">aris</who>
    <bug_when>2026-10-08 10:25:22 +0300</bug_when>
    <thetext>(Ответ для Vitaly Lipatov на комментарий #4)
&gt; (Ответ для Yuri N. Sedunov на комментарий #3)
&gt; &gt; Предлагаю потестить.
&gt; &gt; https://packages.altlinux.org/tasks/435881
&gt; 
&gt; Проверил rpm-build-gir-0.7.4-alt1 из #435881: изменения gir-python.req и
&gt; rpm-build-gir.functions применены целиком, работает.

Алексей главный в rpm-build-gir, подождем его решения.
 
&gt; Одно замечание: в пакет попал лишний файл /usr/lib/rpm/gir-python.req.lav --
&gt; это копия старого gir-python.req 0.7.3 (видимо, бэкап от %patch -b .lav).

Это я поправлю перед отправкой в сизиф.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22357</attachid>
            <date>2026-10-07 19:05:11 +0300</date>
            <delta_ts>2026-10-07 19:05:11 +0300</delta_ts>
            <desc>gir-python.req: versioned typelib() from gi.require_version(); skiplist matches the name</desc>
            <filename>gir-python-req-require-version.patch</filename>
            <type>text/plain</type>
            <size>1760</size>
            <attacher name="Vitaly Lipatov">lav</attacher>
            
              <data encoding="base64">LS0tIGEvdXNyL2xpYi9ycG0vZ2lyLXB5dGhvbi5yZXEKKysrIGIvdXNyL2xpYi9ycG0vZ2lyLXB5
dGhvbi5yZXEKQEAgLTIxLDkgKzIxLDE4IEBACiAuIC91c3IvbGliL3JwbS9ycG0tYnVpbGQtZ2ly
LmZ1bmN0aW9ucwoga2V5d29yZD0iLipmcm9tW1s6c3BhY2U6XV0qZ2kucmVwb3NpdG9yeVtbOnNw
YWNlOl1dKmltcG9ydCIKIAorIyBwcmludCAiTmFtZSBWZXJzaW9uIiBwYWlycyBmcm9tIGdpLnJl
cXVpcmVfdmVyc2lvbigiTmFtZSIsICJWZXJzaW9uIikgY2FsbHMKK1B5R2lWZXJzaW9ucygpCit7
CisJZ3JlcCAtRSAtbyAicmVxdWlyZV92ZXJzaW9uW1s6c3BhY2U6XV0qXFwoW1s6c3BhY2U6XV0q
W1wiJ11bQS1aYS16MC05X10rW1wiJ11bWzpzcGFjZTpdXSosW1s6c3BhY2U6XV0qW1wiJ11bMC05
Ll0rW1wiJ10iICIkMSIgfAorCQlzZWQgLWUgInMvXnJlcXVpcmVfdmVyc2lvbltbOnNwYWNlOl1d
KihbWzpzcGFjZTpdXSpbXCInXVxcKFtBLVphLXowLTlfXSpcXClbXCInXVtbOnNwYWNlOl1dKixb
WzpzcGFjZTpdXSpbXCInXVxcKFswLTkuXSpcXClbXCInXS9cXDEgXFwyLyIgfAorCQlzb3J0IC11
Cit9CisKIFB5R2lSZXEoKQogewotCWxvY2FsIGY9IiQxIiBvdXQ9OyBzaGlmdAorCWxvY2FsIGY9
IiQxIiBvdXQ9IHZlcnNpb25zPTsgc2hpZnQKKwl2ZXJzaW9ucz0iJChQeUdpVmVyc2lvbnMgIiRm
IikiIHx8IHZlcnNpb25zPQogCW91dD0iJChjYXQgIiRmIiB8IGdyZXAgLUUgLW8gIiRrZXl3b3Jk
W1s6c3BhY2U6XV0qW0EtWmEtejAtOSAsXSoiIHwgc2VkIC1lICcKIAkgICAgczonIiRrZXl3b3Jk
IidcKFtBLVphLXogLF0qXCk6XDE6CiAJICAgIHM6IGFzIC4qOjoKQEAgLTQ3LDcgKzU2LDE0IEBA
CiAJCQlpZiBbICQxID0gUGVhcyBdOyB0aGVuCiAJCQkJZWNobyAibGlicGVhcy1weXRob24zLWxv
YWRlciIKIAkJCWZpCi0JCQllY2hvICJ0eXBlbGliKCQxKSIKKwkJCSMgdXNlIHRoZSB2ZXJzaW9u
IGZyb20gZ2kucmVxdWlyZV92ZXJzaW9uKCkgaWYgaXQgaXMgdW5hbWJpZ3VvdXMKKwkJCWxvY2Fs
IHZlcgorCQkJdmVyPSIkKHByaW50ZiAnJXNcbicgIiR2ZXJzaW9ucyIgfCBzZWQgLW4gInMvXiQx
IC8vcCIpIgorCQkJaWYgWyAtbiAiJHZlciIgXSAmJiBbICIkKHByaW50ZiAnJXNcbicgIiR2ZXIi
IHwgd2MgLWwpIiA9IDEgXTsgdGhlbgorCQkJCWVjaG8gInR5cGVsaWIoJDEpID0gJHZlciIKKwkJ
CWVsc2UKKwkJCQllY2hvICJ0eXBlbGliKCQxKSIKKwkJCWZpCiAJCWRvbmUKIAlkb25lCiAKLS0t
IGEvdXNyL2xpYi9ycG0vcnBtLWJ1aWxkLWdpci5mdW5jdGlvbnMKKysrIGIvdXNyL2xpYi9ycG0v
cnBtLWJ1aWxkLWdpci5mdW5jdGlvbnMKQEAgLTI1LDcgKzI1LDkgQEAKIHdoaWxlIHJlYWQgcmVx
OyBkbwogICAgIGlmIFsgLW4gIiR7UlBNX1RZUEVMSUJfUkVRX1NLSVBMSVNULX0iIF07IHRoZW4K
IAkgICAgZm9yIHNraXAgaW4gJFJQTV9UWVBFTElCX1JFUV9TS0lQTElTVDsgZG8KLQkJaWYgWyAt
eiAiJHtyZXEjIyRza2lwfSIgXTsgdGhlbgorCQkjIHZlcnNpb25lZCByZXFzIGxvb2sgbGlrZSAi
dHlwZWxpYihGb28pID0gMS4wIjogbWF0Y2ggdGhlIG5hbWUgdG9vCisJCW5hbWU9IiR7cmVxJSUg
Kn0iCisJCWlmIFsgLXogIiR7cmVxIyMkc2tpcH0iIF0gfHwgWyAteiAiJHtuYW1lIyMkc2tpcH0i
IF07IHRoZW4KIAkJICAgIERlYnVnICJza2lwcGVkICRyZXEgZHVlIHRvIFJQTV9UWVBFTElCX1JF
UV9TS0lQTElTVCBwYXR0ZXJuICRza2lwIgogCQkgICAgY29udGludWUgMgogCQlmaQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>