CATMAN=true
CC=shlicc
CFLAGS=-pg -I$(PREFIX)/include -pipe -Wall -Wstrict-prototypes -Wmissing-prototypes
PERL=/usr/bin/perl5
INSTALL=install -c 
LDLIBS=-lvers -lopts -lsz
LDFLAGS=-L. -L$(PREFIX)/lib $(LDLIBS)
ROFF=nroff
TROFF=true
MAN2HTML=true
PREFIX=/usr/home/seebs
LDLIBS=-lopts -lsz -lvers -ltermcap

PACKAGE=utils
VERSION=0.9.13

SHUTILS=errno filter findfile open ren shred switch undo vman\
	waitfor with without
PLUTILS=sl
CUTILS=c count ctimer dice napper pad raw stat timer tok unsort verb
UTILS=$(CUTILS) $(PLUTILS) $(SHUTILS)
MAN1=$(UTILS)
TARGETS=libvers.a VERSION

cutils: $(CUTILS)

shutils: $(SHUTILS)

plutils: $(PLUTILS)
default: all

.SUFFIXES: .1 .3 .cat .ps .html .pl .sh

.3.cat:
	$(ROFF) -man $*.3 > $*.cat

.3.ps:
	$(TROFF) -man $*.3 > $*.ps

.3.html:
	$(MAN2HTML) $*.3 > $*.html

.1.cat:
	$(ROFF) -man $*.1 > $*.cat

.1.ps:
	$(TROFF) -man $*.1 > $*.ps

.1.html:
	$(MAN2HTML) $*.1 > $*.html

.c: $(TARGETS) make.vars $(LIB)
	$(CC) $(CFLAGS) -o $* $*.c $(LDFLAGS)

.sh: Makefile make.vars
	( cat shdefs; sed -e "s/VERSION/$(VERSION)/g" < $*.sh ) > $*
	chmod +x $*

.pl: Makefile make.vars
	( echo "#!$(PERL)"; sed -e "s/VERSION/$(VERSION)/g" < $*.pl ) > $*
	chmod +x $*

clean:
	rm -f *.o $(LIBS) $(UTILS) $(TARGETS) $(TEST)
	if [ -d test ] ; \
	then	( cd test ; $(MAKE) clean ) ; \
	fi

distclean: clean
	rm -f *.ps *.cat *.html *.tar.gz core *.core

dist: distclean
	rm -rf /tmp/$(PACKAGE)-$(VERSION)
	mkdir /tmp/$(PACKAGE)-$(VERSION)
	cp -r -p . /tmp/$(PACKAGE)-$(VERSION)
	( cd /tmp; pax -w -f $(PACKAGE)-$(VERSION).tar $(PACKAGE)-$(VERSION) )
	gzip -f9 /tmp/$(PACKAGE)-$(VERSION).tar
	mv /tmp/$(PACKAGE)-$(VERSION).tar.gz ..
	rm -rf /tmp/$(PACKAGE)-$(VERSION)

install: all
	[ -d $(PREFIX)/bin ] || mkdir -p $(PREFIX)/bin
	[ -d $(PREFIX)/include ] || mkdir -p $(PREFIX)/include
	[ -d $(PREFIX)/lib ] || mkdir -p $(PREFIX)/lib
	[ -d $(PREFIX)/man/man1 ] || mkdir -p $(PREFIX)/man/man1
	[ -d $(PREFIX)/man/man3 ] || mkdir -p $(PREFIX)/man/man3
	for i in X $(MAN1) ; \
	do	if [ -f $$i.1 ] ; \
		then $(INSTALL) $$i.1 $(PREFIX)/man/man1; \
		fi \
	done
	for i in X $(MAN3) ; \
	do	if [ -f $$i.3 ] ; \
		then $(INSTALL) $$i.3 $(PREFIX)/man/man3; \
		fi \
	done
	for i in X $(LIBS) ; \
	do	if [ -f $$i ] ; \
		then $(INSTALL) $$i $(PREFIX)/lib; \
		fi \
	done
	for i in X $(UTILS) ; \
	do	if [ -f $$i ] ; \
		then $(INSTALL) $$i $(PREFIX)/bin; \
		fi \
	done
	for i in X $(INCLUDES) ; \
	do	if [ -f $$i ] ; \
		then $(INSTALL) $$i $(PREFIX)/include; \
		fi \
	done
	for i in X $(DOTFILES) ; \
	do	if [ -f $$i ] ; \
		then $(INSTALL) $$i $(PREFIX)/.$$i; \
		fi \
	done
	$(CATMAN) -M $(PREFIX)/man

runtest:
	if	[ -d test ] ; \
	then	( cd test; CC=$(CC) $(MAKE) && $(MAKE) clean ) \
	fi

all: $(TARGETS) $(LIBS) $(UTILS) $(TEST) runtest

# We can't remove formatted man pages, because everyone uses different
# conventions.
uninstall:
	for i in $(MAN) ; \
	do	rm -f $(PREFIX)/man/man3/$$i.3 ; \
	done

VERSION: Makefile
	echo $(VERSION) > VERSION

version.h: Makefile version.h.in
	sed -e "s/VERSION/$(VERSION)/" < version.h.in > $@
	
libvers.a: version.o version.h
	rm -f libvers.a
	ar cr libvers.a version.o

version.o: version.h version.c

docs:
	for i in $(MAN1) ; \
	do	if [ -f $$i.1 ] ; \
		then	$(MAKE) $$i.cat $$i.ps $$i.html ; \
		fi ; \
	done
	for i in $(MAN3) ; \
	do	if [ -f $$i.3 ] ; \
		then	$(MAKE) $$i.cat $$i.ps $$i.html ; \
		fi ; \
	done

$(LIB): $(OBJS)
	rm -f $(LIB)
	ar cr $(LIB) $(OBJS)

makefiles:
	case "X$(ALLDIRS)" in \
	"X")	$(MAKE) makefile ;; \
	*)	AD="$(ALLDIRS)" ; \
		for i in $$AD ; \
		do	( cd $$i ; ./maker ) \
		done \
		;; \
	esac

makefile:
	./maker
