diff --git a/Makefile b/Makefile index e13637e..0fdb8cb 100644 --- a/Makefile +++ b/Makefile @@ -3,13 +3,30 @@ # # # Main targets: -# doc - build class documentation. -# dist - XXX -# install - XXX +# doc - build class documentation +# 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) # # Other targets: -# sweep - cleanup auxiliary generated files. -# clean - cleanup repo +# sweep - cleanup auxiliary generated files +# clean - cleanup repo +# +# Variables: +# STRIP_CODE - if "yes" strip docs from installed code +# (only for install and install-local targets) +# INSTALL_PATH - install path +# (only for install target) +# +# +# Examples: +# +# $ INSTALL_PATH=./test STRIP_CODE=no make install +# install to "./test" and do not strip docs. # # #---------------------------------------------------------------------- @@ -21,6 +38,16 @@ SHELL := bash MODULE := photobook +#STRIP_CODE ?= no +STRIP_CODE ?= yes + +ifeq ($(STRIP_CODE),yes) + MODULE_CODE := $(MODULE)-stripped +else + MODULE_CODE := $(MODULE) +endif + + # get version... # NOTE: the code version is in the code... VERSION := $(shell \ @@ -28,10 +55,15 @@ VERSION := $(shell \ | grep 'VERSION{' \ | sed 's/.*{\(.*\)}.*/\1/') + # LaTeX paths... TEX_LOCAL = $(shell kpsewhich --var-value TEXMFLOCAL) TEX_HOME = $(shell kpsewhich --var-value TEXMFHOME) +# default install target... +INSTALL_PATH ?= $(TEX_HOME) + + # distribution... DIST_DIR := dist DIST_FILES := \ @@ -57,15 +89,6 @@ DOC := ./scripts/cls2tex.sh CP := cp MD := mkdir -p -# XXX revise... -ifeq ($(OS),Windows_NT) - SYS_CP := $(CP) - SYS_MD := $(CP) -else - SYS_CP := sudo cp - SYS_MD := sudo mkdir -p -endif - #---------------------------------------------------------------------- @@ -75,6 +98,8 @@ endif $(TEX) $< > /dev/null +# docs... +# # NOTE: .sty and .cls are essentially the same in terms of documentation # generation... %.tex: %.sty %-meta.tex @@ -84,13 +109,34 @@ endif $(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) -p M $< > $@ + $(DOC) --prefix M $< > $@ %-meta.tex: %.cls - $(DOC) -p M $< > $@ + $(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 \ + > $@ @@ -111,38 +157,63 @@ doc: $(MODULE).pdf .PHONY: dist -dist: $(DIST_FILES) +dist: $(DIST_FILES) sweep $(MD) $(DIST_DIR) zip -Drq $(DIST_DIR)/$(MODULE)-$(VERSION).zip $(DIST_FILES) -# XXX merge install and install-user... -.PHONY: install -install: all - $(SYS_MD) $(TEX_LOCAL)/{tex,source,doc}/latex/$(MODULE) - $(SYS_CP) $(MODULE).cls $(TEX_LOCAL)/source/latex/$(MODULE) - $(SYS_CP) $(MODULE).cls $(TEX_LOCAL)/tex/latex/$(MODULE) - $(SYS_CP) $(MODULE).pdf $(TEX_LOCAL)/doc/latex/$(MODULE) - -.PHONY: install-user -install-user: all - $(MD) $(TEX_HOME)/{tex,source,doc}/latex/$(MODULE) - $(CP) $(MODULE).cls $(TEX_HOME)/source/latex/$(MODULE) - $(CP) $(MODULE).cls $(TEX_HOME)/tex/latex/$(MODULE) - $(CP) $(MODULE).pdf $(TEX_HOME)/doc/latex/$(MODULE) - - .PHONY: all -all: doc sweep +all: doc +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# 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: doc $(MODULE_CODE).cls + $(MD) $(INSTALL_PATH)/{tex,source,doc}/latex/$(MODULE) + $(CP) $(MODULE).cls $(INSTALL_PATH)/source/latex/$(MODULE) + $(CP) $(MODULE).pdf $(INSTALL_PATH)/doc/latex/$(MODULE) + $(CP) $(MODULE_CODE).cls $(INSTALL_PATH)/tex/latex/$(MODULE)/$(MODULE).cls + +.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 + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Cleanup targets... .PHONY: sweep sweep: - rm -f *.{aux,fls,glo,gls,hd,idx,ilg,ind,ins,log,out,toc,fdb_latexmk} + 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