ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] perl-5.8.0-alt0.3 (important)
@ 2002-10-16  1:45 at
  2002-10-16  4:44 ` at
                   ` (3 more replies)
  0 siblings, 4 replies; 31+ messages in thread
From: at @ 2002-10-16  1:45 UTC (permalink / raw)
  To: devel

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


В incoming заливается perl-5.8.0-alt0.3.nosrc.rpm.
Следующий текст важнее некоторых других (моих).


TOC
Summary
0) update perl.req in your build environment
1) remove straight perl* dependencies
2) think of why your package wants something more than perl-base
3) soname changed
4) libperl.so* relocated
5) use of inc_version_list mechanism is finally deprecated
6) archlib name is i386-linux
7) clashes
8) charges


Summary: начинается переход на perl 5.8.


0) обратите внимание на то, что пересборку любых пакетов, которые так
или иначе требуют perl, нужно делать в среде с исправленным
/usr/lib/rpm/perl.req; иначе будут сведены на нет все усилия по
разведению зависимостей.


1) ПОЖАЛУЙСТА, уберите все прямые зависимости на perl* из ваших пакетов
(либо предоставьте доказательства того, что /usr/lib/rpm/*req*
отрабатывает некорректно). Особенно этим грешат пакеты php-*. php-gd:

PreReq: php-common = %version-%release, perl

нужно заменить на

PreReq: php-common = %version-%release

У меня сложилось ощущение, что многим из этих пакетов перл вообще не
нужен, а зависимость появилась методом copy-paste.


2) я сделал перемещение некоторых модулей из perl в perl-base и
perl-devel. Это требуется для более эффективного разведения перловых
зависимостей в масштабах дистрибутива. (В частности, ExtUtils уехали в
perl-devel, а вместе с ними и CPAN.pm; это и другие решения будут
казаться правильными, если над ними подумать.)

Расклад:

$ ls -s1 perl-*5.8.0-alt0.1.i686.rpm
6703 perl-5.8.0-alt0.1.i686.rpm
1273 perl-base-5.8.0-alt0.1.i686.rpm
2162 perl-devel-5.8.0-alt0.1.i686.rpm
  40 perl-suidperl-5.8.0-alt0.1.i686.rpm

Приоритет пакетов (в смысле их необходимости в некоторых типичных/важных
случаях):
perl-base
perl-devel

Т.е. большинству пакетов с новым раскладом в конечном счете perl НЕ
ДОЛЖЕН быть нужен. В Junior нужно включить только perl-base. Возможно,
над этим придется дополнительно поработать.

Кроме того, я проверил функциональную замкнутость perl-base и perl-devel
относительно perl. Для этого я написал скрипт, который можно также
использовать для анализа перловых зависимостей других пакетов. Скрипт
прилагается (но он ни на что не претендует; желающие должны его
доработать и обязательно об этом сообщить). В результате удалось
предотвратить ряд ошибок, например таких:

file /usr/lib/perl5/File/Spec/Unix.pm
	requires perl(Scalar/Util.pm) provided by perl-5.8.0-alt0.1
file /usr/lib/perl5/i386-linux-thread-multi/Data/Dumper.pm
	requires perl(B/Deparse.pm) provided by perl-devel-5.8.0-alt0.1

Благодаря формальной независимости perl-base от perl* удалось отключить
AutoReq: yes, noperl. Теперь база RPM вырастет ещё раза в 2. :)

Другой пример:

$ perl depend.pl gnucash

file /usr/bin/update-finance-quote
	requires perl(CPAN.pm) provided by perl-devel-5.8.0-alt0.1

Оказывается, что кроме учета частных средств, gnucash ещё умеет
устанавливать на машине перловый софт! Хорошо это или плохо, я не знаю.
Но для разведения зависимостей это killer, как и сам CPAN.pm.


3) soname changed: libperl.so.5.8; это сделано для явного указания
бинарной несовместимости с perl 5.6. К сожалению, большинство perl-*
пакетов сейчас собрано таким образом, что указать факт их бинарной
несовместимости с новым перлом никак нельзя. Для того, чтобы избежать
такой ситуации в будущем, в perl-* пакетах с бинарным кодом (*.so) я
предлагаю явно указывать soname:

PreReq: libperl.so.5.8

В пакетах без бинарного кода этого делать не нужно. В других пакетах, в
которых бинарный код явно линкуется с libperl.so, этого делать также не
нужно, т.к. эта зависимость должна быть обнаружена автоматически.


4) libperl.so* relocated to /usr/lib; у меня сложилось мнение, что
libperl.so* ничем не лучше и не хуже других *.so*. Сделано это следующим
образом:

%make_build CCDLFLAGS="-rdynamic"
$PERL -pi -e "s/,-rpath,[^\s,'\"]+//g && s/\s*-Wl(?!,)//g" $RPM_BUILD_ROOT%archlib/Config.pm
mkdir -p $RPM_BUILD_ROOT%_libdir
mv $RPM_BUILD_ROOT%archlib/CORE/libperl.so.%sover $RPM_BUILD_ROOT%_libdir
ln -sf libperl.so.%sover $RPM_BUILD_ROOT%_libdir/libperl.so

Последствия этого шага для других пакетов понятны мне не до конца,
однако проблем пока не замечено.

Вопрос: как правильно сделать non-lazy linking для /usr/bin/perl?


5) use of inc_version_list mechanism is finally deprecated. Default
values

Configure variable	Default value
$privlib		$prefix/lib/perl5/$version
$archlib 		$prefix/lib/perl5/$version/$archname

were changed to

$privlib		$prefix/lib/perl5
$archlib 		$prefix/lib/perl5/$archname

by mhz on Tue May 29 2001. Default values

$sitelib		$siteprefix/lib/perl5/site_perl/$version
$sitearch		$siteprefix/lib/perl5/site_perl/$version/$archname

are changed to

$sitelib		$siteprefix/lib/perl5/site_perl
$sitearch		$siteprefix/lib/perl5/site_perl/$archname

since now.

Обоснование: создатели перла предусмотрели возможность иметь в системе
одновременно несколько версий перла, для каждого из которых существует
отдельное дерево библиотек. Дистрибутив такой возможности не
предусматривает; вернее, для этого есть /usr/local. В дистрибутиве есть
более надежные механизмы контроля версий и совместимости. Есть претензии
и по существу механизма: возможна ситуация, когда старое дерево
библиотек совместимо с новым перлом лишь частично. Это мы имеем сейчас в
связи с изменениями в ABI.


6) я подумал и решил оставть названия каталогов

/usr/lib/perl5/i386-linux
/usr/lib/perl5/site_perl/i386-linux

а не i386-linux-thread-multi, как делают RH и MDK. На это есть две
причины: а) теперь все сборки будут с тредами; во всяком случае, нужны
будут очень веские причины, чтобы отказаться от сборки с тредами б)
название каталога в любом случае условно и не всегда/не вполне
соответствует действительности.


7) Замечены как минимум следующие модули, которые входят в оригинальный
перл (некоторые из них появились только в 5.8). Есть соображения как за,
так и против того, чтобы продолжать собирать их из/в виде отдельных
пакетов. С ними лучше пока ничего не делать. Я ещё помедитирую.

perl-Time-HiRes
perl-Storable
perl-MIME-Base64
perl-CGI
perl-DB_File
perl-Digest-MD5
perl-libnet
perl-Parse-RecDescent


8) Пересборку пакетов 
perl-libwww-perl
perl-HTML-Parser
я возьму на себя.


[-- Attachment #2: depend.pl --]
[-- Type: text/plain, Size: 830 bytes --]

#!/usr/bin/perl
#
# check whether perl part of the package depends on perl-base only
#

use strict;
my @packages = @ARGV;
my $base = `rpm -q 'perl-base'`;
chomp $base;
foreach my $package (@packages) {
	$package = `rpm -q '$package'`;
	chomp $package;
	$_= `rpm -ql '$package' '$base' | sort | uniq`;
	my @files = split;
	my $n = @files;
	print "checking whether perl part of $package package ($n files) depends on $base only\n";
	foreach my $file (@files) {
		my @req = `/usr/lib/rpm/perl.req '$file'`;
		@req = map { /perl\(.+?\)/ ? $& :() } @req;
		foreach my $req (@req) {
			$_ = `rpm -q --whatprovides '$req'`;
			my @prov = split;
			print "warning: $req is provided by @prov\n"
				if @prov > 1;
			print "file $file requires\n\t$req provided by @prov\n" 
				unless grep { "@prov" =~ /\Q$_/ } ($base, $package);
		}
	}
}

^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2002-10-26  0:32 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-16  1:45 [devel] perl-5.8.0-alt0.3 (important) at
2002-10-16  4:44 ` at
2002-10-16  8:54   ` Dmitry V. Levin
2002-10-16 14:47     ` at
2002-10-16 15:31       ` Dmitry V. Levin
2002-10-16  8:39 ` Alexander Bokovoy
2002-10-16  9:09   ` Stanislav Ievlev
2002-10-16  8:50 ` Dmitry V. Levin
2002-10-16  8:56   ` Anton V. Boyarshinov
2002-10-16 14:19     ` at
2002-10-17  8:14 ` [devel] " Mikhail Zabaluev
2002-10-18  1:40   ` at
2002-10-18 22:26     ` Mikhail Zabaluev
2002-10-18 23:42       ` at
2002-10-19  9:38         ` Mikhail Zabaluev
2002-10-19 20:45           ` [devel] Re: perl ABI detection at find-requires stage at
2002-10-20  0:06             ` at
2002-10-21 23:05               ` Mikhail Zabaluev
2002-10-21  6:00           ` [devel] Re: perl-5.8.0-alt0.3 (important) Anton V. Boyarshinov
2002-10-21 19:26             ` Alexey I. Froloff
2002-10-22  8:20               ` Dmitry V. Levin
2002-10-21 20:16             ` [devel] Re: perl inc_version_list at
2002-10-21 22:52             ` [devel] Re: perl-5.8.0-alt0.3 (important) Mikhail Zabaluev
2002-10-22  6:25               ` Anton V. Boyarshinov
2002-10-22 13:08                 ` Alexey Tourbin
2002-10-26  0:32                   ` [devel] Re: perl thread safety at
2002-10-20  1:37       ` [devel] Re: perl/Junior at
2002-10-20 13:37       ` [devel] Re: perl-5.8.0-alt0.3 (important) Michael Shigorin
2002-10-21  2:12         ` at
2002-10-21 22:50           ` Mikhail Zabaluev
2002-10-21  3:01       ` at

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