#
# 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

SRC =	alloc.c amiga.c buffer.c charset.c cmdcmds.c cmdline.c \
	csearch.c digraph.c edit.c fileio.c getchar.c help.c \
	linefunc.c main.c mark.c memfile.c memline.c message.c misccmds.c \
	normal.c ops.c option.c quickfix.c regexp.c \
	regsub.c screen.c search.c \
	tables.c tag.c term.c undo.c window.c version.c

OBJ =	objects/alloc.o objects/amiga.o objects/buffer.o objects/charset.o \
	objects/cmdcmds.o objects/cmdline.o objects/csearch.o \
	objects/digraph.o objects/edit.o objects/fileio.o objects/getchar.o \
	objects/help.o objects/linefunc.o objects/main.o objects/mark.o \
	objects/memfile.o objects/memline.o objects/message.o \
	objects/misccmds.o objects/normal.o objects/ops.o objects/option.o \
	objects/quickfix.o objects/regexp.o objects/regsub.o objects/screen.o \
	objects/search.o objects/tables.o objects/tag.o objects/term.o \
	objects/undo.o objects/window.o $(TERMLIB)

PRO =	proto/alloc.pro proto/buffer.pro proto/charset.pro proto/cmdcmds.pro \
	proto/cmdline.pro proto/csearch.pro proto/digraph.pro proto/edit.pro \
	proto/fileio.pro proto/getchar.pro proto/help.pro proto/linefunc.pro \
	proto/main.pro proto/mark.pro proto/memfile.pro proto/memline.pro \
	proto/message.pro proto/misccmds.pro proto/normal.pro proto/ops.pro \
	proto/option.pro proto/quickfix.pro proto/regexp.pro proto/regsub.pro \
	proto/screen.pro proto/search.pro proto/tables.pro proto/tag.pro \
	proto/term.pro proto/termlib.pro proto/undo.pro proto/window.pro \
	proto/amiga.pro

all: Vim ctags/Ctags xxd/Xxd

Vim: objects $(OBJ) version.c
	cc $(CFLAGS) version.c -o objects/version.o
	ln +q -m -o Vim $(OBJ) objects/version.o $(LIBS)

debug: objects $(OBJ) version.c
	cc $(CFLAGS) version.c -o objects/version.o
	ln +q -m -g -o Vim $(OBJ) objects/version.o $(LIBS)

ctags/Ctags: ctags/ctags.c
	csh -c cd ctags; make -f Makefile.amiga; cd ..

xxd/Xxd: xxd/xxd.c
	csh -c cd xxd; make -f Makefile.amiga; cd ..

proto: $(SYMS) $(PRO)

objects:
	makedir objects

tags:
	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 objects/termlib.o Vim $(SYMS) mkcmdtab cmdtab.h ctags/Ctags xxd/Xxd

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

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

objects/alloc.o:	alloc.c  $(SYMS)
	cc $(CFLAGS) -hi$(SYMS) alloc.c -o objects/alloc.o

proto/alloc.pro:	alloc.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) alloc.c
	csh -c mv -f alloc.pro proto

objects/amiga.o:	amiga.c  $(SYMS)
	cc $(CFLAGS) -hi$(SYMS) amiga.c -o objects/amiga.o

proto/amiga.pro:	amiga.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) amiga.c
	csh -c mv -f amiga.pro proto

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

proto/buffer.pro:	buffer.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) buffer.c
	csh -c mv -f 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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) charset.c
	csh -c mv -f charset.pro proto

objects/cmdcmds.o:	cmdcmds.c  $(SYMS)
	cc $(CFLAGS) -hi$(SYMS) cmdcmds.c -o objects/cmdcmds.o

proto/cmdcmds.pro:	cmdcmds.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) cmdcmds.c
	csh -c mv -f cmdcmds.pro proto

objects/cmdline.o:	cmdline.c  $(SYMS) cmdtab.h
	cc $(CFLAGS) -hi$(SYMS) cmdline.c -o objects/cmdline.o

proto/cmdline.pro:	cmdline.c $(SYMS) cmdtab.h
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) cmdline.c
	csh -c mv -f cmdline.pro proto

objects/csearch.o:	csearch.c  $(SYMS)
	cc $(CFLAGS) -hi$(SYMS) csearch.c -o objects/csearch.o

proto/csearch.pro:	csearch.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) csearch.c
	csh -c mv -f csearch.pro proto

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

proto/digraph.pro:	digraph.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) digraph.c
	csh -c mv -f 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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) edit.c
	csh -c mv -f edit.pro proto

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

proto/fileio.pro:	fileio.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) fileio.c
	csh -c mv -f 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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) getchar.c
	csh -c mv -f getchar.pro proto

objects/help.o:	help.c  $(SYMS)
	cc $(CFLAGS) -hi$(SYMS) help.c -o objects/help.o

proto/help.pro:	help.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) help.c
	csh -c mv -f help.pro proto

objects/linefunc.o:	linefunc.c  $(SYMS)
	cc $(CFLAGS) -hi$(SYMS) linefunc.c -o objects/linefunc.o

proto/linefunc.pro:	linefunc.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) linefunc.c
	csh -c mv -f linefunc.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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) main.c
	csh -c mv -f 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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) mark.c
	csh -c mv -f 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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) memfile.c
	csh -c mv -f 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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) memline.c
	csh -c mv -f 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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) message.c
	csh -c mv -f message.pro proto

objects/misccmds.o:	misccmds.c  $(SYMS)
	cc $(CFLAGS) -hi$(SYMS) misccmds.c -o objects/misccmds.o

proto/misccmds.pro:	misccmds.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) misccmds.c
	csh -c mv -f misccmds.pro proto

objects/normal.o:	normal.c  $(SYMS) ops.h
	cc $(CFLAGS) -hi$(SYMS) normal.c -o objects/normal.o

proto/normal.pro:	normal.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) normal.c
	csh -c mv -f normal.pro proto

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

proto/ops.pro:	ops.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) ops.c
	csh -c mv -f 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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) option.c
	csh -c mv -f option.pro proto

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

proto/quickfix.pro:	quickfix.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) quickfix.c
	csh -c mv -f 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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) regexp.c
	csh -c mv -f regexp.pro proto

objects/regsub.o:	regsub.c  $(SYMS)
	cc $(CFLAGS) -hi$(SYMS) regsub.c -o objects/regsub.o

proto/regsub.pro:	regsub.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) regsub.c
	csh -c mv -f regsub.pro proto

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

proto/screen.pro:	screen.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) screen.c
	csh -c mv -f 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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) search.c
	csh -c mv -f search.pro proto

objects/tables.o:	tables.c  $(SYMS)
	cc $(CFLAGS) -hi$(SYMS) tables.c -o objects/tables.o

proto/tables.pro:	tables.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) tables.c
	csh -c mv -f tables.pro proto

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

proto/tag.pro:	tag.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) tag.c
	csh -c mv -f 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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) term.c
	csh -c mv -f term.pro proto

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

proto/termlib.pro:	termlib.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO termlib.c
#the manx compiler generates a wrong prototype for tputs
	vim -s termlib.fix termlib.pro
	csh -c mv -f termlib.pro proto

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

proto/undo.pro:	undo.c $(SYMS)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) undo.c
	csh -c mv -f 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)
	cc -qa -qp $(CFLAGS) -DPROTO -hi$(SYMS) window.c
	csh -c mv -f window.pro proto

cmdtab.h: cmdtab.tab mkcmdtab
	mkcmdtab cmdtab.tab cmdtab.h

mkcmdtab: objects/mkcmdtab.o
	ln +q -o mkcmdtab objects/mkcmdtab.o -lc16

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