summaryrefslogtreecommitdiff
blob: 02e54fb7e8fdae8963a524b1755c08ca3c678baf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

DISTUTILS_USE_SETUPTOOLS=rdepend
PYTHON_COMPAT=( python3_{6..9} pypy3 )
PYTHON_REQ_USE="threads(+)"

inherit distutils-r1

DESCRIPTION="Python documentation generator"
HOMEPAGE="https://www.sphinx-doc.org/
	https://github.com/sphinx-doc/sphinx"
SRC_URI="mirror://pypi/S/${PN^}/${P^}.tar.gz"

LICENSE="BSD"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~x64-solaris"
IUSE="doc latex test"
RESTRICT="!test? ( test )"

RDEPEND="
	<dev-python/alabaster-0.8[${PYTHON_USEDEP}]
	dev-python/Babel[${PYTHON_USEDEP}]
	dev-python/docutils[${PYTHON_USEDEP}]
	dev-python/imagesize[${PYTHON_USEDEP}]
	dev-python/jinja[${PYTHON_USEDEP}]
	dev-python/pygments[${PYTHON_USEDEP}]
	dev-python/requests[${PYTHON_USEDEP}]
	dev-python/snowballstemmer[${PYTHON_USEDEP}]
	dev-python/sphinxcontrib-applehelp[${PYTHON_USEDEP}]
	dev-python/sphinxcontrib-devhelp[${PYTHON_USEDEP}]
	dev-python/sphinxcontrib-jsmath[${PYTHON_USEDEP}]
	dev-python/sphinxcontrib-htmlhelp[${PYTHON_USEDEP}]
	dev-python/sphinxcontrib-serializinghtml[${PYTHON_USEDEP}]
	dev-python/sphinxcontrib-qthelp[${PYTHON_USEDEP}]
	dev-python/packaging[${PYTHON_USEDEP}]
	$(python_gen_cond_dep '
		dev-python/typed-ast[${PYTHON_USEDEP}]
	' python3_{6,7})
	latex? (
		dev-texlive/texlive-latexextra
		dev-texlive/texlive-luatex
		app-text/dvipng
	)"
BDEPEND="
	doc? (
		dev-python/sphinxcontrib-websupport[${PYTHON_USEDEP}]
		media-gfx/graphviz
	)
	test? (
		${RDEPEND}
		dev-python/html5lib[${PYTHON_USEDEP}]
		dev-python/pytest[${PYTHON_USEDEP}]
		virtual/imagemagick-tools[jpeg,png,svg]
		dev-texlive/texlive-fontsextra
		dev-texlive/texlive-latexextra
		dev-texlive/texlive-luatex
		app-text/dvipng
	)"

S="${WORKDIR}/${P^}"

python_prepare_all() {
	# remove tests that fail due to network-sandbox
	rm tests/test_build_linkcheck.py || die "Failed to remove web tests"
	sed -i -e 's:test_latex_images:_&:' tests/test_build_latex.py || die

	# fail under pypy3 (some because of missing typed-ast)
	# revisit when pypy3 becomes pypy3.8
	sed -i -e '/def test_partialfunction/i\
@pytest.mark.skipif(hasattr(sys, "pypy_version_info"), reason="broken on pypy3")' \
		-e '/def test_autodoc_typed_instance_variables/i\
@pytest.mark.skipif(hasattr(sys, "pypy_version_info"), reason="broken on pypy3")' \
		-e '/def test_autodoc_inherited_members_None/i\
@pytest.mark.skipif(hasattr(sys, "pypy_version_info"), reason="broken on pypy3")' \
		-e '/def test_cython/i\
@pytest.mark.skipif(hasattr(sys, "pypy_version_info"), reason="broken on pypy3")' \
		-e '/def test_automethod_for_builtin/i\
@pytest.mark.skipif(hasattr(sys, "pypy_version_info"), reason="broken on pypy3")' \
		tests/test_ext_autodoc.py || die
	sed -i -e '/import pytest/aimport sys' \
		-e '/def test_builtin_function/i\
@pytest.mark.skipif(hasattr(sys, "pypy_version_info"), reason="broken on pypy3")' \
		-e '/def test_methoddescriptor/i\
@pytest.mark.skipif(hasattr(sys, "pypy_version_info"), reason="broken on pypy3")' \
		-e '/def test_wrapped_function/i\
@pytest.mark.skipif(hasattr(sys, "pypy_version_info"), reason="broken on pypy3")' \
		tests/test_ext_autodoc_autofunction.py || die
	sed -i -e '/import pytest/aimport sys' \
		-e '/def test_autodoc_typehints_signature/i\
@pytest.mark.skipif(hasattr(sys, "pypy_version_info"), reason="broken on pypy3")' \
		tests/test_ext_autodoc_configs.py || die
	sed -i -e '/import pytest/aimport sys' \
		-e '/def test_autosummary_generate_content_for_module/i\
@pytest.mark.skipif(hasattr(sys, "pypy_version_info"), reason="broken on pypy3")' \
		tests/test_ext_autosummary.py || die
	sed -i -e '/def test_annotated_assignment_py36/i\
@pytest.mark.skipif(hasattr(sys, "pypy_version_info"), reason="broken on pypy3")' \
		tests/test_pycode_parser.py || die

	# disable internet access
	sed -i -e 's:^intersphinx_mapping:disabled_&:' \
		doc/conf.py || die

	distutils-r1_python_prepare_all
}

python_compile() {
	distutils-r1_python_compile

	# Generate the grammar. It will be caught by install somehow.
	# Note that the tests usually do it for us. However, I don't want
	# to trust USE=test really running all the tests, especially
	# with FEATURES=test-fail-continue.
	pushd "${BUILD_DIR}"/lib >/dev/null || die
	"${EPYTHON}" -m sphinx.pycode.__init__ || die "Grammar generation failed."
	popd >/dev/null || die
}

python_compile_all() {
	if use doc; then
		esetup.py build_sphinx
		HTML_DOCS=( "${BUILD_DIR}"/sphinx/html/. )
	fi
}

python_test() {
	mkdir -p "${BUILD_DIR}/sphinx_tempdir" || die
	local -x SPHINX_TEST_TEMPDIR="${BUILD_DIR}/sphinx_tempdir"
	pytest -vv || die "Tests fail with ${EPYTHON}"
}