Makefile (10176B)
1 ## 2 ## Used commands by the build process 3 ## 4 CWD := $(shell pwd) 5 RM=rm 6 7 ## 8 ## Internal variables 9 ## 10 _BUILD_DIR=_build 11 _OUT_DIR=_output 12 _XFIG_DIR=fig 13 _MAINFILE:= $(MAINFILE:.tex=) 14 export _TEMPLATE=.template 15 export _SVG_DIR=svg 16 _LECTURE=$(LECTURE:.tex=) 17 export _LECTURES=lectures 18 export _EXSRC=exsrc 19 export _PICTURES=pictures 20 21 ## Template mode configuration files 22 _CF_HANDOUTS=cf_handouts 23 _CF_TABLET=cf_tablet 24 _CF_NOTES=cf_notes 25 _CF_SLIDES=cf_slides 26 27 ## 28 ## Ext variables for build ctrl. All use a default set 29 ## 30 MAINFILE ?= ${_CF_SLIDES} 31 LECTURE ?= sample_lecture.tex 32 DEBUG ?= 0 33 34 ## bibtex data files 35 export _DB_DIR=database 36 37 38 39 _TEMPLATE_DIRS=${_LECTURES} \ 40 ${_XFIG_DIR} \ 41 ${_SVG_DIR} \ 42 ${_DB_DIR} \ 43 ${_EXSRC} \ 44 ${_PICTURES} 45 46 47 ## 48 ## Eval dest dir 49 ## 50 ifeq (${_CWD_NAME},${_TEMPLATE}) 51 _DESTINATION_DIR=.. 52 else 53 _DESTINATION_DIR=. 54 endif 55 56 export _DESTINATION_DIR 57 58 ## 59 ## Lists 60 ## 61 SVGFILES := $(wildcard $(_SVG_DIR)/*.svg) 62 XFIGFILES := $(wildcard $(_XFIG_DIR)/*.fig) 63 64 export TEXINPUTS :=./:${_TEMPLATE}:${_TEMPLATE}/sty:${_TEMPLATE}/img:${_LECTURES}:${_DB_DIR}:${_EXSRC}:${_PICTURES}:$(TEXINPUTS) 65 66 67 ifeq ($(DEBUG), 2) 68 # Extra options, these must be available for both pdflatex and latexmk 69 _DEFAULT_LATEX_OPTIONS=-synctex=1 -output-directory=$(_BUILD_DIR) -aux-directory=$(_BUILD_DIR) 70 else ifeq ($(DEBUG), 1) 71 # Extra options, these must be available for both pdflatex and latexmk 72 _DEFAULT_LATEX_OPTIONS=-synctex=1 -output-directory=$(_BUILD_DIR) -aux-directory=$(_BUILD_DIR) -interaction=batchmode 73 else 74 _DEFAULT_LATEX_OPTIONS=-synctex=1 -output-directory=$(_BUILD_DIR) -aux-directory=$(_BUILD_DIR) -interaction=batchmode -quiet -silent 75 endif 76 77 # Options for glossary 78 _GLOSSARY_OPTIONS = -q 79 80 _LINE_WIDTH = error_line=240 half_error_line=160 max_print_line=240 81 82 # Command to build document 83 #_BUILD = $(_LINE_WIDTH) latexmk -pdf -bibtex- -jobname=$(_MAINFILE) $(_DEFAULT_LATEX_OPTIONS) $(_MAINFILE) 84 _BUILD = $(_LINE_WIDTH) latexmk -pdf -jobname=$(_MAINFILE) $(_DEFAULT_LATEX_OPTIONS) $(_MAINFILE) 85 86 # Command to build glossary and glossarylists 87 # (Not using -d option due to incompatibility with some systems) 88 _BUILD_GLOSSARY = cd $(BUILD_DIR) &&\ 89 makeglossaries $(_GLOSSARY_OPTIONS) $(_MAINFILE) &&\ 90 cd - >/dev/null 91 92 # Command to build bibliography 93 # Latexmk does not currently handle this well when building to subdir 94 # so we do it manually 95 #_BUILD_BIBLIOGRAPHY = bibtex $(_BUILD_DIR)/$(_MAINFILE) 96 97 ##_PARSE_LOG = sed '/[Cc]\:.*\:.*\:.*/,/.*/!d' $(_BUILD_DIR)/$(MAINFILE:.tex=.log) 98 99 .PHONY : init list help slides handouts notes tablet distclean clean mrproper migrate 100 101 help: 102 @echo "MAKE OPTIONS" 103 @echo "==========================================================================" 104 @echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" 105 @echo "" 106 @echo "LECTURE=lecture_* : Set target lecture (use LIST for a overview)" 107 @echo "DEBUG=[0|1|2] : Increase LaTex build verbosity level" 108 @echo "" 109 @echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" 110 @echo ">> Information targets" 111 @echo "--------------------------------------------------------------------------" 112 @echo "help : Print this dialogue" 113 @echo "[s*|h*|m*]_show : Build slide of LECTURE and display the corresponding" 114 @echo " build mode [slides_show | handouts_show | memo_show]" 115 @echo "list : List available LECTURES located in '$(_LECTURES)/'" 116 @echo "" 117 @echo ">> Build Targets" 118 @echo "--------------------------------------------------------------------------" 119 @echo "" 120 @echo "bundle : Build a LECTURE set (slides, handouts, and memo)" 121 @echo "slides : Build LECTURE slides" 122 @echo "handouts : Build LECTURE handouts" 123 @echo "tablet : Build LECTURE tabled" 124 @echo "notes : Build LECTURE notes" 125 @echo "convert : Convert *.fig and *.svg files. (The following direct-" 126 @echo " ories are parsed : '$(_XFIG_DIR)' and '$(_SVG_DIR)')" 127 @echo "" 128 @echo ">> Clean Targets" 129 @echo "--------------------------------------------------------------------------" 130 @echo "" 131 @echo "clean : Remove files in directory '$(_BUILD_DIR)/'" 132 @echo "mrproper : Remove temp files such as '*~'" 133 @echo "distclean : Cleanup everything and remove all '_*' directories" 134 @echo "" 135 @echo ">> Initialization and Migration Targets" 136 @echo "--------------------------------------------------------------------------" 137 @echo "" 138 @echo "init : Create all directories holding important source and" 139 @echo " and add simlinks to the cf files" 140 @echo "" 141 @echo "sample : Create sample presentation source file" 142 @echo " Build the presentation with command given below:" 143 @echo " LECTURE=sample_lecture make convert bundle slides_show" 144 @echo "" 145 @echo "migrate : Convert current directory structure and files to make" 146 @echo " it compliant to newest build system requirements." 147 @echo "" 148 @echo "" 149 @echo "==========================================================================" 150 @echo "Author : Andreas HABEGGER <andreas.habegger@bfh.ch>" 151 @echo "Date : 2019-09-30" 152 @echo "Version: v2.0" 153 @echo "==========================================================================" 154 @echo "" 155 156 bundle: slides handouts tablet 157 @echo "" 158 @echo "*****************************************************************************************" 159 @echo "** A lecturing set has been produced for lecture: $(_LECTURE)" 160 @echo "*****************************************************************************************" 161 @echo "" 162 163 init: $(_TEMPLATE_DIRS) _mkgitignore_ _mklatexmkrc_ _mkvariables_ 164 @if [ ! -f ${_CF_HANDOUTS}.tex ]; then ln -s ${_TEMPLATE}/${_CF_HANDOUTS}.tex; fi 165 @if [ ! -f ${_CF_TABLET}.tex ]; then ln -s ${_TEMPLATE}/${_CF_TABLET}.tex; fi 166 @if [ ! -f ${_CF_SLIDES}.tex ]; then ln -s ${_TEMPLATE}/${_CF_SLIDES}.tex; fi 167 # @if [ ! -f ${_CF_NOTES}.tex ]; then ln -s ${_TEMPLATE}/${CF_NOTES}.tex; fi 168 @echo "Initialization of new exam environment completed ..." 169 170 171 slides_show: _slides_ 172 @$(_LINE_WIDTH) latexmk -pdf -pv -bibtex -jobname=$(_MAINFILE) $(_DEFAULT_LATEX_OPTIONS) $(MAINFILE) 173 174 handouts_show: _handouts_ 175 @$(_LINE_WIDTH) latexmk -pdf -pv -bibtex -jobname=$(_MAINFILE) $(_DEFAULT_LATEX_OPTIONS) $(MAINFILE) 176 177 tablet_show: _tablet_ 178 @$(_LINE_WIDTH) latexmk -pdf -pv -bibtex -jobname=$(_MAINFILE) $(_DEFAULT_LATEX_OPTIONS) $(MAINFILE) 179 180 list: 181 @if [ -d $(_LECTURES) ]; then ls $(_LECTURES)/*.tex | cut -d"/" -f2-; fi 182 183 sample: $(_TEMPLATE_DIRS) _mksample_lecture_ _cpsample_ 184 @echo "Sample lecture created... !" 185 186 slides: _slides_ 187 @cp $(_BUILD_DIR)/$(_MAINFILE).pdf $(_OUT_DIR)/$(_LECTURE)_$@.pdf 188 189 handouts: _handouts_ 190 @cp $(_BUILD_DIR)/$(_MAINFILE).pdf $(_OUT_DIR)/$(_LECTURE)_$@.pdf 191 192 notes: _notes_ 193 @cp $(_BUILD_DIR)/$(_MAINFILE).pdf $(_OUT_DIR)/$(_LECTURE)_$@.pdf 194 195 tablet: _tablet_ 196 @cp $(_BUILD_DIR)/$(_MAINFILE).pdf $(_OUT_DIR)/$(_LECTURE)_$@.pdf 197 198 archive: 199 @git archive --format zip --prefix lectureTemplate/ master > ../lectureTemplate.zip 200 201 convert: _mkdir_ _convsvg_ _convfig_ 202 203 clean: 204 @if [ -d $(_BUILD_DIR) ]; then \ 205 rm -f $(_BUILD_DIR)/${_CF_HANDOUTS}.* \ 206 $(_BUILD_DIR)/${_CF_TABLET}.* \ 207 $(_BUILD_DIR)/${_CF_NOTES}.* \ 208 $(_BUILD_DIR)/${_CF_SLIDES}.* \ 209 ;fi 210 211 migrate: _migrate_001_ $(_TEMPLATE_DIRS) _mkgitignore_ _mklatexmkrc_ _mkvariables_ 212 @echo "Migration from old template to new version completed!" 213 214 mrproper: 215 @find . -iname '*~' -exec $(RM) '{}' \; 216 @find . -iname '#*' -exec $(RM) '{}' \; 217 218 distclean: mrproper clean 219 @latexmk -C > /dev/null 2>&1 220 @if [ -d $(_BUILD_DIR) ] && [ `readlink -f $(_BUILD_DIR)` != $(CWD) ]; then $(RM) -rf $(_BUILD_DIR) > /dev/null; fi 221 @if [ -d $(_OUT_DIR) ] && [ `readlink -f $(_OUT_DIR)` != $(CWD) ]; then $(RM) -rf $(_OUT_DIR) > /dev/null; fi 222 223 $(_TEMPLATE_DIRS): 224 @if [ ! -d $@ ]; then mkdir -p ${_DESTINATION_DIR}/$@; fi 225 226 _slides_: _mkmain_ 227 $(eval _MAINFILE := ${_CF_SLIDES}) 228 @$(_BUILD) && echo "" 229 230 _handouts_: _mkmain_ 231 $(eval _MAINFILE := ${_CF_HANDOUTS}) 232 @$(_BUILD) && echo "" 233 234 _notes_: _mkmain_ 235 $(eval _MAINFILE := ${_CF_NOTES}) 236 @$(_BUILD) && echo "" 237 238 _tablet_: _mkmain_ 239 $(eval _MAINFILE := ${_CF_TABLET}) 240 @$(_BUILD) && echo "" 241 242 _mkdir_: 243 @mkdir -p $(_BUILD_DIR) &>/dev/null 244 @mkdir -p $(_OUT_DIR) &>/dev/null 245 246 _mkmain_: _mkdir_ 247 @echo "\\def\\lectureToBuild{${LECTURE}}" > $(_BUILD_DIR)/env.tex 248 @if [ -d $(_DB_DIR) ]; then find $(_DB_DIR)/ -iname '*.bib' -exec cp '{}' $(_BUILD_DIR)/ \; ;fi 249 250 _mkgitignore_: 251 @${_DESTINATION_DIR}/${_TEMPLATE}/mk_gitignore.sh 252 253 _mklatexmkrc_: 254 @${_DESTINATION_DIR}/${_TEMPLATE}/mk_latexmkrc.sh 255 256 _mkvariables_: 257 @if [ -e ${_DESTINATION_DIR}/variables.tex ]; then \ 258 echo "Backup 'variables.tex' "; \ 259 cp ${_DESTINATION_DIR}/variables.tex ${_DESTINATION_DIR}/_variables.tex.backup; \ 260 fi 261 @${_DESTINATION_DIR}/${_TEMPLATE}/mk_variables.sh 262 263 _mksample_lecture_: 264 @${_DESTINATION_DIR}/${_TEMPLATE}/mk_sample_lecture.sh 265 266 _cpsample_: 267 @${_DESTINATION_DIR}/${_TEMPLATE}/mk_copySampleFiles.sh 268 269 _convfig_: $(XFIGFILES:%.fig=%.pdf) #$(XFIGFILES:%.fig=%.png) $(XFIGFILES:%.fig=%.eps) 270 271 _convsvg_: $(SVGFILES:%.svg=%.pdf) #$(SVGFILES:%.svg=%.png) 272 273 _migrate_001_: 274 @if [ -d ${_DESTINATION_DIR}/images ]; then \ 275 echo "Rename 'images' -> ${_PICTURES}"; \ 276 mv ${_DESTINATION_DIR}/images ${_PICTURES}; \ 277 fi 278 279 %.eps:%.fig 280 fig2dev -L eps $*.fig $(*:$(_XFIG_DIR)/%=$(_BUILD_DIR)/%).eps 281 282 %.png:%.fig 283 fig2dev -L png $*.fig $(*:$(_XFIG_DIR)/%=$(_BUILD_DIR)/%).png 284 285 %.pdf:%.fig 286 fig2dev -L pdftex $*.fig $(*:$(_XFIG_DIR)/%=$(_BUILD_DIR)/%).pdf;\ 287 fig2dev -L pdftex_t -p $(*:$(_XFIG_DIR)/%=$(_BUILD_DIR)/%).pdf $*.fig $(*:$(_XFIG_DIR)/%=$(_BUILD_DIR)/%).pdf_t 288 289 %.pdf:%.svg 290 inkscape --without-gui --export-area-page -A $(*:$(_SVG_DIR)/%=$(_BUILD_DIR)/%).pdf $*.svg 291 292 %.eps:%.svg 293 inkscape --without-gui --export-area-page -E $(*:$(_SVG_DIR)/%=$(_BUILD_DIR)/%).eps $*.svg 294 295 %.png:%.svg 296 inkscape --without-gui --export-area-page -e $(*:$(_SVG_DIR)/%=$(_BUILD_DIR)/%).png $*.svg