Makefile 5.53 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
###
# 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.sgml z8530book.sgml mcabook.sgml videobook.sgml \
	    parportbook.sgml kernel-hacking.sgml \
	    kernel-locking.sgml via-audio.sgml mousedrivers.sgml \
	    deviceiobook.sgml procfs-guide.sgml tulip-user.sgml \
	    writing_usb_driver.sgml scsidrivers.sgml sis900.sgml \
14
	    kernel-api.sgml journal-api.sgml lsm.sgml
15

Dave Jones's avatar
Dave Jones committed
16 17 18 19 20 21 22 23
JBDSOURCES :=  $(TOPDIR)/include/linux/jbd.h \
	$(TOPDIR)/fs/jbd/journal.c \
	$(TOPDIR)/fs/jbd/recovery.c \
	$(TOPDIR)/fs/jbd/transaction.c

journal-api.sgml: journal-api.tmpl $(JBDSOURCES)
	$(TOPDIR)/scripts/docgen   $(JBDSOURCES) \
	<journal-api.tmpl >journal-api.sgml
24 25 26 27 28 29 30 31 32
###
# The build process is as follows (targets):
#              (sgmldocs)
# file.tmpl --> file.sgml +--> file.ps  (psdocs)
#                         +--> file.pdf  (pdfdocs)
#                         +--> DIR=file  (htmldocs)

###
# The targets that may be used.
33 34
.PHONY:	sgmldocs psdocs pdfdocs htmldocs clean mrproper

35
BOOKS := $(addprefix Documentation/DocBook/,$(DOCBOOKS))
36
sgmldocs: $(BOOKS)
Linus Torvalds's avatar
Linus Torvalds committed
37

38
PS := $(patsubst %.sgml, %.ps, $(BOOKS))
39
psdocs: $(PS)
Linus Torvalds's avatar
Linus Torvalds committed
40

41
PDF := $(patsubst %.sgml, %.pdf, $(BOOKS))
42 43
pdfdocs: $(PDF)

44
HTML := $(patsubst %.sgml, %.html, $(BOOKS))
45
htmldocs: $(HTML)
Linus Torvalds's avatar
Linus Torvalds committed
46

47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
###
#External programs used
KERNELDOC=$(objtree)/scripts/kernel-doc
DOCPROC=$(objtree)/scripts/docproc

###
# 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 .sgml documentation
# required to generate the final targets. (ps, pdf, html).
quiet_cmd_docproc = DOCPROC $@
cmd_docproc = $(DOCPROC) doc $< >$@
define rule_docproc
	set -e
        $(if $($(quiet)cmd_$(1)),echo '  $($(quiet)cmd_$(1))';) 
        $(cmd_$(1)); \
        ( \
          echo 'cmd_$@ := $(cmd_$(1))'; \
          echo $@: `$(DOCPROC) depend $<`; \
        ) > $(dir $@).$(notdir $@).cmd
endef

%.sgml: %.tmpl FORCE
	$(call if_changed_rule,docproc)

###
#Read in all saved dependency files 
cmd_files := $(wildcard $(foreach f,$(BOOKS),$(dir $(f)).$(notdir $(f)).cmd))

ifneq ($(cmd_files),)
  include $(cmd_files)
endif

###
# 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 = Documentation/DocBook/procfs_example.sgml
Documentation/DocBook/procfs-guide.sgml: $(C-procfs-example)

###
# The parportbook includes a few images.
# Force them to be build before the books 
IMG-parportbook := parport-share.fig parport-multi.fig parport-structure.fig
IMG-parportbook2 := $(addprefix Documentation/DocBook/,$(IMG-parportbook))
EPS-parportbook := $(patsubst %.fig,%.eps, $(IMG-parportbook2))
PNG-parportbook := $(patsubst %.fig,%.png, $(IMG-parportbook2))
99 100 101
Documentation/DocBook/parportbook.html:	$(PNG-parportbook)
Documentation/DocBook/parportbook.ps Documentation/DocBook/parportbook.pdf:\
	$(EPS-parportbook)
102 103 104 105 106 107 108 109

###
# Rules to generate postscript, PDF and HTML
# db2html creates a directory. Generate a html file used for timestamp
%.ps : %.sgml
	@(which db2ps > /dev/null 2>&1) || \
	 (echo "*** You need to install DocBook stylesheets ***"; \
	  exit 1)
110
	$(call do_cmd,DB2PS   $@,db2ps -o $(dir $@) $<)
111 112 113 114 115

%.pdf : %.sgml
	@(which db2pdf > /dev/null 2>&1) || \
	 (echo "*** You need to install DocBook stylesheets ***"; \
	  exit 1)
116
	$(call do_cmd,DB2PDF  $@,db2pdf -o $(dir $@) $<)
117 118 119 120 121 122

%.html:	%.sgml
	@(which db2html > /dev/null 2>&1) || \
	 (echo "*** You need to install DocBook stylesheets ***"; \
	  exit 1)
	@rm -rf $@ $(patsubst %.html,%,$@)
123
	$(call do_cmd,DB2HTML $@,db2html -o $(patsubst %.html,%,$@) $< && \
124
         echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/book1.html">\
125
         Goto $(patsubst %.html,%,$(notdir $@))</a><p>' > $@)
126 127 128 129 130
	@if [ ! -z "$(PNG-$(basename $(notdir $@)))" ]; then \
            cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi

###
# Rules to generate postscripts and PNG imgages from .fig format files
Linus Torvalds's avatar
Linus Torvalds committed
131
%.eps: %.fig
132
	$(call do_cmd,FIG2DEV -Leps $@,fig2dev -Leps $< $@)
Linus Torvalds's avatar
Linus Torvalds committed
133

Linus Torvalds's avatar
Linus Torvalds committed
134
%.png: %.fig
135
	$(call do_cmd,FIG2DEV -Lpng $@,fig2dev -Lpng $< $@)
Linus Torvalds's avatar
Linus Torvalds committed
136

137 138
###
# Rule to convert a .c file to inline SGML documentation
Linus Torvalds's avatar
Linus Torvalds committed
139
%.sgml: %.c
140
	@echo '  Generating $@'
141 142 143 144 145 146 147
	@(                            \
	   echo "<programlisting>";   \
	   expand --tabs=8 < $< |     \
	   sed -e "s/&/\\&amp;/g"     \
	       -e "s/</\\&lt;/g"      \
	       -e "s/>/\\&gt;/g";     \
	   echo "</programlisting>")  > $@
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

###
# Help targets as used by the top-level makefile
dochelp:
	@echo  '  Linux kernel internal documentation in different formats:'
	@echo  '  sgmldocs (SGML), psdocs (Postscript), pdfdocs (PDF), htmldocs (HTML)'

###
# clean and mrproper as used by the top-level makefile 
# Temporary files left by various tools
DVI     :=      $(patsubst %.sgml, %.dvi, $(BOOKS))
AUX     :=      $(patsubst %.sgml, %.aux, $(BOOKS))
TEX     :=      $(patsubst %.sgml, %.tex, $(BOOKS))
LOG     :=      $(patsubst %.sgml, %.log, $(BOOKS))
OUT     :=      $(patsubst %.sgml, %.out, $(BOOKS))
Linus Torvalds's avatar
Linus Torvalds committed
163 164

clean:
165 166 167 168 169 170 171 172
	@rm -f core *~
	@rm -f $(BOOKS)
	@rm -f $(DVI) $(AUX) $(TEX) $(LOG) $(OUT)
	@rm -f $(PNG-parportbook) $(EPS-parportbook)
	@rm -f $(C-procfs-example)

mrproper:
	@rm -f $(PS) $(PDF)
173
	@rm -f -r $(HTML) $(patsubst %.html,%,$(HTML))
Linus Torvalds's avatar
Linus Torvalds committed
174 175 176

include $(TOPDIR)/Rules.make