summaryrefslogtreecommitdiffstatshomepage
path: root/Makefile
blob: 9fd24548de300bc79dfdccc450dab3c9f7302130 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
### latex.makefile

# Targets:
#    default : compiles the document to a PDF file using the defined
#              latex generating engine. (pdflatex, xelatex, etc)
#    display : displays the compiled document in a common PDF viewer.
#              (currently linux = evince, OSX = open)
#    clean   : removes the build/ directory holding temporary files


PROJECT = pa2cal 

default: build/$(PROJECT).pdf

display: default
	(${PDFVIEWER} build/$(PROJECT).pdf &)


### Compilation Flags
PDFLATEX_FLAGS  = -halt-on-error -output-directory build/

TEXINPUTS = .:build/
TEXMFOUTPUT = build/


### File Types (for dependancies
TEX_FILES = $(shell find . -name '*.tex' -or -name '*.sty' -or -name '*.cls')
BIB_FILES = $(shell find . -name '*.bib')
BST_FILES = $(shell find . -name '*.bst')
IMG_FILES = $(shell find . -path '*.jpg' -or -path '*.png' -or \( \! -path './build/*.pdf' -path '*.pdf' \) )


### Standard PDF Viewers
# Defines a set of standard PDF viewer tools to use when displaying the result
# with the display target. Currently chosen are defaults which should work on
# most linux systems with GNOME installed and on all OSX systems.

UNAME := $(shell uname)

ifeq ($(UNAME), Linux)
PDFVIEWER = evince
endif

ifeq ($(UNAME), Darwin)
PDFVIEWER = open
endif


### Clean
# This target cleans the temporary files generated by the tex programs in
# use. All temporary files generated by this makefile will be placed in build/
# so cleanup is easy.

clean::
	rm -rf build/

### Core Latex Generation
# Performs the typical build process for latex generations so that all
# references are resolved correctly. If adding components to this run-time
# always take caution and implement the worst case set of commands.
# Example: latex, bibtex, latex, latex
#
# Note the use of order-only prerequisites (prerequisites following the |).
# Order-only prerequisites do not effect the target -- if the order-only
# prerequisite has changed and none of the normal prerequisites have changed
# then this target IS NOT run.
#
# In order to function for projects which use a subset of the provided features
# it is important to verify that optional dependancies exist before calling a
# target; for instance, see how bibliography files (.bbl) are handled as a
# dependency.

build/:
	mkdir -p build/

build/$(PROJECT).aux: $(TEX_FILES) $(IMG_FILES) | build/
	pdflatex $(PDFLATEX_FLAGS) $(PROJECT)

build/$(PROJECT).bbl: $(BIB_FILES) | build/$(PROJECT).aux
	bibtex build/$(PROJECT)
	pdflatex $(PDFLATEX_FLAGS) $(PROJECT)
	
build/$(PROJECT).pdf: build/$(PROJECT).aux $(if $(BIB_FILES), build/$(PROJECT).bbl)
	pdflatex $(PDFLATEX_FLAGS) $(PROJECT)