[devel] perl-Net-DNS

Alexey Tourbin at at altlinux.ru
Sat Oct 3 04:33:47 UTC 2009


On Fri, Oct 02, 2009 at 03:50:45PM +0300, Victor Forsyuk wrote:
> Лучше объясните мне, не сильно шарящему в перле, отчего perl-Net-DNS версии
> 0.65 взрывается на Вашей perl.req'овской проверке? С 0.63 всё было
> нормально.

Потому что там некоторые модули невозможно загрузить, из-за сложных
циклических зависимостей между базовыми классами и подклассами.

[builder at people Net-DNS-0.65]$ perl -Ilib -MNet::DNS::Resolver -e1
[builder at people Net-DNS-0.65]$ perl -Ilib -MNet::DNS::Resolver::Base -e1
Can't locate object method "read_config_file" via package "Net::DNS::Resolver" at lib/Net/DNS/Resolver/UNIX.pm line 24.
Compilation failed in require at lib/Net/DNS.pm line 91.
BEGIN failed--compilation aborted at lib/Net/DNS.pm line 91.
Compilation failed in require at lib/Net/DNS/Resolver/Base.pm line 24.
BEGIN failed--compilation aborted at lib/Net/DNS/Resolver/Base.pm line 24.
Compilation failed in require.
BEGIN failed--compilation aborted.
[builder at people Net-DNS-0.65]$ perl -Ilib -MNet::DNS::Resolver::UNIX -e1
Can't locate object method "init" via package "Net::DNS::Resolver" at lib/Net/DNS/Resolver.pm line 24.
Compilation failed in require at lib/Net/DNS.pm line 91.
BEGIN failed--compilation aborted at lib/Net/DNS.pm line 91.
Compilation failed in require at lib/Net/DNS/Resolver/Base.pm line 24.
BEGIN failed--compilation aborted at lib/Net/DNS/Resolver/Base.pm line 24.
Compilation failed in require at lib/Net/DNS/Resolver/UNIX.pm line 9.
BEGIN failed--compilation aborted at lib/Net/DNS/Resolver/UNIX.pm line 9.
Compilation failed in require.
BEGIN failed--compilation aborted.
[builder at people Net-DNS-0.65]$ 

То есть тут не только циклические зависимости между модулями существуют,
но и на стадии загрузки/проверки синтаксиса выполняется код
инициализации (read_config_file и init) -- в ситуации, когда модули
загружены ещё не до конца.

Локально разорвать циклические зависимости у меня не получилось,
а глобальное перетряхивание в наши планы не входит.  Но я заметил,
что если первым загрузить титульный модуль Net::DNS, то всё
инициализируется в более-менее правильном порядке, и повторная
загрузка модулей (которые уже загружены) к падениям не приводит.

[builder at people Net-DNS-0.65]$ perl -Ilib -MNet::DNS -MNet::DNS::Resolver::Base -e1
[builder at people Net-DNS-0.65]$ perl -Ilib -MNet::DNS -MNet::DNS::Resolver::UNIX -e1
[builder at people Net-DNS-0.65]$ 

Поэтому могу предложить такой хак:

%define __spec_autodep_custom_pre export PERL5OPT='-I%buildroot%perl_vendor_archlib -MNet::DNS'

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.altlinux.org/pipermail/devel/attachments/20091003/79814ae8/attachment.bin>


More information about the Devel mailing list