2017-05-14 17:50:01 +03:00
# -*- makefile -*-
# Makefile for Sphinx documentation
#
2020-02-26 20:53:25 +03:00
# for cleaning
subdir- := devicetree/bindings
2017-05-14 17:50:01 +03:00
2019-06-04 15:26:27 +03:00
# Check for broken documentation file references
i f e q ( $( CONFIG_WARN_MISSING_DOCUMENTS ) , y )
$( shell $ ( srctree ) /scripts /documentation -file -ref -check --warn )
e n d i f
2020-10-30 10:40:45 +03:00
# Check for broken ABI files
i f e q ( $( CONFIG_WARN_ABI_ERRORS ) , y )
$( shell $ ( srctree ) /scripts /get_abi .pl validate --dir $ ( srctree ) /Documentation /ABI )
e n d i f
2017-05-14 17:50:01 +03:00
# You can set these variables from the command line.
SPHINXBUILD = sphinx-build
SPHINXOPTS =
SPHINXDIRS = .
2021-12-07 12:52:59 +03:00
DOCS_THEME =
2021-12-07 12:53:00 +03:00
DOCS_CSS =
2020-02-16 10:26:06 +03:00
_SPHINXDIRS = $( sort $( patsubst $( srctree) /Documentation/%/index.rst,%,$( wildcard $( srctree) /Documentation/*/index.rst) ) )
2017-05-14 17:50:01 +03:00
SPHINX_CONF = conf.py
PAPER =
BUILDDIR = $( obj) /output
PDFLATEX = xelatex
2022-02-10 04:26:53 +03:00
LATEXOPTS = -interaction= batchmode -no-shell-escape
2017-05-14 17:50:01 +03:00
2022-12-22 19:25:33 +03:00
i f e q ( $( findstring 1, $ ( KBUILD_VERBOSE ) ) , )
2020-10-27 13:56:15 +03:00
SPHINXOPTS += "-q"
e n d i f
2017-05-14 17:50:01 +03:00
# User-friendly check for sphinx-build
HAVE_SPHINX := $( shell if which $( SPHINXBUILD) >/dev/null 2>& 1; then echo 1; else echo 0; fi )
i f e q ( $( HAVE_SPHINX ) , 0 )
.DEFAULT :
$( warning The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed and in PATH, or set the SPHINXBUILD make variable to point to the full path of the '$(SPHINXBUILD)' executable.)
2017-07-17 01:08:06 +03:00
@echo
2019-05-31 19:02:11 +03:00
@$( srctree) /scripts/sphinx-pre-install
2017-05-14 17:50:01 +03:00
@echo " SKIP Sphinx $@ target. "
e l s e # HAVE_SPHINX
2019-03-30 16:45:58 +03:00
# User-friendly check for pdflatex and latexmk
2017-05-14 17:50:01 +03:00
HAVE_PDFLATEX := $( shell if which $( PDFLATEX) >/dev/null 2>& 1; then echo 1; else echo 0; fi )
2019-03-30 16:45:58 +03:00
HAVE_LATEXMK := $( shell if which latexmk >/dev/null 2>& 1; then echo 1; else echo 0; fi )
i f e q ( $( HAVE_LATEXMK ) , 1 )
PDFLATEX := latexmk -$( PDFLATEX)
e n d i f #HAVE_LATEXMK
2017-05-14 17:50:01 +03:00
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size = a4
PAPEROPT_letter = -D latex_paper_size = letter
KERNELDOC = $( srctree) /scripts/kernel-doc
KERNELDOC_CONF = -D kerneldoc_srctree = $( srctree) -D kerneldoc_bin = $( KERNELDOC)
ALLSPHINXOPTS = $( KERNELDOC_CONF) $( PAPEROPT_$( PAPER) ) $( SPHINXOPTS)
2023-07-18 18:15:34 +03:00
i f n e q ( $( wildcard $ ( srctree ) /.config ) , )
i f e q ( $( CONFIG_RUST ) , y )
# Let Sphinx know we will include rustdoc
ALLSPHINXOPTS += -t rustdoc
e n d i f
e n d i f
2017-05-14 17:50:01 +03:00
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $( PAPEROPT_$( PAPER) ) $( SPHINXOPTS) .
# commands; the 'cmd' from scripts/Kbuild.include is not *loopable*
loop_cmd = $( echo-cmd) $( cmd_$( 1) ) || exit;
# $2 sphinx builder e.g. "html"
2020-03-04 12:21:39 +03:00
# $3 name of the build subfolder / e.g. "userspace-api/media", used as:
2017-05-14 17:50:01 +03:00
# * dest folder relative to $(BUILDDIR) and
# * cache folder relative to $(BUILDDIR)/.doctrees
2020-03-04 12:21:39 +03:00
# $4 dest subfolder e.g. "man" for man pages at userspace-api/media/man
2017-05-14 17:50:01 +03:00
# $5 reST source folder relative to $(srctree)/$(src),
2020-03-04 12:21:39 +03:00
# e.g. "userspace-api/media" for the linux-tv book-set at ./Documentation/userspace-api/media
2017-05-14 17:50:01 +03:00
quiet_cmd_sphinx = SPHINX $@ --> file://$( abspath $( BUILDDIR) /$3 /$4 )
2020-03-04 12:21:39 +03:00
cmd_sphinx = $( MAKE) BUILDDIR = $( abspath $( BUILDDIR) ) $( build) = Documentation/userspace-api/media $2 && \
2017-05-14 17:50:01 +03:00
PYTHONDONTWRITEBYTECODE = 1 \
BUILDDIR = $( abspath $( BUILDDIR) ) SPHINX_CONF = $( abspath $( srctree) /$( src) /$5 /$( SPHINX_CONF) ) \
2021-02-01 04:00:24 +03:00
$( PYTHON3) $( srctree) /scripts/jobserver-exec \
2021-06-18 01:58:08 +03:00
$( CONFIG_SHELL) $( srctree) /Documentation/sphinx/parallel-wrapper.sh \
2017-05-14 17:50:01 +03:00
$( SPHINXBUILD) \
-b $2 \
-c $( abspath $( srctree) /$( src) ) \
-d $( abspath $( BUILDDIR) /.doctrees/$3 ) \
-D version = $( KERNELVERSION) -D release = $( KERNELRELEASE) \
$( ALLSPHINXOPTS) \
$( abspath $( srctree) /$( src) /$5 ) \
2021-12-07 12:53:00 +03:00
$( abspath $( BUILDDIR) /$3 /$4 ) && \
if [ " x $( DOCS_CSS) " != "x" ] ; then \
2021-12-11 11:56:59 +03:00
cp $( if $( patsubst /%,,$( DOCS_CSS) ) ,$( abspath $( srctree) /$( DOCS_CSS) ) ,$( DOCS_CSS) ) $( BUILDDIR) /$3 /_static/; \
2021-12-07 12:53:00 +03:00
fi
2017-05-14 17:50:01 +03:00
htmldocs :
2019-06-04 16:55:49 +03:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2017-05-14 17:50:01 +03:00
@+$( foreach var,$( SPHINXDIRS) ,$( call loop_cmd,sphinx,html,$( var) ,,$( var) ) )
2023-07-18 18:15:34 +03:00
# If Rust support is available and .config exists, add rustdoc generated contents.
# If there are any, the errors from this make rustdoc will be displayed but
# won't stop the execution of htmldocs
i f n e q ( $( wildcard $ ( srctree ) /.config ) , )
i f e q ( $( CONFIG_RUST ) , y )
$( Q) $( MAKE) rustdoc || true
e n d i f
e n d i f
2022-11-16 22:02:09 +03:00
texinfodocs :
@$( srctree) /scripts/sphinx-pre-install --version-check
@+$( foreach var,$( SPHINXDIRS) ,$( call loop_cmd,sphinx,texinfo,$( var) ,texinfo,$( var) ) )
# Note: the 'info' Make target is generated by sphinx itself when
# running the texinfodocs target define above.
infodocs : texinfodocs
$( MAKE) -C $( BUILDDIR) /texinfo info
2017-05-14 17:50:01 +03:00
linkcheckdocs :
@$( foreach var,$( SPHINXDIRS) ,$( call loop_cmd,sphinx,linkcheck,$( var) ,,$( var) ) )
latexdocs :
2019-06-04 16:55:49 +03:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2017-05-14 17:50:01 +03:00
@+$( foreach var,$( SPHINXDIRS) ,$( call loop_cmd,sphinx,latex,$( var) ,latex,$( var) ) )
i f e q ( $( HAVE_PDFLATEX ) , 0 )
pdfdocs :
$( warning The '$(PDFLATEX)' command was not found. Make sure you have it installed and in PATH to produce PDF output.)
@echo " SKIP Sphinx $@ target. "
e l s e # HAVE_PDFLATEX
pdfdocs : latexdocs
2019-06-04 16:55:49 +03:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2020-04-14 19:48:53 +03:00
$( foreach var,$( SPHINXDIRS) , \
$( MAKE) PDFLATEX = " $( PDFLATEX) " LATEXOPTS = " $( LATEXOPTS) " -C $( BUILDDIR) /$( var) /latex || exit; \
mkdir -p $( BUILDDIR) /$( var) /pdf; \
mv $( subst .tex,.pdf,$( wildcard $( BUILDDIR) /$( var) /latex/*.tex) ) $( BUILDDIR) /$( var) /pdf/; \
)
2017-05-14 17:50:01 +03:00
e n d i f # HAVE_PDFLATEX
epubdocs :
2019-06-04 16:55:49 +03:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2017-05-14 17:50:01 +03:00
@+$( foreach var,$( SPHINXDIRS) ,$( call loop_cmd,sphinx,epub,$( var) ,epub,$( var) ) )
xmldocs :
2019-06-04 16:55:49 +03:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2017-05-14 17:50:01 +03:00
@+$( foreach var,$( SPHINXDIRS) ,$( call loop_cmd,sphinx,xml,$( var) ,xml,$( var) ) )
e n d i f # HAVE_SPHINX
# The following targets are independent of HAVE_SPHINX, and the rules should
# work or silently pass without Sphinx.
2017-10-09 18:26:15 +03:00
refcheckdocs :
$( Q) cd $( srctree) ; scripts/documentation-file-ref-check
2017-05-14 17:50:01 +03:00
cleandocs :
$( Q) rm -rf $( BUILDDIR)
2020-03-04 12:21:39 +03:00
$( Q) $( MAKE) BUILDDIR = $( abspath $( BUILDDIR) ) $( build) = Documentation/userspace-api/media clean
2017-05-14 17:50:01 +03:00
dochelp :
@echo ' Linux kernel internal documentation in different formats from ReST:'
@echo ' htmldocs - HTML'
2022-11-16 22:02:09 +03:00
@echo ' texinfodocs - Texinfo'
@echo ' infodocs - Info'
2017-05-14 17:50:01 +03:00
@echo ' latexdocs - LaTeX'
@echo ' pdfdocs - PDF'
@echo ' epubdocs - EPUB'
@echo ' xmldocs - XML'
2019-10-25 14:52:32 +03:00
@echo ' linkcheckdocs - check for broken external links'
@echo ' (will connect to external hosts)'
@echo ' refcheckdocs - check for references to non-existing files under'
@echo ' Documentation'
2017-05-14 17:50:01 +03:00
@echo ' cleandocs - clean all generated files'
@echo
@echo ' make SPHINXDIRS="s1 s2" [target] Generate only docs of folder s1, s2'
@echo ' valid values for SPHINXDIRS are: $(_SPHINXDIRS)'
@echo
@echo ' make SPHINX_CONF={conf-file} [target] use *additional* sphinx-build'
@echo ' configuration. This is e.g. useful to build with nit-picking config.'
2017-10-03 02:44:18 +03:00
@echo
2021-12-11 11:57:00 +03:00
@echo ' make DOCS_THEME={sphinx-theme} selects a different Sphinx theme.'
2021-12-07 12:52:59 +03:00
@echo
2021-12-11 11:57:00 +03:00
@echo ' make DOCS_CSS={a .css file} adds a DOCS_CSS override file for html/epub output.'
2021-12-07 12:53:00 +03:00
@echo
2017-10-03 02:44:18 +03:00
@echo ' Default location for the generated documents is Documentation/output'