# Makefile for Gary Perlman's sstools
# This has not been polished for distribution

ARC=shar -a
CC = gcc

# SMAINS Source files for MAIN programs
SMAINS= \
	ssadd.c \
	sscount.c \
	ssdiverge.c \
	ssextract.c \
	ssfill.c \
	ssforder.c \
	ssformat.c \
	ssmerge.c \
	sssearch.y \
	sssort.c
# OMAINS object files for MAIN programs
OMAINS= \
	ssadd.o \
	sscount.o \
	ssdiverge.o \
	ssextract.o \
	ssfill.o \
	ssforder.o \
	ssformat.o \
	ssmerge.o \
	sssearch.o \
	sssort.o
# PROGS program names for tools
PROGS= \
	ssadd \
	sscount \
	ssdiverge \
	ssextract \
	ssfill \
	ssforder \
	ssformat \
	ssmerge \
	sssearch \
	sssort
# DOCS troff -man source files
DOCS= \
	ssadd.1 \
	sscount.1 \
	ssdiverge.1 \
	ssextract.1 \
	ssfill.1 \
	ssforder.1 \
	ssformat.1 \
	ssmerge.1 \
	sssearch.1 \
	sssort.1
# MANS preformmated manual entries
MANS= \
	ssadd.man \
	sscount.man \
	ssdiverge.man \
	ssextract.man \
	ssfill.man \
	ssforder.man \
	ssformat.man \
	ssmerge.man \
	sssearch.man \
	sssort.man
# FUNS functions for the library
FUNS= \
	ss.o \
	ssladd.o \
	sslbuf.o \
	ssldrawline.o \
	sslextract.o \
	sslforder.o \
	sslformat.o \
	sslfreverse.o \
	sslgetval.o \
	sslmapname.o \
	sslmerge.o \
	sslparse.o \
	sslreadn.o \
	sslsort.o \
	sslwriten.o \
	ssmail.o

SSH=ss.h ssmain.h sssyntax.h ssmail.h stringfun.h
SSC= \
	ss.c \
	ssladd.c \
	sslbuf.c \
	ssldrawline.c \
	sslextract.c \
	sslforder.c \
	sslformat.c \
	sslfreverse.c \
	sslgetval.c \
	sslmapname.c \
	sslmerge.c \
	sslparse.c \
	sslreadn.c \
	sslsort.c \
	sslwriten.c \
	ssmail.c

SUTIL=ssfgets.c number.c numcmp.c stringfun.c strsub.c filter.c strfill.c \
	person.c title.c stradd.c
OUTIL=ssfgets.o number.o numcmp.o stringfun.o strsub.o filter.o strfill.o \
	person.o title.o stradd.o

TEXT= $(SSC) $(SSH) $(SMAINS) $(SUTIL)

CFLAGS=-DNDEBUG -O
DESTDIR=/home/perlman/bin

all: $(PROGS)

install: $(PROGS)
	/bin/cp $(PROGS) $(DESTDIR)

clean:
	/bin/rm -f $(PROGS) 

$(FUNS) : ss.h ssmail.h
sslreadn.o sslwriten.o ssfgets.o ss.o : sssyntax.h
$(OMAINS) : ss.h ssmain.h sssyntax.h ssmail.h

# A general stub to try ss functions
SSX=ssx.c ss.o stringfun.o ssfgets.o filter.o strsub.o
ssx: $(SSX)
	$(CC) $(CFLAGS) -o $@ $(SSX)

SSADD=ssadd.o ss.a libutil.a
ssadd: $(SSADD)
	$(CC) $(CFLAGS) -o $@ $(SSADD)

SSCOUNT=sscount.o ss.a libutil.a
sscount: $(SSCOUNT)
	$(CC) $(CFLAGS) -o $@ $(SSCOUNT)

SSDIVERGE=ssdiverge.o ss.a libutil.a
ssdiverge: $(SSDIVERGE)
	$(CC) $(CFLAGS) -o $@ $(SSDIVERGE)

SSEXTRACT=ssextract.o ss.a libutil.a
ssextract: $(SSEXTRACT)
	$(CC) $(CFLAGS) -o $@ $(SSEXTRACT)

SSFILL=ssfill.o ss.a libutil.a
ssfill: $(SSFILL)
	$(CC) $(CFLAGS) -o $@ $(SSFILL)

SSFORDER=ssforder.o ss.a libutil.a
ssforder: $(SSFORDER)
	$(CC) $(CFLAGS) -o $@ $(SSFORDER)

SSFORMAT=ssformat.o ss.a libutil.a
ssformat: $(SSFORMAT)
	$(CC) $(CFLAGS) -o $@ $(SSFORMAT)

SSMERGE=ssmerge.o ss.a libutil.a
ssmerge: $(SSMERGE)
	$(CC) $(CFLAGS) -o $@ $(SSMERGE)

SSSEARCH=sssearch.c ss.a libutil.a
sssearch: $(SSSEARCH)
	$(CC) $(CFLAGS) -o $@ $(SSSEARCH)
sssearch.c: sssearch.y
	yacc sssearch.y
	mv y.tab.c sssearch.c

SSSORT=sssort.o ss.a libutil.a
sssort: $(SSSORT)
	$(CC) $(CFLAGS) -o $@ $(SSSORT)

ss.a: $(FUNS)
	ar rv $@ $(FUNS)
	ranlib $@

libutil.a: $(OUTIL)
	ar rv $@ $?
	ranlib $@

llib-lss.ln: $(SSC) $(SUTIL)
	lint -Css $(SSC) $(SUTIL)

.PRECIOUS:  $(TEXT) $(DOCS)

print: makefile $(TEXT)
	cpr $? | clpr
	touch print
archive: $(TEXT) $(DOCS) makefile
	$(ARC) $(TEXT) $(DOCS) makefile > archive
ss.db: $(TEXT)
	seec -t SSMANUAL $(TEXT) | sssort -mfn -fname > ss.db

.SUFFIXES: .1 .man

.1.man:
	nroff -man online.macros $*.1 | cat -s > $*.man

catman: $(MANS)

edmains:
	vi $(SMAINS)

SSHEXPR=sshexpr.o ss.a libutil.a
sshexpr: $(SSHEXPR)
	$(CC) $(CFLAGS) -o $@ $(SSHEXPR)

TITLE=title.o stringfun.o
title: $(TITLE)
	$(CC) $(CFLAGS) -o $@ $(TITLE)

PERSON=person.o stringfun.o
person: $(PERSON)
	$(CC) $(CFLAGS) -o $@ $(PERSON)

GETFIELDS=getfields.o ss.a libutil.a
getfields: $(GETFIELDS)
	$(CC) $(CFLAGS) -o $@ $(GETFIELDS)

MAIL=ssmail.o ss.a libutil.a stradd.o
ssmail: $(MAIL)
	$(CC) $(CFLAGS) -o $@ $(MAIL)

bu: 
	ci -l -mbu *.[ch]
