# Makefile for Scheme Library
# Author: Aubrey Jaffer
#
# This code is in the public domain.

SHELL = /bin/sh
intro:
	@echo
	@echo "Welcome to SLIB.  Read \"README\" and \"slib.info\" (or"
	@echo "\"slib.texi\") to learn how to install and use SLIB."
	@echo
	-make slib.info

include srcdir.mk
srcdir.mk: .. Makefile
	echo -e "srcdir = `pwd`/\n" > srcdir.mk
#srcdir=$(HOME)/slib/

VERSION = 3a1
RELEASE = 1

rpm_prefix=/usr/src/redhat/
prefix = /usr/local/
exec_prefix = $(prefix)
# directory where `make install' will put executable.
bindir = $(exec_prefix)bin/
libdir = $(exec_prefix)lib/
infodir = $(prefix)info/

PREVDOCS = prevdocs/

htmldir=../public_html/
dvidir=../dvi/

RUNNABLE = scheme48
LIB = $(libdir)$(RUNNABLE)/
VM = scheme48vm
IMAGE = slib.image
INSTALL_DATA = install -c

$(LIB)slibcat:
	touch $(LIB)slibcat

catalogs:
	-if type scm; then scm -c "(require 'new-catalog)"; fi
	-if type guile; then guile -l guile.init -c\
	  "(use-modules (ice-9 slib)) (require 'new-catalog)"; fi
	-if type umb-scheme; then export SCHEME_INIT=umbscheme.init;\
	  echo "(require 'new-catalog)" | umb-scheme; fi
	-if type mzscheme; then export SCHEME_LIBRARY_PATH=`pwd`/;\
	  mzscheme -g -f DrScheme.init -e "(require 'new-catalog)" </dev/null; fi
	-if type scheme48; then make install48; fi

MKNMDB = (require 'color-database) (make-slib-color-name-db) (slib:exit)
clrnamdb: clrnamdb.scm
clrnamdb.scm:  mkclrnam.scm Makefile
	if type scm; then scm -e"$(MKNMDB)";\
	elif type guile; then guile -l guile.init -c\
	 "(use-modules (ice-9 slib)) $(MKNMDB)";\
	elif type slib48; then echo -e "$(MKNMDB)\n,exit" | slib48 -h 3000000;\
	elif type umb-scheme; then export SCHEME_INIT=`pwd`/umbscheme.init;\
	 echo "$(MKNMDB)" | umb-scheme;\
	elif type mzscheme; then export SCHEME_LIBRARY_PATH=`pwd`/;\
	 echo "$(MKNMDB)" | mzscheme -f DrScheme.init;\
	fi

slib48:	$(IMAGE)
$(IMAGE):	Makefile scheme48.init
	export S48_VERSION="`echo ,exit | scheme48 | sed -n 's/Welcome to Scheme 48 //;s/ ([^)]*)[.]//;p;q'`";\
	export S48_VICINITY="$(LIB)";\
	export SCHEME_LIBRARY_PATH="`pwd`/";\
	scheme48 < scheme48.init
install48:	$(IMAGE)
	$(INSTALL_DATA) $(IMAGE) $(LIB)
	(echo '#! /bin/sh';\
	 echo exec $(RUNNABLE) -i '$(LIB)$(IMAGE)' \"\$$\@\") \
	  > $(bindir)slib48
	chmod +x $(bindir)slib48

install:
	test -d $(bindir) || mkdir $(bindir)
	echo '#! /bin/sh'			 > $(bindir)slib
	echo export SCHEME_LIBRARY_PATH=$(libdir)slib/	>> $(bindir)slib
	echo VERSION=$(VERSION)			>> $(bindir)slib
	cat slib.sh				>> $(bindir)slib
	chmod +x $(bindir)slib

#### Stuff for maintaining SLIB below ####

ver = $(VERSION)
version.txi:	Makefile
	echo @set SLIBVERSION $(ver) > version.txi
	echo @set SLIBDATE `date +"%B %Y"` >> version.txi

scheme = scm

collect.sc:
	echo "(require 'macros-that-work)" > collect.sc
	echo "(require 'pprint-file)" >> collect.sc
	echo "(require 'yasos)" >> collect.sc
	echo "(pprint-filter-file \"collect.scm\" macwork:expand \"collectx.scm\")" >> collect.sc
	echo "(slib:exit #t)" >> collect.sc

collectx.scm: collect.scm macwork.scm collect.sc
	$(scheme) < collect.sc

ffiles = printf.scm genwrite.scm pp.scm \
	ppfile.scm strcase.scm debug.scm trace.scm \
	strport.scm scanf.scm qp.scm break.scm stdio.scm \
	strsrch.scm prec.scm schmooz.scm defmacex.scm mbe.scm
lfiles = sort.scm comlist.scm logical.scm
revfiles = sc4opt.scm sc4sc3.scm sc2.scm mularg.scm mulapply.scm \
	trnscrpt.scm withfile.scm dynwind.scm promise.scm \
	values.scm eval.scm null.scm
afiles = charplot.scm root.scm cring.scm \
	 selfset.scm psxtime.scm cltime.scm timezone.scm tzfile.scm
bfiles = fluidlet.scm object.scm recobj.scm yasyn.scm collect.scm collectx.scm
scfiles = r4rsyn.scm scmacro.scm synclo.scm synrul.scm synchk.scm \
	repl.scm macwork.scm mwexpand.scm mwdenote.scm mwsynrul.scm
scafiles = scainit.scm scaglob.scm scamacr.scm scaoutp.scm scaexpp.scm \
	structure.scm
srfiles = srfi-9.scm
efiles = record.scm dynamic.scm process.scm hash.scm \
	wttree.scm wttest.scm sierpinski.scm soundex.scm simetrix.scm
rfiles = rdms.scm alistab.scm paramlst.scm \
	batch.scm crc.scm dbrowse.scm getopt.scm dbinterp.scm \
	dbcom.scm dbsyn.scm
gfiles = colorspc.scm cie1931.xyz cie1964.xyz resenecolours.txt saturate.txt

txiscms =grapheps.scm glob.scm getparam.scm \
	vet.scm top-refs.scm hashtab.scm chap.scm comparse.scm\
	alist.scm ratize.scm modular.scm dirs.scm priorque.scm queue.scm\
	srfi.scm srfi-1.scm srfi-2.scm srfi-8.scm\
	pnm.scm http-cgi.scm htmlform.scm html4each.scm db2html.scm uri.scm\
	fft.scm solid.scm random.scm randinex.scm obj2str.scm ncbi-dna.scm\
	minimize.scm factor.scm determ.scm daylight.scm colornam.scm\
	mkclrnam.scm color.scm subarray.scm dbutil.scm array.scm transact.scm\
	arraymap.scm phil-spc.scm lineio.scm differ.scm cvs.scm tree.scm\
	coerce.scm byte.scm bytenumb.scm matfile.scm tsort.scm manifest.scm
txifiles =grapheps.txi glob.txi getparam.txi\
	vet.txi top-refs.txi hashtab.txi chap.txi comparse.txi\
	alist.txi ratize.txi modular.txi dirs.txi priorque.txi queue.txi\
	srfi.txi srfi-1.txi srfi-2.txi srfi-8.txi\
	pnm.txi http-cgi.txi htmlform.txi html4each.txi db2html.txi uri.txi\
	fft.txi solid.txi random.txi randinex.txi obj2str.txi ncbi-dna.txi\
	minimize.txi factor.txi determ.txi daylight.txi colornam.txi\
	mkclrnam.txi color.txi subarray.txi dbutil.txi array.txi transact.txi\
	arraymap.txi phil-spc.txi lineio.txi differ.txi cvs.txi tree.txi\
	coerce.txi byte.txi bytenumb.txi matfile.txi tsort.txi manifest.txi
% = `echo $(txiscms) | sed 's%.scm%.txi%g'`

docfiles = ANNOUNCE README COPYING FAQ slib.info slib.texi schmooz.texi\
	 ChangeLog version.txi object.texi $(txifiles)
mkfiles = Makefile require.scm Template.scm syncase.sh mklibcat.scm \
	Bev2slib.scm slib.spec slib.sh grapheps.ps
ifiles = bigloo.init chez.init elk.init macscheme.init mitscheme.init \
	scheme2c.init scheme48.init s48-0_57.init gambit.init t3.init \
	vscm.init scm.init scsh.init pscheme.init STk.init \
	RScheme.init DrScheme.init umbscheme.init guile.init
tfiles = plottest.scm macrotst.scm dwindtst.scm
sfiles = $(ffiles) $(lfiles) $(revfiles) $(afiles) $(scfiles) $(efiles) \
	$(rfiles) $(gfiles) $(scafiles) $(txiscms) $(srfiles)
allfiles = $(docfiles) $(mkfiles) $(ifiles) $(sfiles) $(tfiles) $(bfiles)

$(txifiles):	$(txiscms) schmooz.scm
	$(scheme) -rschmooz -e'(schmooz "slib.texi")'

dvi:	$(dvidir)slib.dvi
$(dvidir)slib.dvi:	version.txi slib.texi $(dvidir)slib.fn \
		$(txifiles) object.texi schmooz.texi
#	cd $(dvidir);export TEXINPUTS=$(srcdir):;texi2dvi $(srcdir)slib.texi
	-(cd $(dvidir);export TEXINPUTS=$(srcdir):;texindex slib.??)
	cd $(dvidir);export TEXINPUTS=$(srcdir):;tex $(srcdir)slib.texi
$(dvidir)slib.fn:
	cd $(dvidir);export TEXINPUTS=$(srcdir):;tex $(srcdir)slib.texi \
	$(srcdir)schmooz.texi
xdvi:	$(dvidir)slib.dvi
	xdvi -s 3 $(dvidir)slib.dvi

pdf:	$(htmldir)slib.pdf
$(htmldir)slib.pdf:	version.txi slib.texi $(dvidir)slib.fn schmooz.texi
#	cd $(dvidir);dvipdf slib.dvi # doesn't have links!
	cd $(dvidir);export TEXINPUTS=$(srcdir):;pdftex $(srcdir)slib.texi
	mv $(dvidir)slib.pdf $(htmldir)
xpdf:	$(htmldir)slib.pdf
	xpdf -z 3 $(htmldir)slib.pdf

TEXI2HTML = /usr/local/bin/texi2html -split -verbose
slib_toc.html:	$(txifiles) version.txi slib.texi schmooz.texi
	${TEXI2HTML} slib.texi
html:	$(htmldir)slib_toc.html
$(htmldir)slib_toc.html:	slib_toc.html Makefile
	-rm -f slib_stoc.html
	if [ -f $(PREVDOCS)slib_toc.html ]; \
		then hitch $(PREVDOCS)slib_\*.html slib_\*.html $(htmldir); \
		else cp slib_*.html $(htmldir);fi

slib$(VERSION).info:	$(txifiles) version.txi slib.texi schmooz.texi
	makeinfo slib.texi --no-warn --no-split -o slib.info
	mv slib.info slib$(VERSION).info
slib.info:	slib$(VERSION).info
	if [ -f $(PREVDOCS)slib.info ];\
		then infobar $(PREVDOCS)slib.info slib$(VERSION).info slib.info;\
		else cp slib$(VERSION).info slib.info;fi
info:	installinfo
installinfo:	$(infodir)slib.info
$(infodir)slib.info:	slib.info
	cp -a slib.info $(infodir)slib.info
	-install-info $(infodir)slib.info $(infodir)dir
	-rm $(infodir)slib.info.gz
infoz:	installinfoz
installinfoz:	$(infodir)slib.info.gz
$(infodir)slib.info.gz:	$(infodir)slib.info
	gzip -f $(infodir)slib.info

makedev = make -f $(HOME)/makefile.dev
CHPAT=$(HOME)/bin/chpat
RSYNC=rsync -avessh
UPLOADEE=swissnet_upload
dest = $(HOME)/dist/
temp/slib:	$(allfiles)
	-rm -rf temp
	mkdir temp
	mkdir temp/slib
	ln  $(allfiles) temp/slib

infotemp/slib:	slib.info
	-rm -rf infotemp
	mkdir infotemp
	mkdir infotemp/slib
	ln slib.info slib.info-* infotemp/slib
#For change-barred HTML.
$(PREVDOCS)slib_toc.html:
$(PREVDOCS)slib.info:	srcdir.mk Makefile
	cd $(PREVDOCS); unzip -ao $(dest)slib*.zip
	rm $(PREVDOCS)slib/slib.info
	cd $(PREVDOCS)slib; make slib.info; make slib_toc.html
	cd $(PREVDOCS); mv -f slib/slib.info slib/*.html ./
	rm -rf $(PREVDOCS)slib

distinfo:	$(dest)slib.info.zip
$(dest)slib.info.zip:	infotemp/slib
	$(makedev) TEMP=infotemp/ DEST=$(dest) PROD=slib ver=.info zip
	rm -rf infotemp

release:	dist pdf tar.gz	# rpm
	cvs tag -F slib$(VERSION)
	cp ANNOUNCE $(htmldir)SLIB_ANNOUNCE.txt
	cp COPYING  $(htmldir)SLIB_COPYING.txt
	$(RSYNC) $(htmldir)SLIB.html $(htmldir)SLIB_ANNOUNCE.txt \
	 $(htmldir)SLIB_COPYING.txt $(UPLOADEE):public_html/
	$(RSYNC) $(dest)README $(dest)slib$(VERSION).zip \
	 $(dest)slib$(VERSION).tar.gz $(htmldir)slib.pdf \
	 $(dest)slib-$(VERSION)-$(RELEASE).noarch.rpm \
	 $(dest)slib-$(VERSION)-$(RELEASE).src.rpm $(UPLOADEE):dist/
#	upload $(dest)README $(dest)slib$(VERSION).zip ftp.gnu.org:gnu/jacal/
#	$(MAKE) indiana
indiana:
	upload $(dest)slib$(VERSION).zip ftp@ftp.cs.indiana.edu:/pub/scheme-repository/incoming
	echo -e \
	'I have uploaded slib$(VERSION).zip to ftp.cs.indiana.edu:/pub/scheme-repository/incoming\n' \
	'for placement into ftp.cs.indiana.edu:/pub/scheme-repository/code/lib/' \
	 | mail -s 'SLIB upload' -b jaffer scheme-repository-request@cs.indiana.edu

postnews:
	echo -e "Newsgroups: comp.lang.scheme\n" | cat - ANNOUNCE | \
	inews -h -O -S \
	-f "announce@voluntocracy.org (Aubrey Jaffer & Radey Shouman)" \
	 -t "SLIB$(VERSION) Released" -d world

upzip:	$(HOME)/pub/slib.zip
	$(RSYNC) $(HOME)/pub/slib.zip $(UPLOADEE):pub/

dist:	$(dest)slib$(VERSION).zip
$(dest)slib$(VERSION).zip:	temp/slib
	$(makedev) DEST=$(dest) PROD=slib ver=$(VERSION) zip

tar.gz:	$(dest)slib$(VERSION).tar.gz
$(dest)slib$(VERSION).tar.gz:	temp/slib
	$(makedev) DEST=$(dest) PROD=slib ver=$(VERSION) tar.gz

rpm:	pubzip
#$(dest)slib-$(VERSION)-$(RELEASE).noarch.rpm:	$(dest)slib$(VERSION).zip
	cp $(HOME)/pub/slib.zip $(rpm_prefix)SOURCES/slib$(VERSION).zip
	rpm -ba slib.spec	# --clean
	rm $(rpm_prefix)SOURCES/slib$(VERSION).zip
	mv $(rpm_prefix)RPMS/noarch/slib-$(VERSION)-$(RELEASE).noarch.rpm \
	   $(rpm_prefix)SRPMS/slib-$(VERSION)-$(RELEASE).src.rpm $(dest)

shar:	slib.shar
slib.shar:	temp/slib
	$(makedev) PROD=slib shar
dclshar:	slib.com
com:	slib.com
slib.com:	temp/slib
	$(makedev) PROD=slib com
zip:	slib.zip
slib.zip:	temp/slib
	$(makedev) DEST=../ PROD=slib zip
doszip:	/c/scm/dist/slib$(VERSION).zip
/c/scm/dist/slib$(VERSION).zip:	temp/slib
	$(makedev) DEST=/c/scm/dist/ PROD=slib ver=$(VERSION) zip
	zip -d /c/scm/dist/slib$(VERSION).zip slib/slib.info
pubzip:	temp/slib
	$(makedev) DEST=$(HOME)/pub/ PROD=slib zip

diffs:	pubdiffs
pubdiffs:	temp/slib
	$(makedev) DEST=$(HOME)/pub/ PROD=slib pubdiffs
distdiffs:	temp/slib
	$(makedev) DEST=$(dest) PROD=slib ver=$(ver) distdiffs
announcediffs:	temp/slib
	$(makedev) DEST=$(dest) PROD=slib ver=$(VERSION) announcediffs

psdfiles=COPYING.psd README.psd cmuscheme.el comint.el instrum.scm pexpr.scm \
	primitives.scm psd-slib.scm psd.el read.scm runtime.scm version.scm
psdocfiles=article.bbl article.tex manual.bbl manual.tex quick-intro.tex

psdtemp/slib:
	-rm -rf psdtemp
	mkdir psdtemp
	mkdir psdtemp/slib
	mkdir psdtemp/slib/psd
	cd psd; ln $(psdfiles) ../psdtemp/slib/psd
	mkdir psdtemp/slib/psd/doc
	cd psd/doc; ln $(psdocfiles) ../../psdtemp/slib/psd/doc

psdist:	$(dest)slib-psd.tar.gz
$(dest)slib-psd.tar.gz:	psdtemp/slib
	$(makedev) DEST=$(dest) PROD=slib ver=-psd tar.gz TEMP=psdtemp/

new:
	echo `date -I` \ Aubrey Jaffer \ \<`whoami`@`hostname`\>> change
	echo>> change
	echo \	\* require.scm \(*SLIB-VERSION*\): Bumped from $(VERSION) to $(ver).>>change
	echo>> change
	cat ChangeLog >> change
	mv -f change ChangeLog
	$(CHPAT) slib$(VERSION) slib$(ver) ANNOUNCE FAQ ../scm/ANNOUNCE \
		../jacal/ANNOUNCE ../wb/README ../wb/ANNOUNCE \
		../synch/ANNOUNCE \
		$(htmldir)README.html ../dist/README \
		$(htmldir)JACAL.html \
		$(htmldir)SCM.html \
		$(htmldir)SIMSYNCH.html ../scm/scm.texi \
		/c/scm/dist/install.bat /c/scm/dist/makefile \
		/c/scm/dist/mkdisk.bat
	$(CHPAT) slib-$(VERSION) slib-$(ver) ANNOUNCE FAQ ../scm/ANNOUNCE \
		../jacal/ANNOUNCE ../wb/README ../wb/ANNOUNCE \
		../synch/ANNOUNCE \
		$(htmldir)README.html ../dist/README \
		$(htmldir)JACAL.html \
		$(htmldir)SCM.html \
		$(htmldir)SIMSYNCH.html ../scm/scm.texi \
		/c/scm/dist/install.bat /c/scm/dist/makefile \
		/c/scm/dist/mkdisk.bat
	$(CHPAT) $(VERSION) $(ver) README slib.texi require.scm Makefile \
		 $(htmldir)SLIB.html slib.spec scheme48.init s48-0_57.init
	cvs commit -lm '(*SLIB-VERSION*): Bumped from $(VERSION) to $(ver).'
	cvs tag -lF slib$(ver)

tagfiles = README version.txi slib.texi \
	$(mkfiles) $(sfiles) $(bfiles) $(tfiles) $(ifiles)
# README and $(ifiles) cause semgentation faults in ETAGS for Emacs version 19.
tags:	$(tagfiles)
	etags $(tagfiles)
test:	$(sfiles)
	$(scheme) Template.scm $(sfiles)
rights:
	$(scheme) -ladmin -e"(admin:check-all)" $(sfiles) $(tfiles) \
		$(bfiles) $(ifiles)
report:
	$(scheme) -e"(slib:report #t)"
clean:
	-rm -f *~ *.bak *.orig *.rej core a.out *.o \#*
	-rm -rf *temp
distclean:	realclean
realclean:
	-rm -f *~ *.bak *.orig *.rej TAGS core a.out *.o \#*
	-rm -f slib.info* slib.?? slib.???
	-rm -rf *temp
realempty:	temp/slib
	-rm -f $(allfiles)
