ACTIVITY=$(addprefix src/activity/,Action ActionGroup ActionPlan ActionType Activity CompoundAction GenericSwarm ProcessType Schedule SwarmProcess TimeIndexing adv design guide impl oldref ref status subclass)
COLLECTIONS=$(addprefix src/collections/,Array Collection Index KeyedCltn List Map OrderedSet Set Stack Stream String adv design guide impl ref status subclass)
DEFOBJ=$(addprefix src/defobj/,Create DefinedObject Drop Error Symbol Zone adv combo design globaldef globalport guide impl library meta misc module ref status subclass)
OBJECTBASE=$(addprefix src/objectbase/,ActivityControl AdvancedUsage CompleteProbeMap CompleteVarMap CustomProbeMap Implementation Interface InterfaceDesign MessageProbe PortingAppsToNewInterface Probe ProbeLibrary ProbeMap SwarmObject UsageGuide VarProbe status)
RANDOM=$(addprefix src/random/,ACGgen AdvancedUsage BernoulliDist C2LCGXgen C2MRG3gen C2TAUS1-3gen C3MWCgen C4LCGXgen ExponentialDist GammaDist Implementation Interface InterfaceDesign LCG1-3gen MRG5-7gen MT19937gen MWCA-Bgen Normal NormalDist ObsoleteRandom PMMLCG1-9gen PSWBgen Porting Prot RWC28gen RandomBitDist SCGgen SWB1-3gen TGFSRgen UniformDoubleDist UniformIntegerDist UniformUnsignedDist UnsignedDist UsageGuide status)
SIMTOOLS=$(addprefix src/simtools/,ActionCache ActiveGraph ActiveOutFile AppendFile CompleteProbeDisplay ControlPanel GUISwarm InFile Interface NSelect ObjectLoader ObjectSaver OutFile ProbeDisplay ProbeDisplayManager QSort UName UsageGuide status)

MAIN=index intro install overview todo debugging emacs-objc src/defobj src/collections src/activity src/objectbase src/space src/random src/simtools src/tkobjc src/analysis src/probing src/grid

GRAPHICS=bomb complete customized next prev up
EPS=$(addprefix $(pwd)/eps/,$(addsuffix .eps,$(GRAPHICS)))

ALL=$(MAIN) $(ACTIVITY) $(COLLECTIONS) $(DEFOBJ) $(OBJECTBASE) $(RANDOM) $(SIMTOOLS)

DOCS=all activity collections defobj objectbase probing random simtools space tkobjc

pwd=$(shell pwd)
PSPATH=$(pwd)/ps

PSA4PATH=$(PSPATH)/a4
PSA4EVENPATH=$(PSA4PATH)/even
PSA4ODDPATH=$(PSA4PATH)/odd

PSLETTERPATH=$(PSPATH)/letter
PSLETTEREVENPATH=$(PSLETTERPATH)/even
PSLETTERODDPATH=$(PSLETTERPATH)/odd

PSA44UPPATH=$(PSPATH)/a4-4up
PSLETTER4UPPATH=$(PSPATH)/letter-4up

DVIPATH=$(pwd)/dvi
TEXPATH=$(pwd)/tex

DVIFILES=$(addprefix $(DVIPATH)/,$(addsuffix .dvi,$(DOCS)))

PSBASEFILES=$(foreach path,$(PSLETTERPATH) $(PSA4PATH) $(PSLETTEREVENPATH) $(PSLETTERODDPATH) $(PSA4EVENPATH) $(PSA4ODDPATH), $(addprefix $(path)/,$(addsuffix .ps,$(DOCS))))

PS4UPFILES=$(foreach path,$(PSLETTER4UPPATH) $(PSA44UPPATH),$(addprefix $(path)/,$(addsuffix .ps,$(DOCS))))

TEXFILES=$(addprefix $(TEXPATH)/,$(addsuffix .tex,$(ALL)))

VPATH=$(SWARMHOME)/../swarmdocs:$(pwd)/tex-src

all:  $(TEXFILES) $(EPS)

.PHONY: ps ps_base ps_4up dvi

ps: $(DVIFILES)
	$(MAKE) ps_base
	$(MAKE) ps_4up

ps_base: $(DVIFILES) $(PSBASEFILES)

ps_4up: ps_base $(PS4UPFILES)

dvi: $(DVIFILES)

$(TEXPATH)/%.tex: %.html
	@test -d tex || mkdir tex
	@test -d tex/src || mkdir tex/src
	@test -d tex/src/activity || mkdir tex/src/activity
	@test -d tex/src/collections || mkdir tex/src/collections
	@test -d tex/src/defobj || mkdir tex/src/defobj
	@test -d tex/src/objectbase || mkdir tex/src/objectbase
	@test -d tex/src/random || mkdir tex/src/random
	@test -d tex/src/simtools || mkdir tex/src/simtools
	cd $(dir $<) ; jade -t tex -d $(pwd)/html32hc-1-mgd.dcl -c $(pwd)/catalog -o $@ $(notdir $<)

$(pwd)/eps/%.eps: src/%.jpg
	@test -d eps || mkdir eps
	djpeg < $< | pnmtops > $@

all.tex: all

.PRECIOUS: $(DVIPATH)/%.dvi

$(DVIPATH)/%.dvi: %.tex
	@test -d $(DVIPATH) || mkdir $(DVIPATH)
	TEXFORMATS=./fmt pdftex '&jadetexpdf' $<
	mv $*.dvi dvi

$(PSLETTERPATH)/%.ps: $(DVIPATH)/%.dvi
	@test -d $(PSPATH) || mkdir $(PSPATH)
	@test -d $(PSLETTERPATH) || mkdir $(PSLETTERPATH)
	dvips -t letter -o $@ $<

$(PSLETTEREVENPATH)/%.ps: $(DVIPATH)/%.dvi
	@test -d $(PSPATH) || mkdir $(PSPATH)
	@test -d $(PSLETTEREVENPATH) || mkdir $(PSLETTEREVENPATH)
	dvips -t letter -B -o $@ $<

$(PSLETTERODDPATH)/%.ps: $(DVIPATH)/%.dvi
	@test -d $(PSPATH) || mkdir $(PSPATH)
	@test -d $(PSLETTERODDPATH) || mkdir $(PSLETTERODDPATH)
	dvips -t letter -A -o $@ $<

$(PSA4PATH)/%.ps: $(DVIPATH)/%.dvi
	@test -d $(PSPATH) || mkdir $(PSPATH)
	@test -d $(PSA4PATH) || mkdir $(PSA4PATH)
	dvips -t a4 -o $@ $<

$(PSA4EVENPATH)/%.ps: $(DVIPATH)/%.dvi
	@test -d $(PSPATH) || mkdir $(PSPATH)
	@test -d $(PSA4EVENPATH) || mkdir $(PSA4EVENPATH)
	dvips -t a4 -B -o $@ $<

$(PSA4ODDPATH)/%.ps: $(DVIPATH)/%.dvi
	@test -d $(PSPATH) || mkdir $(PSPATH)
	@test -d $(PSA4ODDPATH) || mkdir $(PSA4ODDPATH)
	dvips -t a4 -A -o $@ $<

$(PSLETTER4UPPATH)/%.ps: $(PSLETTERPATH)/%.ps
	@test -d $(PSLETTER4UPPATH) || mkdir $(PSLETTER4UPPATH)
	psnup -pletter -4 $< > $@

$(PSA44UPPATH)/%.ps: $(PSA4PATH)/%.ps
	@test -d $(PSA44UPPATH) || mkdir $(PSA44UPPATH)
	psnup -pa4 -4 $< > $@

clean:
	$(RM) $(TEXFILES) *.log *.aux
	@if test -d tex/src ; then \
          for i in activity collections defobj objectbase random simtools ; do \
            if test -d tex/src/$$i ; then rmdir tex/src/$$i ; fi ; \
          done ; \
          rmdir tex/src ; \
        fi
	@if test -d tex ; then rmdir tex ; fi
	@if test -d eps ; then $(RM) $(EPS) ; rmdir eps ; fi
	$(RM) $(PSBASEFILES) $(PS4UPFILES) $(DVIFILES)
	@if test -d dvi ; then rmdir dvi ; fi
	@for path in $(PSLETTEREVENPATH) $(PSLETTERODDPATH) $(PSA4EVENPATH) $(PSA4ODDPATH) ; do if test -d $$path ; then rmdir $$path ; fi ; done
	@for path in $(PSLETTERPATH) $(PSA4PATH) $(PSLETTER4UPPATH) $(PSA44UPPATH) ; do if test -d $$path ; then rmdir $$path ; fi ; done
	@if test -d $(PSPATH) ; then rmdir $(PSPATH) ; fi