On Tue, Aug 03, 2004 at 01:21:30PM +0400, Vladimir Lettiev wrote: > >У перла как бы всё время немножко едет ABI. Поэтому часть модулей, > >собранных с более ранним перлом, может перестать работать (зависимость > >на libperl.so.5.8 не является достаточно жёсткой). Однако же такие > >модули успешно пересобираются с новым перлом. > > Чего-то я не понимаю. Идём по ссылке > http://search.cpan.org/~nwclark/perl-5.8.5/pod/perl585delta.pod > И видим "There are no changes incompatible with 5.8.4.". Думаете обманывают? Могут обмануть. :) При обновлении perl-5.8.0 -> perl-5.8.1 перестали работать некоторые модули, собранные с perl-5.8.0 (в частности, HTML::Parser), хотя бинарная совместимость подразумевалась. Это обнаружили в Debian Team. mod_perl при обновлении перла тоже иногда подвержен segfault'ам. > >Как определить модули, которые перестали работать после обновления > >перла? У модулей есть тесты, которые выполняются на стадии сборки. > >Можно было бы паковать их в RPM пакеты. А можно придумать механизм, > >который извлекает эти тесты из perl-*.src.rpm и выполняет. > > Нужно придумать такой механизм и проверить все модули. Если окажутся > нерабочие, повесить на них баги. Нужно тестировать уже установленный, а не свежесобранный модуль. $ rpm -bc ~/RPM/SPECS/perl-Bit-Vector.spec ... PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/00____version....ok t/01________new....ok t/02____destroy....ok t/03_operations....ok t/04__functions....ok t/05_____primes....ok t/06_____subset....ok t/07____compare....ok t/08_____resize....ok t/09_parameters....ok t/10__intervals....ok t/11______shift....ok t/12_____string....ok t/13__increment....ok t/14______empty....ok t/15________add....ok t/16___subtract....ok t/17________gcd....ok t/28__chunklist....ok t/30_overloaded....ok All tests successful. ... $ Это протестировался свежесобранный модуль. Чтобы протестировать уже установленный модуль, нужно убрать из команды blib/lib и blib/arch: $ cd ~/RPM/BUILD/Bit-Vector-6.3 $ PERL_DL_NONLAZY=1 /usr/bin/perl -MExtUtils::Command::MM -e test_harness */*.t t/00____version....ok t/01________new....ok ... All tests successful. $ А это протестировался уже установленный perl-Bit-Vector-6.3-alt2. Т.е. он продолжает работать, несмотря на то, что был собран с perl-5.8.0. Действительно, в тестах был задействован уже установленный модуль: $ PERL_DL_NONLAZY=1 filereq /dev/stdout /usr/bin/perl -MExtUtils::Command::MM -e test_harness */*.t | grep Bit/Vector /usr/lib/perl5/vendor_perl/i386-linux/Bit/Vector.pm /usr/lib/perl5/vendor_perl/i386-linux/Bit/Vector/Overload.pm /usr/lib/perl5/vendor_perl/i386-linux/auto/Bit/Vector /usr/lib/perl5/vendor_perl/i386-linux/auto/Bit/Vector/Vector.so $ Поэтому для проверки уже собранных модулей можно сделать примерно следущее: $ rpm -bp --define '__spec_prep_post PERL_DL_NONLAZY=1 %__perl -MExtUtils::Command::MM -e test_harness */*.t' ~/RPM/SPECS/perl-Bit-Vector.spec ... Source #0 (Bit-Vector-6.3.tar.gz): + /bin/gzip -dc /home/at/RPM/SOURCES/Bit-Vector-6.3.tar.gz + /bin/tar -xf - + cd Bit-Vector-6.3 + /bin/chmod -Rf u+rwX,go-w . + PERL_DL_NONLAZY=1 + /usr/bin/perl -MExtUtils::Command::MM -e test_harness t/00____version.t t/01________new.t t/02____destroy.t t/03_operations.t t/04__functions.t t/05_____primes.t t/06_____subset.t t/07____compare.t t/08_____resize.t t/09_parameters.t t/10__intervals.t t/11______shift.t t/12_____string.t t/13__increment.t t/14______empty.t t/15________add.t t/16___subtract.t t/17________gcd.t t/28__chunklist.t t/30_overloaded.t t/00____version....ok ... All tests successful. Files=20, Tests=67417, 120 wallclock secs (12.22 cusr + 0.43 csys = 12.65 CPU) $ Т.е. определили команду __spec_prep_post, которая будет выполняться сразу после %setup. Теперь надо подумать, как это всё автоматизировать. > -- > С уважением, Владимир Леттиев aka crux