# FREESNELL, simulate thin-film optics.	-*-makefile-*-
# Copyright (C) 2004 Aubrey Jaffer

# 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 3 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, USA.

SHELL = /bin/sh
intro:
	@echo
	@echo "Welcome to FREESNELL.  Read \"FreeSnell.info\" (or \"FreeSnell.texi\")"
	@echo "to learn how to use FREESNELL."
	@echo
	@echo
	-make FreeSnell.info

VERSION = 1b7
ver = $(VERSION)
version.txi:
	echo @set FREESNELLVERSION $(VERSION) > version.txi
	echo @set FREESNELLDATE `date +"%B %Y"` >> version.txi

dvi:	FreeSnell.dvi
FreeSnell.dvi:	version.txi FreeSnell.texi
	texi2dvi -b -c FreeSnell.texi
xdvi:	FreeSnell.dvi
	xdvi FreeSnell.dvi
ps:	FreeSnell.ps
FreeSnell.ps:	FreeSnell.dvi
	dvips FreeSnell.dvi -o FreeSnell.ps

pdf:	FreeSnell.pdf
FreeSnell.pdf:	version.txi FreeSnell.texi
	texi2pdf -b -c FreeSnell.texi
xpdf:	FreeSnell.pdf
	xpdf FreeSnell.pdf

TEXI2HTML = /usr/local/bin/texi2html -split -verbose
FreeSnell_toc.html:	version.txi FreeSnell.texi
	${TEXI2HTML} FreeSnell.texi
	-rm -f FreeSnell_stoc.html
	chpat '</HEAD>' '<LINK REL="icon" HREF="FS.ico">\
<LINK REL="shortcut icon" HREF="FS.ico">\
</HEAD>' FreeSnell_*.html
html:	FreeSnell_toc.html

prefix = /usr/local/
exec_prefix = $(prefix)
bindir = $(exec_prefix)bin/
libfreesnelldir = $(exec_prefix)lib/FreeSnell/
infodir = $(exec_prefix)info/
man1dir = $(prefix)man/man1/
infodir = $(prefix)info/

FreeSnell.info:	FreeSnell.texi usercat
	makeinfo FreeSnell.texi --no-warn --no-split -o FreeSnell.info
$(DESTDIR)$(infodir)FreeSnell.info:	FreeSnell.info
	mkdir -p $(DESTDIR)$(infodir)
	cp -p FreeSnell.info $(DESTDIR)$(infodir)FreeSnell.info
	install-info $(DESTDIR)$(infodir)FreeSnell.info $(DESTDIR)$(infodir)dir
	-rm $(DESTDIR)$(infodir)FreeSnell.info.gz
installinfo:	$(DESTDIR)$(infodir)FreeSnell.info
info:	installinfo

$(DESTDIR)$(infodir)FreeSnell.info.gz:	$(DESTDIR)$(infodir)FreeSnell.info
	gzip -f $(DESTDIR)$(infodir)FreeSnell.info
installinfoz:	$(DESTDIR)$(infodir)FreeSnell.info.gz
infoz:	installinfoz

pinstall:
	mkdir -p $(DESTDIR)$(libfreesnelldir)
	-cp $(scmfiles) nk.rwb $(nkfiles) Makefile COPYING \
		 $(DESTDIR)$(libfreesnelldir)
	echo ";;; \"usercat\": SLIB catalog additions for thin-film optics. -*-scheme-*-" > $(DESTDIR)$(libfreesnelldir)usercat
	echo "(" >> $(DESTDIR)$(libfreesnelldir)usercat
	echo " (fresnel-equations     . \"$(libfreesnelldir)fresneleq\")" >> $(DESTDIR)$(libfreesnelldir)usercat
	echo " (optic-compute         . \"$(libfreesnelldir)opticompute\")" >> $(DESTDIR)$(libfreesnelldir)usercat
	echo " (optic-plot            . \"$(libfreesnelldir)optiplot\")" >> $(DESTDIR)$(libfreesnelldir)usercat
	echo " (optic-color           . \"$(libfreesnelldir)opticolr\")" >> $(DESTDIR)$(libfreesnelldir)usercat
	echo " (video-processing      . \"$(libfreesnelldir)video\")" >> $(DESTDIR)$(libfreesnelldir)usercat
	echo " )" >> $(DESTDIR)$(libfreesnelldir)usercat

install:	pinstall
	mkdir -p $(DESTDIR)$(bindir)
	-cp nk.scm $(DESTDIR)$(bindir)nk
	chmod +x $(DESTDIR)$(bindir)nk

docs:	$(DESTDIR)$(infodir)FreeSnell.info.gz FreeSnell_toc.html FreeSnell.dvi \
	 FreeSnell.pdf
	xdvi -s 4 FreeSnell.dvi

FreeSnell.html:	FreeSnell.texi
	makeinfo --html --no-split --no-warn --force FreeSnell.texi

## Build a NS-Windows installer
## make sure that makeinfo NSIS is available on the commandline
w32install:	FreeSnell.html
	makensis FreeSnell.nsi

mfiles = Makefile FreeSnell.nsi

nkfiles = zr.nk zn-b.nk zn-a.nk w.nk v.nk ti.nk ta.nk ni.nk li.nk	\
 ge.nk fe.nk cu.nk cr.nk au.nk al.nk ag.nk te-a.nk te-b.nk se-a.nk	\
 se-b.nk si.nk mgo.nk hdpe.nk blackbody.nk

valfiles = dielectric.scm metallic.scm granular.scm coherence.scm	\
	polyethylene.scm

scmfiles = nk.scm fresneleq.scm opticompute.scm optiplot.scm	\
	opticolr.scm video.scm

logfiles = dielectric.log metallic.log granular.log coherence.log	\
	polyethylene.log

docfiles = ANNOUNCE FreeSnell.texi version.txi

hfiles = index.html nk.html dielectric.html metallic.html	\
	granular.html coherence.html polyethylene.html

images = mir96.png 4337990-2.png 4337990-4.png hot-2g.png hot-4g.png	\
	wide-bp.png anti.png co.png en96.png coh96.png hot-2.png	\
	immersed.png prism-p.png prism-s.png hl7.png Si203-Al.png	\
	protected-al.png enhanced-al.png omni-mirror.png reflect-50.png	\
	poly-Ag.png metal-bp.png dual-bp.png cold-mirror.png		\
	fig-2.2-2.png fig-2.2-1.png Fig.2.2.png Fig.2.5.png		\
	fig-2.5.png poly-Ag.png poly-Ag-color.png FreeSnell.pdf		\
	Ag96.png Al-mirror.png zAl-mirror.png reflect-50.png		\
	cold-mirror1.png cold-mirror2.png AgMgO-3.0.png AgMgO-3.png	\
	Au-A.png Ag-A.png Au-D65.png Ag-D65.png AgMgO-hist.png		\
	GranFilm-ang.png GranFilm-p.png GranFilm-s.png			\
	nobles.png transitions.png					\
	AgMgO-sq-th.png AgMgO-p.png AgMgO-s.png	co96.png		\
	AgMgO-ang.png Au-mirror.png PE-1x14.png PE-3x14.png		\
	PE-2x14.png PE-1x14-co.png PE-2x14-co.png PE-3x14-co.png	\
	IRG-II-2.image1.jpg IRG-II-2.image2.jpg IRG-II-2.image3.jpg	\
	film-flat.png film-smooth.png film-flat-wn.png hdpe-const.png	\
	hdpe-L100.png hdpe-L33.png hdpe-card.png hdpe-card-absorb.png	\
	hdpe-12.7.png hdpe-14.png hdpe-pe.png hdpe-ftir.png poli96.png	\
	Figure-12.png hdpe-50.png hdpe-age-1.png hdpe-130.png		\
	ZnS-color.png AgMgO-3-color.png hot-2-color.png hdpe-33ni.png	\
	hdpe-33.png protected-al45.png hdpe-pas.png FTIR-poly-fig-5.png \
	Conley.png polyeth-trns.png polyeth-35.png FS96.png

pubfiles = FreeSnell.info $(docfiles) ChangeLog COPYING usercat \
           $(scmfiles) $(valfiles) $(nkfiles) nk.rwb \
	   nk.bat FS.ico $(mfiles)
# $(hfiles) $(images) AgMgO.jpg

publist:
	echo $(pubfiles)

tagfiles = $(docfiles) usercat $(mfiles) $(scmfiles) $(valfiles) $(hfiles)

RSYNC=rsync -bav
UPLOADEE=swissnet_upload
dest = $(HOME)/dist/
makedev = make -f $(HOME)/makefile.dev
CHPAT=$(HOME)/bin/chpat
DOSCM = /c/Voluntocracy/dist/

temp/FreeSnell:	$(pubfiles)
	-rm -rf temp
	mkdir -p temp/FreeSnell
	ln  $(pubfiles) temp/FreeSnell

release:	dist pdf upload
	cvs tag -F FreeSnell-$(VERSION)
	cp ANNOUNCE ANNOUNCE.txt
	$(RSYNC) $(dest)README $(dest)FreeSnell-$(VERSION).zip $(UPLOADEE):dist
#	upload $(dest)README $(dest)FreeSnell-$(VERSION).zip ftp.gnu.org:gnu/jacal/

dist:	$(dest)FreeSnell-$(VERSION).zip
$(dest)FreeSnell-$(VERSION).zip:	temp/FreeSnell
	$(makedev) DEST=$(dest) PROD=FreeSnell ver=-$(VERSION) zip
#	cvs tag -F FreeSnell-$(VERSION)
shar:	FreeSnell.shar
FreeSnell.shar:	temp/FreeSnell
	$(makedev) PROD=FreeSnell shar
dclshar:	FreeSnell.com
com:	FreeSnell.com
FreeSnell.com:	temp/FreeSnell
	$(makedev) PROD=FreeSnell com
zip:	FreeSnell.zip
FreeSnell.zip:	temp/FreeSnell
	cd temp; zip -r ../FreeSnell.zip FreeSnell
doszip:	$(DOSCM)FreeSnell-$(VERSION).zip
$(DOSCM)FreeSnell-$(VERSION).zip: temp/FreeSnell FreeSnell.html
	$(makedev) DEST=$(DOSCM) PROD=FreeSnell ver=-$(VERSION) zip
	-cd ..; zip -9ur $(DOSCM)FreeSnell-$(VERSION).zip \
		FreeSnell/FreeSnell.html && \
		zip -d $(DOSCM)FreeSnell-$(VERSION).zip FreeSnell/FreeSnell.info
pubzip:	temp/FreeSnell
	$(makedev) DEST=$(HOME)/pub/ PROD=FreeSnell zip
upzip:	$(HOME)/pub/FreeSnell.zip
	$(RSYNC) $(HOME)/pub/FreeSnell.zip $(UPLOADEE):pub

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

nk.rwb:  $(nkfiles) nk.scm
	-rm nk.rwb '~$$nk.rwb' '.#nk.rwb'
	nk --add $(nkfiles) Sopra/*.nk

logfiles: $(logfiles)

dielectric.log:	dielectric.scm nk.rwb $(scmfiles)
	time scm -l dielectric.scm -e '(dielectric)' > dielectric.log
metallic.log:	metallic.scm nk.rwb $(scmfiles)
	time scm -l metallic.scm -e'(metallic)' > metallic.log
granular.log:	granular.scm nk.rwb $(scmfiles)
	time scm -l granular.scm -e'(granular)' > granular.log
coherence.log:	coherence.scm nk.rwb $(scmfiles)
	time scm -l coherence.scm -e '(coherence)' > coherence.log
polyethylene.log:	polyethylene.scm nk.rwb $(scmfiles)
	time scm -l polyethylene.scm -e '(polyethylene)' > polyethylene.log

co.png:	nk.scm
	./nk.scm --plot co
	convert /tmp/co.eps co.png

new:
	echo @set FREESNELLVERSION $(ver) > version.txi
	echo @set FREESNELLDATE `date +"%B %Y"` >> version.txi
	echo `date -I` \ Aubrey Jaffer \ \<`whoami`@`hostname`\>> change
	echo>> change
	echo '	* Makefile (VERSION): Bumped from $(VERSION) to $(ver).'>>change
	echo>> change
	cat ChangeLog >> change
	mv -f change ChangeLog
	$(CHPAT) FreeSnell-$(VERSION) FreeSnell-$(ver) FreeSnell.texi \
		$(HOME)/dist/README $(HOME)/scm/ANNOUNCE
	$(CHPAT) $(VERSION) $(ver) ANNOUNCE $(mfiles) index.html
	cvs commit -m '(VERSION): Bumped from $(VERSION) to $(ver).'
	cvs tag -F FreeSnell-$(ver)

upfiles = $(hfiles) $(images) FreeSnell_*.html $(valfiles) nk.scm \
	$(logfiles) FS.ico ANNOUNCE.txt

# this is for WWW files.
all: $(upfiles)
upload:
	$(RSYNC) -L $(upfiles) $(UPLOADEE):public_html/FreeSnell/

TAGS:	tags
tags:	$(tagfiles)
	etags $(tagfiles)

clean:	distclean
distclean:
	-rm -f *~ \#* *.orig *.rej a.out core TAGS tmp*
	-rm -rf temp
	$(MAKE) TAGS

co96.png: co.png
	convert -resize 96x64 co.png co96.png
AgMgO-hist.png: AgMgO-hist.eps
	convert AgMgO-hist.eps AgMgO-hist.png
mir96.png: omni-mirror.png
	convert -crop 96x64+380+70 omni-mirror.png mir96.png
Ag96.png: Ag-D65.png
	convert -crop 96x64+42+355 Ag-D65.png Ag96.png
en96.png: enhanced-al.png
	convert -crop 96x64+65+40 enhanced-al.png en96.png
coh96.png: PE-2x14-co.png
	convert -crop 96x64+250+37 PE-2x14-co.png coh96.png
poli96.png: ik_poli_full.gif
	convert -crop 96x64+20+20 ik_poli_full.gif poli96.png
#	convert -scale 50% -crop 32x32+45+30 enhanced-al.png FS32.ico
#	convert -scale 25% -crop 16x16+22.5+15 enhanced-al.png FS16.ico

FS96.png: FreeSnell_96x64.ps
	convert FreeSnell_96x64.ps FS96.png
FreeSnell_64.png: FreeSnell_96x64.ps
	convert -crop 64x64+16+0 FreeSnell_96x64.ps FreeSnell_64.png
FreeSnell_32.png: FreeSnell_96x64.ps
	convert -scale 50% -crop 32x32+8+0 FreeSnell_96x64.ps FreeSnell_32.png
FreeSnell_16.png: FreeSnell_96x64.ps
	convert -scale 25% -crop 16x16+4+0 FreeSnell_96x64.ps FreeSnell_16.png

FS.ico: FreeSnell_64.png FreeSnell_32.png FreeSnell_16.png
	png2ico FS.ico FreeSnell_64.png FreeSnell_32.png FreeSnell_16.png
