#
# Makefile for VIM on the Amiga, using Aztec/Manx C 5.0 or later
#
# Note: Not all dependencies are included. This was done to avoid having
#       to compile everything when a global variable or function is added.
#	Careful when changing a global struct or variable!
#

#>>>>> choose options:

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

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

#>>>>> choose between debugging (-bs) or optimizing (-so)
OPTIONS = -so
#OPTIONS = -bs

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

CFLAGS = $(OPTIONS) -wapruq -ps -qf $(DEFINES) -DAMIGA

LIBS = -lc16
SYMS = vim.syms
CC = cc
LN = ln
LNFLAGS = +q
MKPROTO = $(CC) -qa -qp $(CFLAGS) -DPROTO
SHELL = csh
REN = $(SHELL) -c mv -f
DEL = $(SHELL) -c rm -f

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

all: Vim ctags/Ctags xxd/Xxd

Vim: objects $(OBJ) version.c version.h
	$(CC) $(CFLAGS) version.c -o objects/version.o
	$(LN) $(LNFLAGS) -m -o Vim $(OBJ) objects/version.o $(LIBS)

debug: objects $(OBJ) version.c version.h
	$(CC) $(CFLAGS) version.c -o objects/version.o
	$(LN) $(LNFLAGS) -m -g -o Vim $(OBJ) objects/version.o $(LIBS)

ctags/Ctags: ctags/ctags.c
	$(SHELL) -c cd ctags; make -f Makefile.amiga; cd ..

xxd/Xxd: xxd/xxd.c
	$(SHELL) -c cd xxd; make -f Makefile.amiga; cd ..

proto: $(SYMS) $(PRO)

objects:
	makedir objects

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

# can't use delete here, too many file names
clean:
	$(DEL) $(OBJ) objects/version.o objects/mkcmdtab.o  \
		objects/termlib.o Vim $(SYMS) mkcmdtab \
		ex_cmds.h ctags/Ctags xxd/Xxd

$(SYMS)  : vim.h keymap.h macros.h ascii.h term.h structs.h os_amiga.h
	$(CC) $(CFLAGS) -ho$(SYMS) vim.h

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

objects/buffer.o:	buffer.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) buffer.c -o objects/buffer.o

proto/buffer.pro:	buffer.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) buffer.c
	$(REN) buffer.pro proto

objects/charset.o:	charset.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) charset.c -o objects/charset.o

proto/charset.pro:	charset.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) charset.c
	$(REN) charset.pro proto

objects/digraph.o:	digraph.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) digraph.c -o objects/digraph.o

proto/digraph.pro:	digraph.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) digraph.c
	$(REN) digraph.pro proto

objects/edit.o:	edit.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) edit.c -o objects/edit.o

proto/edit.pro:	edit.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) edit.c
	$(REN) edit.pro proto

objects/eval.o:	eval.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) eval.c -o objects/eval.o

proto/eval.pro:	eval.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) eval.c
	$(REN) eval.pro proto

objects/ex_cmds.o:	ex_cmds.c  $(SYMS) ex_cmds.h
	$(CC) $(CFLAGS) -hi$(SYMS) ex_cmds.c -o objects/ex_cmds.o

proto/ex_cmds.pro:	ex_cmds.c $(SYMS) ex_cmds.h
	$(MKPROTO) -hi$(SYMS) ex_cmds.c
	$(REN) ex_cmds.pro proto

objects/ex_docmd.o:	ex_docmd.c  $(SYMS) ex_docmd.h ex_cmds.h
	$(CC) $(CFLAGS) -hi$(SYMS) ex_docmd.c -o objects/ex_docmd.o

proto/ex_docmd.pro:	ex_docmd.c $(SYMS) ex_docmd.h ex_cmds.h
	$(MKPROTO) -hi$(SYMS) ex_docmd.c
	$(REN) ex_docmd.pro proto

objects/ex_getln.o:	ex_getln.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) ex_getln.c -o objects/ex_getln.o

proto/ex_getln.pro:	ex_getln.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) ex_getln.c
	$(REN) ex_getln.pro proto

objects/fileio.o:	fileio.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) fileio.c -o objects/fileio.o

proto/fileio.pro:	fileio.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) fileio.c
	$(REN) fileio.pro proto

objects/getchar.o:	getchar.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) getchar.c -o objects/getchar.o

proto/getchar.pro:	getchar.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) getchar.c
	$(REN) getchar.pro proto

objects/main.o:	main.c $(SYMS) option.h globals.h
	$(CC) $(CFLAGS) -hi$(SYMS) main.c -o objects/main.o

proto/main.pro:	main.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) main.c
	$(REN) main.pro proto

objects/mark.o:	mark.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) mark.c -o objects/mark.o

proto/mark.pro:	mark.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) mark.c
	$(REN) mark.pro proto

objects/memfile.o:	memfile.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) memfile.c -o objects/memfile.o

proto/memfile.pro:	memfile.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) memfile.c
	$(REN) memfile.pro proto

objects/memline.o:	memline.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) memline.c -o objects/memline.o

proto/memline.pro:	memline.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) memline.c
	$(REN) memline.pro proto

objects/message.o:	message.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) message.c -o objects/message.o

proto/message.pro:	message.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) message.c
	$(REN) message.pro proto

objects/misc1.o:	misc1.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) misc1.c -o objects/misc1.o

proto/misc1.pro:	misc1.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) misc1.c
	$(REN) misc1.pro proto

objects/misc2.o:	misc2.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) misc2.c -o objects/misc2.o

proto/misc2.pro:	misc2.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) misc2.c
	$(REN) misc2.pro proto

objects/normal.o:	normal.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) normal.c -o objects/normal.o

proto/normal.pro:	normal.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) normal.c
	$(REN) normal.pro proto

objects/ops.o:	ops.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) ops.c -o objects/ops.o

proto/ops.pro:	ops.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) ops.c
	$(REN) ops.pro proto

objects/option.o:	option.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) option.c -o objects/option.o

proto/option.pro:	option.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) option.c
	$(REN) option.pro proto

objects/os_amiga.o:	os_amiga.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) os_amiga.c -o objects/os_amiga.o

proto/os_amiga.pro:	os_amiga.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) os_amiga.c
	$(REN) os_amiga.pro proto

objects/quickfix.o:	quickfix.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) quickfix.c -o objects/quickfix.o

proto/quickfix.pro:	quickfix.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) quickfix.c
	$(REN) quickfix.pro proto

objects/regexp.o:	regexp.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) regexp.c -o objects/regexp.o

proto/regexp.pro:	regexp.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) regexp.c
	$(REN) regexp.pro proto

objects/screen.o:	screen.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) screen.c -o objects/screen.o

proto/screen.pro:	screen.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) screen.c
	$(REN) screen.pro proto

objects/search.o:	search.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) search.c -o objects/search.o

proto/search.pro:	search.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) search.c
	$(REN) search.pro proto

objects/syntax.o:	syntax.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) syntax.c -o objects/syntax.o

proto/syntax.pro:	syntax.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) syntax.c
	$(REN) syntax.pro proto

objects/tag.o:	tag.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) tag.c -o objects/tag.o

proto/tag.pro:	tag.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) tag.c
	$(REN) tag.pro proto

objects/term.o:	term.c  $(SYMS) term.h
	$(CC) $(CFLAGS) -hi$(SYMS) term.c -o objects/term.o

proto/term.pro:	term.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) term.c
	$(REN) term.pro proto

objects/termlib.o:	termlib.c  $(SYMS)
	$(CC) $(CFLAGS) termlib.c -o objects/termlib.o

proto/termlib.pro:	termlib.c $(SYMS)
	$(MKPROTO) termlib.c
#the manx compiler generates a wrong prototype for tputs
	vim -s termlib.fix termlib.pro
	$(REN) termlib.pro proto

objects/ui.o:	ui.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) ui.c -o objects/ui.o

proto/ui.pro:	ui.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) ui.c
	$(REN) ui.pro proto

objects/undo.o:	undo.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) undo.c -o objects/undo.o

proto/undo.pro:	undo.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) undo.c
	$(REN) undo.pro proto

objects/window.o:	window.c  $(SYMS)
	$(CC) $(CFLAGS) -hi$(SYMS) window.c -o objects/window.o

proto/window.pro:	window.c $(SYMS)
	$(MKPROTO) -hi$(SYMS) window.c
	$(REN) window.pro proto

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

mkcmdtab: objects/mkcmdtab.o
	$(LN) $(LNFLAGS) -o mkcmdtab objects/mkcmdtab.o -lc16

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