2005-04-17 06:20:36 +08:00
|
|
|
###
|
|
|
|
# This makefile is used to generate the kernel documentation,
|
|
|
|
# primarily based on in-line comments in various source files.
|
|
|
|
# See Documentation/kernel-doc-nano-HOWTO.txt for instruction in how
|
2006-04-01 07:04:59 +08:00
|
|
|
# to document the SRC - and how to read it.
|
2005-04-17 06:20:36 +08:00
|
|
|
# To add a new book the only step required is to add the book to the
|
|
|
|
# list of DOCBOOKS.
|
|
|
|
|
2012-05-18 07:06:13 +08:00
|
|
|
DOCBOOKS := z8530book.xml device-drivers.xml \
|
2005-05-01 23:59:27 +08:00
|
|
|
kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
|
2009-12-16 08:46:59 +08:00
|
|
|
writing_usb_driver.xml networking.xml \
|
2008-03-21 02:43:45 +08:00
|
|
|
kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \
|
2006-06-29 17:24:47 +08:00
|
|
|
gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
|
2008-02-26 21:34:06 +08:00
|
|
|
genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \
|
2010-08-17 18:04:34 +08:00
|
|
|
80211.xml debugobjects.xml sh.xml regulator.xml \
|
2009-05-01 01:29:42 +08:00
|
|
|
alsa-driver-api.xml writing-an-alsa-driver.xml \
|
2016-08-04 21:59:37 +08:00
|
|
|
tracepoint.xml w1.xml \
|
2015-08-04 22:20:08 +08:00
|
|
|
writing_musb_glue_layer.xml crypto-API.xml iio.xml
|
2011-06-01 03:27:44 +08:00
|
|
|
|
2016-08-04 16:48:26 +08:00
|
|
|
ifeq ($(DOCBOOKS),)
|
|
|
|
|
|
|
|
# Skip DocBook build if the user explicitly requested no DOCBOOKS.
|
|
|
|
.DEFAULT:
|
|
|
|
@echo " SKIP DocBook $@ target (DOCBOOKS=\"\" specified)."
|
|
|
|
|
|
|
|
else
|
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
###
|
|
|
|
# The build process is as follows (targets):
|
2007-07-19 16:48:23 +08:00
|
|
|
# (xmldocs) [by docproc]
|
|
|
|
# file.tmpl --> file.xml +--> file.ps (psdocs) [by db2ps or xmlto]
|
|
|
|
# +--> file.pdf (pdfdocs) [by db2pdf or xmlto]
|
|
|
|
# +--> DIR=file (htmldocs) [by xmlto]
|
|
|
|
# +--> man/ (mandocs) [by xmlto]
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2005-11-14 08:08:15 +08:00
|
|
|
|
|
|
|
# for PDF and PS output you can choose between xmlto and docbook-utils tools
|
|
|
|
PDF_METHOD = $(prefer-db2x)
|
|
|
|
PS_METHOD = $(prefer-db2x)
|
|
|
|
|
|
|
|
|
2014-01-20 13:10:10 +08:00
|
|
|
targets += $(DOCBOOKS)
|
2005-04-17 06:20:36 +08:00
|
|
|
BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
|
2010-08-11 09:02:51 +08:00
|
|
|
xmldocs: $(BOOKS)
|
2005-04-17 06:20:36 +08:00
|
|
|
sgmldocs: xmldocs
|
|
|
|
|
|
|
|
PS := $(patsubst %.xml, %.ps, $(BOOKS))
|
|
|
|
psdocs: $(PS)
|
|
|
|
|
|
|
|
PDF := $(patsubst %.xml, %.pdf, $(BOOKS))
|
|
|
|
pdfdocs: $(PDF)
|
|
|
|
|
2007-04-11 23:44:12 +08:00
|
|
|
HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS)))
|
2011-05-25 23:24:48 +08:00
|
|
|
htmldocs: $(HTML)
|
2015-11-19 22:38:46 +08:00
|
|
|
$(call cmd,build_main_index)
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
MAN := $(patsubst %.xml, %.9, $(BOOKS))
|
|
|
|
mandocs: $(MAN)
|
2015-07-09 03:06:44 +08:00
|
|
|
find $(obj)/man -name '*.9' | xargs gzip -nf
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
installmandocs: mandocs
|
2005-05-01 23:59:27 +08:00
|
|
|
mkdir -p /usr/local/man/man9/
|
2015-08-07 06:36:52 +08:00
|
|
|
find $(obj)/man -name '*.9.gz' -printf '%h %f\n' | \
|
|
|
|
sort -k 2 -k 1 | uniq -f 1 | sed -e 's: :/:' | \
|
|
|
|
xargs install -m 644 -t /usr/local/man/man9/
|
2005-04-17 06:20:36 +08:00
|
|
|
|
Documentation/sphinx: add basic working Sphinx configuration and build
Add basic configuration and makefile to build documentation from any
.rst files under Documentation using Sphinx. For starters, there's just
the placeholder index.rst.
At the top level Makefile, hook Sphinx documentation targets alongside
(but independent of) the DocBook toolchain, having both be run on the
various 'make *docs' targets.
All Sphinx processing is placed into Documentation/Makefile.sphinx. Both
that and the Documentation/DocBook/Makefile are now expected to handle
all the documentation targets, explicitly ignoring them if they're not
relevant for that particular toolchain. The changes to the existing
DocBook Makefile are kept minimal.
There is graceful handling of missing Sphinx and rst2pdf (which is
needed for pdf output) by checking for the tool and python module,
respectively, with informative messages to the user.
If the Read the Docs theme (sphinx_rtd_theme) is available, use it, but
otherwise gracefully fall back to the Sphinx default theme, with an
informative message to the user, and slightly less pretty HTML output.
Sphinx can now handle htmldocs, pdfdocs (if rst2pdf is available),
epubdocs and xmldocs targets. The output documents are written into per
output type subdirectories under Documentation/output.
Finally, you can pass options to sphinx-build using the SPHINXBUILD make
variable. For example, 'make SPHINXOPTS=-v htmldocs' for more verbose
output from Sphinx.
This is based on the original work by Jonathan Corbet, but he probably
wouldn't recognize this as his own anymore.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2016-05-19 20:14:05 +08:00
|
|
|
# no-op for the DocBook toolchain
|
|
|
|
epubdocs:
|
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
###
|
|
|
|
#External programs used
|
2015-07-29 03:45:15 +08:00
|
|
|
KERNELDOCXMLREF = $(srctree)/scripts/kernel-doc-xml-ref
|
|
|
|
KERNELDOC = $(srctree)/scripts/kernel-doc
|
|
|
|
DOCPROC = $(objtree)/scripts/docproc
|
2015-09-28 08:09:52 +08:00
|
|
|
CHECK_LC_CTYPE = $(objtree)/scripts/check-lc_ctype
|
|
|
|
|
|
|
|
# Use a fixed encoding - UTF-8 if the C library has support built-in
|
|
|
|
# or ASCII if not
|
|
|
|
LC_CTYPE := $(call try-run, LC_CTYPE=C.UTF-8 $(CHECK_LC_CTYPE),C.UTF-8,C)
|
|
|
|
export LC_CTYPE
|
2005-05-01 23:59:27 +08:00
|
|
|
|
2014-03-18 14:47:13 +08:00
|
|
|
XMLTOFLAGS = -m $(srctree)/$(src)/stylesheet.xsl
|
2009-12-16 08:46:59 +08:00
|
|
|
XMLTOFLAGS += --skip-validation
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
###
|
|
|
|
# DOCPROC is used for two purposes:
|
|
|
|
# 1) To generate a dependency list for a .tmpl file
|
|
|
|
# 2) To preprocess a .tmpl file and call kernel-doc with
|
|
|
|
# appropriate parameters.
|
|
|
|
# The following rules are used to generate the .xml documentation
|
|
|
|
# required to generate the final targets. (ps, pdf, html).
|
|
|
|
quiet_cmd_docproc = DOCPROC $@
|
|
|
|
cmd_docproc = SRCTREE=$(srctree)/ $(DOCPROC) doc $< >$@
|
|
|
|
define rule_docproc
|
|
|
|
set -e; \
|
|
|
|
$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';) \
|
|
|
|
$(cmd_$(1)); \
|
|
|
|
( \
|
|
|
|
echo 'cmd_$@ := $(cmd_$(1))'; \
|
|
|
|
echo $@: `SRCTREE=$(srctree) $(DOCPROC) depend $<`; \
|
|
|
|
) > $(dir $@).$(notdir $@).cmd
|
|
|
|
endef
|
|
|
|
|
2015-07-29 03:45:15 +08:00
|
|
|
%.xml: %.tmpl $(KERNELDOC) $(DOCPROC) $(KERNELDOCXMLREF) FORCE
|
2005-04-17 06:20:36 +08:00
|
|
|
$(call if_changed_rule,docproc)
|
|
|
|
|
docsrc: build Documentation/ sources
Currently source files in the Documentation/ sub-dir can easily bit-rot
since they are not generally buildable, either because they are hidden in
text files or because there are no Makefile rules for them. This needs to
be fixed so that the source files remain usable and good examples of code
instead of bad examples.
Add the ability to build source files that are in the Documentation/ dir.
Add to Kconfig as "BUILD_DOCSRC" config symbol.
Use "CONFIG_BUILD_DOCSRC=1 make ..." to build objects from the
Documentation/ sources. Or enable BUILD_DOCSRC in the *config system.
However, this symbol depends on HEADERS_CHECK since the header files need
to be installed (for userspace builds).
Built (using cross-tools) for x86-64, i386, alpha, ia64, sparc32,
sparc64, powerpc, sh, m68k, & mips.
Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-08-13 06:09:06 +08:00
|
|
|
# Tell kbuild to always build the programs
|
|
|
|
always := $(hostprogs-y)
|
|
|
|
|
2005-11-14 08:08:15 +08:00
|
|
|
notfoundtemplate = echo "*** You have to install docbook-utils or xmlto ***"; \
|
|
|
|
exit 1
|
|
|
|
db2xtemplate = db2TYPE -o $(dir $@) $<
|
|
|
|
xmltotemplate = xmlto TYPE $(XMLTOFLAGS) -o $(dir $@) $<
|
|
|
|
|
|
|
|
# determine which methods are available
|
|
|
|
ifeq ($(shell which db2ps >/dev/null 2>&1 && echo found),found)
|
|
|
|
use-db2x = db2x
|
|
|
|
prefer-db2x = db2x
|
|
|
|
else
|
|
|
|
use-db2x = notfound
|
|
|
|
prefer-db2x = $(use-xmlto)
|
|
|
|
endif
|
|
|
|
ifeq ($(shell which xmlto >/dev/null 2>&1 && echo found),found)
|
|
|
|
use-xmlto = xmlto
|
|
|
|
prefer-xmlto = xmlto
|
|
|
|
else
|
|
|
|
use-xmlto = notfound
|
|
|
|
prefer-xmlto = $(use-db2x)
|
|
|
|
endif
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2005-11-14 08:08:15 +08:00
|
|
|
# the commands, generated from the chosen template
|
|
|
|
quiet_cmd_db2ps = PS $@
|
|
|
|
cmd_db2ps = $(subst TYPE,ps, $($(PS_METHOD)template))
|
2005-04-17 06:20:36 +08:00
|
|
|
%.ps : %.xml
|
|
|
|
$(call cmd,db2ps)
|
|
|
|
|
2008-10-30 05:00:57 +08:00
|
|
|
quiet_cmd_db2pdf = PDF $@
|
2005-11-14 08:08:15 +08:00
|
|
|
cmd_db2pdf = $(subst TYPE,pdf, $($(PDF_METHOD)template))
|
2005-04-17 06:20:36 +08:00
|
|
|
%.pdf : %.xml
|
|
|
|
$(call cmd,db2pdf)
|
|
|
|
|
2007-05-08 15:29:36 +08:00
|
|
|
|
2009-04-18 09:28:55 +08:00
|
|
|
index = index.html
|
2014-03-18 14:47:13 +08:00
|
|
|
main_idx = $(obj)/$(index)
|
2015-11-19 22:38:46 +08:00
|
|
|
quiet_cmd_build_main_index = HTML $(main_idx)
|
|
|
|
cmd_build_main_index = rm -rf $(main_idx); \
|
2007-05-08 15:29:36 +08:00
|
|
|
echo '<h1>Linux Kernel HTML Documentation</h1>' >> $(main_idx) && \
|
|
|
|
echo '<h2>Kernel Version: $(KERNELVERSION)</h2>' >> $(main_idx) && \
|
|
|
|
cat $(HTML) >> $(main_idx)
|
|
|
|
|
2008-10-30 05:00:57 +08:00
|
|
|
quiet_cmd_db2html = HTML $@
|
2013-11-07 05:18:27 +08:00
|
|
|
cmd_db2html = xmlto html $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \
|
2005-05-01 23:59:28 +08:00
|
|
|
echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/index.html"> \
|
2014-03-18 14:47:13 +08:00
|
|
|
$(patsubst %.html,%,$(notdir $@))</a><p>' > $@
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2015-07-29 03:45:15 +08:00
|
|
|
###
|
|
|
|
# Rules to create an aux XML and .db, and use them to re-process the DocBook XML
|
|
|
|
# to fill internal hyperlinks
|
|
|
|
gen_aux_xml = :
|
|
|
|
quiet_gen_aux_xml = echo ' XMLREF $@'
|
|
|
|
silent_gen_aux_xml = :
|
|
|
|
%.aux.xml: %.xml
|
|
|
|
@$($(quiet)gen_aux_xml)
|
|
|
|
@rm -rf $@
|
|
|
|
@(cat $< | egrep "^<refentry id" | egrep -o "\".*\"" | cut -f 2 -d \" > $<.db)
|
|
|
|
@$(KERNELDOCXMLREF) -db $<.db $< > $@
|
|
|
|
.PRECIOUS: %.aux.xml
|
|
|
|
|
|
|
|
%.html: %.aux.xml
|
2005-05-01 23:59:27 +08:00
|
|
|
@(which xmlto > /dev/null 2>&1) || \
|
2005-05-01 23:59:28 +08:00
|
|
|
(echo "*** You need to install xmlto ***"; \
|
2005-04-17 06:20:36 +08:00
|
|
|
exit 1)
|
|
|
|
@rm -rf $@ $(patsubst %.html,%,$@)
|
|
|
|
$(call cmd,db2html)
|
|
|
|
@if [ ! -z "$(PNG-$(basename $(notdir $@)))" ]; then \
|
|
|
|
cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi
|
|
|
|
|
2005-11-14 08:08:15 +08:00
|
|
|
quiet_cmd_db2man = MAN $@
|
2015-08-07 06:36:52 +08:00
|
|
|
cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man/$(*F) $< ; fi
|
2005-05-01 23:59:27 +08:00
|
|
|
%.9 : %.xml
|
|
|
|
@(which xmlto > /dev/null 2>&1) || \
|
2005-05-01 23:59:28 +08:00
|
|
|
(echo "*** You need to install xmlto ***"; \
|
2005-05-01 23:59:27 +08:00
|
|
|
exit 1)
|
2015-08-07 06:36:52 +08:00
|
|
|
$(Q)mkdir -p $(obj)/man/$(*F)
|
2005-05-01 23:59:27 +08:00
|
|
|
$(call cmd,db2man)
|
|
|
|
@touch $@
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
###
|
2007-10-20 07:30:25 +08:00
|
|
|
# Rules to generate postscripts and PNG images from .fig format files
|
2005-04-17 06:20:36 +08:00
|
|
|
quiet_cmd_fig2eps = FIG2EPS $@
|
|
|
|
cmd_fig2eps = fig2dev -Leps $< $@
|
|
|
|
|
|
|
|
%.eps: %.fig
|
|
|
|
@(which fig2dev > /dev/null 2>&1) || \
|
|
|
|
(echo "*** You need to install transfig ***"; \
|
|
|
|
exit 1)
|
|
|
|
$(call cmd,fig2eps)
|
|
|
|
|
|
|
|
quiet_cmd_fig2png = FIG2PNG $@
|
|
|
|
cmd_fig2png = fig2dev -Lpng $< $@
|
|
|
|
|
|
|
|
%.png: %.fig
|
|
|
|
@(which fig2dev > /dev/null 2>&1) || \
|
|
|
|
(echo "*** You need to install transfig ***"; \
|
|
|
|
exit 1)
|
|
|
|
$(call cmd,fig2png)
|
|
|
|
|
|
|
|
###
|
|
|
|
# Rule to convert a .c file to inline XML documentation
|
2008-03-29 05:30:58 +08:00
|
|
|
gen_xml = :
|
|
|
|
quiet_gen_xml = echo ' GEN $@'
|
|
|
|
silent_gen_xml = :
|
2005-04-17 06:20:36 +08:00
|
|
|
%.xml: %.c
|
2008-03-29 05:30:58 +08:00
|
|
|
@$($(quiet)gen_xml)
|
2005-04-17 06:20:36 +08:00
|
|
|
@( \
|
|
|
|
echo "<programlisting>"; \
|
|
|
|
expand --tabs=8 < $< | \
|
|
|
|
sed -e "s/&/\\&/g" \
|
|
|
|
-e "s/</\\</g" \
|
|
|
|
-e "s/>/\\>/g"; \
|
|
|
|
echo "</programlisting>") > $@
|
|
|
|
|
2016-08-04 16:48:26 +08:00
|
|
|
endif # DOCBOOKS=""
|
2016-07-10 00:12:45 +08:00
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
###
|
|
|
|
# Help targets as used by the top-level makefile
|
|
|
|
dochelp:
|
2016-06-22 20:41:48 +08:00
|
|
|
@echo ' Linux kernel internal documentation in different formats (DocBook):'
|
2006-12-07 07:16:26 +08:00
|
|
|
@echo ' htmldocs - HTML'
|
|
|
|
@echo ' pdfdocs - PDF'
|
|
|
|
@echo ' psdocs - Postscript'
|
|
|
|
@echo ' xmldocs - XML DocBook'
|
2009-04-11 05:20:54 +08:00
|
|
|
@echo ' mandocs - man pages'
|
|
|
|
@echo ' installmandocs - install man pages generated by mandocs'
|
|
|
|
@echo ' cleandocs - clean all generated DocBook files'
|
2015-11-19 22:38:44 +08:00
|
|
|
@echo
|
2016-06-22 20:41:48 +08:00
|
|
|
@echo ' make DOCBOOKS="s1.xml s2.xml" [target] Generate only docs s1.xml s2.xml'
|
2015-11-19 22:38:44 +08:00
|
|
|
@echo ' valid values for DOCBOOKS are: $(DOCBOOKS)'
|
2016-07-10 00:12:45 +08:00
|
|
|
@echo
|
2016-08-04 16:48:26 +08:00
|
|
|
@echo " make DOCBOOKS=\"\" [target] Don't generate docs from Docbook"
|
2016-07-10 00:12:45 +08:00
|
|
|
@echo ' This is useful to generate only the ReST docs (Sphinx)'
|
2015-11-19 22:38:44 +08:00
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
###
|
|
|
|
# Temporary files left by various tools
|
|
|
|
clean-files := $(DOCBOOKS) \
|
2015-07-29 03:45:15 +08:00
|
|
|
$(patsubst %.xml, %.dvi, $(DOCBOOKS)) \
|
|
|
|
$(patsubst %.xml, %.aux, $(DOCBOOKS)) \
|
|
|
|
$(patsubst %.xml, %.tex, $(DOCBOOKS)) \
|
|
|
|
$(patsubst %.xml, %.log, $(DOCBOOKS)) \
|
|
|
|
$(patsubst %.xml, %.out, $(DOCBOOKS)) \
|
|
|
|
$(patsubst %.xml, %.ps, $(DOCBOOKS)) \
|
|
|
|
$(patsubst %.xml, %.pdf, $(DOCBOOKS)) \
|
|
|
|
$(patsubst %.xml, %.html, $(DOCBOOKS)) \
|
|
|
|
$(patsubst %.xml, %.9, $(DOCBOOKS)) \
|
|
|
|
$(patsubst %.xml, %.aux.xml, $(DOCBOOKS)) \
|
|
|
|
$(patsubst %.xml, %.xml.db, $(DOCBOOKS)) \
|
|
|
|
$(patsubst %.xml, %.xml, $(DOCBOOKS)) \
|
2009-12-16 08:46:59 +08:00
|
|
|
$(index)
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2011-06-01 03:27:44 +08:00
|
|
|
clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man
|
2006-03-06 06:14:10 +08:00
|
|
|
|
2016-07-27 17:32:31 +08:00
|
|
|
cleandocs:
|
2009-04-11 05:20:54 +08:00
|
|
|
$(Q)rm -f $(call objectify, $(clean-files))
|
|
|
|
$(Q)rm -rf $(call objectify, $(clean-dirs))
|
|
|
|
|
2006-03-06 06:14:10 +08:00
|
|
|
# Declare the contents of the .PHONY variable as phony. We keep that
|
|
|
|
# information in a variable se we can use it in if_changed and friends.
|
|
|
|
|
|
|
|
.PHONY: $(PHONY)
|