summaryrefslogtreecommitdiff
path: root/docs/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'docs/Makefile')
-rw-r--r--docs/Makefile183
1 files changed, 183 insertions, 0 deletions
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 00000000..c4a63671
--- /dev/null
+++ b/docs/Makefile
@@ -0,0 +1,183 @@
+# Process DocBook to HTML
+
+# This makefile is a bit obfuscated so that it works correctly on both
+# BSD and GNU make. Some parts apply to one version of make and not the
+# other; these are marked by comments.
+
+# The "all" target shouldn't be up here, but the trickery below defines
+# what looks like a rule to GNU make, and so we need to define the actual
+# default target before it.
+
+all: docs
+
+DBPROC_COMMAND = xsltproc
+MKDIR_COMMAND = mkdir
+CP_COMMAND = cp
+PERL_COMMAND = perl
+RM_COMMAND = rm -f
+TAR_COMMAND = tar
+GZIP_COMMAND = gzip -f
+GENERATE_SCRIPT = tools/generate_except_xml.pl
+
+DBPROC = $(DBPROC_COMMAND)
+MKDIR = $(MKDIR_COMMAND)
+CP = $(CP_COMMAND)
+GENERATE = $(PERL_COMMAND) $(GENERATE_SCRIPT)
+RM_QUIET = $(RM_COMMAND)
+TAR = $(TAR_COMMAND)
+GZIP = $(GZIP_COMMAND)
+PROGRESS = @ true
+
+# use a GNU make "define" command, that looks like a harmless dummy rule
+# to BSD make, to hide parts of the Makefile from GNU make.
+define IGNORED_BY_GNU_MAKE:
+.if 0
+endef
+
+ # seen by GNU make, not by BSD make
+ ifeq ($(V),)
+ DBPROC = @ echo " [XLSTPROC]" $^ && $(DBPROC_COMMAND) 2>/dev/null
+ GENERATE = @ echo " [GENERATE]" $@ && $(PERL_COMMAND) $(GENERATE_SCRIPT)
+ TAR = @ echo " [TAR] " $@ && $(TAR_COMMAND)
+ GZIP = @ echo " [GZIP] " $< && $(GZIP_COMMAND)
+ RM_QUIET = @ $(RM_COMMAND)
+ PROGRESS = @ echo
+ endif
+
+define IGNORED_BY_GNU_MAKE:
+.endif
+
+.ifndef V
+ # seen by BSD make, not by GNU make
+ DBPROC = @ echo " [XSLTPROC]" $(.ALLSRC) && $(DBPROC_COMMAND) 2>/dev/null
+ GENERATE = @ echo " [GENERATE]" $(.TARGET) && $(PERL_COMMAND) $(GENERATE_SCRIPT)
+ TAR = @ echo " [TAR] " $(.TARGET) && $(TAR_COMMAND)
+ GZIP = @ echo " [GZIP] " $(.TARGET:.gz=) && $(GZIP_COMMAND)
+ RM_QUIET = @ $(RM_COMMAND)
+ PROGRESS = @ echo
+.endif
+
+# neither .endif nor endef can be followed by a colon; each creates
+# warnings or errors in one or other version of make. we need some
+# magic to make them both work. Luckily, .endfor ignores the colon.
+
+.for DUMMY in $(NO_SUCH_VARIABLE)
+endef
+.endfor :
+
+PROGRESS_RM = $(PROGRESS) " [RM] "
+
+DOCBOOK_DIR = docbook
+HTML_DIR = htmlguide
+MAN_DIR = man
+
+BOOKXSL = $(DOCBOOK_DIR)/bb-book.xsl
+NOCHUNKBOOKXSL = $(DOCBOOK_DIR)/bb-nochunk-book.xsl
+MANXSL = $(DOCBOOK_DIR)/bb-man.xsl
+
+VPATH = $(DOCBOOK_DIR)
+.SUFFIXES: .html .xml .gz .1 .5 .8
+
+docs: instguide adminguide manpages
+ @mkdir -p $(HTML_DIR)/images
+ @cp $(DOCBOOK_DIR)/html/images/*.png $(HTML_DIR)/images/.
+ @cp $(DOCBOOK_DIR)/html/*.css $(HTML_DIR)/.
+ @cp $(DOCBOOK_DIR)/html/*.ico $(HTML_DIR)/.
+
+adminguide: $(DOCBOOK_DIR)/ExceptionCodes.xml $(HTML_DIR)/adminguide/index.html
+
+# $^ gives all sources on GNU make, and nothing on BSD make
+# $> gives all sources on BSD make, and nothing on GNU make
+$(HTML_DIR)/adminguide/index.html: $(BOOKXSL) $(DOCBOOK_DIR)/adminguide.xml
+ $(DBPROC) -o $(HTML_DIR)/adminguide/ $^ $>
+
+instguide: $(HTML_DIR)/instguide/index.html
+
+$(HTML_DIR)/instguide/index.html: $(BOOKXSL) $(DOCBOOK_DIR)/instguide.xml
+ $(DBPROC) -o $(HTML_DIR)/instguide/ $^ $>
+
+# On BSD make, $> contains all sources and $^ is empty
+# On GNU make, $^ contains all sources and $> is empty
+$(DOCBOOK_DIR)/ExceptionCodes.xml: ../ExceptionCodes.txt
+ $(GENERATE) $> $^ $@
+
+manpages: man-dirs man-nroff man-html
+
+man-dirs: man/.there $(HTML_DIR)/man-html/.there
+
+$(HTML_DIR)/man-html/.there:
+ mkdir -p $(HTML_DIR)/man-html
+ touch $(HTML_DIR)/man-html/.there
+
+man/.there:
+ mkdir -p man
+ touch man/.there
+
+NROFF_PAGES = bbackupd.8 bbackupd-config.8 bbackupctl.8 bbackupquery.8 \
+ bbstored.8 bbstored-config.8 bbstoreaccounts.8 bbstored-certs.8 \
+ raidfile-config.8 \
+ bbackupd.conf.5 bbstored.conf.5 raidfile.conf.5
+
+NROFF_FILES = $(NROFF_PAGES:%=$(MAN_DIR)/%.gz)
+
+man-nroff: $(NROFF_FILES)
+
+HTML_FILES_1 = $(NROFF_PAGES:%.5=%.html)
+HTML_FILES_2 = $(HTML_FILES_1:%.8=%.html)
+HTML_FILES = $(HTML_FILES_2:%=$(HTML_DIR)/man-html/%)
+
+man-html: $(HTML_FILES)
+
+# $^ gives all sources on GNU make, and nothing on BSD make
+
+# GNU make
+$(HTML_DIR)/man-html/%.html: $(NOCHUNKBOOKXSL) $(DOCBOOK_DIR)/%.xml
+ $(DBPROC) -o $@ $^
+
+# GNU make
+$(MAN_DIR)/%.8: $(MANXSL) $(DOCBOOK_DIR)/%.xml
+ $(DBPROC) -o $@ $^
+
+# GNU make
+$(MAN_DIR)/%.8.gz: $(MAN_DIR)/%.8
+ $(GZIP) $<
+
+# GNU make
+$(MAN_DIR)/%.5: $(MANXSL) $(DOCBOOK_DIR)/%.xml $(MANXSL)
+ $(DBPROC) -o $@ $^
+
+# GNU make
+$(MAN_DIR)/%.5.gz: $(MAN_DIR)/%.5
+ $(GZIP) $<
+
+# BSD make: the final colon (:) is required to make the .for and .endfor
+# lines valid in GNU make. It creates (different) dummy rules in GNU and
+# BSD make. Both dummy rules are harmless.
+
+.for MAN_PAGE in $(NROFF_PAGES) :
+$(MAN_DIR)/$(MAN_PAGE).gz: $(MANXSL) $(DOCBOOK_DIR)/$(MAN_PAGE:R).xml
+ $(DBPROC) -o $(.TARGET:.gz=) $(.ALLSRC)
+ $(GZIP) $(.TARGET:.gz=)
+
+$(HTML_DIR)/man-html/$(MAN_PAGE:R).html: $(NOCHUNKBOOKXSL) \
+$(DOCBOOK_DIR)/$(MAN_PAGE:R).xml
+ $(DBPROC) -o $(.TARGET) $(.ALLSRC)
+.endfor :
+
+dockit: clean docs documentation-kit-0.10.tar.gz
+
+documentation-kit-0.10.tar.gz:
+ $(TAR) zcf documentation-kit-0.10.tar.gz $(HTML_DIR)/
+
+clean:
+ $(PROGRESS_RM) "$(HTML_DIR)/man-html/*.html"
+ $(RM_QUIET) $(HTML_FILES)
+
+ $(PROGRESS_RM) "$(MAN_DIR)/*.[58].gz"
+ $(RM_QUIET) $(NROFF_FILES)
+
+ $(PROGRESS_RM) "$(DOCBOOK_DIR)/ExceptionCodes.xml"
+ $(RM_QUIET) $(DOCBOOK_DIR)/ExceptionCodes.xml
+
+ $(PROGRESS_RM) "documentation-kit-0.10.tar.gz"
+ $(RM_QUIET) documentation-kit-0.10.tar.gz