## $Id$
##---------------------------------------------------------------------------
## LaTeX Makefile
## Copyright (C) 1996-2001  Michael Forman	Michael.Forman@Colorado.EDU
## 
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
## as published by the Free Software Foundation; either version 2
## of the License, or (at your option) any later version.
## 
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
##
## This copyright applies to this Makefile, and all perl scripts.  
## The GPL does NOT apply to the actual content of the paper or thesis.  
##---------------------------------------------------------------------------
## 01.Dec,1996	forman	 Initial Makefile 
## 01.Jun,1997	forman	 Added support for print, preview, and bibtex
## 01.Jan,1998	stones	 tmp and lib directories to reduce clutter
## 05.Feb,1998	forman	 Added the following functions:
##			 .PHONY to prevent errors
##			 generic TEXFILE definition with following patsubst's
##			 vpath definitions
##			 gzip, gunzip, tar, ci
##			 search for \bibliography in tex file
##			 conditional ifeq omits bibtex if unnecessary
##			 documentation added
## 30.Nov,1998	forman	 Added TOPFILE and SECFILE definitions to support
##        		 texfiles with "input" commands.
## 23.Dec,1998	marshats Added RCSFILES and ci/co capabilites for multiple files
##                       Now only runs makeindex if $(IDX) file exists.
## 15.Mar,1999	forman	 Added 'make wc' for papers with word quotas.
## 24.Aug,1999	forman	 Converted Makefile to use pdftex as the primary
##			 complier.  Now generates true pdf and ps files.
## 09.Feb,2000	forman	 Simplified the documentation.  Removed direct
##			 compilation of tex into DVI and PS.  Conversion
##			 is done with PDF2PS now.
## 08.Aug,2000	forman	 Added define for figures directories.
## 18.Aug,2000	forman	 Removed the redundant code in the $(pdflatex) and
##			 $(pdflatex-bibtex) definitions by splitting them up
##			 into several smaller definitions which are called
##			 from a single set of "if-then" statements.
## 18.Aug,2000	forman	 Added support for glosstex and makeindex.
## 19.Aug,2000	forman	 To save space, all files in tmp are now links.
## 19.Aug,2000	forman	 Removed all postscript commands in favor of pdf.
##---------------------------------------------------------------------------
##
## This Makefile expects the following directory structure:
##
##     	Makefile	This file
##     	*.tex		Put latex files in root directory.
##     	RCS/		Create an RCS directory for "ci" and "co".
##	doc/		Document directory.  Includes gpl.txt.
##     	lib/		Put all cls, sty, idx, gdf, and bib files in lib.
##     	figures/	Put all figures in the figures directory.
##     	tmp/		Never put anything in tmp -- it gets cleaned out.
##
##---------------------------------------------------------------------------
##
## Normal Usage:
##	make 		Run pdflatex
##	make clean 	Remove all files in tmp and the pdf link in root.
##	make preview 	Preview the compiled file
##	make ci 	Check in the RCSFILES
##	make co 	Check out the RCSFILES
##
## Advanced Usage:
##	make gzip	Recursively gzip all the files in the root directory
##	make gunzip	Reverse the above process
##	make tar 	Tar and gzip the working directory
##	make wc		Count the number of words in your report
##
##---------------------------------------------------------------------------
## WARNING:
## 	If "make ci" fails, "make co" will nuke your files!
## 	Don't put anything in tmp, "make clean" will delete everything!
##---------------------------------------------------------------------------
#

TOPFILE   = userguide.tex
SECFILE   = title.tex intro.tex commrout.tex datastruct.tex psbrout.tex toolsrout.tex\
	methods.tex precs.tex penv.tex error.tex 
FIGDIR    = figures

XPDFFLAGS = 
ACROFLAGS = 				#-- macos
#ACROFLAGS = -geometry 1234x1168+0+0	#-- new-sydney-wide
#ACROFLAGS = -geometry 1000x1000+0+0	#-- sydney-wide
#ACROFLAGS = -geometry 750x1000+0+0	#-- sydney
#ACROFLAGS = -geometry 1200x1200+0+0	#-- home-wide
#ACROFLAGS = -geometry 900x1200+0+0	#-- home

##---------------------------------------------------------------------------
## Change nothing below here (unless you're really really good).
#----------------------------------------------------------------------------

##
## Accounting
#
START    = $(shell date)
WDIR     = $(notdir $(shell pwd))
DATE     = $(shell date +%Y-%m-%d)

##
## Programs
#
PDFLATEX = pdflatex
ACRO     = evince
XPDF     = xpdf
WC       = wc
PDF2PS   = pdf2ps
PDF2TEXT = pdftotext
MAKEIDX  = makeindex
GLOSSTEX = glosstex
BIBTEX   = bibtex
FILTER   = ../bin/texfilter 
FILTER   = cat
CLEANIDX = ../bin/cleanidx

##
## Files
#
TEXFILES = $(TOPFILE) $(SECFILE)
RCSFILES = $(TEXFILES) Makefile

BASEFILE = $(patsubst %.tex,%,$(TOPFILE))
IDX      = $(join $(BASEFILE),.idx)
PDF      = $(join $(BASEFILE),.pdf)
PS       = $(join $(BASEFILE),.ps)
GXS      = $(join $(BASEFILE),.gxs)
GLX      = $(join $(BASEFILE),.glx)

FIGURES  = $(sort $(wildcard $(FIGDIR)/*))
GLOFILES:= $(sort $(wildcard lib/*.gdf))
GLOFILES:= $(patsubst lib/%,%,$(GLOFILES))
BIBFILES:= $(shell grep ^.bibliography{ $(TOPFILE)|sed "s/,/ /g"|sed "s/%.*//g")
BIBFILES:= $(patsubst \bibliography{%,%,$(BIBFILES))
BIBFILES:= $(patsubst %},%,$(BIBFILES))
BIBFILES:= $(sort $(addsuffix .bib,$(BIBFILES)))

LIBFILES = $(sort $(wildcard lib/*))

TEXLNFIL = $(addprefix $(PWD)/,$(TEXFILES))

#============================================================================

all: $(PDF)
	@echo $(PDF)

$(PDF): $(TEXFILES) $(LIBFILES) $(FIGURES) Makefile
	$(header)
	$(initialize)
	$(pdflatex-filter)
        ifneq ($(BIBFILES),)
	  $(bibtex)
	  $(pdflatex-filter)
        endif
        ifneq ($(GLOFILES),)
	  $(glosstex)
	  $(pdflatex-filter)
        endif
#	$(makeindex)
	$(pdflatex-filter)
	$(finish)

$(PS): $(PDF)
	$(PDF2PS) $< $(PS)

ps: $(PS) 

#============================================================================

.PHONY: clean clean-tmp preview print gzip gunzip tar ci

clean:
	rm -f $(PDF) $(PS)
	cd tmp ; rm -f *

clean-tmp:
	cd tmp ; rm -f *

#----------------------------------------------------------------------------

preview: $(PDF)
	$(ACRO) $(ACROFLAGS) $< &

xpreview: $(PDF)
	$(XPDF) $(XPDFFLAGS) $< &

wc: $(PDF)
	$(PDF2TEXT) $< | $(WC) 

#----------------------------------------------------------------------------

ci: $(RCSFILES)
	$(shell for i in $(RCSFILES) ; do ci -u $$i ; done) 

co: $(RCSFILES)
	$(shell for i in $(RCSFILES) ; do co -l $$i ; done) 

gzip: clean-tmp
	gzip -r ./
	gunzip Makefile.gz

gunzip: 
	gunzip -r ./

tar: clean-tmp
	cd ..                               ; \
	tar cvf $(WDIR)-$(DATE).tar $(WDIR) ; \
	gzip $(WDIR)-$(DATE).tar

info: 
	$(header)

#============================================================================

define header
  @echo
  @echo "#---------------------------------------------------------------------"
  @echo "MAKEFILE = LaTeX PDF Makefile"
  @echo "AUTHOR   = Alfredo Buttari"
  @echo 'ID       = $$Id$ ' 
  @echo "#---------------------------------------------------------------------"
  @echo
  @echo "ACRO     = $(ACRO) $(ACROFLAGS) $(PDF)"
  @echo "XPDF     = $(XPDF) $(XPDFFLAGS) $(PDF)"
  @echo "GV       = $(GV) $(GVFLAGS) $(PS)"
  @echo "LPR      = $(LPR) $(LPRFLAGS) $(PS)"
  @echo
  @echo "WDIR     = $(WDIR)"
  @echo "DATE     = $(DATE)"
  @echo
  @echo "TOPFILE  = $(TOPFILE)"
  @echo "SECFILE  = $(SECFILE)"
  @echo "TEXFILES = $(TEXFILES)"
  @echo "PDF      = $(PDF)"
  @echo "PS       = $(PS)"
  @echo "BIBFILES = $(BIBFILES)"
  @echo "GLOFILES = $(GLOFILES)"
  @echo "IDXFILES = $(IDXFILES)"
  @echo
endef
# @echo "FIGURES  = $(FIGURES)"

#----------------------------------------------------------------------------


define initialize
  @if test ! -d tmp; then mkdir tmp; fi
  @ln -sf $(TEXLNFIL) tmp
  @ln -sf $(PWD)/lib/* tmp
  @ln -sf $(PWD)/$(FIGDIR) tmp
endef

#----------------------------------------------------------------------------

define pdflatex
  @echo
  @echo "----- pdflatex -------------------------------------------------------"
  @echo -n "Starting: "; date
  @echo
  cd tmp; $(PDFLATEX) $(TOPFILE)
endef

#----------------------------------------------------------------------------

define pdflatex-filter
  @echo
  @echo "----- pdflatex -------------------------------------------------------"
  @echo -n "Starting: "; date
  @echo
  cd tmp; ($(PDFLATEX) $(TOPFILE) 2>&1) | $(FILTER)
endef

#----------------------------------------------------------------------------

define bibtex
  @echo
  @echo "----- bibtex ---------------------------------------------------------"
  @echo -n "Starting: "; date
  @echo
  cd tmp; $(BIBTEX) $(BASEFILE)
endef

#----------------------------------------------------------------------------

define glosstex
  @echo
  @echo "----- glosstex -------------------------------------------------------"
  @echo -n "Starting: "; date
  @echo
  cd tmp; $(GLOSSTEX) $(BASEFILE) $(GLOFILES)
  cd tmp; $(MAKEIDX) $(GXS) -o $(GLX) -s glosstex.ist
endef

#----------------------------------------------------------------------------

define makeindex
  @echo
  @echo "----- makeindex ------------------------------------------------------"
  @echo -n "Starting: "; date
  @echo
  cd tmp; mv $(IDX) $(IDX)-; $(CLEANIDX) < $(IDX)- > $(IDX)
  cd tmp; $(MAKEIDX) $(IDX)
endef

#----------------------------------------------------------------------------

define finish
  @ln -sf tmp/$@ .
  @echo
  @echo "----- finish ---------------------------------------------------------"
  @echo -n "Start:  "$(START); echo
  @echo -n "Finish: "; date
  @echo -n "Output: "; ls -l -o tmp/$@
  @echo -n "Target: "
endef