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

We cannot always know which source package to build to satisfy a given dependency (was: Re: Computing Build-Depends at build time (and other updates to debian/control)?)


Quoting Ian Jackson (2016-08-22 12:55:48)
> But even worse is that it would no longer be possible to sensibly
> compute build orders without pre-building every package in a source
> archive, because it would not be possible to statically determine
> which binary packages are supposed to come from which sources.

since you are talking about computing build orders and avoiding having to
pre-build every source package, I have bad news for you.  It is currently
already impossible to know which source package to build to satisfy a given
dependency if that source package hasn't been built before for the architecture
that you are building for.

This is not only because source package metadata does not tell you:

 - anything about in which version the source package will build its binary
 - which (possibly versioned and architecture qualified) virtual packages a
   real binary package will provide once built
 - whether they will build a binary package that is Essential:yes

So if you start with only source package information (from a Sources file) as
you would for example if you want to bootstrap a new architecture, then there
is currently no way to reliably auto-compute the order in which you need to
build source packages. You can only reliably carry out this computation for
re-bootstrapping an already existing architecture where you already built the
binary packages of all source packages.

So tools like rebootstrap which attempt to bootstrap Debian from zero currently
start with a manually maintained set of source packages that is to be built,
figure out which source packages have their build dependencies satisfied
already, build those and then check again for more source packages that can be
built given the newly built binary packages.

The only way to currently precompute the build order just from the metadata
would be to make some assumptions which do not hold in some cases like:

 - source packages build binary packages that have the same version as the
   source package they build from
 - the installation set of all Essential:yes packages is the same on all
 - there is no dependency on virtual packages
 - source packages build all their binary packages for architectures listed in
   the Architectures field

Rebootstrap currently works around this using lots of heuristics and manually
set assumptions and manual interventions during the bootstrap progress. But
this is something that should be encoded in the source package metadata so that
build orders can be computed upfront. There is work into the direction of
fixing this. For example the architectures a source package will build each
binary for is already encoded in the Packages-List field.

This has topic been extensively discussed during the bootstrap sprint and you
can read more about it in section 1 of the sprint results at [1]


cheers, josch

[1] https://wiki.debian.org/Sprints/2014/BootstrapSprint/Results

Attachment: signature.asc
Description: signature

Reply to: