[devel] Perl BEGIN
Vladimir Lettiev
thecrux на gmail.com
Чт Сен 18 17:23:42 MSK 2014
On Fri, Sep 12, 2014 at 03:50:59PM +0400, akv на altlinux.org wrote:
>
> При попытке сборки perl-пакета появляется такая ошибка
>
> Subroutine _ReferenceId redefined at /tmp/.private/akv/request-tracker-buildroot/usr/lib/rt/lib/RT/Principal_Overlay.pm line 632.
> /tmp/.private/akv/request-tracker-buildroot/usr/lib/rt/lib/RT/ACE_Overlay.pm syntax OK
> Can't locate object method "RegisterCacheHandler" via package "RT::ACE" at /tmp/.private/akv/request-tracker-buildroot/usr/lib/rt/lib/RT/Principal.pm line 72.
> Compilation failed in require at /tmp/.private/akv/request-tracker-buildroot/usr/lib/rt/lib/RT/Principals.pm line 75.
> BEGIN failed--compilation aborted at /tmp/.private/akv/request-tracker-buildroot/usr/lib/rt/lib/RT/Principals.pm line 75.
> Compilation failed in require at /tmp/.private/akv/request-tracker-buildroot/usr/lib/rt/lib/RT/User.pm line 83.
> BEGIN failed--compilation aborted at /tmp/.private/akv/request-tracker-buildroot/usr/lib/rt/lib/RT/User.pm line 83.
> Compilation failed in require at /tmp/.private/akv/request-tracker-buildroot/usr/lib/rt/lib/RT/Record.pm line 74.
> Compilation failed in require at (eval 35) line 2.
> ...propagated at /usr/share/perl5/base.pm line 84.
> BEGIN failed--compilation aborted at /tmp/.private/akv/request-tracker-buildroot/usr/lib/rt/lib/RT/ACE.pm line 66.
> Compilation failed in require at /tmp/.private/akv/request-tracker-buildroot/usr/lib/rt/lib/RT/ACL.pm line 70.
> BEGIN failed--compilation aborted at /tmp/.private/akv/request-tracker-buildroot/usr/lib/rt/lib/RT/ACL.pm line 70.
> # perl(RT/ACE.pm) at line 70 (depth 3) not loaded at BEGIN SKIP
> # perl(RT/ACE.pm) at line 70 (depth 3) not loaded at BEGIN SKIP
> # /tmp/.private/akv/request-tracker-buildroot/usr/lib/rt/lib/RT/ACL.pm: deparse failed, trying to recover with -MRT
...
> Но там не сказано как решить проблему. Что нужно сделать с этими BEGIN чтобы всё собралось у нас? Или может дело не только в BEGIN?
Тут какие-то запутанные внутренние зависимости модулей, не совсем понятно
как это всё может запускаться и работать.
На такие случаи есть костыли разного размера.
1. Хак с установкой переменных окружения перед запуском депарсера:
%define __spec_autodep_custom_pre export %PERL5OPT='-MRT::ACE'
В данном примере, устанавливается предварительная загрузка модуля RT::ACE
при запуске perl. Это может развязать зациклившийся клубок зависимостей
или нет, как повезёт. Возможно потребуется предзагрузить какие-то другие
модули.
2. Также есть костыль с исключением некоторых файлов из поиска
зависимостей:
%add_findreq_skiplist */RT/ACL.pm
В этом случае потерявшиеся зависимости придётся указывать в спеке руками.
3. Глобальный костыль, который заставляет игнорировать все ошибки при
поиске зависимостей:
%define _perl_req_method relaxed
--
Vladimir Lettiev aka crux ✉ theCrux на gmail.com
Подробная информация о списке рассылки Devel