# Makefile for tex-refs
#
# $Id: Makefile 146 2005-05-14 15:34:22Z mw $

PROJECT=tex-refs
VERSION = 0.3.9
TITLE="Ref. for TeX and Friends"

DISTDIR = $(PROJECT)-$(VERSION)

SRC_FILES=$(PROJECT)-xinclude.xml $(PROJECT)-chapter*.xml \
          $(PROJECT).ent $(PROJECT)-local.mapping.xml

MOD_XSL_FILES = db2latex-mw-table.xsl        \
                db2latex-mw-variablelist.xsl \
                db2latex-mw-itemizedlist.xsl

DIST_FILES=$(SRC_FILES) GFDL README AUTHORS TODO RELEASE-NEWS THANKS  \
           $(PROJECT).css $(PROJECT)*.xsl $(MOD_XSL_FILES)    \
           catalog.xml $(PROJECT).ist Makefile

OUT_FILES = $(PROJECT).html html $(PROJECT).css $(PROJECT).txt \
            $(PROJECT)-plucker.pdb $(PROJECT).pdf

CLEAN_FILES = $(PROJECT).html $(PROJECT).txt $(PROJECT).pdf \
              $(PROJECT).chm  $(PROJECT)-plucker.pdb html/* \
              $(PROJECT)-plucker-input.html                 \
              $(PROJECT).tex $(PROJECT).ind $(PROJECT).ilg  \
              $(PROJECT).glo $(PROJECT).toc $(PROJECT).out  \
              $(PROJECT).idx $(PROJECT).aux $(PROJECT).log

TAR = tar
GZIP = --best

# name and options to 'xsltproc'
XSLTPROC=xsltproc
XSLTPROC_OPTS=--nonet #--verbose

CHUNKDIR = html

TIDY=tidy
TIDY_OPTS=-mq --show-warnings false

# XSL file to generate non-chunked HTML
XSLFILE=$(PROJECT).xsl

# XSL file to generate HTML for plucker
XSLPLUCKERFILE=$(PROJECT)-plucker.xsl

# XSL file to generate chunked HTML
XSLCHUNKFILE=$(PROJECT)-chunk.xsl

# XSL file with commoin customizations
XSLCOMMONFILE=$(PROJECT)-common.xsl

PDFLATEX=pdflatex
PDFLATEX_OPTS=-interaction=nonstopmode

PDFOPT=pdfopt-afpl

MAKEINDEX=makeindex

# XSL file for DB2LateX
XSLPDFFILE=$(PROJECT)-pdf.xsl

#####

%.txt : %.html
	@# w3m wraps words like '\something' at the '\'
	@# w3m -dump -cols 72 $< > $@
	lynx -nolist -dump -width=72 $< > $@
	@# discard 'Index', it makes no sense in TXT output
	sed -e '/^Index/,$$d' \
          $@ > x.tmp && mv x.tmp $@

#####

# default target
all: $(PROJECT).html chunk-html $(PROJECT).pdf $(PROJECT).txt \
     $(PROJECT)-plucker.pdb

# make master document
$(PROJECT).xml: $(SRC_FILES) Makefile $(PROJECT)-local.mapping.xml 
	xmllint --nonet --output $@ --xinclude $(PROJECT)-xinclude.xml

# HTML related targets
$(PROJECT).html: $(PROJECT).xml $(XSLFILE) $(XSLCOMMONFILE)
	$(XSLTPROC) $(XSLTPROC_OPTS) --output $@ $(XSLFILE) $<
	-$(TIDY) $(TIDY_OPTS) $@

chunk-html: $(CHUNKDIR)/index.html

$(CHUNKDIR)/index.html : $(PROJECT).xml $(XSLCHUNKFILE) $(XSLCOMMONFILE)
	test -d $(CHUNKDIR) || mkdir $(CHUNKDIR) || exit 1
	$(RM) $(CHUNKDIR)/*
	$(XSLTPROC) -o $(CHUNKDIR)/ $(XSLCHUNKFILE) $<
	-(cd $(CHUNKDIR) && $(TIDY) $(TIDY_OPTS) *.html )

# ASCII
$(PROJECT).txt: $(PROJECT).html

# PDF related targets
$(PROJECT).tex: $(PROJECT).xml $(XSLPDFFILE) $(MOD_XSL_FILES)
	$(XSLTPROC) $(XSLTPROC_OPTS) --output $@ $(XSLPDFFILE) $<

$(PROJECT).pdf: $(PROJECT).tex $(PROJECT).ist
	$(RM) $(PROJECT).aux $(PROJECT).toc $(PROJECT).ind
	$(PDFLATEX) $(PDFLATEX_OPTS) $< &&  \
	$(PDFLATEX) $(PDFLATEX_OPTS) $< &&  \
	( test -s $(PROJECT).idx        &&  \
          $(MAKEINDEX) -s $(PROJECT).ist $(PROJECT) || true ) && \
	$(PDFLATEX) $(PDFLATEX_OPTS) $< && \
	$(PDFOPT) $(PROJECT).pdf out.pdf && $(RM) $(PROJECT).pdf && \
		mv out.pdf $(PROJECT).pdf && \
	ls -l $(PROJECT).pdf

# PDB related targets
# generate PDB file for Palm reader 'plucker'
# we generate a separate HTML file for plucker first, because
# we cannot use the xhtml stylesheets and so have to provide a 
# separate XSL stylesheet file
$(PROJECT)-plucker-input.html: $(PROJECT).xml $(XSLPLUCKERFILE) $(XSLCOMMONFILE)
	$(XSLTPROC) -o $@ $(XSLPLUCKERFILE) $<

$(PROJECT)-plucker.pdb: $(PROJECT)-plucker-input.html
	plucker-build \
          --stayonhost \
          --zlib-compression \
          --doc-file=$(PWD)/$(PROJECT)-plucker \
          --doc-name=$(TITLE) \
          --exclusion-list=$(PROJECT)-plucker-exclude.txt \
          --noimages $(PROJECT)-plucker-input.html


# local "enhancements"
ifeq "$(wildcard Makefile.miwie)" "Makefile.miwie"
include Makefile.miwie
endif

targets:
	@echo "Most important targets:"
	@echo 
	@echo "all              generate all available output formats"
	@echo 
	@echo "$(PROJECT).html    generate $(PROJECT).html"
	@echo "chunk-html       generate chunked HTML output"
	@echo "$(PROJECT).pdf     generate $(PROJECT).pdf"
	@echo "$(PROJECT).txt     generate $(PROJECT).txt"
	@echo 
	@echo "clean            remove generated files"
	@echo "dist             create tarball with source files"


outfiles:
	-rm -fr $(PROJECT)-out-$(VERSION).tar.gz
	-rm -fr $(PROJECT)-out-$(VERSION).tar.bz2
	GZIP=$(GZIP) $(TAR) chozf $(PROJECT)-out-$(VERSION).tar.gz $(OUT_FILES)
	$(TAR) chojf $(PROJECT)-out-$(VERSION).tar.bz2 $(OUT_FILES)
	ls -l $(PROJECT)-out-$(VERSION).tar.gz
	ls -l $(PROJECT)-out-$(VERSION).tar.bz2

install:
	@echo "Nothing to install..."

uninstall: 
	@echo "Nothing to uninstall..."

clean:
	$(RM) $(CLEAN_FILES)

distclean: clean

dist: distdir
	@-chmod -R a+r $(DISTDIR)
	@GZIP=$(GZIP) $(TAR) chozf $(DISTDIR).tar.gz $(DISTDIR)
	@$(TAR) chojf $(DISTDIR).tar.bz2 $(DISTDIR)
	ls -l $(DISTDIR).tar.gz
	ls -l $(DISTDIR).tar.bz2
	ls -l $(PROJECT)-src.zip
	@-rm -rf $(DISTDIR)  

distdir: $(DIST_FILES)
	@-rm -rf $(DISTDIR)
	@mkdir $(DISTDIR)
	@-chmod 777 $(DISTDIR)
	@for file in $(DIST_FILES); do \
	  test -f $(DISTDIR)/$$file \
	  || ln ./$$file $(DISTDIR)/$$file 2> /dev/null \
	  || cp -p ./$$file $(DISTDIR)/$$file; \
	done       
