[Python-modules-team] Bug#915856: sphinx: Failed cross building with Build-Depends on python3-sphinx
Dmitry Shachnev
mitya57 at debian.org
Sat Jan 19 21:45:36 GMT 2019
Hi Kaliko!
Sorry that it took so long for me to reply. I was putting most of my Sphinx
time into preparing the Sphinx 1.8 transition for sid.
On Fri, Dec 07, 2018 at 11:42:09AM +0100, kaliko wrote:
> here is a follow up of a discussion started on irc:debian-devel with
> mitya57.
>
> I'm trying to cross build an "Architecture: any" package [0]
> (commit:52326679) using the following:
>
> sudo pbuilder create --host-arch armhf
> sudo pbuilder build --host-arch armhf ncmpc_0.33-1.dsc
>
> building failed on:
>
> "builddeps:/build/ncmpc_0.33-1.dsc:armhf : Depends: python3-sphinx:armhf but
> it is not installable"
In other packages this is usually being fixed by splitting the documentation
into a separate package that is Architecture: all.
Then Sphinx is not needed when cross-building at all — there is no sense in
cross-building Architecture: all packages, you can just build them natively.
To skip installing Sphinx on cross builds, you need to:
1) Move python3-sphinx build-dependency to Build-Depends-Indep.
2) After doing that, you can no longer use dh --with sphinxdoc, as dh will
not find sphinxdoc.pm. So you will need something like this instead:
override_dh_installdocs-indep:
dh_installdocs -i -A AUTHORS
dh_sphinxdoc
3) Also maybe you will need to pass --binary-indep to pbuilder, as it does
not automatically add that option for cross builds.
This was a solution that does not need changing or using Sphinx at all.
Now let’s talk about Sphinx. There is bug #818115 which discusses how to
make it possible to install Sphinx in cross-build environments.
Last discussion on that bug was in 2016, so I checked whether some
things described there are still actual. Found this thing:
> So maybe we can say that architectures don't matter for sphinx by
> marking it Multi-Arch: foreign? Unfortunately, no. python-sphinx
> transitively depends on python-markupsafe (via python-jinja2) and thus
> exposes it. Since python-markupsafe is an architecture dependent Python
> extension, python-sphinx exposes the architecture. This is the gist of
> the multiarch interpreter problem.
I looked at markupsafe code, and found out that the architecture-specific
part of it is optional:
https://github.com/pallets/markupsafe/blob/master/src/markupsafe/__init__.py#L320
So even if it is installed for a wrong architecture, it would still be
importable.
Maybe this means that python3-sphinx can be marked Multi-Arch: foreign.
However, I am not sure this is a safe thing to do. One potential issue may be
that Sphinx autodoc extension [1] imports arbitrary Python code, and that
code may be a compiled (for the host architecture) extension that will fail to
import with the build architecture interpreter.
Also, I wonder if just making src:sphinx binary packages Multi-Arch: foreign
will be enough, or we should also mark all its dependencies Multi-Arch:
foreign too.
I am Cc’ing Helmut Grohne who filed #818115 and who is a cross-building
expert. Dear Helmut, can you give me your opinion on this? Is my analysis
correct?
[1]: https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html
--
Dmitry Shachnev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/python-modules-team/attachments/20190120/86a00518/attachment.sig>
More information about the Python-modules-team
mailing list