2005-04-16 15:20:36 -07: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
# to ducument 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 := wanbook.xml z8530book.xml mcabook.xml videobook.xml \
2005-05-01 08:59:27 -07:00
kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
2005-05-20 15:27:44 -05:00
procfs-guide.xml writing_usb_driver.xml \
2005-05-01 08:59:27 -07:00
sis900.xml kernel-api.xml journal-api.xml lsm.xml usb.xml \
2005-04-16 15:20:36 -07:00
gadget.xml libata.xml mtdnand.xml librs.xml
###
# The build process is as follows (targets):
# (xmldocs)
# file.tmpl --> file.xml +--> file.ps (psdocs)
# +--> file.pdf (pdfdocs)
# +--> DIR=file (htmldocs)
# +--> man/ (mandocs)
###
# The targets that may be used.
.PHONY : xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs
BOOKS := $( addprefix $( obj) /,$( DOCBOOKS) )
xmldocs : $( BOOKS )
sgmldocs : xmldocs
PS := $( patsubst %.xml, %.ps, $( BOOKS) )
psdocs : $( PS )
PDF := $( patsubst %.xml, %.pdf, $( BOOKS) )
pdfdocs : $( PDF )
HTML := $( patsubst %.xml, %.html, $( BOOKS) )
htmldocs : $( HTML )
MAN := $( patsubst %.xml, %.9, $( BOOKS) )
mandocs : $( MAN )
installmandocs : mandocs
2005-05-01 08:59:27 -07:00
mkdir -p /usr/local/man/man9/
install Documentation/DocBook/man/*.9.gz /usr/local/man/man9/
2005-04-16 15:20:36 -07:00
###
#External programs used
KERNELDOC = scripts/kernel-doc
DOCPROC = scripts/basic/docproc
2005-05-01 08:59:27 -07:00
2005-06-23 22:05:18 -07:00
XMLTOFLAGS = -m $( srctree) /Documentation/DocBook/stylesheet.xsl
2005-05-01 08:59:27 -07:00
#XMLTOFLAGS += --skip-validation
2005-04-16 15:20:36 -07: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 $< >$@
d e f i n e r u l e _ d o c p r o c
set -e; \
$( if $( $( quiet) cmd_$( 1) ) ,echo ' $($(quiet)cmd_$(1))' ; ) \
$( cmd_$( 1) ) ; \
( \
echo 'cmd_$@ := $(cmd_$(1))' ; \
echo $@ : ` SRCTREE = $( srctree) $( DOCPROC) depend $<` ; \
) > $( dir $@ ) .$( notdir $@ ) .cmd
e n d e f
%.xml : %.tmpl FORCE
$( call if_changed_rule,docproc)
###
#Read in all saved dependency files
cmd_files := $( wildcard $( foreach f,$( BOOKS) ,$( dir $( f) ) .$( notdir $( f) ) .cmd) )
i f n e q ( $( cmd_files ) , )
include $( cmd_files)
e n d i f
###
# Changes in kernel-doc force a rebuild of all documentation
$(BOOKS) : $( KERNELDOC )
###
# procfs guide uses a .c file as example code.
# This requires an explicit dependency
C-procfs-example = procfs_example.xml
C-procfs-example2 = $( addprefix $( obj) /,$( C-procfs-example) )
$(obj)/procfs-guide.xml : $( C -procfs -example 2)
###
# Rules to generate postscript, PDF and HTML
# db2html creates a directory. Generate a html file used for timestamp
2005-05-01 08:59:27 -07:00
quiet_cmd_db2ps = XMLTO $@
cmd_db2ps = xmlto ps $( XMLTOFLAGS) -o $( dir $@ ) $<
2005-04-16 15:20:36 -07:00
%.ps : %.xml
2005-05-01 08:59:27 -07:00
@( which xmlto > /dev/null 2>& 1) || \
2005-05-01 08:59:28 -07:00
( echo "*** You need to install xmlto ***" ; \
2005-04-16 15:20:36 -07:00
exit 1)
$( call cmd,db2ps)
2005-05-01 08:59:27 -07:00
quiet_cmd_db2pdf = XMLTO $@
cmd_db2pdf = xmlto pdf $( XMLTOFLAGS) -o $( dir $@ ) $<
2005-04-16 15:20:36 -07:00
%.pdf : %.xml
2005-05-01 08:59:27 -07:00
@( which xmlto > /dev/null 2>& 1) || \
2005-05-01 08:59:28 -07:00
( echo "*** You need to install xmlto ***" ; \
2005-04-16 15:20:36 -07:00
exit 1)
$( call cmd,db2pdf)
2005-05-01 08:59:27 -07:00
quiet_cmd_db2html = XMLTO $@
cmd_db2html = xmlto xhtml $( XMLTOFLAGS) -o $( patsubst %.html,%,$@ ) $< && \
2005-05-01 08:59:28 -07:00
echo ' <a HREF = " $( patsubst %.html,%,$( notdir $@ ) ) /index.html " > \
2005-04-16 15:20:36 -07:00
Goto $( patsubst %.html,%,$( notdir $@ ) ) </a><p>' > $@
%.html : %.xml
2005-05-01 08:59:27 -07:00
@( which xmlto > /dev/null 2>& 1) || \
2005-05-01 08:59:28 -07:00
( echo "*** You need to install xmlto ***" ; \
2005-04-16 15:20:36 -07:00
exit 1)
@rm -rf $@ $( patsubst %.html,%,$@ )
$( call cmd,db2html)
@if [ ! -z " $( PNG-$( basename $( notdir $@ ) ) ) " ] ; then \
cp $( PNG-$( basename $( notdir $@ ) ) ) $( patsubst %.html,%,$@ ) ; fi
2005-05-01 08:59:27 -07:00
quiet_cmd_db2man = XMLTO $@
cmd_db2man = if grep -q refentry $<; then xmlto man $( XMLTOFLAGS) -o $( obj) /man $< ; gzip -f $( obj) /man/*.9; fi
%.9 : %.xml
@( which xmlto > /dev/null 2>& 1) || \
2005-05-01 08:59:28 -07:00
( echo "*** You need to install xmlto ***" ; \
2005-05-01 08:59:27 -07:00
exit 1)
$( call cmd,db2man)
@touch $@
2005-04-16 15:20:36 -07:00
###
# Rules to generate postscripts and PNG imgages 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
%.xml : %.c
@echo ' GEN $@'
@( \
echo "<programlisting>" ; \
expand --tabs= 8 < $< | \
sed -e "s/&/\\&/g" \
-e "s/</\\</g" \
-e "s/>/\\>/g" ; \
echo "</programlisting>" ) > $@
###
# Help targets as used by the top-level makefile
dochelp :
@echo ' Linux kernel internal documentation in different formats:'
@echo ' xmldocs (XML DocBook), psdocs (Postscript), pdfdocs (PDF)'
@echo ' htmldocs (HTML), mandocs (man pages, use installmandocs to install)'
###
# 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) ) \
$( C-procfs-example)
clean-dirs := $( patsubst %.xml,%,$( DOCBOOKS) )
#man put files in man subdir - traverse down
subdir- := man/