программа, у которой в BuildRequires java-devel, собирается в hasher, получая зависимость /usr/lib/jvm/java-1.6.0-sun-1.6.0.14/jre/lib/i386/client/libjvm.so(SUNWprivate_1.1) , но никто такой не предоставляет.
путь /usr/lib/jvm/java-1.6.0-sun-1.6.0.14 очевидно будет сломан при обновлении :( если уже и писать что-то в rpath, то советую писать /usr/lib/jvm/java-1.6.0-sun/jre/lib/i386/client, и такую зависимость фильтровать вручную.
(В ответ на комментарий №1) > и такую зависимость фильтровать вручную. Как?
А есть разница, с чем линковать? client/libjvm.so или server/libjvm.so ? А то server/libjvm.so(SUNWprivate_1.1) провайдиться, но, похоже, просто при сборке подгребается client/libjvm.so, т.к. порядок поиска библиотеки такой
*** Bug 21813 has been marked as a duplicate of this bug. ***
точнее /usr/lib/jvm/java-1.6.0/jre/lib/i386/client так как в openjdk она тоже есть. а фильтровать можно так: # HACK around find-requires %define __find_requires $RPM_BUILD_ROOT/.find-requires cat > $RPM_BUILD_ROOT/.find-requires <<EOF #!/bin/sh (/usr/lib/rpm/find-requires | grep -v /usr/lib/jvm/java) || : EOF chmod 755 $RPM_BUILD_ROOT/.find-requires # end HACK around find-requires
разница в стратегии импльзования памяти. для настольных приложений лучше client/
*** Bug 21814 has been marked as a duplicate of this bug. ***
> > другими словами, > > автоматическая зависимость кривая, > Дык, исправляйте. Я не Sun, исправить не могу. рано еще libjvm.so лежать в %_libdir. > > ее надо отфильтровать > Как? см. выше пост. > и вручную написать requires: java-1.6.0 Как мне в спеке автоматом узнать, что нужно именно 1.6.0 писать? напишите requires: java. Если хотите, вручную писать Requires: libjvm.so(SUNWprivate_1.1) то я добавлю Provides: libjvm.so(SUNWprivate_1.1) (не во всех java она есть, напр. в java-1.5.0-gcj нет)
> Я не Sun, исправить не могу. Почему? server/libjvm.so провайдиться, значит и client/libjvm.so может
Эти - /usr/lib/jvm/java-1.6.0-sun-1.6.0.14/jre/lib/amd64/server/libjvm.so()(64bit) /usr/lib/jvm/java-1.6.0-sun-1.6.0.14/jre/lib/amd64/server/libjvm.so(SUNWprivate_1.1)(64bit) мусор, случайно зацепило. надо бы их отфильтровать. они очевидно сломаются для java-1.6.0-sun-1.6.0.15.
(В ответ на комментарий №9) > Как мне в спеке автоматом узнать, что нужно именно 1.6.0 писать? > напишите requires: java. т.е. при установке любой другой java программа начнет просто валиться?
(В ответ на комментарий №9) > Если хотите, вручную писать Requires: libjvm.so(SUNWprivate_1.1) Как мне автоматом в спеке узнать, какой "чтонибудь(чтото)" добавить в зависимости? Если будет какой-то макрос (его значение не важно, лишь бы привязывал правильно к нужному пакету), то можно будет Requires: %этот_макрос
я подумал немного, и решил вам посоветовать линковаться с java 1.6.0 openjdk. это имеет то преимущество, что линковочный путь там определен и не скачет от версии к версии. java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server на x86_64 client/*.so нет, там только server. но если хотите на i386 линковаться с client/*.so могу добавить provides.
(В ответ на комментарий №14) > но если хотите на i386 линковаться с client/*.so > могу добавить provides. Я везде хочу с client/livjvm.so Это бэкенд sesame2 из soprano (сейчас не собирается)
если точнее, у меня репозиторий soprano-backend-sesame2
(В ответ на комментарий №15) > > но если хотите на i386 линковаться с client/*.so > Я везде хочу с client/livjvm.so > Это бэкенд sesame2 из soprano (сейчас не собирается) напомню, что на amd64 client/livjvm.so нет. и все настольные приложения прекрасно работают с server/libjvm.so
(В ответ на комментарий №17) > напомню, что на amd64 client/livjvm.so нет. > и все настольные приложения прекрасно работают с server/libjvm.so Тогда нужно сделать так, чтоб cmake(в моем случае; /usr/share/CMake/Modules/FindJNI.cmake) не находил client/livjvm.so, раз собирать с ней нельзя
SET(JAVA_JVM_LIBRARY_DIRECTORIES) FOREACH(dir ${JAVA_AWT_LIBRARY_DIRECTORIES}) SET(JAVA_JVM_LIBRARY_DIRECTORIES ${JAVA_JVM_LIBRARY_DIRECTORIES} "${dir}" "${dir}/client" "${dir}/server" ) ENDFOREACH(dir) Предлагается вычеркнуть client вообще или как?
почему нельзя? можно. вопрос был о автоматических requires. если не хотите их отфильтровать в ручную как в #5, тогда подождите пару дней, я соберу java-1.6.0-openjdk и добавлю туда явные provides чтобы погасить автоматические requires:
(В ответ на комментарий №20) > если не хотите их отфильтровать в ручную как в #5, Я согласен на любой кривохак(т.к. не моя ответственность), но чтоб он _работал_ и в автоматическом режиме. Конечно, лучше, чтоб красиво было.
rpmquery --provides -p java-1.6.0-openjdk-1.6.0.0-alt11_19.b14jpp6.x86_64.rpm G libjvm /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so()(64bit) /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so(SUNWprivate_1.1)(64bit) сделал, ловите в сизифе!
java-1.6.0-openjdk-1.6.0.0-alt11_19.b14jpp6 fixed