* [devel] /usr/lib/rpm/perl.req -- ахтунг!
@ 2002-10-29 23:27 at
2002-10-30 0:58 ` at
2002-10-30 23:44 ` [devel] /usr/lib/rpm/perl.req -- patch at
0 siblings, 2 replies; 13+ messages in thread
From: at @ 2002-10-29 23:27 UTC (permalink / raw)
To: devel
Я вчитался в perl.req. Выяснилось, что он натурально зарубает все
перловые зависимости, которые не предоставляются в среде сборки (а также
самим пакетом). Например, если в среде сборки нет ничего кроме
perl-base и perl-devel, тогда в requires у пакета окажутся зависимости
вида perl(XXX.pm) только из perl-base и perl-devel.
Из-за этого все зависимости, в сущности, идут лесом. Даже если в среде
сборки установлен полный комплект perl-* пакетов дистрибутива, это,
вообще говоря, никак не гарантирует работоспособность пакетов.
Как удалось выяснить, это ALT-specific (в rpm-4.0.4-19mdk такого нет).
Какие будут мнения по этому вопросу?
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 {
print "perl($module) >= $require{$module}\n";
}
}
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [devel] /usr/lib/rpm/perl.req -- ахтунг!
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 23:44 ` [devel] /usr/lib/rpm/perl.req -- patch at
1 sibling, 1 reply; 13+ messages in thread
From: at @ 2002-10-30 0:58 UTC (permalink / raw)
To: devel
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.req на предмет ignore VMS*,
Mac* и т.п., то можно будет включить полный поиск зависимостей.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [devel] /usr/lib/rpm/perl.req -- ахтунг!
2002-10-30 0:58 ` at
@ 2002-10-30 8:05 ` Alexey Morozov
2002-10-30 17:23 ` at
0 siblings, 1 reply; 13+ messages in thread
From: Alexey Morozov @ 2002-10-30 8:05 UTC (permalink / raw)
To: devel
On Wed, Oct 30, 2002 at 03:58:05AM +0300, at@turbinal.org wrote:
> > Я вчитался в perl.req. Выяснилось, что он натурально зарубает все
> > перловые зависимости, которые не предоставляются в среде сборки (а также
> > самим пакетом). Например, если в среде сборки нет ничего кроме
> > perl-base и perl-devel, тогда в requires у пакета окажутся зависимости
> > вида perl(XXX.pm) только из perl-base и perl-devel.
> > Какие будут мнения по этому вопросу?
> Предварительный диагноз: если отхачить perl.req на предмет ignore VMS*,
> Mac* и т.п., то можно будет включить полный поиск зависимостей.
А если делать так:
запоминать таблицу загруженных модулей (через %INC),
грузить некоторый модуль, а потом сравнивать %INC с запомненным.
Мне кажется, что у /некоторых/ модулей зависимости могут быть весьма
неявными и совсем не обязательными, то есть, он либо может (с некоторой
усеченной функциональностью) использоваться и без таковых модулей, либо
использует эти необязательные случаи только в экзотических случаях, типа
того же VMS или, например, в mod_perl...
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [devel] /usr/lib/rpm/perl.req -- ахтунг!
2002-10-30 8:05 ` Alexey Morozov
@ 2002-10-30 17:23 ` at
0 siblings, 0 replies; 13+ messages in thread
From: at @ 2002-10-30 17:23 UTC (permalink / raw)
To: devel
On Wed, Oct 30, 2002 at 02:05:22PM +0600, Alexey Morozov wrote:
> > > Я вчитался в perl.req. Выяснилось, что он натурально зарубает все
> > > перловые зависимости, которые не предоставляются в среде сборки (а также
> > > самим пакетом). Например, если в среде сборки нет ничего кроме
> > > perl-base и perl-devel, тогда в requires у пакета окажутся зависимости
> > > вида perl(XXX.pm) только из perl-base и perl-devel.
> > > Какие будут мнения по этому вопросу?
> > Предварительный диагноз: если отхачить perl.req на предмет ignore VMS*,
> > Mac* и т.п., то можно будет включить полный поиск зависимостей.
> А если делать так:
> запоминать таблицу загруженных модулей (через %INC),
> грузить некоторый модуль, а потом сравнивать %INC с запомненным.
Проблема здесь в том, что загрузка произвольного модуля эквивалента
исполнению произвольного кода в окружении сборки. В меньшей степени это
касается make test. Можно попробовать ограничить определенную активность
кода с помощью Safe(3) и Opcode(3).
Но вообще же, это никак не решает поставленную мной проблему, ибо
очевидно, что в %INC ничего кроме окружения сборки оказаться не может.
> Мне кажется, что у /некоторых/ модулей зависимости могут быть весьма
> неявными и совсем не обязательными, то есть, он либо может (с некоторой
> усеченной функциональностью) использоваться и без таковых модулей, либо
> использует эти необязательные случаи только в экзотических случаях, типа
> того же VMS или, например, в mod_perl...
Да, это так. Но ведь есть ещё и AutoLoader. Вчитайтесь, например, в
Storable.pm. Какие модули -- навскидку -- ему необходимы для успешной
работы? "Это не простой вопрос."
Вообще, весь этот perl.{req,prov} -- это грязный хак. Но это лучше, чем
ничего.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [devel] /usr/lib/rpm/perl.req -- patch
2002-10-29 23:27 [devel] /usr/lib/rpm/perl.req -- ахтунг! at
2002-10-30 0:58 ` at
@ 2002-10-30 23:44 ` at
2002-10-31 0:19 ` at
` (2 more replies)
1 sibling, 3 replies; 13+ messages in thread
From: at @ 2002-10-30 23:44 UTC (permalink / raw)
To: devel
[-- 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");
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [devel] /usr/lib/rpm/perl.req -- patch
2002-10-30 23:44 ` [devel] /usr/lib/rpm/perl.req -- patch at
@ 2002-10-31 0:19 ` at
2002-10-31 0:32 ` Dmitry V. Levin
2002-10-31 0:22 ` [devel] " Dmitry V. Levin
2002-11-02 9:49 ` [devel] " Mikhail Zabaluev
2 siblings, 1 reply; 13+ messages in thread
From: at @ 2002-10-31 0:19 UTC (permalink / raw)
To: devel
On Thu, Oct 31, 2002 at 02:44:53AM +0300, at@turbinal.org wrote:
> Я посмотрел, как это сделано в rpm-*mdk. Там используется такое
> наблюдение, что условные зависимости (require) обычно начинаются с
> отступа. Всё это абсолютно в духе грязного хака, но пока это лучшее, что
> можно придумать. Если мне дадут возможность отхачить perl.req, я
> попробую быстро добиться приемлемой его работы на всем, что мы собираем
> (нужно подтверждение).
Поймал (ценную мысль)! Нужно сделать 2 метода поиска перловых
зависимостей: relaxed и strict. Большая часть пакетов должна собираться
с strict (по умолчанию), а там, где появляются нелепые или слишком
сильные зависимости (как в perl-CGI), нужно в spec-файле явно указывать:
%set_perl_req_method relaxed
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [devel] /usr/lib/rpm/perl.req -- patch
2002-10-30 23:44 ` [devel] /usr/lib/rpm/perl.req -- patch at
2002-10-31 0:19 ` at
@ 2002-10-31 0:22 ` Dmitry V. Levin
2002-11-02 9:49 ` [devel] " Mikhail Zabaluev
2 siblings, 0 replies; 13+ messages in thread
From: Dmitry V. Levin @ 2002-10-31 0:22 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 2285 bytes --]
On Thu, Oct 31, 2002 at 02:44:53AM +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, я
> попробую быстро добиться приемлемой его работы на всем, что мы собираем
> (нужно подтверждение).
Ok.
Сколько раз придётся пересобирать пакета для исправления зависимостей? :)
> --- 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>
Я не буду пока выпускать новый rpm-build; будем тестировать perl.req
"по живому".
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [devel] /usr/lib/rpm/perl.req -- patch
2002-10-31 0:19 ` at
@ 2002-10-31 0:32 ` Dmitry V. Levin
2002-10-31 1:15 ` at
0 siblings, 1 reply; 13+ messages in thread
From: Dmitry V. Levin @ 2002-10-31 0:32 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1.1: Type: text/plain, Size: 960 bytes --]
On Thu, Oct 31, 2002 at 03:19:30AM +0300, at@turbinal.org wrote:
> On Thu, Oct 31, 2002 at 02:44:53AM +0300, at@turbinal.org wrote:
> > Я посмотрел, как это сделано в rpm-*mdk. Там используется такое
> > наблюдение, что условные зависимости (require) обычно начинаются с
> > отступа. Всё это абсолютно в духе грязного хака, но пока это лучшее, что
> > можно придумать. Если мне дадут возможность отхачить perl.req, я
> > попробую быстро добиться приемлемой его работы на всем, что мы собираем
> > (нужно подтверждение).
>
> Поймал (ценную мысль)! Нужно сделать 2 метода поиска перловых
> зависимостей: relaxed и strict. Большая часть пакетов должна собираться
> с strict (по умолчанию), а там, где появляются нелепые или слишком
Отлавливать сложно.
> сильные зависимости (как в perl-CGI), нужно в spec-файле явно указывать:
>
> %set_perl_req_method relaxed
>
s/strict/normal/ - стоит зарезервировать strict для более жестких
проверок.
Пробуйте.
--
ldv
[-- Attachment #1.2: perl_req.diff --]
[-- Type: text/plain, Size: 2138 bytes --]
--- /usr/lib/rpm/i586-linux/macros.orig 2002-10-28 02:13:21 +0300
+++ /usr/lib/rpm/i586-linux/macros 2002-10-31 03:25:16 +0300
@@ -276,6 +276,7 @@
%_cleanup_method auto
%_compress_method auto
%_verify_elf_method normal
+%_perl_req_method normal
%_fixup_method binconfig pkgconfig libtool
%_strip_method %{?_enable_debug:none}%{!?_enable_debug:executable shared}
%_findreq_default_method files lib pam perl shell
@@ -302,6 +303,7 @@
%set_fixup_method() %global _fixup_method %*
%set_strip_method() %global _strip_method %*
%set_verify_elf_method() %global _verify_elf_method %*
+%set_perl_req_method() %global _perl_req_method %*
%set_cleanup_topdir() %global _cleanup_topdir %*
%set_compress_topdir() %global _compress_topdir %*
--- /usr/lib/rpm/noarch-linux/macros.orig 2002-10-28 02:13:21 +0300
+++ /usr/lib/rpm/noarch-linux/macros 2002-10-31 03:25:16 +0300
@@ -276,6 +276,7 @@
%_cleanup_method auto
%_compress_method auto
%_verify_elf_method normal
+%_perl_req_method normal
%_fixup_method binconfig pkgconfig libtool
%_strip_method %{?_enable_debug:none}%{!?_enable_debug:executable shared}
%_findreq_default_method files lib pam perl shell
@@ -302,6 +303,7 @@
%set_fixup_method() %global _fixup_method %*
%set_strip_method() %global _strip_method %*
%set_verify_elf_method() %global _verify_elf_method %*
+%set_perl_req_method() %global _perl_req_method %*
%set_cleanup_topdir() %global _cleanup_topdir %*
%set_compress_topdir() %global _compress_topdir %*
--- /usr/lib/rpm/macros.orig 2002-10-28 02:10:24 +0300
+++ /usr/lib/rpm/macros 2002-10-31 03:22:22 +0300
@@ -621,6 +621,7 @@
%{?_findreq_skiplist:export RPM_FINDREQ_SKIPLIST=\"%_findreq_skiplist\"}\
%{?_findprov_skiplist:export RPM_FINDPROV_SKIPLIST=\"%_findprov_skiplist\"}\
%{?_perl_lib_path:export RPM_PERL_LIB_PATH=\"%_perl_lib_path\"}\
+ %{?_perl_req_method:export RPM_PERL_REQ_METHOD=\"%_perl_req_method\"}\
%{?__python:export RPM_PYTHON=\"%__python\"}\
\
unset LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION LC_ALL ||:\
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [devel] /usr/lib/rpm/perl.req -- patch
2002-10-31 0:32 ` Dmitry V. Levin
@ 2002-10-31 1:15 ` at
2002-11-02 9:27 ` [devel] " Mikhail Zabaluev
0 siblings, 1 reply; 13+ messages in thread
From: at @ 2002-10-31 1:15 UTC (permalink / raw)
To: devel
On Thu, Oct 31, 2002 at 03:32:18AM +0300, Dmitry V. Levin wrote:
> > Поймал (ценную мысль)! Нужно сделать 2 метода поиска перловых
> > зависимостей: relaxed и strict. Большая часть пакетов должна собираться
> > с strict (по умолчанию), а там, где появляются нелепые или слишком
>
> Отлавливать сложно.
Это задача maintainer'а. Таких пакетов немного (мне пока попался только
perl-CGI).
> s/strict/normal/ - стоит зарезервировать strict для более жестких
> проверок.
Да (например, без списков @ignore_files и @ignore_reqs).
>
> Пробуйте.
>
Пробую.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [devel] Re: /usr/lib/rpm/perl.req -- patch
2002-10-31 1:15 ` at
@ 2002-11-02 9:27 ` Mikhail Zabaluev
0 siblings, 0 replies; 13+ messages in thread
From: Mikhail Zabaluev @ 2002-11-02 9:27 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 844 bytes --]
Hello at,
On Thu, Oct 31, 2002 at 04:15:39AM +0300, at@turbinal.org wrote:
>
> On Thu, Oct 31, 2002 at 03:32:18AM +0300, Dmitry V. Levin wrote:
> > > Поймал (ценную мысль)! Нужно сделать 2 метода поиска перловых
> > > зависимостей: relaxed и strict. Большая часть пакетов должна собираться
> > > с strict (по умолчанию), а там, где появляются нелепые или слишком
> >
> > Отлавливать сложно.
>
> Это задача maintainer'а. Таких пакетов немного (мне пока попался только
> perl-CGI).
И в таких пакетах можно и руками поставить.
Например, прогнать один раз нормальный perl.req, снять зависимости,
почистить их и запретить perl.req для дальнейших сборок этой версии.
--
Stay tuned,
MhZ JID: mookid@jabber.org
___________
Is it 1974? What's for SUPPER? Can I spend my COLLEGE FUND in one
wild afternoon??
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* [devel] Re: /usr/lib/rpm/perl.req -- patch
2002-10-30 23:44 ` [devel] /usr/lib/rpm/perl.req -- patch at
2002-10-31 0:19 ` at
2002-10-31 0:22 ` [devel] " Dmitry V. Levin
@ 2002-11-02 9:49 ` Mikhail Zabaluev
2002-11-02 14:01 ` at
2 siblings, 1 reply; 13+ messages in thread
From: Mikhail Zabaluev @ 2002-11-02 9:49 UTC (permalink / raw)
To: devel; +Cc: at
[-- Attachment #1: Type: text/plain, Size: 1786 bytes --]
Hello at,
On Thu, Oct 31, 2002 at 02:44:53AM +0300, at@turbinal.org wrote:
>
> Возникает только проблема условных зависимостей. Например, в 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, я
> попробую быстро добиться приемлемой его работы на всем, что мы собираем
> (нужно подтверждение).
Я задумывался о менее грязном решении: компилировать файлы и выдавать
из обратно через B::Deparse. Вывод будет идеально отформатирован,
безусловные require не имеют отступа, а код процедур не
из main::, наоборот, не выдаётся по умолчанию.
Но пропадают use.
Есть ещё и более вкусная штучка -- B::Xref, которая выдаёт
файлы и пакеты, использованные на этапе компиляции.
Попробуйте:
perl -MO=Xref,r <скрипт> | grep ^File
Проблема может быть ещё в том, что некоторые блоки perl-кода
могут исполняться сразу на этапе компиляции и повлиять на результат.
Но с этим ничего поделать нельзя: это perl,
There Is More Than One Way To Screw It :)
--
Stay tuned,
MhZ JID: mookid@jabber.org
___________
Repartee is something we think of twenty-four hours too late.
-- Mark Twain
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* [devel] Re: /usr/lib/rpm/perl.req -- patch
2002-11-02 9:49 ` [devel] " Mikhail Zabaluev
@ 2002-11-02 14:01 ` at
0 siblings, 1 reply; 13+ messages in thread
From: at @ 2002-11-02 14:01 UTC (permalink / raw)
To: devel; +Cc: Mikhail Zabaluev
On Sat, Nov 02, 2002 at 12:49:58PM +0300, Mikhail Zabaluev wrote:
> Есть ещё и более вкусная штучка -- B::Xref, которая выдаёт
> файлы и пакеты, использованные на этапе компиляции.
Здесь опять 100% завязка на серду сборки.
Наверное, нужно комбинировать несколько методов. :)
> Попробуйте:
>
> perl -MO=Xref,r <скрипт> | grep ^File
$ perl -MO=Xref,r /usr/lib/perl5/find.pl | grep ^File
/usr/lib/perl5/find.pl syntax OK
File
File /usr/lib/perl5/Exporter.pm
File /usr/lib/perl5/File/Basename.pm
File /usr/lib/perl5/find.pl
File /usr/lib/perl5/i386-linux/DynaLoader.pm
File /usr/lib/perl5/i386-linux/XSLoader.pm
File @EXPORT
File `x
File €FФ*юяяя8€
File ђђpгґ*
File јЋ
File ИИpгґ*
$
Я не хочу, чтобы последние несколько "файлов" попали в зависимости.
Что-то сломано?
>
> Проблема может быть ещё в том, что некоторые блоки perl-кода
> могут исполняться сразу на этапе компиляции и повлиять на результат.
> Но с этим ничего поделать нельзя: это perl,
> There Is More Than One Way To Screw It :)
>
> --
> Stay tuned,
> MhZ JID: mookid@jabber.org
> ___________
> Repartee is something we think of twenty-four hours too late.
> -- Mark Twain
^ permalink raw reply [flat|nested] 13+ messages in thread
* [devel] Re: /usr/lib/rpm/perl.req -- patch
@ 2002-11-02 15:18 ` Alexey Tourbin
0 siblings, 0 replies; 13+ messages in thread
From: Alexey Tourbin @ 2002-11-02 15:18 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 1455 bytes --]
On Sat, Nov 02, 2002 at 05:09:11PM +0300, Mikhail Zabaluev wrote:
> Хм. Если при этом как-то отлавливать имена ненайденных файлов,
> возможно, будет полное покрытие всего, что требуется.
OK, я подумаю/попробую. По идее, эти скриты нужно переписать с нуля,
но сейчас этого делать уже нельзя.
> > $ perl -MO=Xref,r /usr/lib/perl5/find.pl | grep ^File
> > /usr/lib/perl5/find.pl syntax OK
> > File
> > File /usr/lib/perl5/Exporter.pm
> > File /usr/lib/perl5/File/Basename.pm
> > File /usr/lib/perl5/find.pl
> > File /usr/lib/perl5/i386-linux/DynaLoader.pm
> > File /usr/lib/perl5/i386-linux/XSLoader.pm
> > File @EXPORT
> > File `x
> > File ?FФ*юяяя8?
> > File ??pг?*
> > File ??
> > File ИИpг?*
> > $
> >
> > Я не хочу, чтобы последние несколько "файлов" попали в зависимости.
> > Что-то сломано?
>
> Не знаю, perl 5.6.1 такого не выдаёт.
Главное же, что find.pl выглядит так:
$ grep '^[^#]' /usr/lib/perl5/find.pl
use File::Find ();
*name = *File::Find::name;
*prune = *File::Find::prune;
*dir = *File::Find::dir;
*topdir = *File::Find::topdir;
*topdev = *File::Find::topdev;
*topino = *File::Find::topino;
*topmode = *File::Find::topmode;
*topnlink = *File::Find::topnlink;
sub find {
&File::Find::find(\&wanted, @_);
}
1;
$
Т.е. Xref вытягивает слишком косвенные зависимости, а основные
(File::Find) не вытягивает. Боюсь, что где-то что-то сломано. Попробую
разобраться.
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2002-11-02 15:18 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 ` [devel] /usr/lib/rpm/perl.req -- patch at
2002-10-31 0:19 ` 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
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