diff options
Diffstat (limited to 'macros/latex/contrib/photobook/Makefile')
-rw-r--r-- | macros/latex/contrib/photobook/Makefile | 375 |
1 files changed, 375 insertions, 0 deletions
diff --git a/macros/latex/contrib/photobook/Makefile b/macros/latex/contrib/photobook/Makefile new file mode 100644 index 0000000000..fd760d0352 --- /dev/null +++ b/macros/latex/contrib/photobook/Makefile @@ -0,0 +1,375 @@ +#---------------------------------------------------------------------- +# +# +# +# Main targets: +# pdf - build class pdf documentation... +# md - build class markdown documentation (XXX EXPERIMENTAL)... +# +# Distribution and install: +# dist - build a distributable zip +# install - install to user home latex path +# uninstall - uninstall/remove from user home latex path +# install-local - install to local latex path +# (may require elevated privileges) +# uninstall-local - uninstall/remove from local latex path +# (may require elevated privileges) +# install-devel - XXX +# uninstall-devel - XXX +# +# Other targets: +# sweep - cleanup auxiliary generated files +# clean - cleanup repo +# +# +# Variables: +# CODE_INSTALL - set how we handle the installing code/source. +# this can be: +# strip - strip the docs from code (default) +# copy - copy the code/doc file +# link - link the code/doc files +# (affects install and install-local targets) +# INSTALL_PATH - install path +# (only affects install target) +# +# +# Examples: +# +# $ INSTALL_PATH=./test CODE_INSTALL=link make install +# install to "./test" and do not strip docs. +# +# +# +#---------------------------------------------------------------------- +# Config... + +.EXPORT_ALL_VARIABLES: + +# NOTE: this makes things run consistently on different systems including +# things like Android... +SHELL := bash + +MODULE := photobook + + +# metadata... +# +# NOTE: the code version is in the code... +VERSION = $(strip $(shell \ + cat $(MODULE).cls \ + | grep 'VERSION{' \ + | sed 's/.*{\(.*\)}.*/\1/')) +DATE = $(strip $(shell date "+%Y%m%d%H%M")) +COMMIT = $(strip $(shell git rev-parse HEAD)) + + +# installing code... +# +# this can be: +# - strip +# - copy +# - link +# +# NOTE: we are doing things in different ways for different modes: +# - copy vs. strip +# - simply change the target name and let make figure it out... +# - link vs. copy/strip +# - $(LN) vs. $(INSTALL) in the install target... +CODE_INSTALL ?= strip +ifeq ($(CODE_INSTALL),strip) + MODULE_CODE := $(MODULE)-stripped +else + MODULE_CODE := $(MODULE) +endif + + +# markdown dialect... +# +# XXX still needs some tweaking... +MD_FORMAT ?= markdown_github + + +# debug output... +# +# $DEBUG can either be empty or anything else... +DEBUG ?= +ifeq ($(DEBUG),) + STDERR := > /dev/null +else + STDERR := +endif + + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Paths and files... + +# LaTeX... +TEX_LOCAL = $(shell kpsewhich --var-value TEXMFLOCAL) +TEX_HOME = $(shell kpsewhich --var-value TEXMFHOME) + +# default install target... +INSTALL_PATH ?= $(TEX_HOME) + +# build... +BUILD_DIR := build + +# distribution... +#DIST_NAME := $(MODULE)-$(VERSION) +DIST_NAME := $(MODULE)-$(VERSION)-$(DATE) +DIST_DIR := dist +DIST_FILES = \ + README.md \ + LICENSE \ + Makefile \ + $(wildcard scripts/*) \ + $(MODULE).cls \ + $(MODULE).pdf +# Add these when ready... +# $(wildcard examples/*) \ +# $(wildcard manual/*) \ +# $(wildcard workflow/*) \ +# + + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Software... + +# NOTE: need to run latex two+ times to build index, the simpler way to +# go is to use latexmk... +#TEX := lualatex +TEX := latexmk -lualatex + +# Doc generator... +DOC := ./scripts/cls2tex.sh + +MD := mkdir -p +# XXX cp/install, technically this is only used in install* targets so +# renaming CP -> INSTALL would seem logical... +#INSTALL := cp +INSTALL := install +# copy preserving relative paths... +RCP := cp -r --parents +LN := cp -l + + + +#---------------------------------------------------------------------- +# Rules... + +# docs (pdf)... +# +%.pdf: %.tex + $(TEX) $< $(STDERR) + +# docs (markdown)... +# +# XXX this still needs some tweaking... +# - |..| - verbatim does not work... +# - || - parts of doc omitted... +# - verbatim blocks get merged sometimes... +# - ... +# ...not sure if this can be tweaked... +#%.md: %.tex +# pandoc -t $(MD_FORMAT) -s $< -o $@ + +# XXX EXPERIMENTAL... +# XXX revise: +# ...for this to work we need to replace: +# \documentclass{ltxdoc} +# to: +# \documentclass[markdownextra]{internet} +# XXX install the internet class... +# https://github.com/loopspace/latex-to-internet +# ...needs testing... +%.md: %.tex + cat $< \ + | sed 's/documentclass{ltxdoc}/documentclass[markdownextra]{internet}/' \ + > $<.tmp + mv $<{.tmp,} + $(TEX) $< $(STDERR) + + +# meta-section... +# +# NOTE: .sty and .cls are essentially the same in terms of documentation +# generation... +# XXX might be a good idea to place a link/footnote where metadocs were +# originally located... +# ...not sure yet manually or automatically... +%.tex: %.sty %-meta.tex + $(DOC) $< > $@ + +%.tex: %.cls %-meta.tex + $(DOC) $< > $@ + + +# meta docs... +# +# NOTE: this is a bit ugly, but allot less so than trying to push \verb +# into a LaTeX macro/env and then getting it out again in one pice... +%-meta.tex: %.sty + $(DOC) --prefix M $< > $@ + +%-meta.tex: %.cls + $(DOC) --prefix M $< > $@ + + +# strip docs out... +# +# XXX can we unify these??? +%-stripped.tex: %.tex + $(DOC) --strip $< \ + $(DOC) --prefix M --strip \ + > $@ + +%-stripped.sty: %.sty + $(DOC) --strip $< \ + | $(DOC) --prefix M --strip \ + > $@ + +%-stripped.cls: %.cls + $(DOC) --strip $< \ + | $(DOC) --prefix M --strip \ + > $@ + + + +#---------------------------------------------------------------------- +# Info targets... + +.PHONY: version +version: + @echo $(VERSION) + + + +#---------------------------------------------------------------------- +# Main targets... + +.PHONY: pdf +pdf: $(MODULE).pdf + + +.PHONY: md +md: $(MODULE).md + + +# XXX STUB -- not sure how to approach this yet... +# on one hand the manual should be a self-contained example in +# itself on the other hand we already have a working Makefile +# building the docs... +.PHONY: manual +manual: + $(MAKE) -C manual all + mv manual/*.pdf . + + +%.zipnote: %.zip + zipnote $< > $@ + + +.PHONY: dist +dist: $(DIST_FILES) + $(MD) $(DIST_DIR) + zip -Drq $(DIST_DIR)/$(DIST_NAME).zip $(DIST_FILES) + # Place everything in the module dir as per CTAN spec... + zipnote $(DIST_DIR)/$(DIST_NAME).zip \ + | sed 's/^\@ \([^(].*\)$$/@ \1\n@=$(MODULE)\/\1/' \ + | zipnote -w $(DIST_DIR)/$(DIST_NAME).zip + +CTAN: dist + $(MD) $(DIST_DIR)/CTAN + cp $(DIST_DIR)/$(DIST_NAME).zip $(DIST_DIR)/CTAN/$(MODULE).zip + + +.PHONY: all +all: pdf + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Install/uninstall targets... + +# NOTE: keep the dir clean unless this is explicitly built... +.INTERMEDIATE: \ + $(MODULE)-stripped.cls \ + $(MODULE)-stripped.sty \ + $(MODULE)-stripped.tex + + +# user install... +.PHONY: install +install: pdf $(MODULE_CODE).cls + $(MD) $(INSTALL_PATH)/{tex,source,doc}/latex/$(MODULE) + $(INSTALL) "$(MODULE).pdf" $(INSTALL_PATH)/doc/latex/$(MODULE) + $(INSTALL) "$(MODULE_CODE).cls" $(INSTALL_PATH)/tex/latex/$(MODULE)/$(MODULE).cls +# # NOTE: we are printing only the stuff we are doing... + @run(){ echo "$$@" ; "$$@" ; } ;\ + if [[ $${CODE_INSTALL} == "link" ]] ; then \ + run $(LN) \ + "$(INSTALL_PATH)/tex/latex/$(MODULE)/$(MODULE).cls" \ + "$(INSTALL_PATH)/source/latex/$(MODULE)/" ;\ + else \ + run $(INSTALL) "$(MODULE).cls" "$(INSTALL_PATH)/source/latex/$(MODULE)" ;\ + fi + +.PHONY: uninstall +uninstall: + rm -rf $(INSTALL_PATH)/{tex,source,doc}/latex/$(MODULE) + @echo "###" + @echo "### NOTE: this can leave the following dirs empty:" + @echo "### $(INSTALL_PATH)/{tex,source,doc}/latex/" + @echo "###" + + +# local/system install... +# NOTE: this should be run with sudo, i.e.: +# $ sudo make install-local +.PHONY: install-local +install-local: INSTALL_PATH := $(TEX_LOCAL) +install-local: install + +.PHONY: uninstall-local +uninstall-local: INSTALL_PATH := $(TEX_LOCAL) +uninstall-local: uninstall + + +# XXX need to make this work for windows... +# ...this must depend not on the OS but rather on in what context +# (cygwin/wsl/windows), latex is running... +# ...this seems to work: +# > mkling TO FROM +# but like ln, it's args are in the wrong order... +# ...cp -s creates links usable from cygwin but not usable from +# windows... +.PHONY: install-devel +install-devel: CODE_INSTALL := copy +install-devel: INSTALL := cp -s +install-devel: install + +.PHONY: uninstall-devel +uninstall-devel: uninstall + + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Cleanup targets... + +.PHONY: sweep +sweep: + rm -f \ + *.{aux,fls,glo,gls,hd,idx,ilg,ind,ins,log,out,toc,fdb_latexmk} \ + *-stripped.{tex,sty,cls} \ + *-meta.{tex,sty,cls} \ + ${MODULE}.tex + + +.PHONY: clean +clean: sweep + rm -rf $(DIST_DIR) $(BUILD_DIR) $(MODULE).md *.pdf + + + +#---------------------------------------------------------------------- +# vim:set ts=4 sw=4 : |