Newer
Older
Handbook / make-includes / build_misc_rules.make
################################################################################
#
# Standard variables and rules for building a general standalone document
# that doesn't fall into any partcular category (such as lecture, tutorial).
# The makefile assumes a single document source file. Anything more
# complex than this will need to be handled by a custom makefile.
#
# Altering these definitions will affect ALL MAKEFILES FOR ALL PAPERS!! If
# you need to do something specific for a particular paper, include a
# custom rule in its makefile. DON'T add it here!
#
################################################################################


################################################################################
#
# Include XSLT functions.
#
include $(TEACHING_SHARED)/Authoring/Handbook/make-includes/xslt_functions.make


################################################################################
#
# Required make variables. These should be defined by the calling makefile.
#
# BASE_NAMES
#	The base name(s) of the document source file(s). It may be a list, which
#	enables multiple different documents to be built by the one Makefile.
#
BASE_NAMES?=$(error The required make variable BASE_NAMES has not been defined. Please set it to the base name(s) of the document source file(s))


################################################################################
#
# Set up the context for the current document.
#
# SOURCE_XML is the original source XML, from which DERIVED_XML is
# generated (the derived source has the includes for questions, etc.,
# inserted).
#
SOURCE_XML:=$(foreach n,$(BASE_NAMES),$(n).xml)
DERIVED_XML:=$(SOURCE_XML:.xml=-derived.xml)

#
# Define the names of the output files.
#
ifdef HAS_ANSWERS
WEB_QUESTIONS_HTML:=$(SOURCE_XML:.xml=-questions.html)
WEB_ANSWERS_HTML:=$(SOURCE_XML:.xml=-answers.html)

PRINT_QUESTIONS_TEX:=$(WEB_QUESTIONS_HTML:.html=.tex)
PRINT_ANSWERS_TEX:=$(WEB_ANSWERS_HTML:.html=.tex)

PRINT_QUESTIONS_PDF_1UP:=$(PRINT_QUESTIONS_TEX:.tex=.pdf)
PRINT_ANSWERS_PDF_1UP:=$(PRINT_ANSWERS_TEX:.tex=.pdf)
PRINT_QUESTIONS_PDF_2UP:=$(PRINT_QUESTIONS_TEX:.tex=-2up.pdf)
PRINT_ANSWERS_PDF_2UP:=$(PRINT_ANSWERS_TEX:.tex=-2up.pdf)
else
WEB_HTML:=$(SOURCE_XML:.xml=.html)

PRINT_TEX:=$(SOURCE_XML:.xml=.tex)
PRINT_PDF_1UP:=$(SOURCE_XML:.xml=.pdf)
PRINT_PDF_2UP:=$(SOURCE_XML:.xml=-2up.pdf)
endif


#
# List of XSL stylesheets. If any of these change, we need to rebuild
# everything. 
#
# We can't use the resolver approach under Windows because of the DOS
# pathnames. The style sheets come out of the resolver with paths like
# C:\bar\foo\..., and make interprets the colon as an extra dependency
# delimiter (tested and behaviour verified). Of course, this works fine on
# any platform with sensible path standards. Quoting the value doesn't
# help, unfortunately. Bugger :(
#
#XSLT_STYLESHEETS:=$(shell $(JAVA) org.apache.xml.resolver.apps.resolver -u file:///xml2html.xsl uri | ( $(GREP) 'Result: file:' || $(ECHO) '::xml2html.xsl' ) | $(CUT) -d':' -f3-) $(shell $(JAVA) org.apache.xml.resolver.apps.resolver -u file:///xml2latex.xsl uri | ( $(GREP) 'Result: file:' || $(ECHO) '::xml2latex.xsl' ) | $(CUT) -d':' -f3-)
XSLT_STYLESHEETS:=$(TEACHING_SHARED)/Authoring/XML/xml2html.xsl $(TEACHING_SHARED)/Authoring/XML/xml2xhtml.xsl $(TEACHING_SHARED)/Authoring/XML/xml2latex.xsl $(TEACHING_SHARED)/Authoring/XML/xml2xelatex.xsl


################################################################################
#
# Add standard file suffixes.
#
include $(GLOBAL_HANDBOOK_INCLUDE)/standard_suffixes.make


################################################################################
#
# Standard directories.
#
IMGDIR?=images


################################################################################
#
# Standard paths.
#
include $(GLOBAL_HANDBOOK_INCLUDE)/standard_paths.make


################################################################################
#
# Files to be installed on web server.
#
ifdef HAS_ANSWERS
QUESTION_INSTALL_FILES:=$(WEB_QUESTIONS_HTML) $(PRINT_QUESTIONS_PDF_1UP) \
	$(PRINT_QUESTIONS_PDF_2UP)

ANSWER_INSTALL_FILES:=$(WEB_ANSWERS_HTML) $(PRINT_ANSWERS_PDF_1UP) \
	$(PRINT_ANSWERS_PDF_2UP)
else
INSTALL_FILES:=$(WEB_HTML) $(PRINT_PDF_1UP) $(PRINT_PDF_2UP)
endif


################################################################################
#
# Files to be cleaned by the various "clean" targets. Note that we don't
# "tidy" .aux files because they may be needed by the xr package for inter-
# document cross references, but won't get regenerated if the final target
# PDF files exist. They will be caught by by the "clean" target though.
#
TIDY_FILES+=*.tmp *.out *.log *.nav *.toc *.snm *.head *.dvi *.vrb _minted* \
	*-derived.xml *.synctex.gz
CLEAN_FILES+=*.aux $(IMGDIR)/*-print.pdf $(IMGDIR)/*-print.png \
	$(IMGDIR)/*-web.png $(IMGDIR)/*-web-zoom.png
ifdef HAS_ANSWERS
TIDY_FILES+=$(PRINT_QUESTIONS_TEX) $(PRINT_ANSWERS_TEX)
CLEAN_FILES+=$(WEB_QUESTIONS_HTML) $(WEB_ANSWERS_HTML) \
	$(PRINT_QUESTIONS_PDF_1UP) $(PRINT_ANSWERS_PDF_1UP) \
	$(PRINT_QUESTIONS_PDF_2UP) $(PRINT_ANSWERS_PDF_2UP)
else
TIDY_FILES+=$(PRINT_TEX)
CLEAN_FILES+=$(WEB_HTML) $(PRINT_PDF_1UP) $(PRINT_PDF_2UP)
endif

################################################################################
#
# Various environment variables.
#
include $(GLOBAL_HANDBOOK_INCLUDE)/standard_environment.make
#
# List of standard "phony" build targets. Varies depending on whether
# answers are enabled.
#
TARGETS+=web print $(BASE_NAMES)
ifdef HAS_ANSWERS
TARGETS+=web-questions web-answers \
	print-questions print-answers \
	questions answers
endif
#
.PHONY: $(TARGETS)


################################################################################
#
# Build everything.
#
all: web print


################################################################################
#
# Build questions or answers only.
#
ifdef HAS_ANSWERS
questions: web-questions print-questions

answers: web-answers print-answers
endif


################################################################################
#
# Build web version only.
#
ifdef HAS_ANSWERS
web: web-questions web-answers

web-questions: $(WEB_QUESTIONS_HTML) $(WEB_IMAGES) $(WEB_FILES)

$(WEB_QUESTIONS_HTML): %-questions.html: %-derived.xml
ifdef UNICODE
	$(call xslt,$<,xml2xhtml.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)') $(call xslt_parameter,paper-number,'$(PAPER_NUMBER)') $(call xslt_parameter,paper-year,'$(PAPER_YEAR)') $(call xslt_parameter,period-code,'$(PAPER_PERIOD)') $(call xslt_parameter,standalone,'yes') $(call xslt_parameter,showanswers,'no') $(call xslt_parameter,base-path,'.') $(call xslt_parameter,image-format,'png')) > $@
else
	$(call xslt,$<,xml2html.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)') $(call xslt_parameter,paper-number,'$(PAPER_NUMBER)') $(call xslt_parameter,paper-year,'$(PAPER_YEAR)') $(call xslt_parameter,period-code,'$(PAPER_PERIOD)') $(call xslt_parameter,standalone,'yes') $(call xslt_parameter,showanswers,'no') $(call xslt_parameter,base-path,'.') $(call xslt_parameter,image-format,'png')) > $@
endif

web-answers: $(WEB_ANSWERS_HTML) $(WEB_IMAGES) $(WEB_FILES)

$(WEB_ANSWERS_HTML): %-answers.html: %-derived.xml
ifdef UNICODE
	$(call xslt,$<,xml2xhtml.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)') $(call xslt_parameter,paper-number,'$(PAPER_NUMBER)') $(call xslt_parameter,paper-year,'$(PAPER_YEAR)') $(call xslt_parameter,period-code,'$(PAPER_PERIOD)') $(call xslt_parameter,standalone,'yes') $(call xslt_parameter,showanswers,'yes') $(call xslt_parameter,base-path,'.') $(call xslt_parameter,image-format,'png')) > $@
else
	$(call xslt,$<,xml2html.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)') $(call xslt_parameter,paper-number,'$(PAPER_NUMBER)') $(call xslt_parameter,paper-year,'$(PAPER_YEAR)') $(call xslt_parameter,period-code,'$(PAPER_PERIOD)') $(call xslt_parameter,standalone,'yes') $(call xslt_parameter,showanswers,'yes') $(call xslt_parameter,base-path,'.') $(call xslt_parameter,image-format,'png')) > $@
endif
else
web: $(WEB_HTML) $(WEB_IMAGES) $(WEB_FILES)
endif


################################################################################
#
# Build print version only.
#
ifdef HAS_ANSWERS
print: print-questions print-answers

print-questions: $(PRINT_QUESTIONS_PDF_1UP) $(PRINT_QUESTIONS_PDF_2UP)

$(PRINT_QUESTIONS_PDF_1UP): $(PRINT_IMAGES) $(PRINT_FILES)

$(PRINT_QUESTIONS_TEX): %-questions.tex: %-derived.xml
ifdef UNICODE
	$(call xslt,$<,xml2xelatex.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)') $(call xslt_parameter,paper-number,'$(PAPER_NUMBER)') $(call xslt_parameter,paper-year,'$(PAPER_YEAR)') $(call xslt_parameter,period-code,'$(PAPER_PERIOD)') $(call xslt_parameter,standalone,'yes') $(call xslt_parameter,showanswers,'no') $(call xslt_parameter,base-path,'.') $(call xslt_parameter,image-format,'pdf') $(call xslt_parameter,paper-include-path,'$(PAPER_INCLUDE_PATH)') $(call xslt_parameter,latex-initialisation-file,'$(LATEX_INIT_FILE)')) > $@
else
	$(call xslt,$<,xml2latex.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)') $(call xslt_parameter,paper-number,'$(PAPER_NUMBER)') $(call xslt_parameter,paper-year,'$(PAPER_YEAR)') $(call xslt_parameter,period-code,'$(PAPER_PERIOD)') $(call xslt_parameter,standalone,'yes') $(call xslt_parameter,showanswers,'no') $(call xslt_parameter,base-path,'.') $(call xslt_parameter,image-format,'pdf') $(call xslt_parameter,paper-include-path,'$(PAPER_INCLUDE_PATH)') $(call xslt_parameter,latex-initialisation-file,'$(LATEX_INIT_FILE)')) > $@
endif

print-answers: $(PRINT_ANSWERS_PDF_1UP) $(PRINT_ANSWERS_PDF_2UP)

$(PRINT_ANSWERS_PDF_1UP): $(PRINT_IMAGES) $(PRINT_FILES)

$(PRINT_ANSWERS_TEX): %-answers.tex: %-derived.xml
ifdef UNICODE
	$(call xslt,$<,xml2xelatex.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)') $(call xslt_parameter,paper-number,'$(PAPER_NUMBER)') $(call xslt_parameter,paper-year,'$(PAPER_YEAR)') $(call xslt_parameter,period-code,'$(PAPER_PERIOD)') $(call xslt_parameter,standalone,'yes') $(call xslt_parameter,showanswers,'yes') $(call xslt_parameter,base-path,'.') $(call xslt_parameter,image-format,'pdf') $(call xslt_parameter,paper-include-path,'$(PAPER_INCLUDE_PATH)') $(call xslt_parameter,latex-initialisation-file,'$(LATEX_INIT_FILE)')) > $@
else
	$(call xslt,$<,xml2latex.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)') $(call xslt_parameter,paper-number,'$(PAPER_NUMBER)') $(call xslt_parameter,paper-year,'$(PAPER_YEAR)') $(call xslt_parameter,period-code,'$(PAPER_PERIOD)') $(call xslt_parameter,standalone,'yes') $(call xslt_parameter,showanswers,'yes') $(call xslt_parameter,base-path,'.') $(call xslt_parameter,image-format,'pdf') $(call xslt_parameter,paper-include-path,'$(PAPER_INCLUDE_PATH)') $(call xslt_parameter,latex-initialisation-file,'$(LATEX_INIT_FILE)')) > $@
endif
else
print: $(PRINT_PDF_1UP) $(PRINT_PDF_2UP)

$(PRINT_PDF_1UP): $(PRINT_IMAGES) $(PRINT_FILES)
endif


################################################################################
#
# Generate the derived XML source from the original XML template.
# This is done by simply running the original source through xmllint
# with the --xinclude option to process all the xi:include elements.
# The result of this could have just been piped into the XSLT processor,
# except that (a) not all of the processors support input from stdin,
# and (b) combining both xmllint and XSLT processing into one command
# means that make won't stop if there's any errors from xmllint.
#
# Sed is used to add a comment to the derived XML file, warning that this
# is generated and shouldn't be edited. Sed was used because the <?xml?>
# processing instruction MUST be on the first line. The implication here
# is that all input source files have an <?xml?> processing instruction
# (which they should anyway).
#
$(DERIVED_XML): %-derived.xml: %.xml $(XSLT_STYLESHEETS)
	$(XMLLINT) --xinclude $< >$@
	@$(SED) -i -e '1a <!-- THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT! -->' $@
		

################################################################################
#
# Build the test document.
#
test: test.pdf

test.pdf: test.tex


################################################################################
#
# Deploy the appropriate files into a shared folder, which is then synchronised
# with Blackboard. This relies on the environment variable HANDBOOK_INSTALL_ROOT
# being defined, and (assuming that this variable points to a directory on the
# network) the appropriate share has been mounted.
#
# See build_document_rules.make for an explanation of why the install
# uses a foreach.
#
# Note that this won't do anything clever if you give it files that are
# in subdirectories of the current directory. Everything will be flattened
# at the other end. That is, something like "images/foo.pdf" will go into
# the installation directory as "foo.pdf", not "images/foo.pdf".
#
# If the variable NOSYNC is set (to anything), then files won't be synchronised
# with Blackboard.
#
ifndef HAS_ANSWERS
install: all
ifndef NOSYNC
	@$(LOCKFILE) -r0 $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock && $(SITECOPY) --update --keep-going Blackboard$(PAPER_NUMBER) && $(RM) -f $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock
	@$(LOCKFILE) -r0 $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock && $(SITECOPY) --catchup Blackboard$(PAPER_NUMBER) && $(RM) -f $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock
endif
	@$(ANNOUNCE) "Deploying files into $(INSTALL_DIRECTORY)"
	@$(TEST) -d $(HANDBOOK_INSTALL_ROOT)
	@$(MKDIR_P) $(INSTALL_DIRECTORY)
	@if $(TEST) -n "$(WEB_IMAGES)"; then $(MKDIR_P) $(INSTALL_DIRECTORY)/$(IMGDIR); fi
# Note: no -p because we're writing to an SMB volume that doesn't accept Unix-style permissions (implies no -a).
	@$(RSYNC) -rltgoDv $(INSTALL_FILES) $(INSTALL_DIRECTORY)
	@$(RSYNC) -rltgoDv --ignore-missing-args $(foreach i,$(WEB_IMAGES),$(IMGDIR)/$(i)) $(INSTALL_DIRECTORY)/$(IMGDIR)
ifndef NOSYNC
	@$(ANNOUNCE) "Synchronising with Blackboard"
	@$(LOCKFILE) -r0 $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock && $(SITECOPY) --update Blackboard$(PAPER_NUMBER) && $(RM) -f $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock
endif

install-questions: install

install-answers:
else
install: install-questions install-answers

install-questions:
ifndef NOSYNC
	@$(LOCKFILE) -r0 $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock && $(SITECOPY) --update --keep-going Blackboard$(PAPER_NUMBER) && $(RM) -f $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock
	@$(LOCKFILE) -r0 $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock && $(SITECOPY) --catchup Blackboard$(PAPER_NUMBER) && $(RM) -f $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock
endif
	@$(ANNOUNCE) "Deploying questions into $(INSTALL_DIRECTORY)"
	@$(TEST) -d $(HANDBOOK_INSTALL_ROOT)
	@$(MKDIR_P) $(INSTALL_DIRECTORY)
	@if $(TEST) -n "$(WEB_IMAGES)"; then $(MKDIR_P) $(INSTALL_DIRECTORY)/$(IMGDIR); fi
# Note: no -p because we're writing to an SMB volume that doesn't accept Unix-style permissions (implies no -a).
	@$(RSYNC) -rltgoDv $(QUESTION_INSTALL_FILES) $(INSTALL_DIRECTORY)
	@$(RSYNC) -rltgoDv --ignore-missing-args $(foreach i,$(WEB_IMAGES),$(IMGDIR)/$(i)) $(INSTALL_DIRECTORY)/$(IMGDIR)
ifndef NOSYNC
	@$(ANNOUNCE) "Synchronising with Blackboard"
	@$(LOCKFILE) -r0 $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock && $(SITECOPY) --update Blackboard$(PAPER_NUMBER) && $(RM) -f $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock
endif

install-answers:
ifndef NOSYNC
	@$(LOCKFILE) -r0 $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock && $(SITECOPY) --update --keep-going Blackboard$(PAPER_NUMBER) && $(RM) -f $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock
	@$(LOCKFILE) -r0 $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock && $(SITECOPY) --catchup Blackboard$(PAPER_NUMBER) && $(RM) -f $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock
endif
	@$(ANNOUNCE) "Deploying answers into $(INSTALL_DIRECTORY)"
	@$(TEST) -d $(HANDBOOK_INSTALL_ROOT)
	@$(MKDIR_P) $(INSTALL_DIRECTORY)
	@if $(TEST) -n "$(WEB_IMAGES)"; then $(MKDIR_P) $(INSTALL_DIRECTORY)/$(IMGDIR); fi
# Note: no -p because we're writing to an SMB volume that doesn't accept Unix-style permissions (implies no -a).
	@$(RSYNC) -rltgoDv $(ANSWER_INSTALL_FILES) $(INSTALL_DIRECTORY)
	@$(RSYNC) -rltgoDv --ignore-missing-args $(foreach i,$(WEB_IMAGES),$(IMGDIR)/$(i)) $(INSTALL_DIRECTORY)/$(IMGDIR)
ifndef NOSYNC
	@$(ANNOUNCE) "Synchronising with Blackboard"
	@$(LOCKFILE) -r0 $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock && $(SITECOPY) --update Blackboard$(PAPER_NUMBER) && $(RM) -f $(HOME)/.sitecopy/Blackboard$(PAPER_NUMBER).lock
endif
endif


################################################################################
#
# Debugging: print the values of the standard variables.
#
debug:
	@$(ANNOUNCE) Externally defined variables
	@$(ECHO) "ALL_PAPERS_ROOT = [$(ALL_PAPERS_ROOT)]"
	@$(ECHO) "TEACHING_SHARED = [$(TEACHING_SHARED)]"
	@$(ECHO) "HANDBOOK_INSTALL_ROOT = [$(HANDBOOK_INSTALL_ROOT)]"
	@$(ANNOUNCE) Internally defined variables
	@$(ECHO) "GLOBAL_HANDBOOK_INCLUDE = [$(GLOBAL_HANDBOOK_INCLUDE)]"
	@$(ECHO) "PAPER_INCLUDE_PATH = [$(PAPER_INCLUDE_PATH)]"
	@$(ECHO) "INSTALL_DIRECTORY = [$(INSTALL_DIRECTORY)]"
	@$(ECHO) "BUILD_DIR = [$(BUILD_DIR)]"
	@$(ECHO) "IMGDIR = [$(IMGDIR)]"
	@$(ECHO) "LATEX_INIT_FILE = [$(LATEX_INIT_FILE)]"
	@$(ECHO) "BASE_NAMES = [$(BASE_NAMES)]"
	@$(ECHO) "SOURCE_XML = [$(SOURCE_XML)]"
	@$(ECHO) "DERIVED_XML = [$(DERIVED_XML)]"
	@$(ECHO) "SUBJECT_CODE = [$(SUBJECT_CODE)]"
	@$(ECHO) "PAPER_NUMBER = [$(PAPER_NUMBER)]"
	@$(ECHO) "PAPER_YEAR = [$(PAPER_YEAR)]"
	@$(ECHO) "PAPER_PERIOD = [$(PAPER_PERIOD)]"
	@$(ECHO) "HAS_ANSWERS = [$(HAS_ANSWERS)]"
ifdef HAS_ANSWERS
	@$(ECHO) "WEB_QUESTIONS_HTML = [$(WEB_QUESTIONS_HTML)]"
	@$(ECHO) "WEB_ANSWERS_HTML = [$(WEB_ANSWERS_HTML)]"
	@$(ECHO) "PRINT_QUESTIONS_TEX = [$(PRINT_QUESTIONS_TEX)]"
	@$(ECHO) "PRINT_ANSWERS_TEX = [$(PRINT_ANSWERS_TEX)]"
	@$(ECHO) "PRINT_QUESTIONS_PDF_1UP = [$(PRINT_QUESTIONS_PDF_1UP)]"
	@$(ECHO) "PRINT_ANSWERS_PDF_1UP = [$(PRINT_ANSWERS_PDF_1UP)]"
	@$(ECHO) "PRINT_QUESTIONS_PDF_2UP = [$(PRINT_QUESTIONS_PDF_2UP)]"
	@$(ECHO) "PRINT_ANSWERS_PDF_2UP = [$(PRINT_ANSWERS_PDF_2UP)]"
	@$(ECHO) "QUESTION_INSTALL_FILES = [$(QUESTION_INSTALL_FILES)]"
	@$(ECHO) "ANSWER_INSTALL_FILES = [$(ANSWER_INSTALL_FILES)]"
else
	@$(ECHO) "WEB_HTML = [$(WEB_HTML)]"
	@$(ECHO) "PRINT_TEX = [$(PRINT_TEX)]"
	@$(ECHO) "PRINT_PDF_1UP = [$(PRINT_PDF_1UP)]"
	@$(ECHO) "PRINT_PDF_2UP = [$(PRINT_PDF_2UP)]"
	@$(ECHO) "INSTALL_FILES = [$(INSTALL_FILES)]"
endif
	@$(ECHO) "XSLT_STYLESHEETS = [$(XSLT_STYLESHEETS)]"
	@$(ECHO) "PRINT_IMAGES = [$(PRINT_IMAGES)]"
	@$(ECHO) "PRINT_FILES = [$(PRINT_FILES)]"
	@$(ECHO) "WEB_IMAGES = [$(WEB_IMAGES)]"
	@$(ECHO) "WEB_FILES = [$(WEB_FILES)]"
	@$(ECHO) "TIDY_FILES = [$(TIDY_FILES)]"
	@$(ECHO) "CLEAN_FILES = [$(CLEAN_FILES)]"
	@$(ECHO) "DRAFT = [$(DRAFT)]"
	@$(ECHO) "TARGETS = [$(TARGETS)]"
ifdef TEMPDIR
	@$(ECHO) "TEMPDIR = [$(TEMPDIR)]"
endif


################################################################################
#
# Clean up: get rid of all the temporary files.
#
tidy:
	$(RM) -rf $(TIDY_FILES)
#
# Clean up: get rid of everything except the original source.
#
clean: tidy
	$(RM) -rf $(CLEAN_FILES)


################################################################################
#
# List all "phony" build targets.
#
targets:
	@$(ECHO) "targets: $(TARGETS)"


################################################################################
#
# Standard default rules.
#
include $(GLOBAL_HANDBOOK_INCLUDE)/standard_rules.make