#	$Id$
#
# Makefile for the Fortran 77 compiler
#
srcdir=@srcdir@
top_srcdir=@top_srcdir@
builddir=@builddir@
top_builddir=@top_builddir@
CC = @CC@
CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@ @ADD_CFLAGS@
CPPFLAGS = @CPPFLAGS@ @ADD_CPPFLAGS@ -DFCOM -DLANG_F77 \
	-Dos_$(TARGOS) -Dmach_$(TARGMACH) \
	-I$(srcdir) -I$(builddir) -I$(top_builddir) \
	-I$(MIPDIR) -I$(MDIR) -I$(top_srcdir)/os/$(TARGOS)
LIBS = @LIBS@
LDFLAGS = @LDFLAGS@
LEX = @LEX@
LFLAGS =
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
YACC = @YACC@
YFLAGS = @YFLAGS@
TARGOS = @targos@
TARGOSVER = @targosver@
TARGMACH = @targmach@
prefix = @prefix@
exec_prefix = @exec_prefix@
libexecdir = @libexecdir@
datarootdir = @datarootdir@
mandir = @mandir@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@

MDIR=$(top_srcdir)/arch/$(TARGMACH)
MIPDIR=$(top_srcdir)/mip

DEST=@BINPREFIX@fcom$(EXEEXT)
MKEXT=mkext$(EXEEXT)

OBJS=	common.o compat.o data.o equiv.o error.o exec.o expr.o	\
	external.o flocal.o gram.o init.o intr.o io.o lex.o	\
	local2.o main.o match.o misc.o optim2.o order.o proc.o	\
	put.o putscj.o reader.o regs.o table.o

LOBJS=	common.lo mkext.lo table.lo

HDRS=	$(srcdir)/defs.h $(srcdir)/defines.h $(srcdir)/ftypes.h	\
	$(MIPDIR)/pass2.h $(MIPDIR)/manifest.h $(MIPDIR)/node.h	\
	$(MDIR)/macdefs.h

GSRC=	$(srcdir)/gram.head $(srcdir)/gram.dcl $(srcdir)/gram.expr \
	$(srcdir)/gram.exec $(srcdir)/gram.io

all: $(DEST)

#
# round 1: generate external.[ch] & gram.[ch]
#

$(LOBJS): $(HDRS)

common.lo: $(MIPDIR)/common.c
	$(CC_FOR_BUILD) $(CFLAGS) $(CPPFLAGS) -DMKEXT -c -o $@ $(MIPDIR)/common.c

mkext.lo: $(MIPDIR)/mkext.c
	$(CC_FOR_BUILD) $(CFLAGS) $(CPPFLAGS) -DMKEXT -c -o $@ $(MIPDIR)/mkext.c

table.lo: $(MDIR)/table.c
	$(CC_FOR_BUILD) $(CFLAGS) $(CPPFLAGS) -DMKEXT -c -o $@ $(MDIR)/table.c

$(MKEXT): $(LOBJS)
	$(CC_FOR_BUILD) $(LDFLAGS) $(LOBJS) -o $@ $(LIBS)

external.c: $(MKEXT)
	$(builddir)/$(MKEXT)

gram.c:	$(GSRC) $(srcdir)/tokens
	( grep -n . < $(srcdir)/tokens | sed "s/\([^:]*\):\(.*\)/%token \2 \1/"; \
	    cat $(GSRC) ) > gram.y
	$(YACC) $(YFLAGS) -d gram.y
	mv -f y.tab.c gram.c
	mv -f y.tab.h gram.h

#
# round 2: compile $(OBJS)
#

$(OBJS): $(HDRS) external.c gram.c

common.o: $(MIPDIR)/common.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MIPDIR)/common.c

compat.o: $(MIPDIR)/compat.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MIPDIR)/compat.c

data.o: $(srcdir)/data.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/data.c

equiv.o: $(srcdir)/equiv.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/equiv.c

error.o: $(srcdir)/error.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/error.c

exec.o: $(srcdir)/exec.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/exec.c

expr.o: $(srcdir)/expr.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/expr.c

external.o: external.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ external.c

flocal.o: $(MDIR)/flocal.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MDIR)/flocal.c

gram.o: gram.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ gram.c

init.o: $(srcdir)/init.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/init.c

intr.o: $(srcdir)/intr.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/intr.c

io.o: $(srcdir)/io.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/io.c

lex.o: $(srcdir)/lex.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/lex.c

local2.o: $(MDIR)/local2.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MDIR)/local2.c

main.o: $(srcdir)/main.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/main.c

match.o: $(MIPDIR)/match.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MIPDIR)/match.c

misc.o: $(srcdir)/misc.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/misc.c

optim2.o: $(MIPDIR)/optim2.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MIPDIR)/optim2.c

order.o: $(MDIR)/order.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MDIR)/order.c

proc.o: $(srcdir)/proc.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/proc.c

put.o: $(srcdir)/put.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/put.c

putscj.o: $(srcdir)/putscj.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/putscj.c

reader.o: $(MIPDIR)/reader.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MIPDIR)/reader.c

regs.o: $(MIPDIR)/regs.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MIPDIR)/regs.c

table.o: $(MDIR)/table.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(MDIR)/table.c

#
# round 3: build $(DEST)
#

$(DEST): $(OBJS)
	$(CC) $(LDFLAGS) $(OBJS) -o $@ $(LIBS)

install: $(DEST)
	test -z "$(DESTDIR)$(libexecdir)" || mkdir -p "$(DESTDIR)$(libexecdir)"
	$(INSTALL_PROGRAM) $(DEST) $(DESTDIR)$(libexecdir)

clean:
	rm -f $(DEST) $(OBJS) $(MKEXT) $(LOBJS)	\
	    y.tab.[ch] gram.[ych] external.[ch]

distclean: clean
	rm -f Makefile
