# Makefile for luatexbase

NAME = luatexbase
DTX = $(wildcard luatexbase*.dtx)
DOC = $(patsubst %.dtx, %.pdf, $(DTX))
DTXSTY = lltxb-dtxstyle.tex

# Files grouped by generation mode
UNPACKED_MCB = luatexbase-mcb.sty mcb.lua \
			test-mcb-latex.tex test-mcb-plain.tex \
			test-mcb.lua $(TEST_MCB)
UNPACKED_REGS = luatexbase-regs.sty \
			test-regs-plain.tex test-regs-latex.tex
UNPACKED_ATTR = luatexbase-attr.sty attr.lua \
			test-attr-plain.tex test-attr-latex.tex
UNPACKED_CCTB = luatexbase-cctb.sty cctb.lua \
			test-cctb-plain.tex test-cctb-latex.tex
UNPACKED_LOADER = luatexbase-loader.sty luatexbase.loader.lua \
			test-loader-plain.tex test-loader-latex.tex \
			$(TEST_LOADER).lua test-loader.sub.lua
UNPACKED_MODUTILS = luatexbase-modutils.sty modutils.lua test-modutils.lua \
			test-modutils-plain.tex test-modutils-latex.tex
UNPACKED_COMPAT = luatexbase-compat.sty \
			test-compat-plain.tex test-compat-latex.tex
UNPACKED_BASE = luatexbase.sty test-base-plain.tex test-base-latex.tex
UNPACKED_LUATEX = luatex.sty test-luatex1.tex test-luatex2.tex \
		  test-luatex3.tex test-luatex4.tex test-luatex5.tex
UNPACKED = $(UNPACKED_MCB) $(UNPACKED_REGS) $(UNPACKED_ATTR) $(UNPACKED_CCTB) \
		   $(UNPACKED_LOADER) $(UNPACKED_MODUTILS) $(UNPACKED_COMPAT) \
		   $(UNPACKED_BASE) $(UNPACKED_LUATEX)
UNPACKEDTL = $(UNPACKED_MCB) $(UNPACKED_REGS) $(UNPACKED_ATTR) $(UNPACKED_CCTB) \
		   $(UNPACKED_LOADER) $(UNPACKED_MODUTILS) $(UNPACKED_COMPAT) \
		   $(UNPACKED_BASE)
COMPILED = $(DOC)
GENERATED = $(COMPILED) $(UNPACKED)
SOURCE = $(DTX) $(DTXSTY) README TODO NEWS Makefile

# used for check
TEST_LOADER = test-loader
TMP_LOADER = $(TEST_LOADER).tex
TEST_MCB = test-mcb-aux.tex

# Files grouped by installation location
RUNFILES = $(filter-out test-%, $(UNPACKEDTL))
DOCFILES = $(DOC) $(filter test-%, $(UNPACKEDTL)) README TODO NEWS
SRCFILES = $(DTX) Makefile

# The following definitions should be equivalent
# ALL_FILES = $(RUNFILES) $(DOCFILES) $(SRCFILES)
ALL_FILES = $(GENERATED) $(SOURCE)

# Installation locations
FORMAT = luatex
RUNDIR = $(TEXMFROOT)/tex/$(FORMAT)/$(NAME)
DOCDIR = $(TEXMFROOT)/doc/$(FORMAT)/$(NAME)
SRCDIR = $(TEXMFROOT)/source/$(FORMAT)/$(NAME)
TEXMFROOT = ./texmf

INSTALL_RUNFILES = @mkdir -p $(RUNDIR) && cp $(RUNFILES) $(RUNDIR)
INSTALL_DOCFILES = @mkdir -p $(DOCDIR) && cp $(DOCFILES) $(DOCDIR)
INSTALL_SRCFILES = @mkdir -p $(SRCDIR) && cp $(SRCFILES) $(SRCDIR)

TESTENV = TEXINPUTS=.:$(TEXMFROOT)/tex//:

CTAN_ZIP = $(NAME).zip
TDS_ZIP = $(NAME).tds.zip
ZIPS = $(CTAN_ZIP) $(TDS_ZIP)

DO_TEX = tex --interaction=batchmode $< >/dev/null
DO_LATEXMK = latexmk -pdf -silent $< >/dev/null

# Main targets definition
all: $(GENERATED)
check: check-regs check-attr check-cctb check-loader check-modutils check-mcb \
       check-compat check-base check-luatex
doc: $(COMPILED)
unpack: $(UNPACKED)
ctan: check $(CTAN_ZIP)
tds: $(TDS_ZIP) Makefile
world: all ctan

%.pdf: %.dtx $(DTXSTY)
	$(DO_LATEXMK)

luatexbase.%.lua: %.lua
	ln -sf $< $@

$(UNPACKED_MCB): luatexbase-mcb.dtx
	$(DO_TEX)
	echo "\\\relax" > $(TEST_MCB)

$(UNPACKED_REGS): luatexbase-regs.dtx
	$(DO_TEX)

$(UNPACKED_ATTR): luatexbase-attr.dtx
	$(DO_TEX)

$(UNPACKED_CCTB): luatexbase-cctb.dtx
	$(DO_TEX)

$(UNPACKED_LOADER): luatexbase-loader.dtx
	$(DO_TEX)

$(UNPACKED_MODUTILS): luatexbase-modutils.dtx
	$(DO_TEX)

$(UNPACKED_COMPAT): luatexbase-compat.dtx
	$(DO_TEX)

$(UNPACKED_BASE): luatexbase.dtx
	$(DO_TEX)

$(UNPACKED_LUATEX): luatex.dtx
	$(DO_TEX)

check-regs: $(UNPACKED_REGS)
	luatex --interaction=batchmode test-regs-plain.tex >/dev/null
	lualatex --interaction=batchmode test-regs-latex.tex >/dev/null

check-attr: install-runfiles
	$(TESTENV) luatex --interaction=batchmode test-attr-plain.tex >/dev/null
	$(TESTENV) lualatex --interaction=batchmode test-attr-latex.tex >/dev/null

check-cctb: install-runfiles
	$(TESTENV) luatex --interaction=batchmode test-cctb-plain.tex >/dev/null
	$(TESTENV) lualatex --interaction=batchmode test-cctb-latex.tex >/dev/null

check-loader: install-runfiles
	echo "this is no lua code" > $(TMP_LOADER)
	$(TESTENV) luatex --interaction=batchmode test-loader-plain.tex >/dev/null
	$(TESTENV) lualatex --interaction=batchmode test-loader-latex.tex >/dev/null

check-modutils: install-runfiles
	$(TESTENV) luatex --interaction=batchmode test-modutils-plain.tex >/dev/null
	$(TESTENV) lualatex --interaction=batchmode test-modutils-latex.tex >/dev/null

check-mcb: install-runfiles $(UNPACKED_MCB)
	$(TESTENV) luatex --interaction=batchmode test-mcb-plain.tex >/dev/null
	$(TESTENV) lualatex --interaction=batchmode test-mcb-latex.tex >/dev/null

check-compat: $(UNPACKED_COMPAT)
	luatex --interaction=batchmode test-compat-plain.tex >/dev/null
	lualatex --interaction=batchmode test-compat-latex.tex >/dev/null

check-base: $(UNPACKED_BASE)
	luatex --interaction=batchmode test-base-plain.tex >/dev/null
	lualatex --interaction=batchmode test-base-latex.tex >/dev/null

check-luatex: install-runfiles
	$(TESTENV) luatex --interaction=batchmode test-luatex1.tex >/dev/null
	$(TESTENV) lualatex --interaction=batchmode test-luatex2.tex >/dev/null
	#$(TESTENV) lualatex --interaction=batchmode test-luatex3.tex >/dev/null
	$(TESTENV) lualatex --interaction=batchmode test-luatex4.tex >/dev/null
	$(TESTENV) luatex --interaction=batchmode test-luatex5.tex >/dev/null

$(CTAN_ZIP): $(SOURCE) $(COMPILED) $(TDS_ZIP)
	@echo "Making $@ for CTAN upload."
	@$(RM) -- $@
	@zip -9 $@ $^ >/dev/null

$(TDS_ZIP): TEXMFROOT=./tmp-texmf
$(TDS_ZIP): $(ALL_FILES)
	@echo "Making TDS-ready archive $@."
	@$(RM) -- $@
	$(INSTALL_RUNFILES)
	$(INSTALL_DOCFILES)
	$(INSTALL_SRCFILES)
	@cd $(TEXMFROOT) && zip -9 ../$@ -r . >/dev/null
	@$(RM) -r -- $(TEXMFROOT)

.PHONY: install manifest clean mrproper install-runfiles

install: $(ALL_FILES)
	@echo "Installing in '$(TEXMFROOT)'."
	$(INSTALL_RUNFILES)
	$(INSTALL_DOCFILES)
	$(INSTALL_SRCFILES)

install-runfiles: $(RUNFILES)
	$(INSTALL_RUNFILES)

manifest: 
	@echo "Source files:"
	@for f in $(SOURCE); do echo $$f; done
	@echo ""
	@echo "Derived files:"
	@for f in $(GENERATED); do echo $$f; done

clean: 
	@latexmk -silent -c *.dtx >/dev/null
	@#for non-latexmk runs
	@$(RM) -- *.log

mrproper: clean
	@$(RM) -- $(GENERATED) $(ZIPS) $(TMP_LOADER)
	@$(RM) -r $(TEXMFROOT)