Bug 29222

Summary: При конвертации в x86_64-i586 теряются зависимости pkgconfig
Product: Sisyphus Reporter: Vitaly Lipatov <lav>
Component: rpmrebuild-arepoAssignee: placeholder <placeholder>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: glebfm, ldv, placeholder, vitty
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on: 38856    
Bug Blocks:    

Description Vitaly Lipatov 2013-07-24 11:59:39 MSK
В 64-битной системе:
$ rpm -q --requires libgphoto2-devel
libgphoto2 = 2.5.2-alt1
/bin/sh  
/usr/lib64/pkgconfig  
coreutils  
pkgconfig(libexif) >= 0.6.13

Для сконвертированного i586- теряется зависимость pkgconfig(libexif)
и сборка ломается из-за отсутствия i586-libexif-devel
$ rpm -q --requires i586-libgphoto2-devel
libgphoto2-devel = 2.5.2-alt1
i586-libgphoto2 = 2.5.2-alt1
Comment 1 Dmitry V. Levin 2013-07-24 13:29:15 MSK
Если бы в i586-libexif-devel зависимость pkgconfig(libexif) сохранилась, это бы ничего не изменило, поскольку в libexif-devel такая зависимость уже есть.
Comment 2 Vitaly Lipatov 2013-07-24 20:46:26 MSK
Видимо, задачу можно было бы решить предоставлением i586-pkgconfig(libexif) в i586-libexif-devel и сохранении в i586-libgphoto2-devel зависимости на pkgconfig в сконвертированном к этому формату виде.

В каждом из пакетов мы имеем соответствующий libexif.pc:
/usr/lib64/pkgconfig/libexif.pc
/usr/lib/pkgconfig/libexif.pc
Видимо, разница их архитектур должна быть отражена в provides?
Comment 3 Dmitry V. Levin 2013-08-01 16:25:13 MSK
Какая-то сложная логика получается: если выполнены все нижеперечисленные условия:
- пакет L.i586 contains /usr/lib/pkgconfig/foo.pc
- пакет L.i586 provides pkgconfig(foo)
- пакет L.x86_64 contains /usr/lib64/pkgconfig/foo.pc
- пакет L.x8664 provides pkgconfig(foo),
то в пакет i586-L.i586 следует добавить provides i586-pkgconfig(foo)?

Далее, если пакет C.i586 requires pkgconfig(foo), и при этом какой-то пакет i586-L.i586 provides i586-pkgconfig(foo), то в пакет i586-C.i586 следует добавить requires i586-pkgconfig(foo)?
Comment 4 Vitaly Lipatov 2013-08-02 01:40:16 MSK
В других системах это вообще никак не продумано.

Fedora 19:
# rpm -q --provides libpng-devel-1.5.13-2.fc19.i686
libpng-devel = 2:1.5.13-2.fc19
libpng-devel(x86-32) = 2:1.5.13-2.fc19
pkgconfig(libpng) = 1.5.13
pkgconfig(libpng15) = 1.5.13

# rpm -q --provides libpng-devel-1.5.13-2.fc19.x86_64
libpng-devel = 2:1.5.13-2.fc19
libpng-devel(x86-64) = 2:1.5.13-2.fc19
pkgconfig(libpng) = 1.5.13
pkgconfig(libpng15) = 1.5.13

При этом у пакетов разных архитектур одинаковые зависимости:
# rpm -q --requires gtk2-devel-0:2.24.19-3.fc19.x86_64 | grep png
libpng-devel

# rpm -q --requires gtk2-devel-0:2.24.19-3.fc19.i686 | grep png
libpng-devel

В SUSE вообще очень неполноценно:
SUSE 12:
# rpm -q --provides libpng14-devel-32bit-1.4.11-2.5.1.x86_64
libpng14-devel-32bit = 1.4.11-2.5.1
libpng14-devel-32bit(x86-32) = 1.4.11-2.5.1

# rpm -q --provides libpng14-devel-1.4.11-2.5.1.x86_64
pkgconfig(libpng14) = 1.4.11
libpng14-devel = 1.4.11-2.5.1
libpng14-devel(x86-64) = 1.4.11-2.5.1
Comment 5 Vitaly Lipatov 2013-08-02 01:47:48 MSK
(В ответ на комментарий №3)
> то в пакет i586-L.i586 следует добавить provides i586-pkgconfig(foo)?
> 
> то в пакет i586-C.i586 следует добавить requires i586-pkgconfig(foo)?

Один вариант — для 64-битной платформы стоит переделать все pkgconfig(some) на pkgconfig64(some). Это сохранит возможность ставить неисправленные 32-битные devel-пакеты, но добавит лишнюю несовместимость для 64-битной архитектуры.

Но раз это не нужно, стоит без условий из i586-libNAME-devel делать provides i586-pkgconfig и ставить i586-pkgconfig requires.

Вообще мне казалось, что в какой-то момент pkgconfig стали становиться архитектурно независимым (в /usr/share/pkgconfig).