Newer
Older
Handbook / makefile-templates / Makefile.misc
################################################################################
#
# Template makefile for building a general document.
#
################################################################################


SHELL = /bin/sh


################################################################################
#
# Get path to current Makefile so we can set up self-deleting temporary
# directory. Note that this MUST happen before the first include!
#
MAKEFILE:=$(CURDIR)/$(lastword $(MAKEFILE_LIST))


################################################################################
#
# Required Environment Variables
#
# TEACHING_SHARED
#	This variable specifies the path to the top level of the teaching
#	shared directory hierarchy (e.g., /path/to/Teaching/Shared).
#
TEACHING_SHARED?=$(error The required environment variable TEACHING_SHARED has not been defined. It should point to the root level of the shared teaching directory (e.g., /path/to/Teaching/Shared))


################################################################################
#
# Set up paths to makefile include directories.
#
# GLOBAL_HANDBOOK_INCLUDE is the global include directory in the "Shared"
# hierarchy, and is defined relative to the root of that hierarchy.
#
GLOBAL_HANDBOOK_INCLUDE?=$(TEACHING_SHARED)/Authoring/Handbook/make-includes


################################################################################
#
# Include local system-specific configuration.
#
include $(GLOBAL_HANDBOOK_INCLUDE)/local_configuration.make


################################################################################
#
# Set up global, self-deleting temporary directory. The first time through,
# TEMPDIR will be undefined, so the first part of the if will create the
# variable, then recursively call the makefile again with the appropriate
# targets, passing the temporary directory as an argument.
#
ifndef TEMPDIR

.PHONY: all

all:
	@TEMPDIR=$(shell $(MKTEMP) -d); \
	trap 'rm -rf "$$TEMPDIR"' EXIT; \
	$(MAKE) -f $(MAKEFILE) --no-print-directory TEMPDIR=$$TEMPDIR all

%:
	@TEMPDIR=$(shell $(MKTEMP) -d); \
	trap 'rm -rf "$$TEMPDIR"' EXIT; \
	$(MAKE) -f $(MAKEFILE) --no-print-directory TEMPDIR=$$TEMPDIR $@


################################################################################
#
# Normal makefile follows.
#
else


################################################################################
#
# Clear out the suffixes list. DO NOT ALTER THIS LINE!
#
.SUFFIXES:
#
# Add any custom suffixes here (uncomment the line below).
# The "standard" suffixes list currently includes:
# .svg .pdf .tex .dvi .png .tif .plo .jpg .pict .eps .ps .R .xml .pu .ipu
#
# .SUFFIXES: 


################################################################################
#
# Define paths for various items here. The "standard" paths currently include:
#
# vpath %.pdf $(IMGDIR)
# vpath %.png $(IMGDIR)
# vpath %.tif $(IMGDIR)
# vpath %.jpg $(IMGDIR)
# vpath %.plo $(IMGDIR)
# vpath %.ps $(IMGDIR)
# vpath %.eps $(IMGDIR)
# vpath %.svg $(IMGDIR)
# vpath %.pict $(IMGDIR)
# vpath %.R $(IMGDIR)
#
# There's nothing to stop you adding new paths for these file types.
#
# vpath foo bar


################################################################################
#
# Specify the main paper parameters. These may be specified in a separate include
# file if desired (just uncomment the include line below and insert the appropriate
# path; no need to comment the variables).
# THESE MUST BE DEFINED!
#
# Note that PAPER_YEAR defaults to the current year unless otherwise specified.
# This may not always be what you want! (e.g., building previous year’s material)
#
# include path/to/variables/makefile
SUBJECT_CODE?=$(error The required variable SUBJECT_CODE has not been defined. Please set it to the correct value for this paper)
PAPER_NUMBER?=$(error The required variable PAPER_NUMBER has not been defined. Please set it to the correct value for this paper)
PAPER_YEAR?=$(shell date +"%Y")
PAPER_PERIOD?=$(error The required variable PAPER_PERIOD has not been defined. Please set it to the correct value for this paper)


################################################################################
#
# Specify the base name(s) for the document source file(s). It may be a list.
# THIS MUST BE DEFINED!
#
BASE_NAMES?=$(error The required variable BASE_NAME has not been defined. Please set it to the base name(s) of the document source file(s))


################################################################################
#
# Directory to install files into on web server. This is (usually) .../Misc/name of
# build directory, to avoid similarly-named files overwriting each other.
#
BUILD_DIR:=$(lastword $(subst /, ,$(CURDIR)))
INSTALL_DIRECTORY:=$(HANDBOOK_INSTALL_ROOT)/$(SUBJECT_CODE)$(PAPER_NUMBER)/Misc/$(BUILD_DIR)


################################################################################
#
# Does this document have questions with associated answers that can be
# shown or hidden? Define this variable (any value) to enable the targets
# for this. Note that setting this will generate "questions" and "answers"
# output for ALL targets, regardless of whether this is actually relevant.
# This already happens with the handbooks anyway, so no real problem :)
# You can always add the redundant files to the TIDY_FILES variable.
#
HAS_ANSWERS=


################################################################################
#
# Standard file list variables.
# Note that anything included in any of these variables (particularly the
# FILES variables) will cause ALL of the relevant print or web targets to
# be rebuilt, regardless of whether they are actually prerequisites. This
# can be slightly annoying if some of the files are only relevant to one
# target. To avoid this effect, define a custom rule at the bottom of
# this file.
#
# List of images used in the print version as actual content.
#
PRINT_IMAGES=

#
# List of other files used in the print version as actual content.
#
PRINT_FILES=

#
# List of images used in the web version as actual content.
#
WEB_IMAGES=

#
# List of other files used in the web version as actual content.
#
WEB_FILES=

#
# Files to be cleaned by the various "clean" targets. The "standard" values
# are currently:
# TIDY_FILES+=*.tmp *.out *.log *.nav *.toc *.snm *.head *.dvi *.vrb _minted* \
# 	*-derived.xml $(derived .tex files)
# CLEAN_FILES=*.aux $(IMGDIR)/*-print.pdf $(IMGDIR)/*-print.png \
#	$(IMGDIR)/*-web.png $(IMGDIR)/*-web-zoom.png \
#	$(derived HTML files) $(derived PDF files)
#
# $(TIDY_FILES) is a list of generated intermediate files to clean up.
#
TIDY_FILES=
#
# $(CLEAN_FILES) is everything else that might need to be cleaned up.
#
CLEAN_FILES=


################################################################################
#
# List of "phony" build targets (remember to define rules for
# them!). The "standard" list is currently:
# all debug test clean tidy targets web print print2up
#
TARGETS=

#
# Uncomment the following to enable Unicode mode. This forces use of XHTML,
# Xe(La)TeX, etc. The value of the variable is irrelevant, it just need to be
# defined.
#
# UNICODE=on


################################################################################
#
# Add custom variables below here as necessary.
#


################################################################################
#
# Include standard variables and rules for building miscellaneous documents.
#
include $(GLOBAL_HANDBOOK_INCLUDE)/build_misc_rules.make


################################################################################
#
# Add custom rules below here as necessary, BEFORE the endif.
#
# If a custom rule has the same target and prerequisite as a default rule,
# it overrides the default rule. If you want to replace it with a similar
# but different target and prerequisite, cancel the existing rule first,
# e.g.:
#
#	%.foo : %.bar


endif