[devel] perl.{req,prov} improvements

Mikhail Zabaluev =?iso-8859-1?q?mookid_=CE=C1_sigent=2Eru?=
Чт Ноя 30 13:32:29 MSK 2000


Доброе время суток.

Предлагаются новые доработки скриптов автоматического поиска зависимостей
для rpm. Теперь perl.req записывает в зависимости только те файлы,
которые существуют в системе или устанавливаются текущей сборкой.
Не знаю, насколько это хорошо идеологически, но позволяет избавиться от
некоторых совсем фантомных зависимостей.

Дмитрию: c find-{provides,requires} была проблема, они дают
начальную пустую строку на вход этих скриптов. Я от этого защитился, но
все же лучше формировать списки так (поскольку порядок неважен):

LIST_PERL="$f
$LIST_PERL"

-- 
Stay tuned,
  MhZ                                    mailto:mookid на sigent.ru
-----------
Neurotics build castles in the sky,
Psychotics live in them,
And psychiatrists collect the rent.
----------- следующая часть -----------
--- perl.req.orig	Thu Nov 30 12:32:34 2000
+++ perl.req	Thu Nov 30 13:01:51 2000
@@ -58,15 +58,37 @@
 }
 
 
+# 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;
+
+
 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;
+    }
+  }
+  next unless $found;
+
   if (length($require{$module}) == 0) {
     print "perl($module)\n";
   } else {
-
-    # I am not using rpm3.0 so I do not want spaces arround my
-    # operators. Also I will need to change the processing of the
-    # $RPM_* vairable when I upgrage.
-
     print "perl($module) >= $require{$module}\n";
   }
 }
@@ -80,6 +102,8 @@
   my ($file) = @_;
   chomp($file);
 
+  return if $file eq '';
+
   open(FILE, "<$file")||
     die("$0: Could not open file: '$file' : $!\n");
   
@@ -147,11 +171,6 @@
 
       next if $2 eq '"' && $module =~ /\$/;
 
-      # ignore files with non-perl suffixes because they will not be detected
-      # by find-provides
-
-      next unless $module =~ /\.p[lmh]/;
-
       $module = File::Spec->canonpath($module);
 
       if (File::Spec->file_name_is_absolute) {
@@ -164,7 +183,7 @@
 
       # unsure what to do with paths that lead to parent directories
 
-      next if $module =~ /\.\.\//;
+      next if $module =~ /(^|\/)\.\.\//;
 
       # otherwise, continue with $module set
 
@@ -210,7 +229,7 @@
 
 sub package_version {
   my $version = shift;
-  if ($version =~ s/^v// || $version =~ /\.\d+\./) {
+  if ($version =~ s/^v// || $version =~ /\.[\d_]+\./) {
     return "1:$version";
   }
   else {
--- perl.prov.orig	Thu Nov 30 13:00:32 2000
+++ perl.prov	Thu Nov 30 13:00:39 2000
@@ -124,6 +124,8 @@
   my ($file) = @_;
   chomp $file;
 
+  return if $file eq '';
+
   # find the longest matching prefix among Perl library search directories
 
   my $prefix = '';


Подробная информация о списке рассылки Devel