2017-05-14 07:50:01 -07:00
# -*- makefile -*-
# Makefile for Sphinx documentation
#
2020-02-26 10:53:25 -07:00
# for cleaning
subdir- := devicetree/bindings
2017-05-14 07:50:01 -07:00
2019-06-04 05:26:27 -07: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 00:40:45 -07: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 07:50:01 -07:00
# You can set these variables from the command line.
SPHINXBUILD = sphinx-build
SPHINXOPTS =
SPHINXDIRS = .
2021-12-07 02:52:59 -07:00
DOCS_THEME =
2021-12-07 02:53:00 -07:00
DOCS_CSS =
2020-02-16 00:26:06 -07:00
_SPHINXDIRS = $( sort $( patsubst $( srctree) /Documentation/%/index.rst,%,$( wildcard $( srctree) /Documentation/*/index.rst) ) )
2017-05-14 07:50:01 -07:00
SPHINX_CONF = conf.py
PAPER =
BUILDDIR = $( obj) /output
PDFLATEX = xelatex
2022-02-09 18:26:53 -07:00
LATEXOPTS = -interaction= batchmode -no-shell-escape
2017-05-14 07:50:01 -07:00
2024-04-05 19:04:16 -07:00
# For denylisting "variable font" files
# Can be overridden by setting as an env variable
FONTS_CONF_DENY_VF ?= $( HOME) /deny-vf
2022-12-22 09:25:33 -07:00
i f e q ( $( findstring 1, $ ( KBUILD_VERBOSE ) ) , )
2020-10-27 03:56:15 -07:00
SPHINXOPTS += "-q"
e n d i f
2017-05-14 07:50:01 -07: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-16 15:08:06 -07:00
@echo
2019-05-31 09:02:11 -07:00
@$( srctree) /scripts/sphinx-pre-install
2017-05-14 07:50:01 -07:00
@echo " SKIP Sphinx $@ target. "
e l s e # HAVE_SPHINX
2019-03-30 06:45:58 -07:00
# User-friendly check for pdflatex and latexmk
2017-05-14 07:50:01 -07:00
HAVE_PDFLATEX := $( shell if which $( PDFLATEX) >/dev/null 2>& 1; then echo 1; else echo 0; fi )
2019-03-30 06:45:58 -07: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 07:50:01 -07: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 08:15:34 -07: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 07:50:01 -07: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 02:21:39 -07:00
# $3 name of the build subfolder / e.g. "userspace-api/media", used as:
2017-05-14 07:50:01 -07:00
# * dest folder relative to $(BUILDDIR) and
# * cache folder relative to $(BUILDDIR)/.doctrees
2020-03-04 02:21:39 -07:00
# $4 dest subfolder e.g. "man" for man pages at userspace-api/media/man
kbuild: use $(src) instead of $(srctree)/$(src) for source directory
Kbuild conventionally uses $(obj)/ for generated files, and $(src)/ for
checked-in source files. It is merely a convention without any functional
difference. In fact, $(obj) and $(src) are exactly the same, as defined
in scripts/Makefile.build:
src := $(obj)
When the kernel is built in a separate output directory, $(src) does
not accurately reflect the source directory location. While Kbuild
resolves this discrepancy by specifying VPATH=$(srctree) to search for
source files, it does not cover all cases. For example, when adding a
header search path for local headers, -I$(srctree)/$(src) is typically
passed to the compiler.
This introduces inconsistency between upstream and downstream Makefiles
because $(src) is used instead of $(srctree)/$(src) for the latter.
To address this inconsistency, this commit changes the semantics of
$(src) so that it always points to the directory in the source tree.
Going forward, the variables used in Makefiles will have the following
meanings:
$(obj) - directory in the object tree
$(src) - directory in the source tree (changed by this commit)
$(objtree) - the top of the kernel object tree
$(srctree) - the top of the kernel source tree
Consequently, $(srctree)/$(src) in upstream Makefiles need to be replaced
with $(src).
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
2024-04-27 07:55:02 -07:00
# $5 reST source folder relative to $(src),
2020-03-04 02:21:39 -07:00
# e.g. "userspace-api/media" for the linux-tv book-set at ./Documentation/userspace-api/media
2017-05-14 07:50:01 -07:00
quiet_cmd_sphinx = SPHINX $@ --> file://$( abspath $( BUILDDIR) /$3 /$4 )
2020-03-04 02:21:39 -07:00
cmd_sphinx = $( MAKE) BUILDDIR = $( abspath $( BUILDDIR) ) $( build) = Documentation/userspace-api/media $2 && \
2017-05-14 07:50:01 -07:00
PYTHONDONTWRITEBYTECODE = 1 \
kbuild: use $(src) instead of $(srctree)/$(src) for source directory
Kbuild conventionally uses $(obj)/ for generated files, and $(src)/ for
checked-in source files. It is merely a convention without any functional
difference. In fact, $(obj) and $(src) are exactly the same, as defined
in scripts/Makefile.build:
src := $(obj)
When the kernel is built in a separate output directory, $(src) does
not accurately reflect the source directory location. While Kbuild
resolves this discrepancy by specifying VPATH=$(srctree) to search for
source files, it does not cover all cases. For example, when adding a
header search path for local headers, -I$(srctree)/$(src) is typically
passed to the compiler.
This introduces inconsistency between upstream and downstream Makefiles
because $(src) is used instead of $(srctree)/$(src) for the latter.
To address this inconsistency, this commit changes the semantics of
$(src) so that it always points to the directory in the source tree.
Going forward, the variables used in Makefiles will have the following
meanings:
$(obj) - directory in the object tree
$(src) - directory in the source tree (changed by this commit)
$(objtree) - the top of the kernel object tree
$(srctree) - the top of the kernel source tree
Consequently, $(srctree)/$(src) in upstream Makefiles need to be replaced
with $(src).
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
2024-04-27 07:55:02 -07:00
BUILDDIR = $( abspath $( BUILDDIR) ) SPHINX_CONF = $( abspath $( src) /$5 /$( SPHINX_CONF) ) \
2021-01-31 18:00:24 -07:00
$( PYTHON3) $( srctree) /scripts/jobserver-exec \
2021-06-17 15:58:08 -07:00
$( CONFIG_SHELL) $( srctree) /Documentation/sphinx/parallel-wrapper.sh \
2017-05-14 07:50:01 -07:00
$( SPHINXBUILD) \
-b $2 \
kbuild: use $(src) instead of $(srctree)/$(src) for source directory
Kbuild conventionally uses $(obj)/ for generated files, and $(src)/ for
checked-in source files. It is merely a convention without any functional
difference. In fact, $(obj) and $(src) are exactly the same, as defined
in scripts/Makefile.build:
src := $(obj)
When the kernel is built in a separate output directory, $(src) does
not accurately reflect the source directory location. While Kbuild
resolves this discrepancy by specifying VPATH=$(srctree) to search for
source files, it does not cover all cases. For example, when adding a
header search path for local headers, -I$(srctree)/$(src) is typically
passed to the compiler.
This introduces inconsistency between upstream and downstream Makefiles
because $(src) is used instead of $(srctree)/$(src) for the latter.
To address this inconsistency, this commit changes the semantics of
$(src) so that it always points to the directory in the source tree.
Going forward, the variables used in Makefiles will have the following
meanings:
$(obj) - directory in the object tree
$(src) - directory in the source tree (changed by this commit)
$(objtree) - the top of the kernel object tree
$(srctree) - the top of the kernel source tree
Consequently, $(srctree)/$(src) in upstream Makefiles need to be replaced
with $(src).
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
2024-04-27 07:55:02 -07:00
-c $( abspath $( src) ) \
2017-05-14 07:50:01 -07:00
-d $( abspath $( BUILDDIR) /.doctrees/$3 ) \
-D version = $( KERNELVERSION) -D release = $( KERNELRELEASE) \
$( ALLSPHINXOPTS) \
kbuild: use $(src) instead of $(srctree)/$(src) for source directory
Kbuild conventionally uses $(obj)/ for generated files, and $(src)/ for
checked-in source files. It is merely a convention without any functional
difference. In fact, $(obj) and $(src) are exactly the same, as defined
in scripts/Makefile.build:
src := $(obj)
When the kernel is built in a separate output directory, $(src) does
not accurately reflect the source directory location. While Kbuild
resolves this discrepancy by specifying VPATH=$(srctree) to search for
source files, it does not cover all cases. For example, when adding a
header search path for local headers, -I$(srctree)/$(src) is typically
passed to the compiler.
This introduces inconsistency between upstream and downstream Makefiles
because $(src) is used instead of $(srctree)/$(src) for the latter.
To address this inconsistency, this commit changes the semantics of
$(src) so that it always points to the directory in the source tree.
Going forward, the variables used in Makefiles will have the following
meanings:
$(obj) - directory in the object tree
$(src) - directory in the source tree (changed by this commit)
$(objtree) - the top of the kernel object tree
$(srctree) - the top of the kernel source tree
Consequently, $(srctree)/$(src) in upstream Makefiles need to be replaced
with $(src).
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
2024-04-27 07:55:02 -07:00
$( abspath $( src) /$5 ) \
2021-12-07 02:53:00 -07:00
$( abspath $( BUILDDIR) /$3 /$4 ) && \
if [ " x $( DOCS_CSS) " != "x" ] ; then \
2021-12-11 01:56:59 -07:00
cp $( if $( patsubst /%,,$( DOCS_CSS) ) ,$( abspath $( srctree) /$( DOCS_CSS) ) ,$( DOCS_CSS) ) $( BUILDDIR) /$3 /_static/; \
2021-12-07 02:53:00 -07:00
fi
2017-05-14 07:50:01 -07:00
2023-11-21 04:48:31 -07:00
YNL_INDEX := $( srctree) /Documentation/networking/netlink_spec/index.rst
YNL_RST_DIR := $( srctree) /Documentation/networking/netlink_spec
YNL_YAML_DIR := $( srctree) /Documentation/netlink/specs
YNL_TOOL := $( srctree) /tools/net/ynl/ynl-gen-rst.py
YNL_RST_FILES_TMP := $( patsubst %.yaml,%.rst,$( wildcard $( YNL_YAML_DIR) /*.yaml) )
YNL_RST_FILES := $( patsubst $( YNL_YAML_DIR) %,$( YNL_RST_DIR) %, $( YNL_RST_FILES_TMP) )
$(YNL_INDEX) : $( YNL_RST_FILES )
2023-12-15 02:37:16 -07:00
$( Q) $( YNL_TOOL) -o $@ -x
2023-11-21 04:48:31 -07:00
2023-12-15 02:37:16 -07:00
$(YNL_RST_DIR)/%.rst : $( YNL_YAML_DIR ) /%.yaml $( YNL_TOOL )
$( Q) $( YNL_TOOL) -i $< -o $@
2023-11-21 04:48:31 -07:00
2024-03-04 21:23:00 -07:00
htmldocs texinfodocs latexdocs epubdocs xmldocs : $( YNL_INDEX )
htmldocs :
2019-06-04 06:55:49 -07:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2017-05-14 07:50:01 -07:00
@+$( foreach var,$( SPHINXDIRS) ,$( call loop_cmd,sphinx,html,$( var) ,,$( var) ) )
2023-07-18 08:15:34 -07: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 12:02:09 -07: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 07:50:01 -07:00
linkcheckdocs :
@$( foreach var,$( SPHINXDIRS) ,$( call loop_cmd,sphinx,linkcheck,$( var) ,,$( var) ) )
latexdocs :
2019-06-04 06:55:49 -07:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2017-05-14 07:50:01 -07: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
2024-04-05 19:04:16 -07:00
pdfdocs : DENY_VF = XDG_CONFIG_HOME =$( FONTS_CONF_DENY_VF )
2017-05-14 07:50:01 -07:00
pdfdocs : latexdocs
2019-06-04 06:55:49 -07:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2020-04-14 09:48:53 -07:00
$( foreach var,$( SPHINXDIRS) , \
2024-04-05 19:04:16 -07:00
$( MAKE) PDFLATEX = " $( PDFLATEX) " LATEXOPTS = " $( LATEXOPTS) " $( DENY_VF) -C $( BUILDDIR) /$( var) /latex || sh $( srctree) /scripts/check-variable-fonts.sh || exit; \
2020-04-14 09:48:53 -07:00
mkdir -p $( BUILDDIR) /$( var) /pdf; \
mv $( subst .tex,.pdf,$( wildcard $( BUILDDIR) /$( var) /latex/*.tex) ) $( BUILDDIR) /$( var) /pdf/; \
)
2017-05-14 07:50:01 -07:00
e n d i f # HAVE_PDFLATEX
epubdocs :
2019-06-04 06:55:49 -07:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2017-05-14 07:50:01 -07:00
@+$( foreach var,$( SPHINXDIRS) ,$( call loop_cmd,sphinx,epub,$( var) ,epub,$( var) ) )
xmldocs :
2019-06-04 06:55:49 -07:00
@$( srctree) /scripts/sphinx-pre-install --version-check
2017-05-14 07:50:01 -07: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 08:26:15 -07:00
refcheckdocs :
$( Q) cd $( srctree) ; scripts/documentation-file-ref-check
2017-05-14 07:50:01 -07:00
cleandocs :
2024-02-08 07:50:01 -07:00
$( Q) rm -f $( YNL_INDEX) $( YNL_RST_FILES)
2017-05-14 07:50:01 -07:00
$( Q) rm -rf $( BUILDDIR)
2020-03-04 02:21:39 -07:00
$( Q) $( MAKE) BUILDDIR = $( abspath $( BUILDDIR) ) $( build) = Documentation/userspace-api/media clean
2017-05-14 07:50:01 -07:00
dochelp :
@echo ' Linux kernel internal documentation in different formats from ReST:'
@echo ' htmldocs - HTML'
2022-11-16 12:02:09 -07:00
@echo ' texinfodocs - Texinfo'
@echo ' infodocs - Info'
2017-05-14 07:50:01 -07:00
@echo ' latexdocs - LaTeX'
@echo ' pdfdocs - PDF'
@echo ' epubdocs - EPUB'
@echo ' xmldocs - XML'
2019-10-25 04:52:32 -07: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 07:50:01 -07: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-02 16:44:18 -07:00
@echo
2021-12-11 01:57:00 -07:00
@echo ' make DOCS_THEME={sphinx-theme} selects a different Sphinx theme.'
2021-12-07 02:52:59 -07:00
@echo
2021-12-11 01:57:00 -07:00
@echo ' make DOCS_CSS={a .css file} adds a DOCS_CSS override file for html/epub output.'
2021-12-07 02:53:00 -07:00
@echo
2017-10-02 16:44:18 -07:00
@echo ' Default location for the generated documents is Documentation/output'