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