# 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