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