mirror of
https://github.com/posquit0/Awesome-CV.git
synced 2025-12-30 10:55:04 +08:00
174 lines
4.7 KiB
Makefile
174 lines
4.7 KiB
Makefile
.DEFAULT_GOAL := all
|
|
.SHELLFLAGS := -e -c
|
|
SHELL := $(shell command -v sh)
|
|
|
|
## Enviroment overridable variables
|
|
out ?= $(CURDIR)/outputs
|
|
src ?= $(CURDIR)
|
|
|
|
CURDIR ?= {PWD}
|
|
VERBOSE ?= 1
|
|
FORCE ?= 0
|
|
LANG ?= C.UTF-8
|
|
XETEX ?= xelatex
|
|
|
|
### Installation paths
|
|
DOCDIR ?= share/doc/awesome-cv
|
|
EXAMPLEDIR ?= $(addsuffix /examples,$(DOCDIR))
|
|
DESTDIR ?= /usr/local
|
|
|
|
## Commandline overridable
|
|
SRC = $(src)
|
|
OUT = $(out)
|
|
|
|
### Internal variables
|
|
examples_dir = $(src)/examples
|
|
|
|
coverletter_dir = $(examples_dir)
|
|
coverletter_srcs =
|
|
coverletter_srcs += $(coverletter_dir)/coverletter.tex
|
|
coverletter_srcs += $(src)/awesome-cv.cls
|
|
coverletter_deps = $(patsubst $(src)/%,$(out)/%,$(coverletter_srcs))
|
|
|
|
resume_dir = $(examples_dir)/resume
|
|
resume_srcs =
|
|
resume_srcs += $(shell find "$(resume_dir)" -name "*.tex")
|
|
resume_srcs += $(src)/awesome-cv.cls
|
|
resume_deps = $(patsubst $(src)/%,$(out)/%,$(resume_srcs))
|
|
|
|
cv_dir = $(examples_dir)/cv
|
|
cv_srcs =
|
|
cv_srcs += $(shell find "$(cv_dir)" -name "*.tex")
|
|
cv_srcs += $(src)/awesome-cv.cls
|
|
cv_deps = $(patsubst $(src)/%,$(out)/%,$(cv_srcs))
|
|
|
|
out_dirs = $(sort $(dir \
|
|
$(coverletter_deps) \
|
|
$(resume_deps) \
|
|
$(cv_deps) \
|
|
))
|
|
|
|
install_dest_dir = $(addsuffix /,$(DESTDIR))
|
|
install_doc_dir = $(addprefix $(install_dest_dir),$(DOCDIR))
|
|
install_example_dir = $(addprefix $(install_dest_dir),$(EXAMPLEDIR))
|
|
|
|
force =
|
|
ifneq ($(strip $(filter-out 0,$(FORCE))),)
|
|
force = .force_non_existing
|
|
endif
|
|
|
|
silent =
|
|
ifeq ($(strip $(filter-out 0,$(VERBOSE))),)
|
|
silent = @
|
|
endif
|
|
|
|
## Resolve lazy variables
|
|
force := $(force)
|
|
silent := $(silent)
|
|
src := $(SRC)
|
|
out := $(OUT)
|
|
out_dirs := $(out_dirs)
|
|
install_dest_dir := $(install_dest_dir)
|
|
install_doc_dir := $(install_doc_dir)
|
|
install_example_dir := $(install_example_dir)
|
|
|
|
## Sentinel checks
|
|
ifeq ($(strip $(out)),)
|
|
$(error Output directory should be set to a value (OUT=))
|
|
endif
|
|
ifeq ($(strip $(src)),)
|
|
$(error Source directory should be set to a value (SRC=))
|
|
endif
|
|
ifeq ($(realpath $(out)),$(realpath $(src)))
|
|
$(error Output directory should not point to source tree (OUT <=> SRC='$(src)'))
|
|
endif
|
|
|
|
## (Re-)Exported variables
|
|
export LANG
|
|
|
|
.DELETE_ON_ERROR:
|
|
|
|
.ONE_SHELL:
|
|
|
|
.SUFFIXES:
|
|
|
|
.PHONY: examples
|
|
examples: \
|
|
$(out)/examples/coverletter.pdf \
|
|
$(out)/examples/cv.pdf \
|
|
$(out)/examples/resume.pdf
|
|
|
|
$(out)/%/resume.pdf: $(out)/%/resume.tex $(resume_deps) $(force) $(MAKEFILE_LIST) | $(out_dirs)
|
|
$(silent)"$(XETEX)" -output-directory="$(patsubst %/,%,$(dir $@))" "$<" 0<&-
|
|
|
|
$(out)/%/cv.pdf: $(out)/%/cv.tex $(cv_deps) $(force) $(MAKEFILE_LIST) | $(out_dirs)
|
|
$(silent)"$(XETEX)" -output-directory="$(patsubst %/,%,$(dir $@))" "$<" 0<&-
|
|
|
|
$(out)/%/coverletter.pdf: $(out)/%/coverletter.tex $(coverletter_deps) $(force) $(MAKEFILE_LIST) | $(out_dirs)
|
|
$(silent)"$(XETEX)" -output-directory="$(patsubst %/,%,$(dir $@))" "$<" 0<&-
|
|
|
|
$(out)/%.cls : $(src)/%.cls | $(out_dirs)
|
|
$(silent)ln -sf "$<" "$@"
|
|
|
|
$(out)/%.tex : $(src)/%.tex | $(out_dirs)
|
|
$(silent)ln -sf "$<" "$@"
|
|
|
|
$(out_dirs):
|
|
$(silent)mkdir -p "$@"
|
|
|
|
$(force): ;
|
|
|
|
.PHONY: pdf
|
|
pdf: examples
|
|
|
|
.PHONY: all
|
|
all: pdf
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
$(silent)rm -rf "$(out)"
|
|
|
|
.PHONY: println-%
|
|
println-%:
|
|
@printf -- '%s\n' "$*" 1>&2
|
|
@printf -- '%s\n' $(foreach v,$($*),"$(v)")
|
|
|
|
.PHONY: install
|
|
install: all
|
|
$(silent)install -d "$(install_doc_dir)"
|
|
$(silent)install -d "$(install_example_dir)"
|
|
$(silent)install -m 644 $(out)/examples/*.pdf "$(install_example_dir)/"
|
|
$(silent)install -m 644 $(src)/README.md "$(install_doc_dir)/"
|
|
$(silent)install -m 644 $(src)/LICENSE "$(install_doc_dir)/"
|
|
$(silent)install -m 644 $(out)/awesome-cv.cls "$(install_doc_dir)/"
|
|
|
|
.PHONY: uninstall
|
|
uninstall:
|
|
$(silent)rm -rf "$(install_doc_dir)" "$(install_example_dir)"
|
|
|
|
.PHONY: help
|
|
help:
|
|
@{ \
|
|
echo "Usage: make [target] [VARIABLE=value]"; \
|
|
echo "Available targets:"; \
|
|
echo " all - Build all examples (default)"; \
|
|
echo " pdf - Build PDF files"; \
|
|
echo " examples - Build all example PDFs"; \
|
|
echo " clean - Clean output directory"; \
|
|
echo " install - Install the documentation and examples"; \
|
|
echo " uninstall - Uninstall the documentation and examples"; \
|
|
echo " help - Show this help message"; \
|
|
echo ""; \
|
|
echo "Overridable variables:"; \
|
|
echo " OUT - Output directory (default: outputs)"; \
|
|
echo " SRC - Source directory (default: current directory)"; \
|
|
echo " VERBOSE - Verbosity level (0 for silent, default: 1)"; \
|
|
echo " FORCE - Force rebuild (0 for no, default: 0)"; \
|
|
echo " LANG - Language setting for LaTeX (default: C.UTF-8)"; \
|
|
echo " XETEX - LaTeX engine to use (default: xelatex)"; \
|
|
echo ""; \
|
|
echo "Example usage:"; \
|
|
echo " make pdf OUT=outputs SRC=src VERBOSE=1 FORCE=1"; \
|
|
echo " make install DESTDIR=/usr/local"; \
|
|
echo " make uninstall DESTDIR=/usr/local"; \
|
|
}
|