2017-05-14 22:50:01 +08:00
# -*- makefile -*-
# Makefile for Sphinx documentation
#
2020-02-27 01:53:25 +08:00
# for cleaning
subdir- := devicetree/bindings
2017-05-14 22:50:01 +08:00
2019-06-04 20:26:27 +08: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 15:40:45 +08: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 22:50:01 +08:00
# You can set these variables from the command line.
SPHINXBUILD = sphinx-build
SPHINXOPTS =
SPHINXDIRS = .
2021-12-07 17:52:59 +08:00
DOCS_THEME =
2021-12-07 17:53:00 +08:00
DOCS_CSS =
2020-02-16 15:26:06 +08:00
_SPHINXDIRS = $( sort $( patsubst $( srctree) /Documentation/%/index.rst,%,$( wildcard $( srctree) /Documentation/*/index.rst) ) )
2017-05-14 22:50:01 +08:00
SPHINX_CONF = conf.py
PAPER =
BUILDDIR = $( obj) /output
PDFLATEX = xelatex
LATEXOPTS = -interaction= batchmode
2020-10-27 18:56:15 +08:00
i f e q ( $( KBUILD_VERBOSE ) , 0 )
SPHINXOPTS += "-q"
e n d i f
2017-05-14 22:50:01 +08: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 06:08:06 +08:00
@echo
2019-06-01 00:02:11 +08:00
@$( srctree) /scripts/sphinx-pre-install
2017-05-14 22:50:01 +08:00
@echo " SKIP Sphinx $@ target. "
e l s e # HAVE_SPHINX
2019-03-30 21:45:58 +08:00
# User-friendly check for pdflatex and latexmk
2017-05-14 22:50:01 +08:00
HAVE_PDFLATEX := $( shell if which $( PDFLATEX) >/dev/null 2>& 1; then echo 1; else echo 0; fi )
2019-03-30 21:45:58 +08: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 22:50:01 +08: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)
# 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 17:21:39 +08:00
# $3 name of the build subfolder / e.g. "userspace-api/media", used as:
2017-05-14 22:50:01 +08:00
# * dest folder relative to $(BUILDDIR) and
# * cache folder relative to $(BUILDDIR)/.doctrees
2020-03-04 17:21:39 +08:00
# $4 dest subfolder e.g. "man" for man pages at userspace-api/media/man
2017-05-14 22:50:01 +08:00
# $5 reST source folder relative to $(srctree)/$(src),
2020-03-04 17:21:39 +08:00
# e.g. "userspace-api/media" for the linux-tv book-set at ./Documentation/userspace-api/media
2017-05-14 22:50:01 +08:00
quiet_cmd_sphinx = SPHINX $@ --> file://$( abspath $( BUILDDIR) /$3 /$4 )
2020-03-04 17:21:39 +08:00
cmd_sphinx = $( MAKE) BUILDDIR = $( abspath $( BUILDDIR) ) $( build) = Documentation/userspace-api/media $2 && \
2017-05-14 22:50:01 +08:00
PYTHONDONTWRITEBYTECODE = 1 \
BUILDDIR = $( abspath $( BUILDDIR) ) SPHINX_CONF = $( abspath $( srctree) /$( src) /$5 /$( SPHINX_CONF) ) \
2021-02-01 09:00:24 +08:00
$( PYTHON3) $( srctree) /scripts/jobserver-exec \
2021-06-18 06:58:08 +08:00
$( CONFIG_SHELL) $( srctree) /Documentation/sphinx/parallel-wrapper.sh \
2017-05-14 22:50:01 +08: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 17:53:00 +08:00
$( abspath $( BUILDDIR) /$3 /$4 ) && \
if [ " x $( DOCS_CSS) " != "x" ] ; then \
2021-12-11 16:56:59 +08:00
cp $( if $( patsubst /%,,$( DOCS_CSS) ) ,$( abspath $( srctree) /$( DOCS_CSS) ) ,$( DOCS_CSS) ) $( BUILDDIR) /$3 /_static/; \
2021-12-07 17:53:00 +08:00
fi
2017-05-14 22:50:01 +08:00
htmldocs :
2019-06-04 21:55:49 +08:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2017-05-14 22:50:01 +08:00
@+$( foreach var,$( SPHINXDIRS) ,$( call loop_cmd,sphinx,html,$( var) ,,$( var) ) )
linkcheckdocs :
@$( foreach var,$( SPHINXDIRS) ,$( call loop_cmd,sphinx,linkcheck,$( var) ,,$( var) ) )
latexdocs :
2019-06-04 21:55:49 +08:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2017-05-14 22:50:01 +08: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 21:55:49 +08:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2020-04-15 00:48:53 +08: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 22:50:01 +08:00
e n d i f # HAVE_PDFLATEX
epubdocs :
2019-06-04 21:55:49 +08:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2017-05-14 22:50:01 +08:00
@+$( foreach var,$( SPHINXDIRS) ,$( call loop_cmd,sphinx,epub,$( var) ,epub,$( var) ) )
xmldocs :
2019-06-04 21:55:49 +08:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2017-05-14 22:50:01 +08: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 23:26:15 +08:00
refcheckdocs :
$( Q) cd $( srctree) ; scripts/documentation-file-ref-check
2017-05-14 22:50:01 +08:00
cleandocs :
$( Q) rm -rf $( BUILDDIR)
2020-03-04 17:21:39 +08:00
$( Q) $( MAKE) BUILDDIR = $( abspath $( BUILDDIR) ) $( build) = Documentation/userspace-api/media clean
2017-05-14 22:50:01 +08:00
dochelp :
@echo ' Linux kernel internal documentation in different formats from ReST:'
@echo ' htmldocs - HTML'
@echo ' latexdocs - LaTeX'
@echo ' pdfdocs - PDF'
@echo ' epubdocs - EPUB'
@echo ' xmldocs - XML'
2019-10-25 19:52:32 +08: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 22:50:01 +08: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 07:44:18 +08:00
@echo
2021-12-11 16:57:00 +08:00
@echo ' make DOCS_THEME={sphinx-theme} selects a different Sphinx theme.'
2021-12-07 17:52:59 +08:00
@echo
2021-12-11 16:57:00 +08:00
@echo ' make DOCS_CSS={a .css file} adds a DOCS_CSS override file for html/epub output.'
2021-12-07 17:53:00 +08:00
@echo
2017-10-03 07:44:18 +08:00
@echo ' Default location for the generated documents is Documentation/output'