#
# Makefile for ce
#
# `make' makes the tty version
# `make x11' makes the X11 version
#
# Chet Ramey
# chet@ins.CWRU.Edu
#
PROG=		ce
XPROG=		xce
TEACHCE=	teach-ce
BACKUP=		ce.bak

#DEBUG=		-g
OPT=		-O
CFLAGS=		$(DEBUG) $(OPT) -DLIBDIR=\"$(DOCDIR)\"
LDFLAGS=	$(DEBUG) $(OPT)
#
# System V will probably need -lcurses, perhaps -ltinfo
#
LIBS=		-ltermcap 
XLIBS=		-lX11
LINTFLAGS=	-chx
CC=		cc
DESTDIR=	/usr/local/bin
MANDIR=		/usr/local/man/man1

RM=		rm -f
MV=		mv
PR=		pr
LPR=		lpr

#
# Systems like the NeXT that cannot use a non-libc malloc should comment
# this line out
#
MALLOC=		malloc.o

# DOCDIR must agree with the definition for LIBDIR in the source (see ce.h)
DOCDIR=		/usr/local/lib/ce

OFILES=		basic.o bind.o buffer.o cinfo.o complete.o dir.o \
		file.o fileio.o fio.o func.o help.o key.o line.o ml.o \
		paragraph.o paren.o random.o regexp.o region.o rsearch.o \
		search.o window.o word.o misc.o bug.o cmode.o $(MALLOC)

CFILES=		basic.c bind.c buffer.c bug.c cinfo.c cmode.c \
		complete.c dir.c display.c file.c fileio.c fio.c func.c \
		help.c key.c line.c main.c malloc.c misc.c ml.c \
		paragraph.c paren.c random.c regexp.c region.c rsearch.c \
		search.c spawn.c tty.c ttyio.c version.c window.c word.c \
		x11.c

HFILES=		ce.h regexp.h externs.h
MISC=		
DOCFILES=	doc/FUNCTIONS doc/TUTORIAL doc/ce.1 doc/ce.help doc/ce.key \
		doc/xce.1

SRCS=		$(CFILES) $(MISC) $(HFILES)

VERS=	vers.o
XVERS=	xvers.o

XFILES=	xspawn.o x11.o xdisplay.o xmain.o xversion.o
TFILES= spawn.o tty.o ttyio.o display.o main.o version.o

.c.o:
	$(RM) $@
	$(CC) $(CFLAGS) $(XFLAGS) -c $<

# tty version-specific rules
all:	$(PROG)

$(PROG):	$(OFILES) $(TFILES) .build
		$(RM) $@
		$(CC) $(LDFLAGS) -o $@ $(OFILES) $(TFILES) $(VERS) $(LIBS)
		chmod 755 $@
		size $@
		ls -l $@

.build:		$(CFILES)
		bash newvers.sh
		$(CC) $(CFLAGS) -c vers.c
		touch $@

# X11 version-specific rules
x11:
	${MAKE} ${MFLAGS} ${XPROG} XFLAGS=-DX11

$(XPROG):	$(OFILES) $(XFILES) .xbuild
		$(RM) $@
		$(CC) $(LDFLAGS) -o $@ $(OFILES) $(XFILES) $(XVERS) $(XLIBS)
		chmod 755 $@
		size $@
		ls -l $@

.xbuild:		$(CFILES)
		sh newvers.sh x11
		$(CC) $(CFLAGS) -c xvers.c
		touch $@

xdisplay.o:	display.c
	-mv display.o foodisp
	$(CC) -DX11 $(CFLAGS) -c display.c
	mv display.o xdisplay.o
	-mv foodisp display.o

xmain.o:	main.c
	-mv main.o foomain
	$(CC) $(CFLAGS) $(XFLAGS) -c main.c
	mv main.o xmain.o
	-mv foomain main.o

xspawn.o:	spawn.c
	-mv spawn.o foospawn
	$(CC) $(CFLAGS) $(XFLAGS) -c spawn.c
	mv spawn.o xspawn.o
	-mv foospawn spawn.o

xversion.o:	version.c
	-mv version.o fooversion
	$(CC) $(CFLAGS) $(XFLAGS) -c version.c
	mv version.o xversion.o
	-mv fooversion version.o

# Common rules for all versions
lint:
		lint $(LINTFLAGS) $(SRCS)

print:
		$(PR) $(SRCS) | ${LPR}

clean:
		$(RM) *~ core *.bak

clobber:	clean
		$(RM) $(PROG) $(OFILES)

backup:
		$(MV) $(PROG) $(BACKUP)

depend:
		makedepend -- $(CFLAGS) -- $(CFILES)

install:
		rm -f ${DESTDIR}/${PROG} ${DESTDIR}/${XPROG}
		cp $(PROG) ${XPROG} $(DESTDIR)
		strip ${DESTDIR}/${PROG} ${DESTDIR}/${XPROG}
		cp $(TEACHCE) $(DESTDIR)

doc-install:	man-install
		test -d $(DOCDIR) || mkdir $(DOCDIR)
		install -c -m 0666 -o root doc/TUTORIAL $(DOCDIR)
		install -c -m 0444 -o root doc/ce.help  $(DOCDIR)
		install -c -m 0444 -o root doc/FUNCTIONS $(DOCDIR)

man-install:
		test -d $(MANDIR) || mkdir $(MANDIR)
		install -c -m 0644 doc/ce.1 $(MANDIR)
		install -c -m 0644 doc/xce.1 $(MANDIR)

#
# if range checking is desired, add -Drcheck=1 to the flags for malloc.o
#
malloc.o:	malloc.c
	$(RM) $@
	$(CC) $(CFLAGS) -DM_WARN -c malloc.c

# DO NOT DELETE THIS LINE -- make depend depends on it.

basic.o: ce.h copyright.h conf.h
bind.o:  ce.h copyright.h conf.h
buffer.o:  ce.h copyright.h conf.h
bug.o:  ce.h copyright.h conf.h
cinfo.o: ce.h copyright.h conf.h
cmode.o:  ce.h copyright.h conf.h
complete.o: ce.h copyright.h conf.h 
dir.o: ce.h copyright.h conf.h
display.o: ce.h copyright.h conf.h
file.o:  ce.h copyright.h conf.h
fileio.o: ce.h copyright.h conf.h fio.h
fio.c: ce.h fio.h
func.o: ce.h copyright.h conf.h externs.h
help.o:  ce.h copyright.h conf.h
key.o: ce.h copyright.h conf.h externs.h
line.o: ce.h copyright.h conf.h
main.o:  ce.h copyright.h conf.h
malloc.o: conf.h
ml.o:  ce.h copyright.h conf.h
paragraph.o:  ce.h copyright.h conf.h
paren.o: ce.h copyright.h conf.h
random.o:  ce.h copyright.h conf.h
regexp.o:  regexp.h
region.o:  ce.h copyright.h conf.h
rsearch.o:  ce.h copyright.h conf.h regexp.h
search.o: ce.h copyright.h conf.h
spawn.o:  ce.h copyright.h conf.h
tty.o: ce.h copyright.h conf.h
ttyio.o:  ce.h copyright.h conf.h
window.o:  ce.h copyright.h conf.h
word.o:  ce.h copyright.h conf.h
xdisplay.o: ce.h copyright.h conf.h
xmain.o:  ce.h copyright.h conf.h
xspawn.o:  ce.h copyright.h conf.h
