#
# DEFINE SSI_KLUGE for SSI fix for compiler problem
#

.SUFFIXES:
.SUFFIXES:	.h .s .c .V20.o .V30.o .VQX.o .o

DESTDIR	=
CFLAGS	= -DGHS
CC	= cc
LD = cc -g
LDFLAGS	= 
LIBRARIES = -ltools -lvt

.c.V20.o:
	${CC} -c ${CFLAGS} -DM68020 $*.c; mv -f $*.o $*.V20.o
.s.V20.o:
	${AS} -20 -o $*.V20.o $*.s
.c.V30.o:
	${CC} -c ${CFLAGS} -DM68030 $*.c; mv -f $*.o $*.V30.o
.s.V30.o:
	${AS} -20 -o $*.V30.o $*.s
.c.VQX.o:
	${CC} -c ${CFLAGS} -DM68020 -DVQX $*.c; mv -f $*.o $*.VQX.o
.s.VQX.o:
	${AS} -20 -o $*.VQX.o $*.s
.c.h:
	./makedefs -f $*.c $*.h
.c.o:
	${CC} -c ${CFLAGS} $*.c



OBJ.V20= y.tab.V20.o asm.V20.o events.V20.o c.V20.o cerror.V20.o	\
 check.V20.o coredump.V20.o debug.V20.o eval.V20.o fortran.V20.o	\
 keywords.V20.o languages.V20.o library.V20.o lists.V20.o machine.V20.o	\
 main.V20.o mappings.V20.o modula-2.V20.o names.V20.o object.V20.o	\
 operators.V20.o pascal.V20.o printsym.V20.o process.V20.o	\
 runtime.V20.o scanner.V20.o source.V20.o stabstring.V20.o	\
 symbols.V20.o tree.V20.o ops.V20.o bus.V20.o
OBJ.V30= y.tab.V30.o asm.V30.o events.V30.o c.V30.o cerror.V30.o	\
 check.V30.o coredump.V30.o debug.V30.o eval.V30.o fortran.V30.o	\
 keywords.V30.o languages.V30.o library.V30.o lists.V30.o machine.V30.o	\
 main.V30.o mappings.V30.o modula-2.V30.o names.V30.o object.V30.o	\
 operators.V30.o pascal.V30.o printsym.V30.o process.V30.o	\
 runtime.V30.o scanner.V30.o source.V30.o stabstring.V30.o	\
 symbols.V30.o tree.V30.o ops.V30.o bus.V30.o
OBJ.VQX= y.tab.VQX.o asm.VQX.o events.VQX.o c.VQX.o cerror.VQX.o	\
 check.VQX.o coredump.VQX.o debug.VQX.o eval.VQX.o fortran.VQX.o	\
 keywords.VQX.o languages.VQX.o library.VQX.o lists.VQX.o machine.VQX.o	\
 main.VQX.o mappings.VQX.o modula-2.VQX.o names.VQX.o object.VQX.o	\
 operators.VQX.o pascal.VQX.o printsym.VQX.o process.VQX.o	\
 runtime.VQX.o scanner.VQX.o source.VQX.o stabstring.VQX.o	\
 symbols.VQX.o tree.VQX.o ops.VQX.o bus.VQX.o

HDR= asm.h events.h c.h check.h coredump.h debug.h eval.h fortran.h	\
 keywords.h languages.h lists.h machine.h main.h mappings.h modula-2.h	\
 names.h object.h operators.h pascal.h printsym.h process.h runtime.h	\
 scanner.h source.h stabstring.h symbols.h tree.h ops.h

SRC= \
    defs.h \
    commands.y \
    asm.c \
    events.c \
    c.c \
    cerror.s \
    check.c \
    coredump.c \
    debug.c \
    eval.c \
    fortran.c \
    keywords.c \
    languages.c \
    library.c \
    lists.c \
    machine.c \
    main.c \
    mappings.c \
    modula-2.c \
    names.c \
    object.c \
    operators.c \
    pascal.c \
    printsym.c \
    process.c \
    runtime.c \
    scanner.c \
    source.c \
    stabstring.c \
    symbols.c \
    tree.c \
    ops.c \
    bus.s

all:	dbx.V20 dbx.V30 dbx.VQX

dbx.V20:	makedefs mkdate ${HDR} ${OBJ.V20}
	rm -f date.c
	./mkdate > date.c
	${CC} ${CFLAGS} -c date.c
	${LD} ${LDFLAGS} date.o ${OBJ.V20} ${LIBRARIES} -o dbx.V20
dbx.V30:	makedefs mkdate ${HDR} ${OBJ.V30}
	rm -f date.c
	./mkdate > date.c
	${CC} ${CFLAGS} -c date.c
	${LD} ${LDFLAGS} date.o ${OBJ.V30} ${LIBRARIES} -o dbx.V30
dbx.VQX:	makedefs mkdate ${HDR} ${OBJ.VQX}
	rm -f date.c
	./mkdate > date.c
	${CC} ${CFLAGS} -c date.c
	${LD} ${LDFLAGS} date.o ${OBJ.VQX} ${LIBRARIES} -o dbx.VQX

y.tab.c: commands.y
	@echo "expect 2 shift/reduce conflicts"
	yacc -d commands.y

makedefs: makedefs.c library.o cerror.o
	${CC} -O makedefs.c library.o cerror.o -o makedefs

mkdate: mkdate.c
	${CC} -O mkdate.c -o mkdate

#
# Don't worry about the removal of header files, they're created from
# the source files.
#

clean:
	rm -f ${HDR} ${OBJ.V20} ${OBJ.V30} ${OBJ.VQX} y.tab.c y.tab.h \
	dbx.V20 dbx.V30 dbx.VQX mkdate \
	makedefs makedefs.o date.c core rslts Errs errs a.out *.o

cleandefs:
	rm -f ${HDR} y.tab.h

testinstall: ${AOUT} test install

test:
	@chdir tests; make

install:	all
	install -c -s dbx.V20 ${DESTDIR}/usr/ucb/.dbx.V20
	install -c -s dbx.V30 ${DESTDIR}/usr/ucb/.dbx.V30
	install -c -s dbx.VQX ${DESTDIR}/usr/ucb/.dbx.VQX
	rm -f ${DESTDIR}/usr/ucb/dbx ${DESTDIR}/usr/ucb/.dbx.V25
	ln ${DESTDIR}/usr/ucb/.dbx.V20 ${DESTDIR}/usr/ucb/.dbx.V25
	ln -s .dbx.$$'MACHINE' ${DESTDIR}/usr/ucb/dbx


#
# Create a tar file called "tape" containing relevant files.
#

TAPE = tape

tape:
	@tar cf ${TAPE} \
	    Makefile History version READ_ME ${SRC} \
	    makedefs.c mkdate.c tests pchanges ptests

#
# Header dependencies are purposely incomplete since header files
# are "written" every time the accompanying source file changes even if
# the resulting contents of the header don't change.  The alternative is
# to force a "makedefs" to be invoked for every header file each time dbx
# is made.
#
# Also, there should be a dependency of scanner.o and keywords.o on y.tab.h
# but misfortunately silly make does a "makedefs y.tab.c y.tab.h" which
# destroys y.tab.h.
#

symbols.o tree.o check.o eval.o events.o: operators.h
