# drealmBBS - Bulletin Board System for Linux
# Copyright (C) 1994, 1995  Inge Cubitt and Peter Jones
# 
# 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 2 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., 675 Mass Ave, Cambridge, MA 02139, USA.
# 
# The GNU General Public License should be in a file called COPYING.
#

# You need GNU Make - sorry, but it's a great time-saver



# Type "make svr42 bin" for SysVr4.2 with AT&T compiler
# Type "make gcc42 bin" for SysVr4.2 with GCC
# Type "make linux bin" for Linux
# Then install from ../bin as described in ../doc/install.doc

# Alternatively, remove the '#' from the start of one of the #SYSTEM= lines
# below and do "make bin".
# Then follow the instructions in ../doc/install.doc
# You should not need to change anything else.
#SYSTEM=SVR42# AT&T Unix System V Release 4.2 with CCS 2.0 (standard compiler)
#SYSTEM=GCC42# AT&T Unix System V Release 4.2 with GCC 2.5.8
SYSTEM=LINUX# Linux 1.2.9, libc4.5.26 with GCC 2.5.8

# -----------------------------------------------------------------------------

# Do not use this one, it won't help you.
# It just means we can do "make live" on our system.
#SYSTEM=DEVEL
#DEVEL=GCC42
DEVEL=LINUX

# AT&T Unix System V Release 4.2 with CCS 2.0 (standard compiler)
INSTSVR42=bin
TGTSVR42=$(TARGETS)
CC_SVR42=cc $(LLSVR42)
OPTSVR42=-O -Knoieee
CPPSVR42=
LDSVR42=-O
LIBSVR42=-lsocket -lnsl -lgen -lmalloc
SELSVR42=drealm_select.c
CURSVR42=-lcurses
MDSVR42=makedepend
S1SVR42=strip
S2SVR42=mcs -d
LINTSVR42=lint $(LLSVR42)
LFSVR42=-p -Dlint
LLIBSVR42=$(LDLIBS) $(CURSES)
LLSVR42=-Xc -v
TARSVR42=tar cvf /dev/rdsk/f0t

# AT&T Unix System V Release 4.2 with GCC 2.5.8
# (just like normal except the compiler - use the LINUX versions)
INSTGCC42=$(INSTSVR42)
TGTGCC42=$(TGTSVR42)
CC_GCC42=gcc $(LLLINUX)
OPTGCC42=$(OPTLINUX)
CPPGCC42=-DSVR42
LDGCC42=$(LDLINUX)
LIBGCC42=$(LIBSVR42)
SELGCC42=$(SELSVR42)
CURGCC42=$(CURSVR42)
MDGCC42=$(MDLINUX)
S1GCC42=$(S1SVR42)
S2GCC42=$(S2SVR42)
LINTGCC42=$(LINTSVR42)
LFGCC42=$(LFSVR42)
LLIBGCC42=$(LLIBSVR42)
LLGCC42=$(LLSVR42)
TARGCC42=$(TARSVR42)

# Linux 1.2.8 with GCC 2.5.8 and libc 4.5.26
INSTLINUX=bin
TGTLINUX=$(TARGETS)
CPPLINUX=# -DLINUX_WITH_DGRAMS#(one day, when 1.3.x arrives...)
CC_LINUX=cc $(LLLINUX)
OPTLINUX=-O2 -ffast-math
LDLINUX=-O2 -s
LIBLINUX=
SELLINUX=
# Rather than use TERMCAP, get ncurses-1.9.0c or later
# (point your browser at ftp://ftp.netcom.com/pub/zm/zmbenhal/ncurses/)
ifndef TERMCAP
CPPLINUX += -I/usr/include/ncurses
CURLINUX=-lncurses
else
CPPLINUX += -DTERMCAP
CURLINUX=-lcurses -ltermcap
endif
MDLINUX=$(CC) $(CFLAGS) $(CPPFLAGS) -MM
S1LINUX=:
S2LINUX=:
LINTLINUX=cc -fsyntax-only $(LLLINUX)
LFLINUX=-Wparentheses -Wtraditional -Wshadow -Wcast-qual -Wwrite-strings -Wconversion -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wnested-externs
LLIBLINUX=
LLLINUX=-Wall -Wno-parentheses -Wpointer-arith -Wcast-align -Winline -pipe
TARLINUX=tar cvf /dev/fd0

# Options for developers' use
INSTDEVEL=live
TGTDEVEL=$(TGT$(DEVEL))
CC_DEVEL=$(CC_$(DEVEL))
OPTDEVEL=-g#$(OPT$(DEVEL))
CPPDEVEL=$(CPP$(DEVEL)) -D$(DEVEL) $(DEFS)# from command line
LDDEVEL=-g#$(LD$(DEVEL))
LIBDEVEL=$(LIB$(DEVEL))
SELDEVEL=$(SEL$(DEVEL))
CURDEVEL=$(CUR$(DEVEL))
MDDEVEL=$(MD$(DEVEL))
S1DEVEL=$(S1$(DEVEL))
S2DEVEL=$(S2$(DEVEL))
LINTDEVEL=$(LINT$(DEVEL))
LFDEVEL=$(LF$(DEVEL))
LLIBDEVEL=$(LLIB$(DEVEL))
TARDEVEL=$(TAR$(DEVEL))

INSTALL=$(INST$(SYSTEM))
DEFAULT=$(TGT$(SYSTEM))
CC=$(CC_$(SYSTEM))
CFLAGS=$(OPT$(SYSTEM))
CPPFLAGS=$(PACKAGES) $(CPP$(SYSTEM)) -D$(SYSTEM)
LDFLAGS=$(LD$(SYSTEM))
LDLIBS=$(LIB$(SYSTEM))
SELECT=$(SEL$(SYSTEM))
CURSES=$(CUR$(SYSTEM))
MAKEDEP=$(MD$(SYSTEM))
STRIP1=$(S1$(SYSTEM))
STRIP2=$(S2$(SYSTEM))
LINT=$(LINT$(SYSTEM))
LINTFLAGS=$(LF$(SYSTEM))
LINTLIBS=$(LLIB$(SYSTEM))
TAR=$(TAR$(SYSTEM))

# -----------------------------------------------------------------------------

# You can use this to tailor what is included.  The source as distributed
# manages the inter-package dependencies.  We recommend you use everything.
# (We haven't tested in any other configuration.)
PACKAGES=-DREAD_COMMANDS -DMAIL_COMMANDS -DFILE_COMMANDS \
	-DCHAT_COMMANDS -DTIMER_COMMANDS $(LOCAL_PACKS)

# If you add new packages, use these:
LOCAL_PACKS=# Override on command line - see ``ours'' target
LPOBJS=# Override on command line - see ``ours'' target

# ---- You really shouldn't need to fiddle with anything else at all ----

OBJS=drealm.o \
	mainfuncs.o inputfuncs.o configfuncs.o setupfuncs.o chatfuncs.o \
	timerfuncs.o readfuncs.o mailfuncs.o filefuncs.o olrfuncs.o \
	getvalf.o getmemb.o slist.o sendmail.o sendmess.o $(KEY) $(LPOBJS)

SRCS=genfuncs.c drealmgen.c drealm_sig.c $(SELECT) \
	$(patsubst %.o,%.c,$(OBJS)) \
	display.c displaymail.c displaymsg.c chatout.c timer.c \
	pager.c isle.c longname.c stats.c \
	zapuser.c adduser.c remuser.c username.c setpwd.c \
	filetidy.c mailtidy.c

LIBSONLY=drealmBBS chatout timer
CURSONLY=displaymsg displaymail longname pager

TARGETS=$(DREALM) $(BBS) $(ROOTBBS) $(ROOT) $(OTHER)
DREALM=drealmBBS
OTHER=pager isle
BBS=displaymail displaymsg chatout timer longname \
	stats filetidy mailtidy
ROOTBBS=zapuser adduser remuser setpwd
ROOT=username

INSTTARGETS=$(patsubst %,I%,$(TARGETS))
LINTTARGETS=$(patsubst %,L%,$(TARGETS))

# -----------------------------------------------------------------------------
GID=bbs
DREALMDIR=/drealm
BBSDIR=/drealm/Bin
OTHERDIR=/usr/local/bin
MD='@:'
TGT=none
# -----------------------------------------------------------------------------

default: $(DEFAULT)

ours:
	$(MAKE) LOCAL_PACKS=-DOUR_COMMANDS LPOBJS=ourfuncs.o

svr42:
	@-$(RM) depend
	$(MAKE) SYSTEM=SVR42

gcc42:
	@-$(RM) depend
	$(MAKE) SYSTEM=GCC42

linux:
	@-$(RM) depend
	$(MAKE) SYSTEM=LINUX

devel:
	@-$(RM) depend
	$(MAKE) SYSTEM=DEVEL

debug:
	$(MAKE) CFLAGS=-g LDFLAGS=-g STRIP1=: STRIP2=:

deb-mall:
	$(MAKE) CFLAGS=-g LDFLAGS=-g STRIP1=: STRIP2=: "LIBSVR42=-lsocket -lnsl -lgen -ldebmall"

none:
	@echo ""
	@echo There is no SYSTEM specified.
	@echo Please do \`make SYSTEM=system\', where \`system\' is
	@echo SVR42 or LINUX
	@false

$(LIBSONLY):
	$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@
	@-$(STRIP1) $@; $(STRIP2) $@

$(CURSONLY):
	$(LINK.o) $^ $(CURSES) -o $@
	@-$(STRIP1) $@; $(STRIP2) $@

%: %.o
	$(LINK.o) $^ -o $@
	@-$(STRIP1) $@; $(STRIP2) $@

drealmBBS: $(OBJS) drealmgen.o genfuncs.o drealm_sig.o $(patsubst .c,.o,$(SELECT))
chatout: chatout.o drealm_sig.o
timer: timer.o drealm_sig.o
displaymail: display.o displaymail.o
displaymsg: display.o displaymsg.o
longname: longname.o
pager: display.o pager.o

isle: isle.o genfuncs.o
zapuser: zapuser.o
adduser: adduser.o
remuser: remuser.o
username: username.o
setpwd: setpwd.o
stats: stats.o configfuncs.o drealmgen.o genfuncs.o
filetidy: filetidy.o configfuncs.o drealmgen.o genfuncs.o
mailtidy: mailtidy.o configfuncs.o drealmgen.o genfuncs.o
lastcalls: lastcalls.o configfuncs.o drealmgen.o genfuncs.o
menutest: menutest.o genfuncs.o
relogin: relogin.o genfuncs.o
beeper: beeper.o drealm_sig.o
newacc: newacc.o

# This is a temporary export job that gets left in Source and not used for
# anything else at all.
delim: delim.o configfuncs.o drealmgen.o genfuncs.o
# So's this.
details: details.o configfuncs.o drealmgen.o genfuncs.o

# Header dependencies are here
include depend
# Here's how to make depend, if it's missing
depend: $(SRCS)
	$(MAKEDEP) $(SRCS) > X$@
	mv X$@ $@

# -----------------------------------------------------------------------------
install: $(INSTALL)

bin: $(TARGETS)
	@-mkdir ../bin 2>&1
	cp $(TARGETS) ../bin

live: Idrealm Ibbs Irootbbs Iroot Iother

Idrealm: $(DREALM)
	@-cd $(DREALMDIR); cp $^ $(BBSDIR)OLD 2>&1
	cp $^ $(DREALMDIR)
	@-cd $(DREALMDIR); chgrp $(GID) $^ 2>&1
	@-cd $(DREALMDIR); chmod 03711 $^ 2>&1

Ibbs: $(BBS)
	@-cd $(BBSDIR); cp $^ $(BBSDIR)OLD 2>&1
	cp $^ $(BBSDIR)
	@-cd $(BBSDIR); chgrp $(GID) $^ 2>&1
	@-cd $(BBSDIR); chmod 0710 $^ 2>&1

Irootbbs: $(ROOTBBS)
	@-cd $(BBSDIR); cp $^ $(BBSDIR)OLD 2>&1
	cp $^ $(BBSDIR);
	@-cd $(BBSDIR); chgrp $(GID) $^ 2>&1
	@-cd $(BBSDIR); chown root $^ 2>&1
	@-cd $(BBSDIR); chmod 06710 $^ 2>&1

Iroot: $(ROOT)
	@-cd $(BBSDIR); cp $^ $(BBSDIR)OLD 2>&1
	cp $^ $(BBSDIR);
	@-cd $(BBSDIR); chown root $^ 2>&1
	@-cd $(BBSDIR); chmod 04710 $^ 2>&1

Iother: $(OTHER)
	@-cd $(OTHERDIR); cp $^ $(BBSDIR)OLD 2>&1
	cp $^ $(OTHERDIR);
	@-cd $(OTHERDIR); chmod 0711 $^ 2>&1

# -----------------------------------------------------------------------------
.PHONY: clean objclean offtarget realclean distclean
clean:
	$(RM) core .?*~ *~

objclean:
	$(RM) *.o

offtarget:
	$(RM) $(TARGETS)

realclean: clean objclean lintclean offtarget
# If you are having problems with depend, uncomment this and ``make realclean''
#	@touch *.c *.h

distclean: realclean
	$(RM) depend Xdepend

# -----------------------------------------------------------------------------
.PHONY: lint lintclean
lint: $(LINTTARGETS)

lintclean:
	$(RM) $(LINTTARGETS) *.ln

LdrealmBBS: $(patsubst %.o,%.ln,$(OBJS)) genfuncs.ln drealmgen.ln drealm_sig.ln
	@echo ""
	$(LINT) $(LINTFLAGS) $(CPPFLAGS) $^ $(LOADLIBES) $(LINTLIBS) \
		-o x
	mv llib-lx.ln $@

L%: %.c
	@echo ""
	$(LINT) $(LINTFLAGS) $(CPPFLAGS) $^ $(LOADLIBES) $(LINTLIBS) \
		-o x
	mv llib-lx.ln $@

L%: %.ln
	@echo ""
	$(LINT) $(LINTFLAGS) $(CPPFLAGS) $^ $(LOADLIBES) $(LINTLIBS) \
		-o x
	mv llib-lx.ln $@

%.ln: %.c
	@echo ""
	$(LINT) $(LINTFLAGS) $(CPPFLAGS) -c $^

Ldisplaymail Ldisplaymsg Lpager: display.ln
#Llongname: longname.ln
Lisle Lrelogin Lmenutest: genfuncs.ln
Lstats Lfiletidy Lmailtidy Llastcalls: configfuncs.ln genfuncs.ln drealmgen.ln
Lchatout Ltimer Lbeeper: drealm_sig.ln
# -----------------------------------------------------------------------------

save:
	$(TAR) Makefile mf.ccs *.[ch] makedepend
