started with presentation, outline
[msc-thesis1617.git] / build
1 #!/bin/bash
2 set -e
3 LATEXFLAGS="-file-line-error -halt-on-error"
4
5 docs=( thesis presentation )
6
7 log(){
8 echo $1 >&2
9 }
10
11 deps(){
12 [[ "$1" != *.tex && "$1" != *.pre ]] && fn="$1.tex" || fn="$1"
13 echo "$fn"
14 grep -Po '(?<=\\input{).*(?=})|(?<=\\include{).*(?=})' $fn |\
15 while read l; do deps "$l"; done
16 }
17
18 recompile(){
19 for dep in $(deps "$1"); do
20 if [ "$dep" -nt "$2" ]; then
21 log "$dep is newer than $2, thus recompiling"
22 return 0
23 fi
24 done
25 return 1
26 }
27
28 preamble(){
29 pdflatex $LATEXFLAGS -ini -jobname="$2" "&pdflatex $1\dump"
30 ret=$?
31 rm -f $2.pdf
32 [ $ret -ne 0 ] && exit 1
33 }
34
35 compile(){
36 pdflatex $LATEXFLAGS $1 || exit 1
37
38 if grep -q '^\\bibdata{' $1.aux
39 then bibtex $1 || exit 1
40 fi
41
42 if grep -q '\@istfilename' $1.aux
43 then makeglossaries $1 || exit 1
44 fi
45
46 if [ -f $1.idx ]
47 then makeindex $1 || exit 1
48 fi
49
50 tmpf=$(mktemp)
51 pdflatex $LATEXFLAGS $1 | tee $tmpf || exit 1
52
53 if grep -Fiq "Rerun" $tmpf
54 then pdflatex $LATEXFLAGS $1 || exit 1
55 fi
56
57 rm -vf $tmpf
58 }
59
60 pipeline(){
61 log "Processing $1"
62 if [ ! -f $1.tex ]; then
63 log "Skipping $1, no tex available"
64 else
65 # Check for preamble
66 [ -f preamble.tex ] && pre=preamble.tex
67 [ -f $1.pre ] && pre=$1.pre
68
69 if [ ! -z $pre ]; then
70 log "preamble found"
71 recompile $pre $1.fmt\
72 && preamble $pre $1\
73 || log "preamble up to date"
74 fi
75
76 # Compile document
77 recompile "$1.tex" "$1.pdf"\
78 && compile $1\
79 || log "document up to date"
80 fi
81 }
82
83 clean(){
84 while [ $# -ne 0 ]; do
85 log "Clean $1"
86 rm -fv $1.{acn,acr,alg,aux,bbl,blg,idl,idx,ilg,ind,fmt,glg,glo,gls,\
87 ist,loa,lof,log,lol,lot,nav,out,pdf,snm,tdo,toc}
88 shift
89 done
90 }
91
92 if [ $# -eq 0 ]; then
93 for doc in "${docs[@]}"; do
94 pipeline $doc
95 log ""
96 done
97 else
98 while [ $# -ne 0 ]; do
99 if [ $1 = "clean" ]; then
100 if [ $# -eq 2 ];
101 then clean $d
102 else clean "${docs[@]}"
103 fi
104 else
105 pipeline $1
106 fi
107 shift
108 done
109 fi
110