# Makefile for tin - for tin compiler flag options please read INSTALL.

EXE	= tin
BINDIR	= /usr/local/bin
MANDIR	= /usr/man/man1

STRIP	= strip
ROFF	= + drf -F Helvetica -man3 
PRINT	= -Pps0
BASE_VER= ../110
PATCH_VER = 110
MAIL_ADDR = iain%estevax.uucp@unido.Informatik.Uni-Dortmund.DE

HFILES	= tin.h extern.h nntp.h proto.h patchlev.h

CFILES	= art.c curses.c debug.c feed.c getline.c group.c hashstr.c \
		help.c init.c kill.c lang.c main.c memory.c misc.c newsrc.c \
		open.c page.c post.c prompt.c rcfile.c save.c screen.c search.c \
		select.c signal.c thread.c wildmat.c

OFILES	= art.o curses.o debug.o feed.o getline.o group.o hashstr.o \
		help.o init.o kill.o lang.o main.o memory.o misc.o newsrc.o \
		open.o page.o post.o prompt.o rcfile.o save.o screen.o search.o \
		select.o signal.o thread.o wildmat.o          

SUPPORT = Makefile MANIFEST README CHANGES TODO INSTALL *.[13] $(EXE).nrf

LINTFLAGS=-a -c -h -n -x 

CC=cc

.c.o:
	$(CC) $(CFLAGS) $*.c

all: 
	@echo "There is no default. Specify one of the following targets."
	@echo "    make bsd       (BSD/Dec/Next/Sun)"
	@echo "    make sysv      (SysV)"
	@echo "    make sysvr4    (SysV R4)"
	@echo "    make sco       (SCO Unix)"
	@echo "    make aix       (IBM AIX)"
	@echo "    make xenix     (Xenix 386)"
	@echo "    make sinix     (SNI SysV)"
	@echo "    make tower     (NCR Tower)"
	@echo "    make minix     (Minix 386)"
	@echo "    make dgux      (DG Aviion)"

# For Berkeley systems:
#			 NNTPLIB=clientlib.o \
#
bsd:
	@echo "Compiling for BSD/Ultrix..."
	@$(MAKE) CFLAGS='-c -O -DBSD -DLIBDIR=\"/usr/lib/news\" -DSPOOLDIR=\"/usr/spool/news\"' \
			 LIBS="-lcurses -ltermcap" \
			 EXE=tin linkit

# For System V:
#			 NNTPLIB=clientlib.o \
#			 NETLIBS="-lnet -lnsl_s" \
#
sysv:
	@echo "Compiling for System V..."
	@$(MAKE) CFLAGS='-c -O -DAUTO_RESIZE -DLIBDIR=\"/usr/lib/news\" -DSPOOLDIR=\"/usr/spool/news\"' \
			 LIBS="-lcurses -ltermcap" \
			 EXE=tin linkit

# For IBM AIX:
#			 NNTPLIB=clientlib.o \
#
aix:
	@echo "Compiling for AIX..."
	@$(MAKE) CFLAGS='-c -O -DSYSV -DRS6000 -DREAD_CHAR_HACK -DUSE_LONG_FILENAMES -DAUTO_RESIZE -DLIBDIR=\"/usr/lib/news\" -DSPOOLDIR=\"/usr/spool/news\"' \
			 LIBS="-lcurses -ltermcap" \
			 EXE=tin linkit

# For System V Release 4:
#			 NNTPLIB=clientlib.o \
#			 NETLIBS="-lnsl -lsocket" \
#
sysvr4:
	@echo "Compiling for System V Release 4..."
	@$(MAKE) CFLAGS='-c -O -DPOSIX_JOB_CONTROL -DUSE_INVERSE_HACK -DAUTO_RESIZE -DLIBDIR=\"/usr/lib/news\" -DSPOOLDIR=\"/usr/spool/news\"' \
			 LIBS="-lcurses -ltermcap -L/usr/ucblib -lucb" \
			 EXE=tin linkit

# For SCO Unix:
#			 NNTPLIB=clientlib.o \
#			 NETLIBS="-lnsl_s -lsocket" \
#
sco:
	@echo "Compiling for SCO Unix..."
	@$(MAKE) CFLAGS='-c -O -UM_XENIX -DUSE_INVERSE_HACK -DAUTO_RESIZE -DLIBDIR="\"/usr/lib/news\"" -DSPOOLDIR="\"/usr/spool/news\""' \
			 LIBS="-lcurses -lgen -lc_s" \
			 EXE=tin linkit

# For Xenix 386:
#			 NNTPLIB=clientlib.o \
#			 NETLIBS="-lsocket" \
#
xenix:
	@echo "Compiling for Xenix 386..."
	@$(MAKE) CFLAGS='-c -Zi -DSYSV -DLIBDIR="\\"/usr/lib/news\\"" -DSPOOLDIR="\\"/usr/spool/news\\""' \
			 LIBS="-lcurses -ltinfo -lx" \
			 LFLAGS=-Zi EXE=tin linkit

# For SNI Sinix:
#			 NNTPLIB=clientlib.o \
#			 NETLIBS="-lsocket" \
#
sinix:
	@echo "Compiling for SNI Sinix..."
	@$(MAKE) CFLAGS='-c -O -DSINIX -DLOG_USER -DUSE_MKDIR -DAUTO_RESIZE -DLIBDIR=\\"/usr/lib/news\\" -DSPOOLDIR=\\"/usr2/spool/news\\"' \
			 LIBS="-lcurses" \
			 EXE=tin linkit

# For NCR Tower:
#			 NNTPLIB=clientlib.o \
#			 NETLIBS="-lnet -lnsl_s" \
#
tower:
	@echo "Compiling for NCR Tower..."
	@$(MAKE) CFLAGS='-c -O -DSYSV -DNCR -DISTRING -DLIBDIR=\"/usr/lib/news\" -DSPOOLDIR=\"/usr/spool/news\"' \
			 LIBS="-lcurses -ltermcap" \
			 EXE=tin linkit

# For Minix 386:
#
minix:
	@echo "Compiling for Minix 386..."
	@$(MAKE) CFLAGS='-c -O -DMINIX -D_POSIX_SOURCE -DLIBDIR=\"/usr/lib/news\" -DSPOOLDIR=\"/usr/spool/news\"' \
			 LIBS="-lcurses" \
			 EXE=tin linkit
	chmem +131072 $(EXE) 

# For Data General Aviion
#			 NNTPLIB=clientlib.o \
#
dgux:
	@echo "Compiling for DG Aviion..."
	@$(MAKE) CFLAGS='-c -O -DUSE_LONG_FILENAMES -DPOSIX_JOB_CONTROL -DUSE_INVERSE_HACK -DAUTO_RESIZE -DLIBDIR=\"/usr/lib/news\" -DSPOOLDIR=\"/usr/spool/news\"' \
			 LIBS="-lcurses" \
			 EXE=tin linkit

# THE FOLLOWING ARE SITE SPECIFIC - IGNORE
norisc:
	@echo "Compiling for NORISC with NNTP..."
	@$(MAKE) CFLAGS='-c -O -DBSD -DDEBUG -DLOG_USER -DUSE_NNTP -DAUTO_RESIZE -DLIBDIR=\"/news/lib\" -DSPOOLDIR=\"/news/spool\"' \
			NNTPLIB=/news/nntp/clientlib.o \
			LIBS="-lcurses -ltermcap" \
			EXE=tin linkit

sony01:
	@echo "Compiling for SONY01..."
	@$(MAKE) CFLAGS='-c -g -DBSD -DDEBUG -DLOG_USER -DLIBDIR=\"/a/NEWS/lib\" -DSPOOLDIR=\"/a/NEWS/news\"' \
			LIBS="-lcurses -ltermcap" \
			EXE=tin linkit

kommu:
	@echo "Compiling for KOMMU with NNTP..."
	@$(MAKE) CFLAGS='-c -O -UM_XENIX -DDEBUG -DUSE_INVERSE_HACK -DAUTO_RESIZE -DUSE_NNTP -DLIBDIR="\\"/usr/lib/news\\"" -DSPOOLDIR="\\"/usr/spool/news\\""' \
			 NNTPLIB=./clientlib.o \
			 NETLIBS="-lnsl_s -lsocket" \
			 LIBS="-lcurses -lgen -lc_s" \
			 EXE=tin linkit

# For Xenix 386:
home:
	@echo "Compiling for (HOME) Xenix 386..."
	@$(MAKE) CFLAGS='-c -W2 -Zi -DSYSV -DDEBUG -DLOG_USER -DLIBDIR="\\"/usr/lib/news\\"" -DSPOOLDIR="\\"/usr/spool/news\\""' \
			 LIBS="-lcurses -ltinfo -lx" \
			 LFLAGS=-Zi EXE=tin linkit

linkit: $(OFILES)
	@echo "Linking $(EXE)..."
	$(CC) $(LFLAGS) -o $(EXE) $(OFILES) $(NNTPLIB) $(NETLIBS) $(LIBS) 
	@ls -l $(EXE)

install:
	@echo "Installing $(EXE)..."
	@$(STRIP) $(EXE)
	@-mv $(EXE) $(BINDIR)
	@-rm $(BINDIR)/r$(EXE)
	@ln $(BINDIR)/$(EXE) $(BINDIR)/r$(EXE)
	@chmod 755 $(BINDIR)/$(EXE) $(BINDIR)/r$(EXE)  
	@ls -l $(BINDIR)/$(EXE) $(BINDIR)/r$(EXE)
	@cp $(EXE).1 $(MANDIR)

install_setuid:
	@echo "Installing SETUID $(EXE)..."
	@$(STRIP) $(EXE)
	@-mv $(EXE) $(BINDIR)
	@chown news $(BINDIR)/$(EXE) 
	@-rm $(BINDIR)/r$(EXE)
	@ln $(BINDIR)/$(EXE) $(BINDIR)/r$(EXE)
	@su news -c "chmod 4755 $(BINDIR)/$(EXE)"
	@su news -c "chmod 4755 $(BINDIR)/r$(EXE)"
	@ls -l $(BINDIR)/$(EXE) $(BINDIR)/r$(EXE)
	@cp $(EXE).1 $(MANDIR)

proto:
	@echo "Generating function prototypes for proto.h..."
#	@cextract -DSIGTSTP -DSIGWINCH $(CFILES) > PROTO.H
#	@-mv PROTO.H proto.h
	@echo "#if __STDC__" > PROTO.H
	@echo " " >> PROTO.H
	@cproto -e $(CFILES) >> PROTO.H
	@echo " " >> PROTO.H
	@echo "#else" >> PROTO.H
	@echo " " >> PROTO.H
	@cproto -e -f1 $(CFILES) >> PROTO.H
	@echo " " >> PROTO.H
	@echo "#endif" >> PROTO.H
	@-mv PROTO.H proto.h

nroff:
	@echo "Creating nroff man page..."
	@nroff -man $(EXE).1 > $(EXE).nrf

manifest:
	@echo "Creating MANIFEST..."
	@echo "MANIFEST for tin newsreader (`date`)" > MANIFEST
	@echo "----------------------------------------------------------" >> MANIFEST
	@wc -c $(SUPPORT) $(HFILES) $(CFILES) >> MANIFEST

shar:
	@echo "Generating shell archive..."
	@make nroff
	@make manifest
	@shar -a -n $(EXE)1.1 -s $(MAIL_ADDR) -L50 -o ../$(EXE).shar $(SUPPORT) $(CFILES) $(HFILES)

uuencode:
	@make tar
	@echo "Uuencoding $(EXE).tar.Z..."
	@uuencode $(EXE).tar.Z $(EXE).tar.Z > $(EXE).tar.Z.uue
	@ls -l $(EXE).tar.Z.uue
 
diff:
	@echo "Generating diffs against $(BASE_VER)..."
	@make nroff
	@make manifest
	@-mv -f $(EXE).diff $(EXE).diff-
	@-diff -rcs $(BASE_VER) . > $(EXE).diff
	@ls -l $(EXE).diff

patch:
	@make diff
	@echo "Generating patch against $(BASE_VER)..."
	@-mv $(EXE).diff $(EXE).patch$(PATCH_VER)
	@shar -a -n $(EXE) -s $(MAIL_ADDR) -L50 -o patch$(PATCH_VER).shar $(EXE).patch$(PATCH_VER)
	@ls -l patch$(PATCH_VER).shar*

tar:
	@echo "Generating compressed tar file..."
	@-rm $(EXE).tar $(EXE).tar.Z > /dev/null 2>&1
	@tar cvf $(EXE).tar $(SUPPORT) $(CFILES) $(HFILES) 
	@echo "Compressing $(EXE).tar..."
	@compress $(EXE).tar 
	@ls -l $(EXE).tar.Z

zoo:
	@echo "Generating zoo archive file..."
	@-rm $(EXE).zoo > /dev/null 2>&1
	@zoo ah $(EXE).zoo  $(SUPPORT) $(CFILES) $(HFILES)
	@ls -l $(EXE).zoo

tags:
	@echo "Generating tags (results in ./tags)..."
	@-rm tags
	@ctags $(HFILES) $(CFILES) 

lint:
	@echo "Linting source (results in ./LINT)..."
	@lint $(LINTFLAGS) -DUSE_NNTP $(CFILES) > LINT

clean:
	@echo "Cleaning..."
	@-'rm' -rf $(OFILES) '#*' $(EXE).diff*

clobber:
	@echo "Clobbering..."
	@-'rm' -rf $(OFILES) '#*' tags $(EXE) $(EXE).diff* patch.shar*

cflow:
	@echo "Creating cflow for $(EXE)..."
	@cflow $(CFILES) > cflow.$(EXE) &

man:
	@echo "Printing $(EXE) manual to $(PRINT)..."
	@$(ROFF) $(PRINT) $(EXE).1

print:
	@for FILE in $(HFILES) $(CFILES) $(SUPPORT); do \
	echo "Printing $$FILE to $(PRINT)..."; \
	expand -4 $$FILE | enscript -2r -h -G $(PRINT) -b $$FILE; \
	done

art.o:		art.c $(HFILES)
curses.o:	curses.c $(HFILES)
debug.o:	debug.c $(HFILES)
feed.o:		feed.c $(HFILES)
getline.o:	getline.c $(HFILES)
group.o:	group.c $(HFILES)
hashstr.o:	hashstr.c $(HFILES)
help.o:		help.c $(HFILES)
init.o:		kill.c $(HFILES)
kill.o:		kill.c $(HFILES)
lang.o:		lang.c $(HFILES)
main.o:		main.c $(HFILES)
memory.o:	memory.c $(HFILES)
misc.o:		misc.c $(HFILES)
newsrc.o:	newsrc.c $(HFILES)
open.o:		open.c nntp.h
page.o:		page.c $(HFILES)
post.o:		post.c $(HFILES)
prompt.o:	prompt.c $(HFILES)
rcfile.o:	rcfile.c $(HFILES)
save.o:		save.c $(HFILES)
screen.o:	screen.c $(HFILES)
search.o:	search.c $(HFILES)
select.o:	select.c $(HFILES)
signal.o:	signal.c $(HFILES)
thread.o:	thread.c $(HFILES)
wildmat.o:	wildmat.c
