Bug#630399: perl: multiarch libc and partial upgrades
Niko Tyni
ntyni at debian.org
Thu Jun 30 19:28:31 UTC 2011
On Tue, Jun 21, 2011 at 10:37:57PM +0300, Niko Tyni wrote:
> On Tue, Jun 21, 2011 at 10:03:29AM -0500, Jonathan Nieder wrote:
> > Aside from "perl -V::libpth" itself and the perl build process, the
> > only code I can find that cares about libpth is the DynaLoader module
> > (and hence ExtUtils::Embed, etc).
> >
> > Do you remember why DynaLoader is in perl-base and not perl-modules?
>
> It's used to load all XS extensions like POSIX.so, Socket.so and so forth.
> However, I can't see why that functionality would need anything from
> libpth. This needs to be checked properly of course.
OK, I see DynaLoader first tries to locate the plugin to be loaded in
the perl directories (/usr/lib/perl/5.12 and so forth) and falls back
to dl_findfile() if that doesn't succeed. The dl_findfile() function
looks in $Config{libpth}.
Obviously all the plugins in perl-base are in the perl directories, so
having a perl binary with a wrong $Config{libpth} on the system does not
affect basic module loading functionality.
Now, DynaLoader::dl_findfile() is a public function that could theoretically
be used by a Perl program to locate (say) libc.so, so this can be argued to
be part of the Essential functionality of perl-base. However, I very much
doubt any maintainer scripts in Debian rely on that.
Based on this, I think it's feasible for libc6 to Break just perl-modules.
Of course, this can be revisited in case it causes actual upgrade problems.
> > > On Tue, Jun 21, 2011 at 01:46:32AM -0500, Jonathan Nieder wrote:
> >
> > >> Ah, here we go. Based on how Configure computes libpth, what I should
> > >> have said is gcc-4.6 (>= 4.6.0-12).
>
> > Make that gcc-4.6 (>= 4.6.0-13). Reasons:
[...]
> > I don't know whether (2) is important. If it's not, a simpler
> > approach would be to convince Configure to be trusting enough to use
> > use-provided paths even if the directory does not exist. That way,
> > there would be no need for new build-dependencies, aside from dpkg-dev
> > (>= 1.16.0) for "dpkg-architecture -qDEB_HOST_MULTIARCH".
>
> Aside from that, I agree that changing Configure is starting to look
> like the cleanest solution.
Unfortunately there are a few hurdles to that.
Configure does not currently differentiate between variables passed from
the command line and variables provided by the hints/ files.
Upstream has just released 5.12.4 where hints/linux.sh parses the output
of 'gcc -print-search-dirs', therefore getting the multiarch directories
right when gcc supports them.
It happens that the list includes quite a few directories that don't
normally exist, so the check for existing directories is very much used
in the normal upstream code path.
% gcc -print-search-dirs | grep libraries | \
cut -f2- -d= | tr ':' '\n' | grep -v 'gcc' | sed -e 's:/$::'
/lib/x86_64-linux-gnu/4.6.1
/lib
/usr/lib/x86_64-linux-gnu/4.6.1
/usr/lib
/usr/lib/x86_64-linux-gnu/x86_64-linux-gnu/4.6.1
/usr/lib/x86_64-linux-gnu
Our use case (forcing a missing directory into libpth) is exotic enough
that I have a hard time (and, frankly, a lack of motivation) coming up
with an upstreamable way to implement it.
That means the gcc-4.6 build dependency option is looking better again.
However, I just learned sparc still has gcc 4.4 as the default compiler.
So we'd be down to arch specific dependencies again, at least temporarily
(see http://lists.debian.org/debian-sparc/2011/06/msg00012.html ), or
pull in an extra compiler version on sparc just for this.
It wouldn't be too bad IMO to have
Build-Depends: gcc-4.6 (>= 4.6.0-13) [!sparc], gcc-4.4 (>= 4.4.6-4) [sparc]
assuming there aren't other special cases. I suppose we should go for it
and do the fine tuning afterwards.
--
Niko Tyni ntyni at debian.org
More information about the Perl-maintainers
mailing list