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