ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [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