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

Re: Policy changes which completely break apt-cross



On Thu, 01 Jul 2010 15:36:03 +0200
Goswin von Brederlow <goswin-v-b@web.de> wrote:

> Neil Williams <codehelp@debian.org> writes:
> 
> > On Thu, 01 Jul 2010 11:04:57 +0200
> > Goswin von Brederlow <goswin-v-b@web.de> wrote:
> >
> > Please don't CC: me, I'm on the list.
> >
> >> Do i remember correctly that dpkg-cross by default skips the package if
> >> the result would be empty? But yes, empty (except for /usr/share/doc/*)
> >> packages have to be handled corectly.
> >
> > No, you do not remember correctly. If apt-cross gets the calculation
> > wrong and downloads debconf, dpkg-cross will create an empty
> > debconf-armel-cross package.
> >
> > This all happens BEFORE dpkg-cross gets involved - it has to be decided
> > by the tool doing the downloading.

> % dpkg-cross -b /var/cache/apt/archives/debconf_1.5.32_all.deb

Wrong. This has nothing to do with dpkg-cross at this stage, this is
all about apt-cross which cannot know if dpkg-cross would skip the
package if it was specified in a single command.

You cannot allow such packages to be skipped UNLESS you also handle the
reverse dependencies of the generated -cross package to either not
depend on the -common-cross package because it wasn't cross'd or to
depend on the native -common package for the same reason. apt-cross
cannot make that decision without knowing if dpkg-cross considers the
package does not contain useful files and therefore apt-cross has had
to guess (heuristically) that Arch:all packages are generally unsafe to
allow as foo-common-armel-cross because such packages may be perl and
then depend on other Arch:all packages which cannot be safely cross'd.

Do not think you can test this by just calling dpkg-cross, this MUST be
processed through the entire dependency chain using apt-cross or
something else which can try and work out which packages need to be
cross'd in order to install a -cross version of the top level package.

This problem is a middle-package issue. Things are trivial if you only
consider the dpkg-cross single-command but that completely misses the
point. The issue is when package A is a dependency of package B and
your build needs the cross version of package B. Package A now changes
to this new Policy and puts various files that were in libA-dev into
A-common which is Arch:all. When trying to prepare the
cross-dependencies of package B, just how is the dependency solver
meant to find A-common when foo-common is known to cause uninstallable
situations if it is allowed to appear anywhere in the dependency chain.

> dpkg-cross: package debconf doesn't provide any useful files. Skipping.

Wrong - only consider if a package depends on something which depends
on something else which depends on something else which depends on
debconf. Without the indirection, you cannot test this problem.

> It does. You need to specify
> 
>  -A|--convert-anyway:  convert package even if it does not provide any
>                        development files

and apt-cross does specify this. That's the point, dpkg-cross is too
late in the process, this has to be resolved at the dependency
calculation stage which is apt-cross.

> % dpkg -c debconf-i386-cross_1.5.32_all.deb 
> drwxr-xr-x root/root         0 2010-07-01 15:25 ./
> drwxr-xr-x root/root         0 2010-07-01 15:25 ./usr/
> drwxr-xr-x root/root         0 2010-07-01 15:25 ./usr/share/
> drwxr-xr-x root/root         0 2010-07-01 15:25 ./usr/share/doc/
> drwxr-xr-x root/root         0 2010-07-01 15:25 ./usr/share/doc/debconf-i386-cross/
> -rw-r--r-- root/root       260 2010-07-01 15:25 ./usr/share/doc/debconf-i386-cross/README
> 
> .oO(Where did changelog and copyright go?)

-cross packages don't have them. Never have.
 
> > The whole point of this Policy change is that Arch:all packages WILL
> > need to be converted, we just won't know which we can allow and which
> > we cannot.
> 
> You haven't yet said why/how the package must be converted.

Because files that were in libfoo-dev and which are architecture
neutral will not necessarily be in libfoo-dev anymore but could be in
foo-common which, being Arch:all, apt-cross will studiously ignore -
this then causes the build to fail because files needed by the build
are not provided by libfoo-dev-armel-cross, only by foo-common which
has not been crossed because apt-cross cannot take the risk of allowing
an Arch:all package to appear in the dependency calculation.

> What files need to be moved around or altered and why? I can hardly
> convince you that a conversion is not needed if you don't say what files
> you think need conversion.

The same files as have always been converted but the files move between
packages due to this change in Policy.
 
> I believe that any file (like *.pc files) that need altering are not
> actually architecture independent and will differ across architectures
> with multiarch even if they are identical now. As such I would file a
> bug for the file to be in the libfoo-dev instead of libfoo-dev-common.

dpkg-cross doesn't convert every file, some (like headers) it doesn't
need to convert but does need to retain.

-- 


Neil Williams
=============
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/

Attachment: pgp_9gC8FxCX_.pgp
Description: PGP signature


Reply to: