#
# Makefile for VIM on the Amiga, using SAS/Lattice C 6.0 to 6.56
#
# Do NOT use the peephole optimizer with a version before 6.55!
# It messes up all kinds of things:
# For 6.0 and 6.1, expand_env() will not work correctly.
# For 6.2 and 6.3 the call to free_line in u_freeentry is wrong.
# Don't know about 6.50, might work...
# Version 6.56 seems to be working fine.
# You should use Manx Aztec C whenever possible.
#
# The prototypes from Manx and SAS are incompatible. If the prototypes
# were generated by Manx, first do "touch *.c; make proto" before "make".
# The prototypes generated on Unix work for both.
#
# Note: Not all dependencies are included. This was done to avoid having
#       to compile everything when a global variable or function is added.

#>>>>> choose options:

### See feature.h for a list of optionals.
### Any other defines can be included here.

DEFINES = DEF=NO_ARP

#>>>>> if HAVE_TGETENT is defined objects/termlib.o has to be used
#TERMLIB = objects/termlib.o
TERMLIB =

#>>>>> choose NODEBUG for normal compiling, the other for debugging and
# profiling
# don't switch on debugging when generating proto files, it crashes the
# compiler.
DBG = NODEBUG
#DBG = DBG=SF

#>>>>> choose NOOPTPEEP for 6.0 to 6.3, NOOPT for debugging
# with version 6.55 you can probably use OPT
#OPTIMIZE=OPT
OPTIMIZE=NOOPTPEEP
#OPTIMIZE=NOOPT

#>>>>> end of choices
###########################################################################

CC = sc
GST = vim.gst
COPTS = SINT SCODE SDATA

CFLAGS = NOLINK $(OPTIMIZE) $(COPTS) DEF=AMIGA DEF=SASC $(DBG) $(DEFINES) GST=$(GST)

PROPT = DEF=PROTO GPROTO GPPARM

SRC = \
	buffer.c \
	charset.c \
	digraph.c \
	edit.c \
	eval.c \
	ex_cmds.c \
	ex_docmd.c \
	ex_getln.c \
	fileio.c \
	getchar.c \
	main.c \
	mark.c \
	memfile.c \
	memline.c \
	message.c \
	misc1.c \
	misc2.c \
	normal.c \
	ops.c \
	option.c \
	os_amiga.c \
	quickfix.c \
	regexp.c \
	screen.c \
	search.c \
	syntax.c \
	tag.c \
	term.c \
	ui.c \
	undo.c \
	window.c \
	version.c

OBJ = \
	objects/buffer.o \
	objects/charset.o \
	objects/digraph.o \
	objects/edit.o \
	objects/eval.o \
	objects/ex_cmds.o \
	objects/ex_docmd.o \
	objects/ex_getln.o \
	objects/fileio.o \
	objects/getchar.o \
	objects/main.o \
	objects/mark.o \
	objects/memfile.o \
	objects/memline.o \
	objects/message.o \
	objects/misc1.o \
	objects/misc2.o \
	objects/normal.o \
	objects/ops.o \
	objects/option.o \
	objects/os_amiga.o \
	objects/quickfix.o \
	objects/regexp.o \
	objects/screen.o \
	objects/search.o \
	objects/syntax.o \
	objects/tag.o \
	objects/term.o \
	objects/ui.o \
	objects/undo.o \
	objects/window.o \
	$(TERMLIB)

PRO = \
	proto/buffer.pro \
	proto/charset.pro \
	proto/digraph.pro \
	proto/edit.pro \
	proto/eval.pro \
	proto/ex_cmds.pro \
	proto/ex_docmd.pro \
	proto/ex_getln.pro \
	proto/fileio.pro \
	proto/getchar.pro \
	proto/main.pro \
	proto/mark.pro \
	proto/memfile.pro \
	proto/memline.pro \
	proto/message.pro \
	proto/misc1.pro \
	proto/misc2.pro \
	proto/normal.pro \
	proto/ops.pro \
	proto/option.pro \
	proto/os_amiga.pro \
	proto/quickfix.pro \
	proto/regexp.pro \
	proto/screen.pro \
	proto/search.pro \
	proto/syntax.pro \
	proto/tag.pro \
	proto/term.pro \
	proto/termlib.pro \
	proto/ui.pro \
	proto/undo.pro \
	proto/window.pro

Vim: objects $(OBJ) version.c version.h
	$(CC) $(CFLAGS) version.c OBJNAME=objects/
	$(CC) LINK $(COPTS) $(OBJ) objects/version.o $(DBG) PNAME=Vim

debug: objects $(OBJ) version.c version.h
	$(CC) $(CFLAGS) version.c OBJNAME=objects/
	$(CC) LINK $(COPTS) $(OBJ) objects/version.o $(DBG) PNAME=Vim

proto: $(GST) $(PRO)

ctags:
	csh -c ctags $(SRC) *.h

# can't use delete here, too many file names
clean:
	csh -c rm -f $(OBJ) objects/version.o objects/mkcmdtab.o \
		Vim $(GST) mkcmdtab ex_cmds.h

$(GST)  : vim.h keymap.h macros.h ascii.h term.h structs.h
	$(CC) $(CFLAGS) MGST=$(GST) vim.h

objects:
	makedir objects

###########################################################################

objects/buffer.o:	buffer.c  $(GST)
	$(CC) $(CFLAGS) buffer.c OBJNAME=objects/

proto/buffer.pro:	buffer.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/buffer.pro $(PROPT) buffer.c

objects/charset.o:	charset.c  $(GST)
	$(CC) $(CFLAGS) charset.c OBJNAME=objects/

proto/charset.pro:	charset.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/charset.pro $(PROPT) charset.c

objects/digraph.o:	digraph.c  $(GST)
	$(CC) $(CFLAGS) digraph.c OBJNAME=objects/

proto/digraph.pro:	digraph.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/digraph.pro $(PROPT) digraph.c

objects/edit.o:	edit.c  $(GST)
	$(CC) $(CFLAGS) edit.c OBJNAME=objects/

proto/edit.pro:	edit.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/edit.pro $(PROPT) edit.c

objects/eval.o:	eval.c  $(GST)
	$(CC) $(CFLAGS) eval.c OBJNAME=objects/

proto/eval.pro:	eval.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/eval.pro $(PROPT) eval.c

objects/ex_cmds.o:	ex_cmds.c  $(GST) ex_cmds.h
	$(CC) $(CFLAGS) ex_cmds.c OBJNAME=objects/

proto/ex_cmds.pro:	ex_cmds.c $(GST) ex_cmds.h
	$(CC) $(CFLAGS) GPFILE=proto/ex_cmds.pro $(PROPT) ex_cmds.c

objects/ex_docmd.o:	ex_docmd.c  $(GST) ex_docmd.h ex_cmds.h
	$(CC) $(CFLAGS) ex_docmd.c OBJNAME=objects/

proto/ex_docmd.pro:	ex_docmd.c $(GST) ex_docmd.h ex_cmds.h
	$(CC) $(CFLAGS) GPFILE=proto/ex_docmd.pro $(PROPT) ex_docmd.c

objects/ex_getln.o:	ex_getln.c  $(GST)
	$(CC) $(CFLAGS) ex_getln.c OBJNAME=objects/

proto/ex_getln.pro:	ex_getln.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/ex_getln.pro $(PROPT) ex_getln.c

objects/fileio.o:	fileio.c  $(GST)
	$(CC) $(CFLAGS) fileio.c OBJNAME=objects/

proto/fileio.pro:	fileio.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/fileio.pro $(PROPT) fileio.c

objects/getchar.o:	getchar.c  $(GST)
	$(CC) $(CFLAGS) getchar.c OBJNAME=objects/

proto/getchar.pro:	getchar.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/getchar.pro $(PROPT) getchar.c

objects/main.o:	main.c  $(GST)
	$(CC) $(CFLAGS) main.c OBJNAME=objects/

proto/main.pro:	main.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/main.pro $(PROPT) main.c

objects/mark.o:	mark.c  $(GST)
	$(CC) $(CFLAGS) mark.c OBJNAME=objects/

proto/mark.pro:	mark.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/mark.pro $(PROPT) mark.c

objects/memfile.o:	memfile.c  $(GST)
	$(CC) $(CFLAGS) memfile.c OBJNAME=objects/

proto/memfile.pro:	memfile.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/memfile.pro $(PROPT) memfile.c

objects/memline.o:	memline.c  $(GST)
	$(CC) $(CFLAGS) memline.c OBJNAME=objects/

proto/memline.pro:	memline.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/memline.pro $(PROPT) memline.c

objects/message.o:	message.c  $(GST)
	$(CC) $(CFLAGS) message.c OBJNAME=objects/

proto/message.pro:	message.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/message.pro $(PROPT) message.c

objects/misc1.o:	misc1.c  $(GST)
	$(CC) $(CFLAGS) misc1.c OBJNAME=objects/

proto/misc1.pro:	misc1.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/misc1.pro $(PROPT) misc1.c

objects/misc2.o:	misc2.c  $(GST)
	$(CC) $(CFLAGS) misc2.c OBJNAME=objects/

proto/misc2.pro:	misc2.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/misc2.pro $(PROPT) misc2.c

objects/normal.o:	normal.c  $(GST)
	$(CC) $(CFLAGS) normal.c OBJNAME=objects/

proto/normal.pro:	normal.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/normal.pro $(PROPT) normal.c

objects/ops.o:	ops.c  $(GST)
	$(CC) $(CFLAGS) ops.c OBJNAME=objects/

proto/ops.pro:	ops.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/ops.pro $(PROPT) ops.c

objects/option.o:	option.c  $(GST)
	$(CC) $(CFLAGS) option.c OBJNAME=objects/

proto/option.pro:	option.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/option.pro $(PROPT) option.c

objects/os_amiga.o:	os_amiga.c  $(GST)
	$(CC) $(CFLAGS) os_amiga.c OBJNAME=objects/

proto/os_amiga.pro:	os_amiga.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/os_amiga.pro $(PROPT) os_amiga.c

objects/quickfix.o:	quickfix.c  $(GST)
	$(CC) $(CFLAGS) quickfix.c OBJNAME=objects/

proto/quickfix.pro:	quickfix.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/quickfix.pro $(PROPT) quickfix.c

objects/regexp.o:	regexp.c  $(GST)
	$(CC) $(CFLAGS) regexp.c OBJNAME=objects/

proto/regexp.pro:	regexp.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/regexp.pro $(PROPT) regexp.c

objects/screen.o:	screen.c  $(GST)
	$(CC) $(CFLAGS) screen.c OBJNAME=objects/

proto/screen.pro:	screen.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/screen.pro $(PROPT) screen.c

objects/search.o:	search.c  $(GST)
	$(CC) $(CFLAGS) search.c OBJNAME=objects/

proto/search.pro:	search.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/search.pro $(PROPT) search.c

objects/syntax.o:	syntax.c  $(GST)
	$(CC) $(CFLAGS) syntax.c OBJNAME=objects/

proto/syntax.pro:	syntax.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/syntax.pro $(PROPT) syntax.c

objects/tag.o:	tag.c  $(GST)
	$(CC) $(CFLAGS) tag.c OBJNAME=objects/

proto/tag.pro:	tag.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/tag.pro $(PROPT) tag.c

objects/term.o:	term.c  $(GST)
	$(CC) $(CFLAGS) term.c OBJNAME=objects/

proto/term.pro:	term.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/term.pro $(PROPT) term.c

objects/termlib.o:	termlib.c  $(GST)
	$(CC) $(CFLAGS) termlib.c OBJNAME=objects/

proto/termlib.pro:	termlib.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/termlib.pro $(PROPT) termlib.c

objects/ui.o:	ui.c  $(GST)
	$(CC) $(CFLAGS) ui.c OBJNAME=objects/

proto/ui.pro:	ui.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/ui.pro $(PROPT) ui.c

objects/undo.o:	undo.c  $(GST)
	$(CC) $(CFLAGS) undo.c OBJNAME=objects/

proto/undo.pro:	undo.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/undo.pro $(PROPT) undo.c

objects/window.o:	window.c  $(GST)
	$(CC) $(CFLAGS) window.c OBJNAME=objects/

proto/window.pro:	window.c $(GST)
	$(CC) $(CFLAGS) GPFILE=proto/window.pro $(PROPT) window.c

ex_cmds.h: ex_docmd.h mkcmdtab
	mkcmdtab ex_docmd.h ex_cmds.h

objects/mkcmdtab.o:	mkcmdtab.c
	$(CC) $(CFLAGS) mkcmdtab.c OBJNAME=objects/

mkcmdtab: objects/mkcmdtab.o
	$(CC) LINK $(COPTS) objects/mkcmdtab.o PNAME=mkcmdtab
