# Makefile for 'tex-refs'
# Copyright 2002, Michael Wiedmann, Rolf Niepraschk
#
# $Id: Makefile,v 1.21 2003/04/12 16:11:59 mw Exp $
#
# include site specific values
ifeq "$(wildcard Makefile.cfg)" "Makefile.cfg"
include Makefile.cfg
else
# FIXME: howto to emit a message and exit?
endif

PACKAGE = tex-refs
VERSION = 0.2.3
# uncomment for pre-releases
# DATE    = `date +%y%m%d`
# VERSION := $(VERSION)-pre-$(DATE)#  ???

TITLE="References for TeX and Friends"

TAR = tar
GZIP = --best

DISTDIR = $(PACKAGE)-$(VERSION)

CHUNKDIR = html
HTMLHELPDIR = htmlhelp

TIDY=tidy
TIDY_OPTS=-mq 

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

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

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

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

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

# XSL file to generate HTML files for MS Help Compiler
# XSLHTMLHELPFILE=$(PACKAGE)-htmlhelp.xsl
# use this enhanced XSL file (generates correct index!)
XSLHTMLHELPFILE=db2hhchm.xsl

# XSL file to generate FO file
XSLFOFILE=$(PACKAGE)-fo.xsl

DISTFILES = GFDL README AUTHORS TODO NEWS THANKS \
            latex2e.texi $(PACKAGE).xml \
            $(PACKAGE).css *.xsl *.dsl $(PACKAGE).book \
            Makefile Makefile.cfg.in corr_path.awk \
            $(PACKAGE)-plucker-exclude.txt

OUTFILES = $(PACKAGE).html $(PACKAGE).css $(PACKAGE).txt $(PACKAGE).rtf \
           $(PACKAGE).pdf $(PACKAGE).chm  $(PACKAGE)-plucker.pdb

CLEANFILES = $(PACKAGE).html $(PACKAGE)-xsltproc.html $(PACKAGE)-saxon.html \
             $(PACKAGE).txt $(PACKAGE).rtf $(PACKAGE).pdf $(PACKAGE).chm    \
             $(PACKAGE)-plucker.pdb html/* htmlhelp/*

####### Build rules

all: $(PACKAGE).html $(PACKAGE).txt $(PACKAGE)-plucker.pdb chunk-html \
     $(PACKAGE).rtf # $(PACKAGE).pdf

%.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 '/^[0-9] Index/,$$d' -e '/[0-9] Index/d' \
          $@ > x.tmp && mv x.tmp $@

# commented out to avoid overwriting XML file!
# %.xml : %.texi
	#texi2db -v -f $< -o $@	

$(PACKAGE).xml: latex2e.texi

# select here which XSLT processor to use to generate HTML
# Currently we use Saxon, because 'xsltproc' (libxslt: 10018)
# is still generating a buggy index :-( 
$(PACKAGE).html: $(PACKAGE)-saxon.html #$(PACKAGE)-xsltproc.html
	cp -p $< $@

# use 'xsltproc' (libxml2/libxslt) to generate HTML
$(PACKAGE)-xsltproc.html: $(PACKAGE).xml $(XSLFILE) $(XSLCOMMONFILE)
	$(XSLTPROC) $(XSLTPROC_OPTS) --output $@ $(XSLFILE) $<
	-$(TIDY) $(TIDY_OPTS) $@

# use 'Saxon' to generate HTML
$(PACKAGE)-saxon.html: $(PACKAGE).xml $(XSLFILE) $(XSLCOMMONFILE)
	$(JAVA) -classpath $(SAXONJAR) $(SAXONCMD) $< $(XSLFILE) > $@
	-$(TIDY) $(TIDY_OPTS) $@

# use 'sabcmd' to generate HTML (not yet usable, too many missing features)
$(PACKAGE)-sablotron.html: $(PACKAGE).xml $(XSLFILE) $(XSLCOMMONFILE)
	sabcmd $(XSLFILE) $< $@
	-$(TIDY) $(TIDY_OPTS) $@

# chunked HTML processed using 'xsltproc'
chunk-html: $(CHUNKDIR)/index.html

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

$(PACKAGE).txt: $(PACKAGE).html

htmlhelp-files:
	test -d $(HTMLHELPDIR) || mkdir $(HTMLHELPDIR) || exit 1
	$(RM) $(HTMLHELPDIR)/* 
	$(XSLTPROC) -o $(HTMLHELPDIR)/ db2hhchm.xsl $(PACKAGE).xml
	$(RM) $(PACKAGE)-htmlhelp.tgz
	(cd  $(HTMLHELPDIR); $(TAR) czf $(PWD)/$(PACKAGE)-htmlhelp.tgz *)
	ls -l $(PACKAGE)-htmlhelp.tgz

htmlhelp-files-saxon:
	test -d $(HTMLHELPDIR) || mkdir $(HTMLHELPDIR) || exit 1
	$(RM) $(HTMLHELPDIR)/* 
	(cd $(HTMLHELPDIR) ; $(JAVA) -classpath $(SAXONJAR) \
         $(SAXONCMD) ../$(PACKAGE).xml ../db2hhchm.xsl)
	$(RM) $(PACKAGE)-htmlhelp.tgz
	(cd  $(HTMLHELPDIR); $(TAR) czf $(PWD)/$(PACKAGE)-htmlhelp.tgz *)
	ls -l $(PACKAGE)-htmlhelp.tgz

# generate RTF
$(PACKAGE).rtf: $(PACKAGE).xml
	$(JADE) -c $(CATALOG) -t rtf -d $(PACKAGE).dsl#print $(XMLDCL) $<

# 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
$(PACKAGE)-plucker-input.html: $(PACKAGE).xml $(XSLPLUCKERFILE) $(XSLCOMMONFILE)
	$(JAVA) -classpath $(SAXONJAR) $(SAXONCMD) $< $(XSLPLUCKERFILE) > $@

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

# temporary solution for PDF
$(PACKAGE).pdf: $(PACKAGE).xml
	cp -p ../xtag/$(PACKAGE).pdf .

# experimental targets
ifeq "$(wildcard Makefile.experimental)" "Makefile.experimental"
include Makefile.experimental
endif

validate lint:
	runjade onsgmls -v -s -c $(CATALOG) $(XMLDCL) $(PACKAGE).xml

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

# correct the paths for some files	
config :
	@ echo "$(DOCBOOKXDTD) --> $(PACKAGE).xml"
	@ awk -f corr_path.awk -v NEW=$(DOCBOOKXDTD) $(PACKAGE).xml > \
	  $(PACKAGE).xml.tmp && mv $(PACKAGE).xml.tmp $(PACKAGE).xml
	@ echo "$(CHUNKXSL) --> $(XSLCHUNKFILE)"  
	@ awk -f corr_path.awk -v NEW=$(CHUNKXSL) $(XSLCHUNKFILE) > \
	  $(XSLCHUNKFILE).tmp && mv $(XSLCHUNKFILE).tmp $(XSLCHUNKFILE)  
	@ echo "$(NOCHUNKXSL) --> $(XSLFILE)"
	@ awk -f corr_path.awk -v NEW=$(NOCHUNKXSL) $(XSLFILE) > \
	  $(XSLFILE).tmp && mv $(XSLFILE).tmp $(XSLFILE) 	  
	@ echo "$(XSLPLUCKER) --> $(XSLPLUCKERFILE)"
	@ awk -f corr_path.awk -v NEW=$(XSLPLUCKER) $(XSLPLUCKERFILE) > \
	  $(XSLPLUCKERFILE).tmp && mv $(XSLPLUCKERFILE).tmp $(XSLPLUCKERFILE)
	@ echo "$(HTMLHELPXSL) --> $(XSLHTMLHELPFILE)"
	@ awk -f corr_path.awk -v NEW=$(HTMLHELPXSL) $(XSLHTMLHELPFILE) > \
	  $(XSLHTMLHELPFILE).tmp && mv $(XSLHTMLHELPFILE).tmp $(XSLHTMLHELPFILE)
	@ echo

# 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 "$(PACKAGE).html    generate $(PACKAGE).html"
	@echo "chunk-html       generate chunked HTML output"
	@echo "$(PACKAGE).txt     generate $(PACKAGE).txt"
	@echo "$(PACKAGE).rtf     generate $(PACKAGE).rtf"
	@echo "$(PACKAGE).pdf     generate $(PACKAGE).pdf"
	@echo 
	@echo "validate         validate XML file"
	@echo "clean            remove generated files"
	@echo "config           modify pathnames in source files"
	@echo "dist             create tarball with source files"

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

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

clean:
	$(RM) $(CLEANFILES)

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
	@-rm -rf $(DISTDIR)  

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