В 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
Если бы в i586-libexif-devel зависимость pkgconfig(libexif) сохранилась, это бы ничего не изменило, поскольку в libexif-devel такая зависимость уже есть.
Видимо, задачу можно было бы решить предоставлением i586-pkgconfig(libexif) в i586-libexif-devel и сохранении в i586-libgphoto2-devel зависимости на pkgconfig в сконвертированном к этому формату виде. В каждом из пакетов мы имеем соответствующий libexif.pc: /usr/lib64/pkgconfig/libexif.pc /usr/lib/pkgconfig/libexif.pc Видимо, разница их архитектур должна быть отражена в provides?
Какая-то сложная логика получается: если выполнены все нижеперечисленные условия: - пакет 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)?
В других системах это вообще никак не продумано. 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
(В ответ на комментарий №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).