at v3.14-rc2 242 lines 7.5 kB view raw
1### 2# This makefile is used to generate the kernel documentation, 3# primarily based on in-line comments in various source files. 4# See Documentation/kernel-doc-nano-HOWTO.txt for instruction in how 5# to document the SRC - and how to read it. 6# To add a new book the only step required is to add the book to the 7# list of DOCBOOKS. 8 9DOCBOOKS := z8530book.xml device-drivers.xml \ 10 kernel-hacking.xml kernel-locking.xml deviceiobook.xml \ 11 writing_usb_driver.xml networking.xml \ 12 kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \ 13 gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \ 14 genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \ 15 80211.xml debugobjects.xml sh.xml regulator.xml \ 16 alsa-driver-api.xml writing-an-alsa-driver.xml \ 17 tracepoint.xml drm.xml media_api.xml 18 19include $(srctree)/Documentation/DocBook/media/Makefile 20 21### 22# The build process is as follows (targets): 23# (xmldocs) [by docproc] 24# file.tmpl --> file.xml +--> file.ps (psdocs) [by db2ps or xmlto] 25# +--> file.pdf (pdfdocs) [by db2pdf or xmlto] 26# +--> DIR=file (htmldocs) [by xmlto] 27# +--> man/ (mandocs) [by xmlto] 28 29 30# for PDF and PS output you can choose between xmlto and docbook-utils tools 31PDF_METHOD = $(prefer-db2x) 32PS_METHOD = $(prefer-db2x) 33 34 35### 36# The targets that may be used. 37PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs 38 39BOOKS := $(addprefix $(obj)/,$(DOCBOOKS)) 40xmldocs: $(BOOKS) 41sgmldocs: xmldocs 42 43PS := $(patsubst %.xml, %.ps, $(BOOKS)) 44psdocs: $(PS) 45 46PDF := $(patsubst %.xml, %.pdf, $(BOOKS)) 47pdfdocs: $(PDF) 48 49HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) 50htmldocs: $(HTML) 51 $(call build_main_index) 52 $(call build_images) 53 $(call install_media_images) 54 55MAN := $(patsubst %.xml, %.9, $(BOOKS)) 56mandocs: $(MAN) 57 $(if $(wildcard $(obj)/man/*.9),gzip -f $(obj)/man/*.9) 58 59installmandocs: mandocs 60 mkdir -p /usr/local/man/man9/ 61 install Documentation/DocBook/man/*.9.gz /usr/local/man/man9/ 62 63### 64#External programs used 65KERNELDOC = $(srctree)/scripts/kernel-doc 66DOCPROC = $(objtree)/scripts/docproc 67 68XMLTOFLAGS = -m $(srctree)/Documentation/DocBook/stylesheet.xsl 69XMLTOFLAGS += --skip-validation 70 71### 72# DOCPROC is used for two purposes: 73# 1) To generate a dependency list for a .tmpl file 74# 2) To preprocess a .tmpl file and call kernel-doc with 75# appropriate parameters. 76# The following rules are used to generate the .xml documentation 77# required to generate the final targets. (ps, pdf, html). 78quiet_cmd_docproc = DOCPROC $@ 79 cmd_docproc = SRCTREE=$(srctree)/ $(DOCPROC) doc $< >$@ 80define rule_docproc 81 set -e; \ 82 $(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';) \ 83 $(cmd_$(1)); \ 84 ( \ 85 echo 'cmd_$@ := $(cmd_$(1))'; \ 86 echo $@: `SRCTREE=$(srctree) $(DOCPROC) depend $<`; \ 87 ) > $(dir $@).$(notdir $@).cmd 88endef 89 90%.xml: %.tmpl FORCE 91 $(call if_changed_rule,docproc) 92 93### 94#Read in all saved dependency files 95cmd_files := $(wildcard $(foreach f,$(BOOKS),$(dir $(f)).$(notdir $(f)).cmd)) 96 97ifneq ($(cmd_files),) 98 include $(cmd_files) 99endif 100 101### 102# Changes in kernel-doc force a rebuild of all documentation 103$(BOOKS): $(KERNELDOC) 104 105# Tell kbuild to always build the programs 106always := $(hostprogs-y) 107 108notfoundtemplate = echo "*** You have to install docbook-utils or xmlto ***"; \ 109 exit 1 110db2xtemplate = db2TYPE -o $(dir $@) $< 111xmltotemplate = xmlto TYPE $(XMLTOFLAGS) -o $(dir $@) $< 112 113# determine which methods are available 114ifeq ($(shell which db2ps >/dev/null 2>&1 && echo found),found) 115 use-db2x = db2x 116 prefer-db2x = db2x 117else 118 use-db2x = notfound 119 prefer-db2x = $(use-xmlto) 120endif 121ifeq ($(shell which xmlto >/dev/null 2>&1 && echo found),found) 122 use-xmlto = xmlto 123 prefer-xmlto = xmlto 124else 125 use-xmlto = notfound 126 prefer-xmlto = $(use-db2x) 127endif 128 129# the commands, generated from the chosen template 130quiet_cmd_db2ps = PS $@ 131 cmd_db2ps = $(subst TYPE,ps, $($(PS_METHOD)template)) 132%.ps : %.xml 133 $(call cmd,db2ps) 134 135quiet_cmd_db2pdf = PDF $@ 136 cmd_db2pdf = $(subst TYPE,pdf, $($(PDF_METHOD)template)) 137%.pdf : %.xml 138 $(call cmd,db2pdf) 139 140 141index = index.html 142main_idx = Documentation/DocBook/$(index) 143build_main_index = rm -rf $(main_idx); \ 144 echo '<h1>Linux Kernel HTML Documentation</h1>' >> $(main_idx) && \ 145 echo '<h2>Kernel Version: $(KERNELVERSION)</h2>' >> $(main_idx) && \ 146 cat $(HTML) >> $(main_idx) 147 148quiet_cmd_db2html = HTML $@ 149 cmd_db2html = xmlto html $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \ 150 echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/index.html"> \ 151 $(patsubst %.html,%,$(notdir $@))</a><p>' > $@ 152 153%.html: %.xml 154 @(which xmlto > /dev/null 2>&1) || \ 155 (echo "*** You need to install xmlto ***"; \ 156 exit 1) 157 @rm -rf $@ $(patsubst %.html,%,$@) 158 $(call cmd,db2html) 159 @if [ ! -z "$(PNG-$(basename $(notdir $@)))" ]; then \ 160 cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi 161 162quiet_cmd_db2man = MAN $@ 163 cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man $< ; fi 164%.9 : %.xml 165 @(which xmlto > /dev/null 2>&1) || \ 166 (echo "*** You need to install xmlto ***"; \ 167 exit 1) 168 $(Q)mkdir -p $(obj)/man 169 $(call cmd,db2man) 170 @touch $@ 171 172### 173# Rules to generate postscripts and PNG images from .fig format files 174quiet_cmd_fig2eps = FIG2EPS $@ 175 cmd_fig2eps = fig2dev -Leps $< $@ 176 177%.eps: %.fig 178 @(which fig2dev > /dev/null 2>&1) || \ 179 (echo "*** You need to install transfig ***"; \ 180 exit 1) 181 $(call cmd,fig2eps) 182 183quiet_cmd_fig2png = FIG2PNG $@ 184 cmd_fig2png = fig2dev -Lpng $< $@ 185 186%.png: %.fig 187 @(which fig2dev > /dev/null 2>&1) || \ 188 (echo "*** You need to install transfig ***"; \ 189 exit 1) 190 $(call cmd,fig2png) 191 192### 193# Rule to convert a .c file to inline XML documentation 194 gen_xml = : 195 quiet_gen_xml = echo ' GEN $@' 196silent_gen_xml = : 197%.xml: %.c 198 @$($(quiet)gen_xml) 199 @( \ 200 echo "<programlisting>"; \ 201 expand --tabs=8 < $< | \ 202 sed -e "s/&/\\&amp;/g" \ 203 -e "s/</\\&lt;/g" \ 204 -e "s/>/\\&gt;/g"; \ 205 echo "</programlisting>") > $@ 206 207### 208# Help targets as used by the top-level makefile 209dochelp: 210 @echo ' Linux kernel internal documentation in different formats:' 211 @echo ' htmldocs - HTML' 212 @echo ' pdfdocs - PDF' 213 @echo ' psdocs - Postscript' 214 @echo ' xmldocs - XML DocBook' 215 @echo ' mandocs - man pages' 216 @echo ' installmandocs - install man pages generated by mandocs' 217 @echo ' cleandocs - clean all generated DocBook files' 218 219### 220# Temporary files left by various tools 221clean-files := $(DOCBOOKS) \ 222 $(patsubst %.xml, %.dvi, $(DOCBOOKS)) \ 223 $(patsubst %.xml, %.aux, $(DOCBOOKS)) \ 224 $(patsubst %.xml, %.tex, $(DOCBOOKS)) \ 225 $(patsubst %.xml, %.log, $(DOCBOOKS)) \ 226 $(patsubst %.xml, %.out, $(DOCBOOKS)) \ 227 $(patsubst %.xml, %.ps, $(DOCBOOKS)) \ 228 $(patsubst %.xml, %.pdf, $(DOCBOOKS)) \ 229 $(patsubst %.xml, %.html, $(DOCBOOKS)) \ 230 $(patsubst %.xml, %.9, $(DOCBOOKS)) \ 231 $(index) 232 233clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man 234 235cleandocs: cleanmediadocs 236 $(Q)rm -f $(call objectify, $(clean-files)) 237 $(Q)rm -rf $(call objectify, $(clean-dirs)) 238 239# Declare the contents of the .PHONY variable as phony. We keep that 240# information in a variable se we can use it in if_changed and friends. 241 242.PHONY: $(PHONY)