#**************************************************************
#*
#*	CRISP - Custom Reduced Instruction Set Programmers Editor
#*
#*	(C) Paul Fox, 1988, 1989, 1990, 1991
#*
#*    Please See COPYRIGHT notice.
#*
#*    Version %R%.%L%
#*
#**************************************************************/
# Please modify machine.h before trying to make. Also copy a correct
# s-* file to s-machine. Then try typing 'make install' for a complete
# make. You will need to modify BINDIR below, and possibly hack
# the s-machine file for your own private linker options, compile flags
# etc. You may also need to modify the makefile in src/crunch if
# the target directories are no good.
#
#		MODIFY THE FOLLOWING AS NECESSARY
#		=================================
#
# ROOT is the base directory for finding the help and macro
# files. You can leave this untouched and use the BPATH
# environment variable instead.
#
ROOT=-DROOT=\"/usr/local/lib/crisp\"

#
# BINDIR is where to put the executables so they will be found in
# the path.
#
BINDIR=/usr/local/bin
#
# CRISP_ROOT is the top level directory where the help and macros
# are to be installed.
CRISP_ROOT=/usr/local/lib/crisp
#################################################################
O	= o	# Default for DOS & OS/2
MATH_LIB= -lm
OBJDIR	= obj
CFLAGS	= $(G) $(ROOT) $(NO_FLOAT_MATH)
TARGET	= cr
L	= lib
LIB1	= $(L)/splay.a $(L)/llist.a $(L)/foxlib.a 
LIBS    = $(LIB1) $(MALLOC) $(MATH_LIB) $(SHLIB) 
SHELL	=	/bin/sh
RANLIB	=	echo
##########################################
# System Independant Definitions.
##########################################
H	= def.h list.h machine.h

SRC	= 	[A-Z]* *.h *.c m-* s-*
CM_OBJ=	$(OBJDIR)/cm.$(O) $(OBJDIR)/common.$(O) $(OBJDIR)/cm_keywd.$(O) \
	$(OBJDIR)/language.$(O) $(OBJDIR)/word.$(O)
OBJ	=	\
	$(OBJDIR)/accum.$(O) \
	$(OBJDIR)/anchor.$(O) $(OBJDIR)/basic.$(O) $(OBJDIR)/bookmark.$(O) \
	$(OBJDIR)/buffer.$(O) $(OBJDIR)/builtin.$(O) $(OBJDIR)/common.$(O) \
	$(OBJDIR)/config.$(O) $(OBJDIR)/debug.$(O) $(OBJDIR)/display.$(O) \
	$(OBJDIR)/echo.$(O) $(OBJDIR)/env.$(O) $(OBJDIR)/eval.$(O) \
	$(OBJDIR)/file.$(O) $(OBJDIR)/float.$(O) \
	$(OBJDIR)/getcwd.$(O) $(OBJDIR)/getkey.$(O) $(OBJDIR)/kbd.$(O) \
	$(OBJDIR)/kbdmap.$(O) $(OBJDIR)/keywd.$(O) \
	$(OBJDIR)/kill.$(O) $(OBJDIR)/language.$(O) \
	$(OBJDIR)/line.$(O) $(OBJDIR)/lisp.$(O)  \
	$(OBJDIR)/m_buf.$(O) $(OBJDIR)/m_msg.$(O) $(OBJDIR)/mac1.$(O) $(OBJDIR)/macros.$(O) \
	$(OBJDIR)/main.$(O) $(OBJDIR)/map.$(O) $(OBJDIR)/math.$(O) \
	$(OBJDIR)/mouse.$(O) $(OBJDIR)/playback.$(O) \
	$(OBJDIR)/pty.$(O) $(OBJDIR)/refstr.$(O) $(OBJDIR)/regexp.$(O) \
	$(OBJDIR)/region.$(O) $(OBJDIR)/register.$(O) $(OBJDIR)/search.$(O) \
	$(OBJDIR)/spawn.$(O) $(OBJDIR)/symbol.$(O) $(OBJDIR)/system.$(O) \
 	$(OBJDIR)/termcap.$(O) \
	$(OBJDIR)/tty.$(O) $(OBJDIR)/undo.$(O) \
	$(OBJDIR)/version.$(O) $(OBJDIR)/wild.$(O) $(OBJDIR)/window.$(O) \
	$(OBJDIR)/word.$(O) 


MARKER	= lib/__Foxlib lib/__Llist lib/__Splay

# Main entry point to build everything.
all:	lib obj macros crisp binary

lib:
	-mkdir lib
obj:
	-mkdir obj
macros:
	-mkdir macros

# Entry point to build the help and macros when moving a binary
# distribution around. Mostly used by myself to get it to fit on
# a single floppy.
binary:
	. ./s-machine ; cd src/crunch ; $(MAKE)
	. ./s-machine ; cd help ; $(MAKE)

# This entry is a quicker make for my personal use.
crisp:	
	. ./s-machine ; $(MAKE) all1
	
install:	all $(BINDIR)/cr $(BINDIR)/cm $(BINDIR)/crunch $(BINDIR)/ninfo
	rm -rf $(CRISP_ROOT)/help $(CRISP_ROOT)/macros
	tar cf - help | (cd $(CRISP_ROOT) ; tar xvfo - )
	tar cf - macros | (cd $(CRISP_ROOT) ; tar xvfo - )
	tar cf - utils/termcap utils/keyboard.fox | (cd $(CRISP_ROOT) ; tar xvfo - )
$(BINDIR)/cr:	cr
	cp cr $(BINDIR)
$(BINDIR)/cm:	cm
	cp cm $(BINDIR)
$(BINDIR)/crunch:	crunch/crunch
	cp crunch/crunch $(BINDIR)
$(BINDIR)/ninfo:	ninfo
	cp ninfo $(BINDIR)
#####################################################################
#### DONT TOUCH ANYTHING BELOW THIS LINE ############################
#####################################################################
all1:	$(MARKER) $(TARGET) cm ninfo
	cd crunch ; $(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS) -I../foxlib -I../llist"

lib/__Foxlib:	$(L)/foxlib.a
	touch lib/__Foxlib
$(L)/foxlib.a:
	cd foxlib ; $(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)"

lib/__Llist:	$(L)/llist.a
	touch lib/__Llist
$(L)/llist.a:
	cd llist ; $(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)"

lib/__Splay:	$(L)/splay.a
	touch lib/__Splay
$(L)/splay.a:
	cd splay ; $(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)"

clean:
	-rm -f crisp.log a.out core
	-rm -f cm ninfo cr
	-rm -f lib/*
	-rm -f obj/* 
	-rm -f *.$(O)
	-cd macros ; rm -f *
	-cd macros ; rm -f */*
	cd crunch ; $(MAKE) clean
	cd help ; $(MAKE) clean
	
$(TARGET):	$(OBJ) $(MARKER)
	$(CC) $(PROF) $(LDFLAGS) $(CFLAGS) $(SEG) -o $(TARGET) $(OBJ) $(LIBS) $(LIB2)

$(OBJDIR)/accum.$(O):	$(H) accum.c 
	$(CC) $(CFLAGS) -c accum.c
	mv accum.$(O) $(OBJDIR)
$(OBJDIR)/anchor.$(O):	$(H) anchor.c 
	$(CC) $(CFLAGS) -c anchor.c
	mv anchor.$(O) $(OBJDIR)
$(OBJDIR)/basic.$(O):	basic.c $(H)
	$(CC) $(CFLAGS) -c basic.c
	mv basic.$(O) $(OBJDIR)
$(OBJDIR)/bookmark.$(O):	bookmark.c $(H)
	$(CC) $(CFLAGS) -c bookmark.c
	mv bookmark.$(O) $(OBJDIR)
$(OBJDIR)/buffer.$(O):	buffer.c $(H)
	$(CC) $(CFLAGS) -c buffer.c
	mv buffer.$(O) $(OBJDIR)
$(OBJDIR)/builtin.$(O):	builtin.c $(H)
	$(CC) $(CFLAGS) -c builtin.c
	mv builtin.$(O) $(OBJDIR)
$(OBJDIR)/clock.$(O):	clock.c $(H)
	$(CC) $(CFLAGS) -c clock.c
	mv clock.$(O) $(OBJDIR)
$(OBJDIR)/cm.$(O):	cm.c $(H)
	$(CC) -DNOFUNCTIONS $(CFLAGS) -c cm.c
	mv cm.$(O) $(OBJDIR)/cm.$(O)
$(OBJDIR)/common.$(O):	common.c $(H)
	$(CC) $(CFLAGS) -c common.c
	mv common.$(O) $(OBJDIR)
$(OBJDIR)/config.$(O):	config.c $(H)
	$(CC) $(CFLAGS) -c config.c
	mv config.$(O) $(OBJDIR)
$(OBJDIR)/debug.$(O):	debug.c $(H)
	$(CC) $(CFLAGS) -c debug.c
	mv debug.$(O) $(OBJDIR)
$(OBJDIR)/display.$(O):	display.c $(H)
	$(CC) $(CFLAGS) -c display.c
	mv display.$(O) $(OBJDIR)
$(OBJDIR)/echo.$(O):	echo.c $(H)
	$(CC) $(CFLAGS) -c echo.c
	mv echo.$(O) $(OBJDIR)
$(OBJDIR)/env.$(O):	env.c $(H)
	$(CC) $(CFLAGS) -c env.c
	mv env.$(O) $(OBJDIR)
$(OBJDIR)/eval.$(O):	eval.c $(H)
	$(CC) $(CFLAGS) -c eval.c
	mv eval.$(O) $(OBJDIR)
$(OBJDIR)/file.$(O):	file.c $(H)
	$(CC) $(CFLAGS) -c file.c
	mv file.$(O) $(OBJDIR)
$(OBJDIR)/float.$(O):	float.c $(H)
	$(CC) $(CFLAGS) -c float.c
	mv float.$(O) $(OBJDIR)
$(OBJDIR)/getcwd.$(O):	getcwd.c $(H)
	$(CC) $(CFLAGS) -c getcwd.c
	mv getcwd.$(O) $(OBJDIR)
$(OBJDIR)/getkey.$(O):	getkey.c $(H)
	$(CC) $(CFLAGS) -c getkey.c
	mv getkey.$(O) $(OBJDIR)
$(OBJDIR)/kbd.$(O):	kbd.c $(H)
	$(CC) $(CFLAGS) -c kbd.c
	mv kbd.$(O) $(OBJDIR)
$(OBJDIR)/keywd.$(O):	keywd.c $(H)
	$(CC) $(CFLAGS) -c keywd.c
	mv keywd.$(O) $(OBJDIR)
$(OBJDIR)/cm_keywd.$(O):	keywd.c $(H)
	$(CC) -DNOFUNCTIONS $(CFLAGS) -c keywd.c
	mv keywd.$(O) $(OBJDIR)/cm_keywd.$(O)
$(OBJDIR)/kill.$(O):	kill.c $(H)
	$(CC) $(CFLAGS) -c kill.c
	mv kill.$(O) $(OBJDIR)
$(OBJDIR)/language.$(O):	language.c $(H) cm.h
	$(CC) $(CFLAGS) -c language.c
	mv language.$(O) $(OBJDIR)
$(OBJDIR)/line.$(O):	line.c $(H)
	$(CC) $(CFLAGS) -c line.c
	mv line.$(O) $(OBJDIR)
$(OBJDIR)/lisp.$(O):	lisp.c $(H)
	$(CC) $(CFLAGS) -c lisp.c
	mv lisp.$(O) $(OBJDIR)
$(OBJDIR)/m_buf.$(O):	m_buf.c $(H)
	$(CC) $(CFLAGS) -c m_buf.c
	mv m_buf.$(O) $(OBJDIR)
$(OBJDIR)/m_msg.$(O):	m_msg.c $(H)
	$(CC) $(CFLAGS) -c m_msg.c
	mv m_msg.$(O) $(OBJDIR)
$(OBJDIR)/mac1.$(O):	mac1.c $(H)
	$(CC) $(CFLAGS) -c mac1.c
	mv mac1.$(O) $(OBJDIR)
$(OBJDIR)/macros.$(O):	macros.c $(H)
	$(CC) $(CFLAGS) -c macros.c
	mv macros.$(O) $(OBJDIR)
$(OBJDIR)/main.$(O):	main.c $(H)
	$(CC) $(CFLAGS) -c main.c
	mv main.$(O) $(OBJDIR)
$(OBJDIR)/map.$(O):	map.c $(H)
	$(CC) $(CFLAGS) -c map.c
	mv map.$(O) $(OBJDIR)
$(OBJDIR)/math.$(O):	math.c $(H)
	$(CC) $(CFLAGS) -c math.c
	mv math.$(O) $(OBJDIR)
$(OBJDIR)/kbdmap.$(O):	kbdmap.c $(H)
	$(CC) $(CFLAGS) -c kbdmap.c
	mv kbdmap.$(O) $(OBJDIR)
$(OBJDIR)/mouse.$(O):	mouse.c $(H)
	$(CC) $(CFLAGS) -c mouse.c
	mv mouse.$(O) $(OBJDIR)
$(OBJDIR)/playback.$(O):	playback.c $(H)
	$(CC) $(CFLAGS) -c playback.c
	mv playback.$(O) $(OBJDIR)
$(OBJDIR)/pty.$(O):	pty.c $(H)
	$(CC) $(CFLAGS) -c pty.c
	mv pty.$(O) $(OBJDIR)
$(OBJDIR)/refstr.$(O):	refstr.c $(H)
	$(CC) $(CFLAGS) -c refstr.c
	mv refstr.$(O) $(OBJDIR)
$(OBJDIR)/regexp.$(O):	regexp.c $(H)
	$(CC) $(CFLAGS) -c regexp.c
	mv regexp.$(O) $(OBJDIR)
$(OBJDIR)/region.$(O):	region.c $(H)
	$(CC) $(CFLAGS) -c region.c
	mv region.$(O) $(OBJDIR)
$(OBJDIR)/register.$(O):	register.c $(H)
	$(CC) $(CFLAGS) -c register.c
	mv register.$(O) $(OBJDIR)
$(OBJDIR)/search.$(O):	search.c $(H) regexp.h
	$(CC) $(CFLAGS) -c search.c
	mv search.$(O) $(OBJDIR)
$(OBJDIR)/spawn.$(O):	spawn.c $(H)
	$(CC) $(CFLAGS) -c spawn.c
	mv spawn.$(O) $(OBJDIR)
$(OBJDIR)/symbol.$(O):	symbol.c $(H)
	$(CC) $(CFLAGS) -c symbol.c
	mv symbol.$(O) $(OBJDIR)
$(OBJDIR)/system.$(O):	system.c dos.c vms.c unix.c $(H)
	$(CC) $(CFLAGS) $(TRADITIONAL) -c system.c
	mv system.$(O) $(OBJDIR)
$(OBJDIR)/termcap.$(O):	termcap.c $(H)
	$(CC) $(CFLAGS) -c termcap.c
	mv termcap.$(O) $(OBJDIR)
$(OBJDIR)/tty.$(O):	tty.c $(H)
	$(CC) $(CFLAGS) $(TRADITIONAL) -c tty.c
	mv tty.$(O) $(OBJDIR)
$(OBJDIR)/undo.$(O):	undo.c $(H)
	$(CC) $(CFLAGS) -c undo.c
	mv undo.$(O) $(OBJDIR)
$(OBJDIR)/unix.$(O):	unix.c $(H)
	$(CC) $(CFLAGS) -c unix.c
	mv unix.$(O) $(OBJDIR)
$(OBJDIR)/version.$(O):	version.c $(H)
	$(CC) $(CFLAGS) -c version.c
	mv version.$(O) $(OBJDIR)
$(OBJDIR)/vm.$(O):	vm.c $(H)
	$(CC) $(CFLAGS) -c vm.c
	mv vm.$(O) $(OBJDIR)
$(OBJDIR)/wild.$(O):	wild.c
	$(CC) $(CFLAGS) -c wild.c
	mv wild.$(O) $(OBJDIR)
$(OBJDIR)/window.$(O):	window.c $(H)
	$(CC) $(CFLAGS) -c window.c
	mv window.$(O) $(OBJDIR)
$(OBJDIR)/word.$(O):	word.c $(H)
	$(CC) $(CFLAGS) -c word.c
	mv word.$(O) $(OBJDIR)
$(OBJDIR)/wyse.$(O):	wyse.c $(H)
	$(CC) $(CFLAGS) -c wyse.c
	mv wyse.$(O) $(OBJDIR)

lint:  
	lint -DOPCODE=int \
		accum.c anchor.c basic.c bookmark.c buffer.c \
		builtin.c  common.c config.c debug.c display.c \
		echo.c env.c eval.c file.c float.c getkey.c kbd.c kbdmap.c \
		keywd.c kill.c language.c line.c lisp.c		\
		m_buf.c m_msg.c mac1.c macros.c main.c		\
		map.c math.c mouse.c playback.c pty.c putenv.c  \
		refstr.c regexp.c region.c register.c search.c  \
		spawn.c symbol.c system.c termcap.c tty.c	\
		undo.c version.c		\
		wild.c window.c word.c
l:
	lint -DOPCODE=int accum.c

$(OBJ):         $(H)

os2:	
	$(MAKE)	MARKER= all1

ctags:
		ctags *.c
######### GNU CC compiler for me to play with.(1.39) ##########
gnu:
	$(MAKE) "CC=gcc -pipe -W -Wall -traditional -ansi -g -O" $(TARGET)


cm:	$(CM_OBJ)
	$(CC) $(CFLAGS) -DNOFUNCTIONS \
		-o cm $(OBJDIR)/cm.$(O) $(OBJDIR)/common.$(O) $(OBJDIR)/cm_keywd.$(O)  \
		$(OBJDIR)/language.$(O) $(OBJDIR)/word.$(O) \
		$(LIBS)
dos_cm:	$(CM_OBJ)

b1:
	cd .. ; find  bin/cr bin/cm bin/crunch bin/ninfo \
		crisp/alt.h crisp/Changes crisp/README crisp/copyleft \
		crisp/help crisp/utils crisp/src/crunch -type f -print | \
		grep -v help/obj/ >/tmp/files ; \
	echo bin/crttool >> /tmp/files ; \
	/usr/local/bin/gnutar -cvf cr_bin.tar -T /tmp/files ; \
	compress cr_bin.tar
b2:
	cd .. ; tar cf - bin/cr bin/xcr bin/crunch bin/cm bin/ninfo crisp/utils | \
		compress > /tmp/cr_bin.tar.Z
	cd / ; tar cf - usr/local/crisp | compress > /tmp/cr_mac.tar.Z

dos:
	$(MAKE) O=obj SHELL=cmd MARKER= CFLAGS="-O -AL -Gs -G2 -Zi" obj dos_cm
	link @os2utils\\cr.lnk
	link @os2utils\\cm.lnk

# ninfo only needed to make the help files.
ninfo:	ninfo.c
	$(CC) $(CFLAGS) -o ninfo ninfo.c $(L)/llist.a $(L)/foxlib.a
	
shar:
#	cd .. ; mkshar -o /tmp/crisp_v2 -s 50000 crisp
	touch help/obj/shar.nul obj/shar.nul macros/shar.nul \
		macros/kbd/shar.nul macros/tty/shar.nul lib/shar.nul
	find . -type f \! -name '*.o' \! -name '*.a' \! -name '__*' \
		\! -name \*.cm | \
	sort | \
	shar -M -S -n crisp_v2 -a -s fox@demon.co.uk -c -dFOX \
		-o/tmp/cr_v2 -L50
diff:
	@diff -c -r +new-file ../crisp_v2.1 . > /tmp/patch_set
src1:
	cd .. ; \
	files=`find crisp ! -name y.tab.\* ! -name .crstate ! -name \*.o ! -name \*.cm ! -name ninfo ! -name crunch ! -name cr ! -name cm -type f -print | \
		grep -v /obj/ | \
		grep -v /lib/` ; \
	tar cfv crisp.tar $$files 
gsrc:
	cd .. ; \
	find crisp ! -name y.tab.\* ! -name .crstate ! -name \*.o ! -name ninfo \
		! -name crunch ! -name cr ! -name cm ! -name prim.0\* \
		! -name __\* ! -name gen.h ! -name core ! -name \*.cm -type f -print | \
		grep -v /lib/ | grep -v help/obj/ | sort >/tmp/files ; \
	/usr/local/bin/gnutar -cvf crisp.tar -T /tmp/files 
