2005-04-17 02:20:36 +04: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 03:04:59 +04:00
# to document the SRC - and how to read it.
2005-04-17 02:20:36 +04:00
# 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 19:59:27 +04:00
kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
2005-05-21 00:27:44 +04:00
procfs-guide.xml writing_usb_driver.xml \
2006-11-03 09:07:02 +03:00
kernel-api.xml filesystems.xml lsm.xml usb.xml \
2006-06-29 13:24:47 +04:00
gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
genericirq.xml
2005-04-17 02:20:36 +04:00
###
# The build process is as follows (targets):
# (xmldocs)
# file.tmpl --> file.xml +--> file.ps (psdocs)
# +--> file.pdf (pdfdocs)
# +--> DIR=file (htmldocs)
# +--> man/ (mandocs)
2005-11-14 03:08:15 +03:00
# for PDF and PS output you can choose between xmlto and docbook-utils tools
PDF_METHOD = $( prefer-db2x)
PS_METHOD = $( prefer-db2x)
2005-04-17 02:20:36 +04:00
###
# The targets that may be used.
2006-03-06 01:14:10 +03:00
PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs
2005-04-17 02:20:36 +04:00
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 19:59:27 +04:00
mkdir -p /usr/local/man/man9/
install Documentation/DocBook/man/*.9.gz /usr/local/man/man9/
2005-04-17 02:20:36 +04:00
###
#External programs used
2006-12-30 03:49:07 +03:00
KERNELDOC = $( srctree) /scripts/kernel-doc
DOCPROC = $( objtree) /scripts/basic/docproc
2005-05-01 19:59:27 +04:00
2005-06-24 09:05:18 +04:00
XMLTOFLAGS = -m $( srctree) /Documentation/DocBook/stylesheet.xsl
2005-05-01 19:59:27 +04:00
#XMLTOFLAGS += --skip-validation
2005-04-17 02:20:36 +04: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)
2005-11-14 03:08:15 +03: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
i f e q ( $( shell which db 2ps >/dev /null 2>&1 && echo found ) , f o u n d )
use-db2x = db2x
prefer-db2x = db2x
e l s e
use-db2x = notfound
prefer-db2x = $( use-xmlto)
e n d i f
i f e q ( $( shell which xmlto >/dev /null 2>&1 && echo found ) , f o u n d )
use-xmlto = xmlto
prefer-xmlto = xmlto
e l s e
use-xmlto = notfound
prefer-xmlto = $( use-db2x)
e n d i f
2005-04-17 02:20:36 +04:00
2005-11-14 03:08:15 +03:00
# the commands, generated from the chosen template
quiet_cmd_db2ps = PS $@
cmd_db2ps = $( subst TYPE,ps, $( $( PS_METHOD) template) )
2005-04-17 02:20:36 +04:00
%.ps : %.xml
$( call cmd,db2ps)
2005-11-14 03:08:15 +03:00
quiet_cmd_db2pdf = PDF $@
cmd_db2pdf = $( subst TYPE,pdf, $( $( PDF_METHOD) template) )
2005-04-17 02:20:36 +04:00
%.pdf : %.xml
$( call cmd,db2pdf)
2005-11-14 03:08:15 +03:00
quiet_cmd_db2html = HTML $@
2005-05-01 19:59:27 +04:00
cmd_db2html = xmlto xhtml $( XMLTOFLAGS) -o $( patsubst %.html,%,$@ ) $< && \
2005-05-01 19:59:28 +04:00
echo ' <a HREF = " $( patsubst %.html,%,$( notdir $@ ) ) /index.html " > \
2005-04-17 02:20:36 +04:00
Goto $( patsubst %.html,%,$( notdir $@ ) ) </a><p>' > $@
%.html : %.xml
2005-05-01 19:59:27 +04:00
@( which xmlto > /dev/null 2>& 1) || \
2005-05-01 19:59:28 +04:00
( echo "*** You need to install xmlto ***" ; \
2005-04-17 02:20:36 +04: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 03:08:15 +03:00
quiet_cmd_db2man = MAN $@
2005-05-01 19:59:27 +04:00
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 19:59:28 +04:00
( echo "*** You need to install xmlto ***" ; \
2005-05-01 19:59:27 +04:00
exit 1)
$( call cmd,db2man)
@touch $@
2005-04-17 02:20:36 +04: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 :
2006-12-07 02:16:26 +03:00
@echo ' Linux kernel internal documentation in different formats:'
@echo ' htmldocs - HTML'
@echo ' installmandocs - install man pages generated by mandocs'
@echo ' mandocs - man pages'
@echo ' pdfdocs - PDF'
@echo ' psdocs - Postscript'
@echo ' xmldocs - XML DocBook'
2005-04-17 02:20:36 +04:00
###
# 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/
2006-03-06 01:14:10 +03: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 )