Bug 11936 - unversioned perl provides
: unversioned perl provides
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/subversion-perl)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2007-05-31 19:50 by
Modified: 2008-12-12 20:35 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2007-05-31 19:50:43
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 From 2007-06-01 12:39:18 -------
и с Pushmi на такое напоролся...
в общем, надо фиксить.
------- Comment #2 From 2007-06-10 22:31:01 -------
Текущими средствами, действительно, не удается выцепить версию.
Сейчас поиск версий 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 From 2007-07-04 20:47:22 -------
Ну что, какие ещё мнения есть на этот счет?

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

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

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 From 2008-11-05 20:25:01 -------
я пока разобраться не могу, кому что не нравится. напрямую 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 From 2008-12-12 20:32:43 -------
отправил в сизиф subversion-1.5.4-alt3, у него получилось заставить perl.prov
вычислит версию для SVN::Core

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