Hi Michał, Thanks for doing this work, it's always better to have standardized ways of doing things.
On Wed, 20 Nov 2019 15:21:55 +0100 Michał Górny <mgo...@gentoo.org> wrote: <snip> > +distutils_enable_sphinx() { > + debug-print-function ${FUNCNAME} "${@}" > + [[ ${#} -ge 1 ]] || die "${FUNCNAME} takes at least one arg: <subdir>" > + > + _DISTUTILS_SPHINX_SUBDIR=${1} > + shift > + _DISTUTILS_SPHINX_PLUGINS=( "${@}" ) > + > + local deps autodoc=1 d > + for d; do > + if [[ ${d} == --no-autodoc ]]; then > + autodoc= > + else > + deps+=" > + ${d}[\${PYTHON_USEDEP}]" > + fi > + done > + > + if [[ ! ${autodoc} && -n ${deps} ]]; then > + die "${FUNCNAME}: do not pass --no-autodoc if external plugins > are used" > + fi > + if [[ ${autodoc} ]]; then > + deps="$(python_gen_any_dep " > + dev-python/sphinx[\${PYTHON_USEDEP}] > + ${deps}")" > + > + python_check_deps() { > + use doc || return 0 > + local p > + for p in "${_DISTUTILS_SPHINX_PLUGINS[@]}"; do > + has_version "${p}[${PYTHON_USEDEP}]" || return 1 > + done > + } I think it would be better to put this code in sphinx_check_deps (or some such) and define a python_check_deps that just calls sphinx_check_deps. That would allow ebuilds that need to do more than the sphinx stuff to not have to reimplement this. > + else > + deps="dev-python/sphinx" > + fi > + > + python_compile_all() { > + use doc || return > + > + cd "${_DISTUTILS_SPHINX_SUBDIR}" || die > + [[ -f conf.py ]] || > + die "conf.py not found, distutils_enable_sphinx call > wrong" > + > + if [[ ${_DISTUTILS_SPHINX_PLUGINS[0]} == --no-autodoc ]]; then > + if grep -q 'sphinx\.ext\.autodoc' "conf.py"; then Since this is just searching for a fixed string maybe "grep -F -q 'sphinx.ext.autodoc'" is a bit nicer. > + die "distutils_enable_sphinx: --no-autodoc > passed but sphinx.ext.autodoc found in conf.py" > + fi > + else > + if ! grep -q 'sphinx\.ext\.autodoc' "conf.py"; then > + die "distutils_enable_sphinx: > sphinx.ext.autodoc not found in conf.py, pass --no-autodoc" > + fi > + fi > + > + # disable intersphinx (internet use) > + sed -e 's:^intersphinx_mapping:disabled_&:' -i conf.py || die > + # not all packages include the Makefile in pypi tarball > + sphinx-build -b html -d _build/doctrees . _build/html || die > + > + HTML_DOCS+=( "${_DISTUTILS_SPHINX_SUBDIR}/_build/html/." ) > + } Same as above, I think it would be better to define this as sphinx_compile, and define a python_compile_all that just calls it. That way if an ebuild defines it's own python_compile_all it can call sphinx_compile to get this functionality. > + > + IUSE+=" doc" > + if [[ ${EAPI} == [56] ]]; then > + DEPEND+=" doc? ( ${deps} )" > + else > + BDEPEND+=" doc? ( ${deps} )" > + fi > + > + # we need to ensure successful return in case we're called last, > + # otherwise Portage may wrongly assume sourcing failed > + return 0 > +} > + > # @FUNCTION: distutils_enable_tests > # @USAGE: <test-runner> > # @DESCRIPTION: