diff --git a/sphinx/builders/html/__init__.py b/sphinx/builders/html/__init__.py index ad8436c932..7265370bb4 100644 --- a/sphinx/builders/html/__init__.py +++ b/sphinx/builders/html/__init__.py @@ -468,6 +468,16 @@ def prepare_writing(self, docnames: Set[str]) -> None: else: self.last_updated = None + # If the logo or favicon are urls, keep them as-is, otherwise + # strip the relative path as the files will be copied into _static. + logo = self.config.html_logo or '' + favicon = self.config.html_favicon or '' + + if not isurl(logo): + logo = path.basename(logo) + if not isurl(favicon): + favicon = path.basename(favicon) + self.relations = self.env.collect_relations() rellinks: List[Tuple[str, str, str, str]] = [] @@ -510,8 +520,8 @@ def prepare_writing(self, docnames: Set[str]) -> None: 'rellinks': rellinks, 'builder': self.name, 'parents': [], - 'logo': self.config.html_logo or '', - 'favicon': self.config.html_favicon or '', + 'logo': logo, + 'favicon': favicon, 'html5_doctype': html5_ready and not self.config.html4_writer, } if self.theme: diff --git a/tests/roots/test-local-logo/conf.py b/tests/roots/test-local-logo/conf.py new file mode 100644 index 0000000000..1a166c1305 --- /dev/null +++ b/tests/roots/test-local-logo/conf.py @@ -0,0 +1,4 @@ +latex_documents = [ + ('index', 'test.tex', 'The basic Sphinx documentation for testing', 'Sphinx', 'report') +] +html_logo = "images/img.png" diff --git a/tests/roots/test-local-logo/images/img.png b/tests/roots/test-local-logo/images/img.png new file mode 100644 index 0000000000..a97e86d66a Binary files /dev/null and b/tests/roots/test-local-logo/images/img.png differ diff --git a/tests/roots/test-local-logo/index.rst b/tests/roots/test-local-logo/index.rst new file mode 100644 index 0000000000..48407e643c --- /dev/null +++ b/tests/roots/test-local-logo/index.rst @@ -0,0 +1,32 @@ +The basic Sphinx documentation for testing +========================================== + +Sphinx is a tool that makes it easy to create intelligent and beautiful +documentation for Python projects (or other documents consisting of multiple +reStructuredText sources), written by Georg Brandl. It was originally created +for the new Python documentation, and has excellent facilities for Python +project documentation, but C/C++ is supported as well, and more languages are +planned. + +Sphinx uses reStructuredText as its markup language, and many of its strengths +come from the power and straightforwardness of reStructuredText and its parsing +and translating suite, the Docutils. + +features +-------- + +Among its features are the following: + +* Output formats: HTML (including derivative formats such as HTML Help, Epub + and Qt Help), plain text, manual pages and LaTeX or direct PDF output + using rst2pdf +* Extensive cross-references: semantic markup and automatic links + for functions, classes, glossary terms and similar pieces of information +* Hierarchical structure: easy definition of a document tree, with automatic + links to siblings, parents and children +* Automatic indices: general index as well as a module index +* Code handling: automatic highlighting using the Pygments highlighter +* Flexible HTML output using the Jinja 2 templating engine +* Various extensions are available, e.g. for automatic testing of snippets + and inclusion of appropriately formatted docstrings +* Setuptools integration diff --git a/tests/test_build_html.py b/tests/test_build_html.py index e74319f198..d295cf982c 100644 --- a/tests/test_build_html.py +++ b/tests/test_build_html.py @@ -1340,6 +1340,15 @@ def test_html_remote_logo(app, status, warning): assert not (app.outdir / 'python-logo.png').exists() +@pytest.mark.sphinx('html', testroot='local-logo') +def test_html_local_logo(app, status, warning): + app.builder.build_all() + + result = (app.outdir / 'index.html').read_text() + assert ('' in result) + assert (app.outdir / '_static/img.png').exists() + + @pytest.mark.sphinx('html', testroot='basic') def test_html_sidebar(app, status, warning): ctx = {}