ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: at@turbinal.org
To: devel@altlinux.ru
Subject: Re: [devel] /usr/lib/rpm/perl.req -- patch
Date: Thu, 31 Oct 2002 02:44:53 +0300
Message-ID: <20021030234453.GA6989@homestead.turbinal.org> (raw)
In-Reply-To: <20021029232742.GA18900@homestead.turbinal.org>

[-- Attachment #1: Type: text/plain, Size: 1779 bytes --]

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, я
попробую быстро добиться приемлемой его работы на всем, что мы собираем
(нужно подтверждение).


[-- Attachment #2: perl.req.patch --]
[-- Type: text/plain, Size: 2050 bytes --]

--- 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");
   

  parent reply	other threads:[~2002-10-30 23:44 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-10-29 23:27 [devel] /usr/lib/rpm/perl.req -- ахтунг! at
2002-10-30  0:58 ` at
2002-10-30  8:05   ` Alexey Morozov
2002-10-30 17:23     ` at
2002-10-30 23:44 ` at [this message]
2002-10-31  0:19   ` [devel] /usr/lib/rpm/perl.req -- patch at
2002-10-31  0:32     ` Dmitry V. Levin
2002-10-31  1:15       ` at
2002-11-02  9:27         ` [devel] " Mikhail Zabaluev
2002-10-31  0:22   ` [devel] " Dmitry V. Levin
2002-11-02  9:49   ` [devel] " Mikhail Zabaluev
2002-11-02 14:01     ` at
2002-11-02 15:18         ` Alexey Tourbin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20021030234453.GA6989@homestead.turbinal.org \
    --to=at@turbinal.org \
    --cc=devel@altlinux.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git