Bug 11936 - unversioned perl provides
Summary: unversioned perl provides
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: subversion-perl (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: Andrey Cherepanov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-05-31 19:50 MSD by viy
Modified: 2008-12-12 20:35 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description viy 2007-05-31 19:50:43 MSD
subversion-perl provides unversioned perl modules:
rpmquery --provides subversion-perl 
...
perl(SVN/Base.pm)  
perl(SVN/Client.pm)  
perl(SVN/Core.pm)  
perl(SVN/Delta.pm)  
perl(SVN/Fs.pm)  
perl(SVN/Ra.pm)  
perl(SVN/Repos.pm)  
perl(SVN/Wc.pm)  

so we have errors like

error: failed dependencies:
        perl(SVN/Core.pm) >= 1.200 is needed by perl-SVN-Mirror-0.73-alt1
Comment 1 viy 2007-06-01 12:39:18 MSD
и с Pushmi на такое напоролся...
в общем, надо фиксить.
Comment 2 at@altlinux.org 2007-06-10 22:31:01 MSD
Текущими средствами, действительно, не удается выцепить версию.
Сейчас поиск версий provides идет чисто текстуально:

$VERSION = число
$Название::Этого::Пакета::VERSION = число
$VERSION = $Название::Другого::Пакета::VERION
$Название::Этого::Пакета::VERSION = $Название::Другого::Пакета::VERSION

В двух последних случаях этот и другой модули должны обрабатываться
одновременно, тогда версия будет обнаружена.

SVN/Core.pm:
# Some build tool hates VERSION assign across two lines.
$SVN::Core::VERSION =
"$SVN::Core::VER_MAJOR.$SVN::Core::VER_MINOR.$SVN::Core::VER_MICRO";

$ perl.prov /usr/lib/perl5/vendor_perl/i386-linux/SVN/Core.pm
# VERSION assignment not recognized at
/usr/lib/perl5/vendor_perl/i386-linux/SVN/Core.pm line 7 (SKIP)
# $SVN::Core::VERSION =
"$SVN::Core::VER_MAJOR.$SVN::Core::VER_MINOR.$SVN::Core::VER_MICRO";
perl(SVN/Core.pm)
$

В принципе можно попробовать загрузить модуль и посмотреть у него версию.  При
этом будет исполнено больше (произвольного) кода, чем при обычном syntax check
(который используется в requires).
Comment 3 at@altlinux.org 2007-07-04 20:47:22 MSD
Ну что, какие ещё мнения есть на этот счет?

Можно в perl.prov прикрутить специально чтобы если версию выцепить не получается
то попрбовать загузить сам модуль и прямо из него взять $VERSION.  Но это очень
некрасиво, а для компилируемых модулей ещё и не надежно.  Нужно учитывать
специфику buildroot, т.е. выставлять LD_LIBRARY_PATH и т.д.  А если там
где-нибудь есть rpath то в билдруте это будет неправильно работать.

Есть альтернативный вариант: подправить SVN/Core.pm во время сборки.  Поскольку
версия во время сборки известна, то можно вместо этого длинного присваивания
прямо проставить версию as is.
Comment 4 viy 2007-07-05 13:29:35 MSD
почему плохо
(поиск версий provides идет чисто текстуально);
if (VERSION assignment not recognized at <file>) {
загружать модуль. 
}
?
Comment 5 Grigory Batalov 2008-10-21 16:31:21 MSD
Передаю мэйнтейнеру
Comment 6 Afanasov Dmitry 2008-11-05 11:42:01 MSK
господа, я планирую зашвырнуть v1.5.4.
что надо сделать с этими provides? провадйить версии модулей, e.g. perl(SVN/Core.pm) = <version>?
Comment 7 viy 2008-11-05 12:17:37 MSK
(In reply to comment #6)
> господа, я планирую зашвырнуть v1.5.4.
> что надо сделать с этими provides? провадйить версии модулей, e.g. perl(SVN/Core.pm) =
> <version>?
вверху по треду Алексей рассказал, как правильно сделать.


Comment 8 Afanasov Dmitry 2008-11-05 20:22:18 MSK
сборка выдает соответсвтующую ругань:

Can't load '/usr/src/tmp/subversion-buildroot/usr/lib/perl5/vendor_perl/i386-linux/auto/SVN/_Core/_Core.so' for module SVN::_Core: libsvn_swig_perl-1.so.0: cannot open shared object file: No such file or directory at /usr/lib/perl5/i386-linux/DynaLoader.pm line 226.
 at /usr/src/tmp/subversion-buildroot/usr/lib/perl5/vendor_perl/i386-linux/SVN/Base.pm line 59
BEGIN failed--compilation aborted at /usr/src/tmp/subversion-buildroot/usr/lib/perl5/vendor_perl/i386-linux/SVN/Core.pm line 5.
Compilation failed in require at /usr/src/tmp/subversion-buildroot/usr/lib/perl5/vendor_perl/i386-linux/SVN/Client.pm line 4.
BEGIN failed--compilation aborted at /usr/src/tmp/subversion-buildroot/usr/lib/perl5/vendor_perl/i386-linux/SVN/Client.pm line 4.
# /usr/src/tmp/subversion-buildroot/usr/lib/perl5/vendor_perl/i386-linux/SVN/Client.pm: deparse failed, but I don't care.

причина: %perl_vendor_build all выдает билиотеки с неверно установленным RPATH, баг #9307
Comment 9 Afanasov Dmitry 2008-11-05 20:25:01 MSK
я пока разобраться не могу, кому что не нравится. напрямую subst 
subst "s/\$SVN::Core::VERSION = .*/\$SVN::Core::VERSION = '$SVN_VER_MAJOR.$SVN_VER_MINOR.$SVN_VER_PATCH';/" Core.pm
я делал, не помогло. perl.prov вообще не отрабатывает svn модули.

в спеке стоит %set_perl_req_method relaxed

i need help :)
Comment 10 Afanasov Dmitry 2008-12-12 20:32:43 MSK
отправил в сизиф subversion-1.5.4-alt3, у него получилось заставить perl.prov вычислит версию для SVN::Core

остальные модули не имеют своих VERSION. стоит ли и SVN::Base и иже с ними версии добавлять?
Comment 11 viy 2008-12-12 20:35:56 MSK
(In reply to comment #10)
> добавлять?
IMHO, если VERSION нет, то и добавлять ее не нужно.
Спасибо!