* Goswin von Brederlow <brederlo@informatik.uni-tuebingen.de> [031209 14:22]:
> Bart Trojanowski <bart@jukie.net> writes:
>
> > I am officially excited again :) Once we settle on something I will
> > start coding up the dpkg changes.
> >
> > [editorial note: I've changed one thing from our irc discussion, and
> > that is the notation of the 'Depends' field. It's similar to what Adam
> > Heath had in mind, iirc.]
> >
> > 1) we will have a modified autoconf that will default to .../lib64 for
> > the 64bit architectures. Autoconf maintainers will likely refuse such a
> > patch, thus this will be a Debian specific patch. This will reduce the
> > amount of work required to port packages to amd64.
>
> For other subarchs that should default to the libdir intended for an
> optimised library: i.e. compiling for i686 would end up in lib/i686.
>
> That way installing libfoo (i386) and libfoo (i686) won't conflict
> even without special handling.
I am not sure if I agree with you there. It seems like you are taking
the flexibility a bit too far.
I can see why we need to have /lib and /lib64, but I don't see the need
of having i386 and i686 libraries installed concurrently. If your
application requires a 32bit version of a library it should not care if
it's i386 or i686. Things will still run if you have one or the other
-- unlike the case of i386 vs amd64.
I could be missing something however.
> > 2) we will drop lib64 package prefix. 32bit and 64bit packages will be
> > prefixed with lib as before. This will simplify dependencies in control
> > files since all packages will only have to state their dependencies on
> > libfoo, and not lib64foo.
>
> Same for lib-dev. lib-dev packages count the same as libraries,
> i.e. the ABI must be compatible and not just the subarch.
>
> Instead of adding varibales or .64 packages to the control file for
> each library depends a {abi} is added. For debs the shlibs thing would
> do most of the work. Changes to the rules file would also disapear
> unless they don't use autoconf to compile and install the libraries.
> The number of packages that don't is small though.
>
> > Here is an example of a source control block:
> >
> > Source: bar
> > Depends: libfoo {abi}
> Build-Depends: libgurks-dev {abi} (>> 1.2.3) [!hurd-amd64]
>
> (to make it more intresting)
>
> > Source: libfoo
> > Depends: libbar {abi}, goo
> >
> > ... and the binary packages:
> >
> > Package: bar
> > Architecture: i386
> > Depends: libfoo {abi} (= 0.0.0)
> Depends: libfoo {abi} (>= 0.0.0) libgurks (>= 1.2.3)
>
> (more likely and with the build-depends shlibs magic added)
>
> > Package: libfoo
> > Architecture: i386
> > Depends: libbar {abi} (= 0.0.0), goo (= 0.0.0)
> Depends: libfoo-common (= 1.2.3), libbar {abi} (= 0.0.0), goo (= 0.0.0)
>
> I gues nearly every lib has some common files.
>
> > Package: bar
> > Architecture: amd64
> > Depends: libfoo {abi} (= 0.0.0)
> >
> > Package: libfoo
> > Architecture: amd64
> > Depends: libbar {abi} (= 0.0.0), goo (= 0.0.0)
> >
> > Note the {abi} which is equivalent to your Depends-ABI. But would be a
> > bit cleaner since it would not require Pre-Depends-ABI,
> > Build-Depends-ABI, etc. It mostly simplifies the parsing code, makes
> > things more generic, and is closer to what Adam had talked about a few
> > months ago.
>
> If {} is free and not intended for something else in dpkg 2 already by
> all means use it.
From what I read on debian-dpkg, dpkg2 will use {} for this kind of
stuff, ie keywords.
> > 3) we will add an extension to apt to be able to install a specific
> > architecture's binary:
> >
> > apt-get install foo/i386
> > apt-get install foo/amd64
>
> apt-get install foo/i386=1.2.3 for even stricter debs?
>
> foo/arch=version or foo=version/arch?
> foo=1.2.3/i386 looks better I think but both should work so noone is
> surprised.
I cannot see why both could not work. = would be a prefix for version
and / would be a prefix for arch.
> > If a package is not available it will try to install a compatible ABI's
> > package. Say you want to install foo/i686, but it's not available. apt
> > will attempt to install i586, i486, or i386 if possible -- since they
> > are equivalent. A warning will be printed.
>
> But only when manually setting the arch. When selecting i386 instead
> of amd64 for "apt-get install foo" I don't want a warning.
Sure, that makes sense. If unspecified it should take the "best" (top
in the subarch tree) that can be executed on the host's architecture.
> > 6) When installing or upgrading a -v|--verbose (or -a|--arch) option
> > will cause apt to print /${arch} after each package in the summary list,
> > that is about to be installed or removed. This will allow users to
> > catch any anomalies. Since it does not alter the default display it
> > will not break any scripts that depend on the output of the original
> > install and upgrade options.
>
> -u should display the packages grouped by subarchs or something.
> Adding the subarch after each deb is way to much info, not mentioning
> it too litle.
I was hoping to not have ot change the output too much. Ie, leave -u in
the format that it's in now, and add a new format w/ the arch info. You
are probably right, grouping by arch would be better.
> When upgrading, is foo 1.2.3 {amd64} a newer version then foo 1.2.3
> {i386}? I would suggest that the first package found when following
> the compatible subarch links (the package with the shortest path from
> arch to subarch if we ever make a tree out of them) is considered the
> higher version if they are equal otherwise.
I agree with that.
> 7) All packages that are ment to be installable for multiple subarchs
> have to be split into foo and foo-common and all foo package may only
> contain disjunct files. That means libfoo, libfoo-dev becomes libfoo,
> libfoo-common, libfoo-dev, libfoo-common-dev.
>
> libfoo-dev would be the .a files, libfoo-common-dev the header
> usually.
>
> /usr/lib/libssl.so -> libssl {i386}
> /usr/lib/i686/libssl.so -> libssl {i686}
> /usr/lib64/libssl.so -> libssl {amd64}
>
> "apt-get install libssl {i386} libssl {i686} libssl {amd64}" would
> work.
Again, I am not sure if that is not too much. I belive that libssl/i386
and libssl/i686 are mutually exclusive since they provide the same ABI.
I agree with most of the stuff I've read except for this one. :)
B.
--
WebSig: http://www.jukie.net/~bart/sig/