-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
135 lines (112 loc) · 4.77 KB
/
Makefile
File metadata and controls
135 lines (112 loc) · 4.77 KB
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# Build main.pdf from main.tex (use existing main.tex which loads utf8 & listings)
# Dependencies:
# - TeX Live (pdflatex) and common LaTeX packages: amsmath, hyperref, listings, xcolor
# - Beamer class for slides
# - latexmk (recommended)
#
# Debian/Ubuntu (recommended minimal set):
# sudo apt-get update && sudo apt-get install -y \
# latexmk texlive-latex-base texlive-latex-recommended latex-beamer \
# texlive-latex-extra texlive-fonts-recommended
#
# Fedora/RHEL (approximate equivalents):
# sudo dnf install -y latexmk texlive-scheme-medium texlive-beamer texlive-collection-latexrecommended
MAIN := main
TEXSRC := $(MAIN).tex
PDF := $(MAIN).pdf
LATEXMK := $(shell command -v latexmk 2>/dev/null)
TEXENGINE ?= pdflatex
ifeq ($(LATEXMK),)
PDF_CMD := $(TEXENGINE) -interaction=nonstopmode -halt-on-error $(TEXSRC) && \
$(TEXENGINE) -interaction=nonstopmode -halt-on-error $(TEXSRC)
WATCH_CMD := @echo "latexmk not found; 'make watch' unavailable."
else
PDF_CMD := latexmk -pdf -interaction=nonstopmode -halt-on-error -file-line-error $(TEXSRC)
WATCH_CMD := latexmk -pdf -pvc -interaction=nonstopmode -halt-on-error -file-line-error $(TEXSRC)
endif
SHELL := /bin/bash
# Clean aux for all TeX sources in this directory
TEX_SOURCES := $(wildcard *.tex)
TEX_BASENAMES := $(basename $(TEX_SOURCES))
AUX_EXTS := aux log out toc lof lot fls fdb_latexmk synctex.gz \
bbl blg bcf run.xml xdv dvi ps nav snm vrb brf idx ilg ind ist \
acn acr alg glg glo gls glsdefs nlo nls lox thm auxlock \
4ct 4tc lg tmp maf mtc mtc0 maf0
.PHONY: all pdf watch clean distclean veryclean open beamer beamer-clean latexmk-clean help deps check-deps
all: pdf
pdf: $(PDF)
$(PDF): $(TEXSRC)
@echo "==> Building $(PDF)"
@$(PDF_CMD)
# --- info / helpers ---------------------------------------------------------
help:
@echo "Targets: make | make pdf | make beamer | make clean | make distclean"
@echo "Helpers: make deps (install hints), make check-deps (quick sanity check)"
deps:
@echo "Debian/Ubuntu:"
@echo " sudo apt-get update && sudo apt-get install -y \\"
@echo " latexmk texlive-latex-base texlive-latex-recommended latex-beamer \\"
@echo " texlive-latex-extra texlive-fonts-recommended"
@echo
@echo "Fedora/RHEL:"
@echo " sudo dnf install -y latexmk texlive-scheme-medium texlive-beamer texlive-collection-latexrecommended"
check-deps:
@ok=1; \
if ! command -v pdflatex >/dev/null 2>&1; then echo "Missing: pdflatex (install TeX Live)"; ok=0; fi; \
if ! command -v latexmk >/dev/null 2>&1; then echo "Note: latexmk not found (optional but recommended)"; fi; \
if ! kpsewhich beamer.cls >/dev/null 2>&1; then echo "Missing: Beamer class (install latex-beamer or texlive-latex-recommended)"; ok=0; fi; \
if [ $$ok -eq 1 ]; then echo "Dependency check: OK"; else echo "See 'make deps' for install hints."; fi
# --- local CI testing -------------------------------------------------------
.PHONY: test-ci
test-ci:
@if ! command -v act >/dev/null 2>&1; then \
echo "Error: 'act' is not installed. Please see README.md for installation instructions."; \
exit 1; \
fi
@echo "==> Running local CI test with 'act'..."
act push -P ubuntu-latest=catthehacker/ubuntu:act-latest --container-architecture linux/amd64
# --- beamer target ----------------------------------------------------------
BEAMER_MAIN := beamer-tutorial
BEAMER_SRC := $(BEAMER_MAIN).tex
BEAMER_PDF := $(BEAMER_MAIN).pdf
beamer: $(BEAMER_PDF)
$(BEAMER_PDF): $(BEAMER_SRC)
@echo "==> Building $(BEAMER_PDF)"
@if command -v latexmk >/dev/null 2>&1; then \
latexmk -pdf -interaction=nonstopmode -halt-on-error -file-line-error $(BEAMER_SRC); \
else \
$(TEXENGINE) -interaction=nonstopmode -halt-on-error $(BEAMER_SRC) && \
$(TEXENGINE) -interaction=nonstopmode -halt-on-error $(BEAMER_SRC); \
fi
watch:
$(WATCH_CMD)
open: $(PDF)
xdg-open $(PDF) >/dev/null 2>&1 || true
clean:
@echo "==> Cleaning TeX auxiliary files for: $(TEX_BASENAMES)"
@for base in $(TEX_BASENAMES); do \
for ext in $(AUX_EXTS); do rm -f "$${base}.$${ext}"; done; \
done
@-rm -rf _minted-* .latex-cache latex.out
latexmk-clean:
@echo "==> latexmk -C (all .tex, if available)"
@if command -v latexmk >/dev/null 2>&1; then \
for tex in $(TEX_SOURCES); do latexmk -C "$$tex"; done; \
else \
echo "latexmk not found; skipping latexmk -C"; \
fi
distclean: clean
@echo "==> Removing generated PDFs"
@-rm -f $(PDF) $(BEAMER_PDF)
veryclean: distclean
@echo "==> Removing editor backup/temporary files"
@-rm -f *~ \#*# .*~ .\#* *.bak *.bck *.tmp *.swp *.swo *.swx
beamer-clean:
@echo "==> Cleaning beamer aux files"
@-for base in $(TEX_BASENAMES); do \
if [[ "$$base" == beamer-* ]]; then \
for ext in aux log nav out snm toc vrb fls fdb_latexmk synctex.gz; do \
rm -f "$${base}.$${ext}"; \
done; \
fi; \
done