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

Re: bugs in bootstrap.debian.net (was: Re: The state of cross building)

Hi Stephen and Bastien,

Quoting Stephen Kitt (2016-01-31 11:49:32)
> I'll give it a shot... (And add this later to the wiki.)

which page will you be editing?

> As I understand it, the page lists *dependency* problems which prevent:

It is indeed important to stress that these are only dependency problems. In
lots of places the term "build" is used, but this is simply because that term
is shorter than "test for cross build satisfiability". I just fixed this [1].

[1] https://gitlab.mister-muffin.de/debian-bootstrap/bootstrap_debian_net/commit/4e7326d5777516d350eb6d6cb1d18bd3785b3aa1

> * cross-building imagemagick
> * using imagemagick's packages as build-dependencies when cross-building

That is correct. In this specific example, only the "conflicts" group of
problems is shown. Other pages might also have a table for the "missing" group.
What each of these groups mean is explained right under the respective
headings. The source package-specific pages are generally just an application
of a filter to the data shown in [2] (careful, 6.6 MB of HTML) where only those
rows are shown which are either containing the source package itself or some of
the binary packages it builds. This in turn leads to the summary of its meaning

[2] http://bootstrap.debian.net/cross_all.html

> The first table lists all the binary packages which prevent cross-compilation
> involving imagemagick. This tells you where you need to look if you want to
> fix things so that imagemagick can be cross-built and/or used for
> cross-compiling.

The first, small table is just a tiny version of the second. It's basically
just taking the first 10 rows and removes a bunch of columns.

> The second table lists the same information but in more detail. In each line,
> imagemagick's packages' involvement is highlighted in green. To determine
> issues preventing imagemagick from being cross-compiled, look for it in the
> third column ("packages with (possibly transitive) conflicting
> dependencies"); this shows that getting imagemagick to cross-compile involves
> fixing perl (and perl-base) so that it works in multi-arch contexts.

One of the problems shown here is, that having this information does not
automatically tell you which package is faulty or which package needs fixing.
Fixes can either be done in the depending package (by adding qualifiers like
:any or :native to dependencies) or in the depended-upon packages (by making
them multiarch:same/foreign).

Specifically, the problem here (which is a very common one) is, that
perl-base:${buildarch} needs to be installed because it is part of the
essential/build-essential set. But imagemagick also build depends on
libperl-dev and by default, this dependency will draw in
libperl-dev:${hostarch} because libperl-dev is not multiarch:foreign. Because
of this we also build depend on perl-base:${hostarch} but that one is not
installable together with perl-base:${buildarch} because perl-base is not
multiarch:same and thus the conflict. Also, note that because of the files it
contains, perl-base cannot be made multiarch:same as it is right now. Changing
this will be a big effort.

> Anything else is a situation where one of imagemagick's packages'
> dependencies prevents it being used for cross-compiling; fixing this might
> involve amending imagemagick's dependencies, or it might involve fixing the
> conflicting package. For example, hhvm can't be cross-compiled because it
> build-depends, directly and indirectly (via imagemagick), on libfreetype6-dev
> (which contains /usr/bin/freetype-config and is therefore not multi-arch
> co-installable).

Correct. Imagemagick's build dependency on libfreetype6-dev will draw in
libfreetype6-dev:${hostarch} while libmagickcore-dev is multiarch:foreign and
thus will be installed for the build architecture and thus in turn
(transitively) depends on libfreetype6-dev:${buildarch}. But
libfreetype6-dev:${hostarch} and libfreetype6-dev:${buildarch} are not
coinstallable because they are not multiarch:same which practically is the case
because of /usr/bin/freetype-config as pointed out by Stephen. A fix could be
to move /usr/bin/freetype-config to a separate binary package, make
libfreetype6-dev multiarch:same (i didn't check if there are other problems
with it) and make sure to fix all reverse dependencies which actually need
/usr/bin/freetype-config. I don't know whether this would work or be practical,
I'm just using it here as an example to show how fixing these problems can be
very difficult.

> I hope that I got that all right and that it clarifies things a little!

Thank you!

cheers, josch

Attachment: signature.asc
Description: signature

Reply to: