[devel] /usr/lib/rpm/perl.req -- patch
=?iso-8859-1?q?at_=CE=C1_turbinal=2Eorg?=
=?iso-8859-1?q?at_=CE=C1_turbinal=2Eorg?=
Чт Окт 31 02:44:53 MSK 2002
On Wed, Oct 30, 2002 at 02:27:42AM +0300, at на turbinal.org wrote:
> Я вчитался в perl.req. Выяснилось, что он натурально зарубает все
> перловые зависимости, которые не предоставляются в среде сборки (а также
> самим пакетом). Например, если в среде сборки нет ничего кроме
> perl-base и perl-devel, тогда в requires у пакета окажутся зависимости
> вида perl(XXX.pm) только из perl-base и perl-devel.
>
> Из-за этого все зависимости, в сущности, идут лесом. Даже если в среде
> сборки установлен полный комплект perl-* пакетов дистрибутива, это,
> вообще говоря, никак не гарантирует работоспособность пакетов.
>
> Как удалось выяснить, это ALT-specific (в rpm-4.0.4-19mdk такого нет).
>
> Какие будут мнения по этому вопросу?
Если веских мнений нет, я выскажу свое веское мнение: поиск зависимостей
нужно включить. Как это сделать -- см. патч. С ним всё "честно"
собирается и все зависимости проставляются правильно.
Возникает только проблема условных зависимостей. Например, в CGI.pm
написано:
if ($ENV{...}) {
require Apache;
} elsif ($ENV{...}) {
require FCGI;
}
Таким образом, при "правильном" поиске зависимостей пакет perl-CGI
потянет за собой пакеты apache-mod_perl и mod_fcgi, что несколько
странно. В целом, настолько сильные зависимости были бы неприемлемы.
Кстати, сейчас в perl-CGI зависимость на apache-mod_perl отсутствует
только потому, что apache-mod_perl не установлен в среде сборки.
Я посмотрел, как это сделано в rpm-*mdk. Там используется такое
наблюдение, что условные зависимости (require) обычно начинаются с
отступа. Всё это абсолютно в духе грязного хака, но пока это лучшее, что
можно придумать. Если мне дадут возможность отхачить perl.req, я
попробую быстро добиться приемлемой его работы на всем, что мы собираем
(нужно подтверждение).
----------- следующая часть -----------
--- perl.req 2002-10-11 14:31:38 +0400
+++ perl.req 2002-10-31 00:52:07 +0300
@@ -39,9 +39,43 @@
# by Ken Estes Mail.com kestes на staff.mail.com
# modified by Mikhail Zabaluev <mookid на mu.ru>
+# modified by Alexey Tourbin <at на turbinal.org>
+
+use 5.005; # qr
+use Getopt::Long;
+GetOptions("debug" => \my $debug);
+if ($debug) {
+ require IO::Handle;
+ STDOUT->autoflush(1);
+ STDERR->autoflush(1);
+ warn "debug mode enabled\n";
+}
require File::Spec;
+my @ignore_files = (
+ qr(/usr/share/doc/),
+ qr(/[Dd]emos?/),
+);
+my @ignore_reqs = (
+ qr(^Makefile\b),
+# OS-specific
+ qr(^machine/ansi\b),
+ qr(^sys/systeminfo\b),
+ qr(^vmsish\b),
+ qr(^MacPerl\b),
+ qr(^VMS/),
+ qr(^OS2/),
+ qr(^Mac/),
+ qr(^ExtUtils/XSSymSet\b),
+ qr(^Convert/EBCDIC\b),
+# old names
+ qr(^Digest/Perl/MD5\b),
+ qr(^Pod/PlainText\b),
+# wrong names
+ qr(/\.),
+ qr(\$),
+);
if (@ARGV) {
foreach (@ARGV) {
@@ -57,35 +91,14 @@
}
}
-
-# obtain the list of library directories. If not provided, use @INC
-
-if (exists $ENV{RPM_PERL_LIB_PATH}) {
- @perl_inc = split(/[:,\s]+/, $ENV{RPM_PERL_LIB_PATH});
-}
-else {
- @perl_inc = grep { m|^/| } @INC;
-}
-
-# add installation mirrors to the library search list
-
-my $buildroot = $ENV{RPM_BUILD_ROOT};
-push @perl_inc, map { "${buildroot}$_" } @perl_inc;
-
-
+MODULE:
foreach $module (sort keys %require) {
-
- # search for the file to be installed in the system or in this same package
-
- my $found = 0;
- for (@perl_inc) {
- if (-e "$_/$module") {
- $found = 1;
- last;
- }
+ for my $re (@ignore_reqs) {
+ if ($module =~ $re) {
+ warn "module $module matches $re; skip\n" if $debug;
+ next MODULE;
+ }
}
- next unless $found;
-
if (length($require{$module}) == 0) {
print "perl($module)\n";
} else {
@@ -104,6 +117,13 @@
return if $file eq '';
+ foreach my $re (@ignore_files) {
+ if ($file =~ $re) {
+ warn "file $file matches $re; skip\n" if $debug;
+ return;
+ }
+ }
+
open(FILE, "<$file")||
die("$0: Could not open file: '$file' : $!\n");
Подробная информация о списке рассылки Devel