# include	"../conf/conf.h"

# ifdef MSDOS
.C.OBJ:
	$(CC) $*.c
	flag $(AMXLIB) rwn
	lib $(AMXLIB)-+$*;
	flag $(AMXLIB) sro

INDES=	\ind\source
DLIB=	$(INDES)\..\lib
DBIN=	$(INDES)\..\bin
DFILES= $(INDES)\..\files
H=	$(INDES)\h

TR=	/Zi /Od
LTR=	/Co

CC=	cl /c /Gt20 /Ot $(TR) /FmNUL /I$(H) /Alfu
LINK=	link /NOI /SE:512 /ST:30720 $(LTR)

AMXLIB=	$(DLIB)\lamx.lib
INDLIB= $(DLIB)\lindes2.lib

LIBS=	$(AMXLIB)+$(INDLIB)

HDR=	amx.h		parser.h	$(H)\ingres.h	$(H)\access.h	\
	$(H)\catalog.h	$(H)\symbol.h	$(H)\lock.h	$(H)\unix.h	\

SRC=	amx.c		append.c	cmap.c				\
	comment.c	convert.c	cvar.c		delete.c
SRC1=	error.c		amxfile.c	grammar.c	gtchar.c	\
	l_dom.c		l_name.c	l_rel.c		lex.c
SRC2=	main1.c		main2.c		name.c		number.c	\
	operator.c	parser.c	parser.h	replace.c
SRC3=	scan.c		string.c	symtab.c	tables.y	\
	update.c	w_amx.c		w_print.c	w_key.c
SRC4=	w_open.c	w_use.c		w_tmp.c		strategy.c

OBJS=	main1.obj	main2.obj	parser.obj	grammar.obj	\
	lex.obj		cmap.obj	gtchar.obj	name.obj
OBJ1=	number.obj	operator.obj	comment.obj	string.obj	\
	symtab.obj	cvar.obj	l_dom.obj	l_name.obj
OBJ2=	l_rel.obj	append.obj	delete.obj	replace.obj	\
	scan.obj	update.obj	convert.obj	w_amx.obj
OBJ3=	w_print.obj	w_open.obj	w_tmp.obj	strategy.obj	\
	w_key.obj	w_use.obj	error.obj	amx.obj


$(DBIN)\amx.exe:	$(HDR)
	$(CC) $(SRC)
	$(CC) $(SRC1)
	$(CC) $(SRC2)
	$(CC) $(SRC3)
	$(CC) $(SRC4)
	flag $(AMXLIB) rwn
	del  $(AMXLIB)
	lib $(AMXLIB)+$(OBJS);
	lib $(AMXLIB)+$(OBJ1);
	lib $(AMXLIB)+$(OBJ2);
	lib $(AMXLIB)+$(OBJ3);
	flag $(AMXLIB) sro

main1.obj:		main1.c
	$(CC) $*.c

main2.obj:		main2.c
	$(CC) $*.c

parser.obj:		parser.c

grammar.obj:		grammar.c

lex.obj:		lex.c

cmap.obj:		cmap.c

gtchar.obj:		gtchar.c

name.obj:		name.c

number.obj:		number.c

operator.obj:		operator.c

comment.obj:		comment.c

string.obj:		string.c

symtab.obj:		symtab.c

cvar.obj:		cvar.c

l_dom.obj:		l_dom.c

l_name.obj:		l_name.c

l_rel.obj:		l_rel.c

append.obj:		append.c

delete.obj:		delete.c

replace.obj:		replace.c

scan.obj:		scan.c

update.obj:		update.c

convert.obj:		convert.c

w_amx.obj:		w_amx.c

w_print.obj:		w_print.c

w_open.obj:		w_open.c

w_tmp.obj:		w_tmp.c

strategy.obj:		strategy.c

w_key.obj:		w_key.c

w_use.obj:		w_use.c

error.obj:		error.c

amx.obj:		amx.c

$(DBIN)\amx.exe:	$(AMXLIB)
	$(LINK) main1,amx,amx,$(LIBS);
	flag $@ rwn
	ncopy amx.exe $(DBIN) /v
	flag $@ sro
	del amx.map

$(DBIN)\amxfile.exe:	amxfile.obj
	$(LINK) $*,,,$(INDLIB);
	flag $@ rwn
	ncopy $*.exe $(DBIN)
	flag $@ sro
	del amxfile.map

$(DFILES)\amx_msc6.3:	AMX.CPP AMX.SRC $(DBIN)\amxfile.exe
	flag $@ rwn
	AMX.CPP MSC $@
	flag $@ sro
# else
SHELL=	/bin/sh
DBS=	../..
LIB=	../lib
BIN=	$(DBS)/bin
SYSLIB=	$(DBS)/lib
ETC=	$(DBS)/sys/etc

CC=	cc
i_FLAG=
O_FLAG=	-O
# ifndef FP_PROCESSOR
f_FLAG=	-f
# else
f_FLAG=
# endif

LD=	$(CC)
CRT0=
# ifdef ID_SEPERATE
LDFLAGS= -i
# else
# ifdef TEXT_SEPERATE
LDFLAGS= -n
# endif
# endif
u_FLAG=	-u
UFLAG=	$(u_FLAG) _AApath
LIBC=	-lm

# ifdef A7150
# endif

# ifdef BC
# endif

# ifdef EC1834
# endif

# ifdef ESER_PSU
# ifdef TRACE
i_FLAG=	-d
# endif
LIBC=	-lm -lc
# endif

# ifdef ESER_VMX
UFLAG=	$(u_FLAG) AApath
# endif

# ifdef HP_UX
u_FLAG=	-W l,-u
UFLAG=	$(u_FLAG) _AApath
# endif

# ifdef P8000
LD=	ld
CRT0=	/lib/crt0.o
LIBC=	-lm -lc
# endif

# ifdef PDP
LDFLAGS=
# endif

# ifdef PDP70
# endif

# ifdef VAX
# endif

# ifdef VENIX
LD=	ld
CRT0=	/lib/crt0.o
LIBC=	-lm -lc
# endif

# ifdef XENIX286
i_FLAG=	-i -M2s
LD=	ld
LDFLAGS= -i -Ms -F 2000
CRT0=	/lib/Sseg.o /lib/Scrt0.o
LIBC=	/lib/Slibm.a /lib/Slibcfp.a /lib/Slibc.a /lib/Slibx.a
# endif

# ifdef XENIX386
LD=	ld
CRT0=	/lib/386/Sseg.o /lib/386/Scrt0.o
LIBC=	/lib/386/Slibm.a /lib/386/Slibcfp.a /lib/386/Slibc.a /lib/386/Slibx.a
# endif

CFLAGS=	$(O_FLAG) $(f_FLAG) $(i_FLAG)

AR=	-ar
# ifdef TEST
AR_R	=rv
AR_X	=xv
# else
AR_R	=r
AR_X	=x
# endif
LIBMODE=0644

CHMOD=	chmod
MODE=	6711
HMODE=	0600
UMODE=	0700
CPP=	/lib/cpp -P
GREP=	grep -v
# ifdef RANLIB
MKLIB=	ranlib
# else
MKLIB=	@echo ranlib
# endif
RM=	-rm -f
SED=	sed -f AMX.SED
TOUCH=	touch

YACC=	../yyyacc/yyyacc
YFLAGS=	-s

ACCESS=	$(LIB)/a.a
$(ACCESS):

IUTIL=	$(LIB)/i.a
$(IUTIL):

GUTIL=	$(LIB)/g.a
$(GUTIL):

AMXLIB=	$(LIB)/amx_cc.a
LIBES=	$(AMXLIB) $(ACCESS) $(IUTIL) $(GUTIL)
LIBS=	$(LIBES) $(LIBC)
AMX=	$(BIN)/AMX
AMXF=	$(BIN)/AMXF
AMXH=	$(SYSLIB)/amx.h
AMXRM=	$(BIN)/AMXRM
IXC=	$(ETC)/amx_ixc6.3
IXF=	$(ETC)/amx_ixf6.3
OAMX=	$(BIN)/OAMX
OAMXF=	$(BIN)/OAMXF
SAMX=	$(BIN)/SAMX
SAMXF=	$(BIN)/SAMXF
amx=	$(BIN)/amx
amxf=	$(BIN)/amxf
amxrm=	$(BIN)/amxrm
oamx=	$(BIN)/oamx
oamxf=	$(BIN)/oamxf
samx=	$(BIN)/samx
samxf=	$(BIN)/samxf
# ifdef F77
IX=	$(IXC)		$(IXF)
# else
IX=	$(IXC)
# endif
X=	$(AMXRM)	$(AMX)
# ifdef MEM_S
# ifdef F77
S=	$(SAMX)		$(SAMXF)
# else
S=	$(SAMX)
# endif
# else
S=
# endif
# ifdef MEM_O
# ifdef F77
O=	$(OAMX)		$(OAMXF)
# else
O=	$(OAMX)
# endif
# else
O=
# endif
ALL=	$(X)		$(S)		$(O)

OBJS=	main1.o		main2.o		parser.o	grammar.o	\
	lex.o		cmap.o		gtchar.o	name.o		\
	number.o	operator.o	comment.o	string.o	\
	symtab.o	cvar.o		l_dom.o		l_name.o	\
	l_rel.o		append.o	delete.o	replace.o	\
	scan.o		update.o	convert.o	w_amx.o		\
	w_print.o	w_open.o	w_tmp.o		strategy.o	\
	w_key.o		w_use.o		error.o		amx.o

INSTALL:		install

install:		$(AMXLIB) $(ALL) $(AMXH) $(IX)

$(AMXLIB):		$(OBJS)
	$(AR) $(AR_R) $@ $?
	@-$(CHMOD) $(LIBMODE) $@
	$(MKLIB) $@

UNLOAD:			unload

unload:
	@-$(AR) $(AR_X) $(AMXLIB)
	@$(RM) __.SYMDEF
	@-$(TOUCH) $(AMXLIB)

$(amxrm):		amxrm.o
	$(CC) $(LDFLAGS) STRIPFLAG amxrm.o -o $@
	@-$(CHMOD) $(MODE) $@

$(AMXRM):		$(amxrm)
	$(RM) $@
	LN $(amxrm) $@

$(amx):			$(LIBES)
	$(LD) $(LDFLAGS) STRIPFLAG $(UFLAG) $(CRT0) $(LIBS) -o $@
	@-$(CHMOD) $(MODE) $@

$(AMX):			$(amx)
	$(RM) $@
	LN $(amx) $@

$(amxf):		$(amx)
	$(RM) $@
	LN $(amx) $@

$(AMXF):		$(amx)
	$(RM) $@
	LN $(amx) $@

$(samx):		$(amx)
	$(RM) $@
	LN $(amx) $@

$(SAMX):		$(amx)
	$(RM) $@
	LN $(amx) $@

$(samxf):		$(amx)
	$(RM) $@
	LN $(amx) $@

$(SAMXF):		$(amx)
	$(RM) $@
	LN $(amx) $@

$(oamx):		$(amx)
	$(RM) $@
	LN $(amx) $@

$(OAMX):		$(amx)
	$(RM) $@
	LN $(amx) $@

$(oamxf):		$(amx)
	$(RM) $@
	LN $(amx) $@

$(OAMXF):		$(amx)
	$(RM) $@
	LN $(amx) $@

$(AMXH):		AMX.HDR AMX.SED
	$(CPP) AMX.HDR	| $(SED) > $@
	@-$(CHMOD) $(HMODE) $@

amxfile:		amxfile.o $(GUTIL)
	$(LD) $(LDFLAGS) STRIPFLAG $(CRT0) amxfile.o $(GUTIL) $(LIBC) -o $@
	@-$(CHMOD) $(UMODE) $@

$(IXC):			AMX.CPP AMX.SRC amxfile
	./AMX.CPP IXC $@
	@-$(CHMOD) $(LIBMODE) $@

$(IXF):			AMX.CPP AMX.SRC amxfile
	./AMX.CPP IXF $@
	@-$(CHMOD) $(LIBMODE) $@

ALLCLEAN:		allclean

allclean:		clean
	$(RM)	$(AMXLIB) $(ALL) $(AMXH) $(IX) amxfile

CLEAN:			clean

clean:
	$(RM) $(OBJS) amxrm.o amxfile.o

# ifdef PAGE_LOCKING
# ifdef AMX_QRYMOD
# ifdef AMX_SC
grammar.y:		master.y
	CP master.y $@
# else
grammar.y:		master.y
	$(GREP) "/\*SC\*/$$" master.y > $@
# endif
# else
# ifdef AMX_SC
grammar.y:		master.y
	$(GREP) "/\*QM\*/$$" master.y > $@
# else
grammar.y:		master.y
	$(GREP) "/\*QM\*/$$" master.y > master.1
	$(GREP) "/\*SC\*/$$" master.1 > $@
	$(RM) master.1
# endif
# endif
# else
# ifdef AMX_QRYMOD
# ifdef AMX_SC
grammar.y:		master.y
	$(GREP) "/\*PL\*/$$" master.y > $@
# else
grammar.y:		master.y
	$(GREP) "/\*PL\*/$$" master.y > master.1
	$(GREP) "/\*SC\*/$$" master.1 > $@
	$(RM) master.1
# endif
# else
# ifdef AMX_SC
grammar.y:		master.y
	$(GREP) "/\*PL\*/$$" master.y > master.1
	$(GREP) "/\*QM\*/$$" master.1 > $@
	$(RM) master.1
# else
grammar.y:		master.y
	$(GREP) "/\*PL\*/$$" master.y > master.1
	$(GREP) "/\*QM\*/$$" master.1 > master.2
	$(GREP) "/\*SC\*/$$" master.2 > $@
	$(RM) master.[12]
# endif
# endif
# endif

grammar.c:		grammar.y
	$(YACC) $(YFLAGS) grammar.y
	mv y.tab.c $@
	@-$(CHMOD) $(LIBMODE) $@

# ifdef YACC_OPTIM
grammar.o:		grammar.c tables.y
	$(CC) -c $(f_FLAG) $(i_FLAG) grammar.c
# else
grammar.o:		grammar.c tables.y
# endif

main1.o:		../h/trace.h

main2.o:		../h/bs.h

# ifdef WENZLAFF
HOME=	/z/dbs/src/amx_cc
SRC=	AMX.CPP		AMX.HDR		AMX.SED		AMX.SRC		\
	amx.c		amx.h		amxfile.c	amxrm.c		\
	append.c	cmap.c		comment.c	convert.c	\
	cvar.c		delete.c	error.c		grammar.c	\
	grammar.y	gtchar.c	l_dom.c		l_name.c	\
	l_rel.c		lex.c		main1.c		main2.c		\
	master.y	name.c		number.c	operator.c	\
	parser.c	parser.h	replace.c	scan.c		\
	strategy.c	string.c	symtab.c	tables.y	\
	update.c	w_amx.c		w_key.c		w_open.c	\
	w_print.c	w_tmp.c		w_use.c		Makefile

.save:			$(SRC)
	mount DISK /wrk
	CP $? $@ /wrk/amx_cc
	> $@
	umount DISK

$(HOME)/.save:		$(SRC)
	CP $? $(HOME)
	> $@

.PRECIOUS:		.save
.PRECIOUS:		$(HOME)/.save
# endif
# endif
