[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: tcl8.5 breaks dpkg-cross assumptions and multiarch

+++ Loïc Minier [2011-02-01 12:50 +0100]:
> On Tue, Feb 01, 2011, Wookey wrote:
> > But if something is looking for arch-independent stuff in /lib then in
> > general that's wrong, and I'm not aware of any examples of
> > correctly-packaged packages that need this. Any arch-independent files
> > will be supplied by an arch all package that the build should depend
> > on if needed.
>  I might be getting your point wrong, but I certainly see a lot of files
>  in /lib itself which are arch-independent data used for early boot
>  (before /usr is available); PNG files and text files which would be
>  identical on all architectures.

Sorry, I wasn't being very clear. By 'something is looking for
arch-independent stuff in /lib' I really mean in /usr/<triplet>/lib,
used during cross-building, (which will be put there by dpkg-cross-ed
packages) (or in /usr/lib/<archtuple> or /lib/<archtuple> put there by
dpkg on multiarch systems). 

Yes there are various things in /lib that are not arch-dependent.
dpkg-cross does not put most(any?) of those in -cross packages. In fact this
is so true that it doesn't copy /usr/lib/tcl8.5/tclConfig.sh over into
the cross package either. I should have checked that. Bum. 

dpkg-cross in fact only picks files out of packages by positive
identification as libraries or headers. It misses out generic 'other
stuff' in ((/usr)/lib, which generally works pretty well, but in
this tcl case it's not suffient for tcl-depending apps to cross-build.

Bug http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=599206 discusses
this issue.

dpkg-cross is intended to put files needed for cross-building into
-cross packages and it's currently missing this one out. Unfortunately
because it doesn't match any of the 'standard paterns for cross-useful
files' this can only be fixed by adding a fairly specific regexp,
which is worrying close to special-casing or deciding that in fact
just fishing out specific things from /usr/lib is too conservative and we
should take the view that everything in /usr/lib is potentially useful
in cross-building and should be copied into -cross packages. 

In multiarch world everything in (/usr)/lib is going to end up in
/usr/lib/<archtuple> or /lib/<archtuple>, unless packages are
re-arranged to put them elsewhere, and we expect this to work
fine so perhaps dpkg-cross should start doing the same thing, and thus
discuver any problems this does potentially create. Would
that actually do any harm? What files which are currently missed out
of -cross packages would actually cause breakage if copied over into

I just tried a modified dpkg-cross on a pile of packages and whilst
many come out the same, you do get quite a lot more files in some
packages and some packages that were previously null now have stuff in
them. e.g apache-modules. So there is quite a lot of bloat, but
probably no breakage.

Internally we will use a dpkg-cross modified to add
/usr/lib/*/tclConfig.sh to the list of things that are important for
cross-building. This means we will notice any other 'awkward
cases' due to missing files.

An alternative view is that anything (such as sqlite3) depending on
tclConfig.sh to build tcl extensions is broken and should be changed
to use some other mechanism, and until then simply cannot be
cross-built using the dpkg-cross mechanism. I am not familiar enough
with tcl extensions to know if this is a reasonable stance or not, but
given that it works just fine, and it's not hard to deal with, and
(after the fix in debian bug#611650) it will carry on 'just working'
in multiarch, I'm not convinced this is a reasonable stance. 

Which leaves us with deciding whether to just copy over tclConfig.sh
or everying in /usr/lib/*/* in dpkg-cross? 

Principal hats:  Linaro, Emdebian, Wookware, Balloonboard, ARM

Reply to: