[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