summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2020-10-03 22:26:32 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2020-10-03 22:30:20 +0900
commit178c05b0597e144fdc2117c7b46ac15723a290e8 (patch)
tree1fd34a4def75ca2926d0e98240ece3864ef5f939
parent88b81a06eb635a1596617f8971fa97a84c069e93 (diff)
downloadsphinx-git-178c05b0597e144fdc2117c7b46ac15723a290e8.tar.gz
Close #7996: manpage: Add man_make_section_directory7996_man_make_section_directory
Add a new config variable; man_make_section_directory to make a section directory on build man page. During 3.x, it defaults to False and will be changed to True on 4.0 release.
-rw-r--r--CHANGES2
-rw-r--r--doc/usage/configuration.rst6
-rw-r--r--sphinx/builders/manpage.py10
-rw-r--r--tests/test_build_manpage.py7
4 files changed, 23 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index df70ab46e..c5791a368 100644
--- a/CHANGES
+++ b/CHANGES
@@ -22,6 +22,8 @@ Features added
nested declarations.
* #8081: LaTeX: Allow to add LaTeX package via ``app.add_latex_package()`` until
just before writing .tex file
+* #7996: manpage: Add :confval:`man_make_section_directory` to make a section
+ directory on build man page
Bugs fixed
----------
diff --git a/doc/usage/configuration.rst b/doc/usage/configuration.rst
index 3fc3a5306..270fcbf33 100644
--- a/doc/usage/configuration.rst
+++ b/doc/usage/configuration.rst
@@ -2245,6 +2245,12 @@ These options influence manual page output.
.. versionadded:: 1.1
+.. confval:: man_make_section_directory
+
+ If true, make a section directory on build man page. Default is False.
+
+ .. versionadded:: 3.3
+
.. _texinfo-options:
diff --git a/sphinx/builders/manpage.py b/sphinx/builders/manpage.py
index 4166dece9..2a10ba62f 100644
--- a/sphinx/builders/manpage.py
+++ b/sphinx/builders/manpage.py
@@ -24,7 +24,7 @@ from sphinx.util import logging
from sphinx.util import progress_message
from sphinx.util.console import darkgreen # type: ignore
from sphinx.util.nodes import inline_all_toctrees
-from sphinx.util.osutil import make_filename_from_project
+from sphinx.util.osutil import ensuredir, make_filename_from_project
from sphinx.writers.manpage import ManualPageWriter, ManualPageTranslator
@@ -80,7 +80,12 @@ class ManualPageBuilder(Builder):
docsettings.authors = authors
docsettings.section = section
- targetname = '%s.%s' % (name, section)
+ if self.config.man_make_section_directory:
+ ensuredir(path.join(self.outdir, str(section)))
+ targetname = '%s/%s.%s' % (section, name, section)
+ else:
+ targetname = '%s.%s' % (name, section)
+
logger.info(darkgreen(targetname) + ' { ', nonl=True)
destination = FileOutput(
destination_path=path.join(self.outdir, targetname),
@@ -115,6 +120,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
app.add_config_value('man_pages', default_man_pages, None)
app.add_config_value('man_show_urls', False, None)
+ app.add_config_value('man_make_section_directory', False, None)
return {
'version': 'builtin',
diff --git a/tests/test_build_manpage.py b/tests/test_build_manpage.py
index c3c41a2ae..d4b1a320e 100644
--- a/tests/test_build_manpage.py
+++ b/tests/test_build_manpage.py
@@ -30,6 +30,13 @@ def test_all(app, status, warning):
assert 'Footnotes' not in content
+@pytest.mark.sphinx('man', testroot='basic',
+ confoverrides={'man_make_section_directory': True})
+def test_man_make_section_directory(app, status, warning):
+ app.build()
+ assert (app.outdir / '1' / 'python.1').exists()
+
+
@pytest.mark.sphinx('man', testroot='directive-code')
def test_captioned_code_block(app, status, warning):
app.builder.build_all()