[igt-dev] [PATCH i-g-t] build: allow to use rst2man from python3

Lucas De Marchi lucas.demarchi at intel.com
Tue Sep 4 15:44:11 UTC 2018


On Tue, Sep 04, 2018 at 02:56:43PM +0300, Jani Nikula wrote:
> On Fri, 31 Aug 2018, Lucas De Marchi <lucas.demarchi at intel.com> wrote:
> > While changing maintainer-tools to allow to use python3 I unsintalled my
> > python2 tools, which broke IGT build for me. Allow to use either
> > rst2man-3 or rst2man.
> >
> > Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
> > ---
> >  configure.ac    | 4 ++--
> >  man/Makefile.am | 2 +-
> >  man/meson.build | 4 ++--
> >  man/rst2man.sh  | 7 ++++---
> >  4 files changed, 9 insertions(+), 8 deletions(-)
> >
> > diff --git a/configure.ac b/configure.ac
> > index c75ef284..bcd24f04 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -52,8 +52,8 @@ enable_gtk_doc=no
> >  ])
> >  
> >  # check for rst2man for generating man pages
> > -AC_CHECK_PROG(RST2MAN, rst2man, yes, no)
> > -AM_CONDITIONAL(HAVE_RST2MAN, [test "x$RST2MAN" = xyes])
> > +AC_CHECK_PROGS(RST2MAN, rst2man-3 rst2man, "")
> > +AM_CONDITIONAL(HAVE_RST2MAN, [test "x$RST2MAN" = x])
> 
> Is this ugliness what Fedora recommends upstreams all over do to
> workaround their package management decisions? Yuck.

I don't think it's a Fedora thing. Nobody is forcing it upstream neither.
The problem is about having both python2-docutils and python3-docutils
installed at the same time. Because you know, python3 and python2 are
not that compatible so you may need both installed due to other packages
requiring it.

Then it comes the question of "who gets preference into PATH?". For some
packages Fedora uses modules.sh from "alternatives" to export the right dir
to the PATH (this is what happens with sphinx-build, for example... you
may have sphinx-build in your path coming from a python3 installation).
This has its own problem of only being available after loading the profile
so it doesn't play well with CI installing the tool just before building
(see bace7b6cdcd7329545889f1a54fd28977c68c326 in maintainer-tools for
more details).

Arch Linux calls the python2 version rst2man2
(https://www.archlinux.org/packages/community/any/python2-docutils/).
If you decide to install from pypi via pip you will get rst2man.py
for both python2 and python3 and they will simply conflict.
Ubuntu (Debian?) seems to be the sanest, installing everything on
/usr/share/docutils/scripts/python[23]/ (this needs a postinst
rule on the package to update their `alternatives`, so the end result
may differ depending on the order packages were installed, which
for some distros may be unacceptable).

That all said, for me it's just an alternative binary name that we have
support for in the build system and already do that in other cases.

Lucas De Marchi

> 
> BR,
> Jani.
> 
> >  
> >  # Checks for functions, headers, structures, etc.
> >  AC_HEADER_STDC
> > diff --git a/man/Makefile.am b/man/Makefile.am
> > index 777f5d1f..6b357b11 100644
> > --- a/man/Makefile.am
> > +++ b/man/Makefile.am
> > @@ -42,4 +42,4 @@ defs.rst:
> >  	$(AM_V_GEN)echo ".. |MANUAL_GROUP| replace:: General Commands Manual" >> $@
> >  
> >  %.$(APP_MAN_SUFFIX): %.rst defs.rst
> > -	$(AM_V_GEN)rst2man < $< > $@
> > +	$(AM_V_GEN)$(RST2MAN) < $< > $@
> > diff --git a/man/meson.build b/man/meson.build
> > index fa01f9dd..a6b08900 100644
> > --- a/man/meson.build
> > +++ b/man/meson.build
> > @@ -22,14 +22,14 @@ defs_rst = configure_file(input : 'defs.rst.in',
> >  		output : 'defs.rst',
> >  		configuration : config)
> >  
> > -rst2man = find_program('rst2man', required : _man_required)
> > +rst2man = find_program('rst2man-3', 'rst2man', required : _man_required)
> >  rst2man_script = find_program('rst2man.sh')
> >  
> >  if _build_man and rst2man.found()
> >  	foreach manpage : manpages
> >  		custom_target(manpage + '.1',
> >  				build_by_default : true,
> > -				command : [ rst2man_script, '@INPUT@', '@OUTPUT@' ],
> > +				command : [ rst2man_script, rst2man, '@INPUT@', '@OUTPUT@' ],
> >  				depend_files : [ defs_rst ],
> >  				input: manpage + '.rst',
> >  				output : manpage + '.1.gz',
> > diff --git a/man/rst2man.sh b/man/rst2man.sh
> > index 8106ca4b..49a98fc5 100755
> > --- a/man/rst2man.sh
> > +++ b/man/rst2man.sh
> > @@ -1,7 +1,8 @@
> >  #!/bin/bash
> >  
> > -input=$1
> > -output=$2
> > +rst2man=$1
> > +input=$2
> > +output=$3
> >  
> >  out_dir=$(dirname "${output}")
> >  in_file=$(basename "${input}")
> > @@ -10,7 +11,7 @@ in_file=$(basename "${input}")
> >  # generated we first need to move it all into the build dir
> >  cp "$input" "$out_dir"
> >  
> > -rst2man "$out_dir/$in_file" "${output%.gz}"
> > +${rst2man} "$out_dir/$in_file" "${output%.gz}"
> >  
> >  rm -f "${output}"
> >  gzip "${output%.gz}"
> 
> -- 
> Jani Nikula, Intel Open Source Graphics Center


More information about the igt-dev mailing list