mirror of
https://github.com/torvalds/linux.git
synced 2024-12-11 21:52:04 +00:00
fd5d2b832d
This short series convers device-drivers.tmpl into the RST format, splits it up, and sets up the result under Documentation/driver-api/. For added fun, I've taken one top-level file (hsi.txt) and folded it into the document as a way of showing the direction I'm thinking I would like things to go. There is plenty more of this sort of work that could be done, to say the least - this is just a beginning! The formatted results can be seen at: http://static.lwn.net/kerneldoc/driver-api/index.html As part of the long-term task to turn Documentation/ into less of a horror movie, I'd like to collect documentation of the driver-specific API here. Arguably gpu/ and the media API stuff should eventually move here, though we can discuss the color of that particular shed some other day. Meanwhile, I'd appreciate comments on the general idea.
279 lines
8.6 KiB
Makefile
279 lines
8.6 KiB
Makefile
###
|
|
# 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
|
|
# to document the SRC - and how to read it.
|
|
# To add a new book the only step required is to add the book to the
|
|
# list of DOCBOOKS.
|
|
|
|
DOCBOOKS := z8530book.xml \
|
|
kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
|
|
writing_usb_driver.xml networking.xml \
|
|
kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \
|
|
gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
|
|
genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \
|
|
80211.xml debugobjects.xml sh.xml regulator.xml \
|
|
alsa-driver-api.xml writing-an-alsa-driver.xml \
|
|
tracepoint.xml w1.xml \
|
|
writing_musb_glue_layer.xml crypto-API.xml iio.xml
|
|
|
|
ifeq ($(DOCBOOKS),)
|
|
|
|
# Skip DocBook build if the user explicitly requested no DOCBOOKS.
|
|
.DEFAULT:
|
|
@echo " SKIP DocBook $@ target (DOCBOOKS=\"\" specified)."
|
|
else
|
|
ifneq ($(SPHINXDIRS),)
|
|
|
|
# Skip DocBook build if the user explicitly requested a sphinx dir
|
|
.DEFAULT:
|
|
@echo " SKIP DocBook $@ target (SPHINXDIRS specified)."
|
|
else
|
|
|
|
|
|
###
|
|
# The build process is as follows (targets):
|
|
# (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]
|
|
|
|
|
|
# for PDF and PS output you can choose between xmlto and docbook-utils tools
|
|
PDF_METHOD = $(prefer-db2x)
|
|
PS_METHOD = $(prefer-db2x)
|
|
|
|
|
|
targets += $(DOCBOOKS)
|
|
BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
|
|
xmldocs: $(BOOKS)
|
|
sgmldocs: xmldocs
|
|
|
|
PS := $(patsubst %.xml, %.ps, $(BOOKS))
|
|
psdocs: $(PS)
|
|
|
|
PDF := $(patsubst %.xml, %.pdf, $(BOOKS))
|
|
pdfdocs: $(PDF)
|
|
|
|
HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS)))
|
|
htmldocs: $(HTML)
|
|
$(call cmd,build_main_index)
|
|
|
|
MAN := $(patsubst %.xml, %.9, $(BOOKS))
|
|
mandocs: $(MAN)
|
|
find $(obj)/man -name '*.9' | xargs gzip -nf
|
|
|
|
installmandocs: mandocs
|
|
mkdir -p /usr/local/man/man9/
|
|
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/
|
|
|
|
# no-op for the DocBook toolchain
|
|
epubdocs:
|
|
latexdocs:
|
|
|
|
###
|
|
#External programs used
|
|
KERNELDOCXMLREF = $(srctree)/scripts/kernel-doc-xml-ref
|
|
KERNELDOC = $(srctree)/scripts/kernel-doc
|
|
DOCPROC = $(objtree)/scripts/docproc
|
|
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
|
|
|
|
XMLTOFLAGS = -m $(srctree)/$(src)/stylesheet.xsl
|
|
XMLTOFLAGS += --skip-validation
|
|
|
|
###
|
|
# 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
|
|
|
|
%.xml: %.tmpl $(KERNELDOC) $(DOCPROC) $(KERNELDOCXMLREF) FORCE
|
|
$(call if_changed_rule,docproc)
|
|
|
|
# Tell kbuild to always build the programs
|
|
always := $(hostprogs-y)
|
|
|
|
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
|
|
|
|
# the commands, generated from the chosen template
|
|
quiet_cmd_db2ps = PS $@
|
|
cmd_db2ps = $(subst TYPE,ps, $($(PS_METHOD)template))
|
|
%.ps : %.xml
|
|
$(call cmd,db2ps)
|
|
|
|
quiet_cmd_db2pdf = PDF $@
|
|
cmd_db2pdf = $(subst TYPE,pdf, $($(PDF_METHOD)template))
|
|
%.pdf : %.xml
|
|
$(call cmd,db2pdf)
|
|
|
|
|
|
index = index.html
|
|
main_idx = $(obj)/$(index)
|
|
quiet_cmd_build_main_index = HTML $(main_idx)
|
|
cmd_build_main_index = rm -rf $(main_idx); \
|
|
echo '<h1>Linux Kernel HTML Documentation</h1>' >> $(main_idx) && \
|
|
echo '<h2>Kernel Version: $(KERNELVERSION)</h2>' >> $(main_idx) && \
|
|
cat $(HTML) >> $(main_idx)
|
|
|
|
quiet_cmd_db2html = HTML $@
|
|
cmd_db2html = xmlto html $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \
|
|
echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/index.html"> \
|
|
$(patsubst %.html,%,$(notdir $@))</a><p>' > $@
|
|
|
|
###
|
|
# 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
|
|
@(which xmlto > /dev/null 2>&1) || \
|
|
(echo "*** You need to install xmlto ***"; \
|
|
exit 1)
|
|
@rm -rf $@ $(patsubst %.html,%,$@)
|
|
$(call cmd,db2html)
|
|
@if [ ! -z "$(PNG-$(basename $(notdir $@)))" ]; then \
|
|
cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi
|
|
|
|
quiet_cmd_db2man = MAN $@
|
|
cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man/$(*F) $< ; fi
|
|
%.9 : %.xml
|
|
@(which xmlto > /dev/null 2>&1) || \
|
|
(echo "*** You need to install xmlto ***"; \
|
|
exit 1)
|
|
$(Q)mkdir -p $(obj)/man/$(*F)
|
|
$(call cmd,db2man)
|
|
@touch $@
|
|
|
|
###
|
|
# Rules to generate postscripts and PNG images from .fig format files
|
|
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
|
|
gen_xml = :
|
|
quiet_gen_xml = echo ' GEN $@'
|
|
silent_gen_xml = :
|
|
%.xml: %.c
|
|
@$($(quiet)gen_xml)
|
|
@( \
|
|
echo "<programlisting>"; \
|
|
expand --tabs=8 < $< | \
|
|
sed -e "s/&/\\&/g" \
|
|
-e "s/</\\</g" \
|
|
-e "s/>/\\>/g"; \
|
|
echo "</programlisting>") > $@
|
|
|
|
endif # DOCBOOKS=""
|
|
endif # SPHINDIR=...
|
|
|
|
###
|
|
# Help targets as used by the top-level makefile
|
|
dochelp:
|
|
@echo ' Linux kernel internal documentation in different formats (DocBook):'
|
|
@echo ' htmldocs - HTML'
|
|
@echo ' pdfdocs - PDF'
|
|
@echo ' psdocs - Postscript'
|
|
@echo ' xmldocs - XML DocBook'
|
|
@echo ' mandocs - man pages'
|
|
@echo ' installmandocs - install man pages generated by mandocs'
|
|
@echo ' cleandocs - clean all generated DocBook files'
|
|
@echo
|
|
@echo ' make DOCBOOKS="s1.xml s2.xml" [target] Generate only docs s1.xml s2.xml'
|
|
@echo ' valid values for DOCBOOKS are: $(DOCBOOKS)'
|
|
@echo
|
|
@echo " make DOCBOOKS=\"\" [target] Don't generate docs from Docbook"
|
|
@echo ' This is useful to generate only the ReST docs (Sphinx)'
|
|
|
|
|
|
###
|
|
# Temporary files left by various tools
|
|
clean-files := $(DOCBOOKS) \
|
|
$(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)) \
|
|
$(index)
|
|
|
|
clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man
|
|
|
|
cleandocs:
|
|
$(Q)rm -f $(call objectify, $(clean-files))
|
|
$(Q)rm -rf $(call objectify, $(clean-dirs))
|
|
|
|
# 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)
|