2017-05-14 22:50:01 +08:00
# -*- makefile -*-
# Makefile for Sphinx documentation
#
2018-09-07 02:26:07 +08:00
subdir-y := 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
2017-05-14 22:50:01 +08:00
# You can set these variables from the command line.
SPHINXBUILD = sphinx-build
SPHINXOPTS =
SPHINXDIRS = .
_SPHINXDIRS = $( patsubst $( srctree) /Documentation/%/conf.py,%,$( wildcard $( srctree) /Documentation/*/conf.py) )
SPHINX_CONF = conf.py
PAPER =
BUILDDIR = $( obj) /output
PDFLATEX = xelatex
LATEXOPTS = -interaction= batchmode
# 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-09-25 07:29:58 +08:00
export SPHINX_PARALLEL = $( shell perl -e 'open IN,"sphinx-build --version 2>&1 |"; while (<IN>) { if (m/([\d\.]+)/) { print "auto" if ($$1 >= "1.7") } ;} close IN' )
2019-05-30 07:09:31 +08:00
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"
# $3 name of the build subfolder / e.g. "media", used as:
# * dest folder relative to $(BUILDDIR) and
# * cache folder relative to $(BUILDDIR)/.doctrees
# $4 dest subfolder e.g. "man" for man pages at media/man
# $5 reST source folder relative to $(srctree)/$(src),
# e.g. "media" for the linux-tv book-set at ./Documentation/media
quiet_cmd_sphinx = SPHINX $@ --> file://$( abspath $( BUILDDIR) /$3 /$4 )
cmd_sphinx = $( MAKE) BUILDDIR = $( abspath $( BUILDDIR) ) $( build) = Documentation/media $2 && \
PYTHONDONTWRITEBYTECODE = 1 \
BUILDDIR = $( abspath $( BUILDDIR) ) SPHINX_CONF = $( abspath $( srctree) /$( src) /$5 /$( SPHINX_CONF) ) \
$( SPHINXBUILD) \
2019-09-25 07:29:58 +08:00
-j $( shell python $( srctree) /scripts/jobserver-count $( SPHINX_PARALLEL) ) \
2017-05-14 22:50:01 +08:00
-b $2 \
-c $( abspath $( srctree) /$( src) ) \
-d $( abspath $( BUILDDIR) /.doctrees/$3 ) \
-D version = $( KERNELVERSION) -D release = $( KERNELRELEASE) \
$( ALLSPHINXOPTS) \
$( abspath $( srctree) /$( src) /$5 ) \
$( abspath $( BUILDDIR) /$3 /$4 )
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
2019-03-30 21:45:58 +08:00
$( foreach var,$( SPHINXDIRS) , $( MAKE) PDFLATEX = " $( PDFLATEX) " LATEXOPTS = " $( LATEXOPTS) " -C $( BUILDDIR) /$( var) /latex || exit; )
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)
$( Q) $( MAKE) BUILDDIR = $( abspath $( BUILDDIR) ) $( build) = Documentation/media clean
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'
@echo ' linkcheckdocs - check for broken external links (will connect to external hosts)'
2017-10-09 23:26:15 +08:00
@echo ' refcheckdocs - check for references to non-existing files under 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
@echo ' Default location for the generated documents is Documentation/output'