# BSTSTYLES are the standard styles that we distribute
BSTSTYLES=plainurl.bst unsrturl.bst alphaurl.bst abbrvurl.bst
# TESTSTYLES are a couple of extra ones that we explicitly test
TESTSTYLES=mlaurl.bst

MAINTAINER_FILES= Makefile configure
GENERATED=urlbst urlbst.tex urlbst.pdf urlbst.html README VERSION $(BSTSTYLES)
# distribute generated files
# ...plus the configure files
# ...plus the configured files
DISTRIBS=$(GENERATED) \
	configure configure.ac \
	urlbst.in urlbst.bib urlbst.tex.in urlbst.html.in Makefile.in

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
DIST=urlbst-@PACKAGE_VERSION@

# On OS X, the following avoids extended attributes being included
TAR=COPYFILE_DISABLE=1 tar
#TAR=tar

### Implicit rules

# Don't include --inlinelinks when generating %url.bst here, as we 
# do want the links visible when generating the documentation, and it's
# probably abetter default in any case.
%url.bst: urlbst
	export BSTINPUTS=test: ; \
	if test -z "`kpsewhich ${@:url.bst=.bst}`"; then \
		echo "Can't locate ${@:url.bst=.bst}"; \
	else \
		./urlbst --eprint --doi --pubmed --hyperref `kpsewhich ${@:url.bst=.bst}` $@; \
	fi

# Incomplete TeX support
%.ps: %.dvi
	dvips -o $@ $<
%.bbl: %.tex plainurl.bst
	pdflatex $<
	if ! test -f $@ || grep -q 'Citation.*undefined' ${<:.tex=.log}; then \
		bibtex ${<:.tex=}; \
		pdflatex $<; \
		rm ${<:.tex=.pdf}; \
	fi
%.pdf: %.tex %.bbl
	pdflatex $<
%.dvi: %.tex %.bbl
	latex $<
%.gz: %
	gzip --best -f $<

.PRECIOUS: .bbl

### Targets start here

all: urlbst

dist: $(DIST).tar.gz $(DIST).zip

$(DIST).tar: $(DIST)/urlbst.in
	$(TAR) cf $@ $(DIST)

$(DIST).zip: $(DIST)/urlbst.in
	zip -r $@ $(DIST)

$(DIST)/urlbst.in: $(DISTRIBS)
	if test -d $(DIST); then rm -Rf $(DIST); fi && mkdir $(DIST)
	cp $(DISTRIBS) $(DIST)

# The following appears not to work.
# Perhaps it has to be installed, rather than run from the .app bundle
# (but it doesn't give you any choice about where you install it,
# and I'm not going to put it in a system location)
#PLATYPUS=/Data/LocalApplications/Platypus-4.0/Platypus.app/Contents/Resources/platypus
PLATYPUS=/usr/local/bin/platypus
urlbst.app: urlbst
	rm -Rf urlbst.app
	$(PLATYPUS) -a urlbst -c "$$PWD/urlbst" -o 'Progress Bar' \
		-p /usr/bin/perl -V @PACKAGE_VERSION@ -u Norman\ Gray -I uk.me.nxg.urlbst \
		-D -R -N CALLED_FROM_PLATYPUS=1 $$PWD/urlbst.app
urlbst-app.zip: urlbst.app
	zip -r urlbst-app.zip urlbst.app

#$(DIST).tar: $(DISTRIBS)
#	sed '1s,.*,#! /usr/bin/env perl,' urlbst >tmp && mv tmp urlbst \
#	  && chmod +x urlbst
#	rm -Rf $(DIST) $(DIST).tar
#	mkdir $(DIST)
#	cp $(DISTRIBS) $(DIST)
#	tar cf $@ $(DIST)
#	rm -Rf $(DIST)

urlbst: urlbst.in config.status
	./config.status urlbst

urlbst.tex: urlbst.tex.in config.status
	./config.status urlbst.tex

urlbst.html: urlbst.html.in config.status
	./config.status urlbst.html

Makefile: Makefile.in config.status
	./config.status Makefile

configure: configure.ac
	autoconf

config.status: configure
	./configure

# Version stamp file, included in the distribution for convenience,
# so it's easy to see which version it is has been unpacked at CTAN.
VERSION:
	echo $(DIST) >VERSION

# The README is just a plain-text version of urlbst.html
README: urlbst.html prepare-roff.sed
	xsltproc html2roff.xslt urlbst.html \
	  | sed -f prepare-roff.sed \
	  | nroff -Tutf8 -ms \
	  | sed '/XXXEND/,$$d' >README

# Write a roff file -- there comes a point where a string of -e '' 
# commands is more confusing than is safe
# (plus trying to get '$a\' into that is mind-bending).
prepare-roff.sed:
	rm -f $@
	{ echo '$$a\'; echo '\'; echo 'XXXEND'; echo '/^ *$$/d'; echo 's/^ *//'; echo 's/^\.$$/\&./'; echo 's/^\. /\&. /'; } >$@

# Very simple install target -- hardly worth bothering, really....
install: urlbst
	cp urlbst $(bindir)

# Very simple test target -- just check that we don't bomb converting
# the standard styles
test: $(BSTSTYLES) $(TESTSTYLES)
	for f in $(BSTSTYLES) $(TESTSTYLES); do \
		ROOT=`echo $$f|sed s/\.bst$$//`; \
		printf '\\relax\n'			>  test-$$ROOT.aux; \
		printf '\\citation{*}\n'		>> test-$$ROOT.aux; \
		printf '\\bibdata{urlbst}\n'		>> test-$$ROOT.aux; \
		printf '\\bibstyle{'"$$ROOT"'}\n'	>> test-$$ROOT.aux; \
		bibtex test-$$ROOT; \
	done

# Brute-force test target, which finds all the system .bst files,
# converts them, and runs BibTeX on them.  It doesn't test the results
# in any way -- you have to do that by eye.
#
# No, this is a hopelessly blunderbus approach.  And in any case the 
# 'locate *.bst' doesn't work.  At least the following would find only things
# on the .bst search path.
#     BSTPATH=`kpsepath bst`
#     for d in `IFS=:; echo $BSTPATH`; do
#         dd=`expr "$d" : '!*\(.*[^/]\)/*$'`
#         echo dd=$dd
#         test -d "$dd" && find $dd -name \*.bst
#     done
test-all:
	printf '\\relax\n'>test-all.mainaux
	sed -n 's/^.*{\(test:.*\),/\\citation{\1}/p' urlbst.bib>>test-all.mainaux
	for f in `locate '*.bst' | grep -v norman`; do T=`echo $$f|sed 's+.*/\(.*\)\.bst+\1url+'`;perl urlbst $$f $$T.bst; if test $$? = 0; then TF=test-$$T.aux; cp test-all.mainaux $$TF;printf '\\bibdata{urlbst}\n'>>$$TF; printf '\\bibstyle{$$T}\n'>>$$TF; else rm $$T.bst; fi done
	for f in `ls test-*.aux|sed s+.aux++`;do bibtex $$f;done
	rm test-all.mainaux

# Tarball for unpacking in the webpage distribution directory
webpage-tarball.tar: urlbst.pdf urlbst.html $(DIST).tar.gz $(DIST).zip
	mkdir webpage-tarball
	cp urlbst.pdf $(DIST).tar.gz $(DIST).zip webpage-tarball
	cp urlbst.html webpage-tarball/index.html
	cd webpage-tarball; $(TAR) cf ../webpage-tarball.tar *
	rm -Rf webpage-tarball

tidy:
	rm -f webpage-tarball.tar
	rm -f *~ test-*
	rm -f *.aux *.bbl *.log *.blg *.dvi *.pdf
	rm -Rf urlbst.app

clean: tidy
	rm -f *.bst
	rm -Rf config.status autom4te.cache prepare-roff.sed
	rm -Rf $(DIST).tar $(DIST).tar.gz $(DIST).zip $(DIST)
	rm -f $(GENERATED)

maintainer-clean: clean
	rm -f $(MAINTAINER_FILES)
