From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: at@turbinal.org Date: Thu, 31 Oct 2002 02:44:53 +0300 To: devel@altlinux.ru Subject: Re: [devel] /usr/lib/rpm/perl.req -- patch Message-ID: <20021030234453.GA6989@homestead.turbinal.org> Mail-Followup-To: devel@altlinux.ru References: <20021029232742.GA18900@homestead.turbinal.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="HcAYCG3uE/tztfnV" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20021029232742.GA18900@homestead.turbinal.org> Sender: devel-admin@altlinux.ru Errors-To: devel-admin@altlinux.ru X-BeenThere: devel@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: devel@altlinux.ru List-Unsubscribe: , List-Id: List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: List-Post: --HcAYCG3uE/tztfnV Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit 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, я попробую быстро добиться приемлемой его работы на всем, что мы собираем (нужно подтверждение). --HcAYCG3uE/tztfnV Content-Type: text/plain; charset=koi8-r Content-Disposition: attachment; filename="perl.req.patch" --- 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 +# modified by Alexey Tourbin + +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"); --HcAYCG3uE/tztfnV--