# $Author: seymour $
# $Date: 1998/05/04 20:39:50 $
# $Source: /denim/homes/seymour/cvsroot/f2j/src/Makefile,v $
# Revision:$

CFLAGS= -g -ansi -Wall
CC=gcc
PURIFY=/usr/local/pure/purify/purify
YFLAGS= --debug --defines --verbose 
OBJS=f2jparse.tab.o f2jlex.o f2jmain.o  symtab.o  \
     codegen.o vcg_emitter.o typeassign.o opcode.o dlist.o typecheck.o \
     optimize.o
LIBS=
DEPENDS = f2jparse.y f2jlex.c f2j.h 
YACC=bison -t
JFILES = *.j
JAVAFILES = *.java
GOTO_TRANS=goto_trans
JAVAB=../bin/javab

#  The main executable.
bin/f2java: f2j.h f2jparse.y $(OBJS) $(JAVAB)
	${CC} $(CFLAGS) -o $@ $(OBJS) $(LIBS)

#  The purify version...
puref2j:	f2j.h f2jparse.y $(OBJS) $(JAVAB)
	$(PURIFY) ${CC} $(CFLAGS) -o $@ $(OBJS) $(LIBS)
	mv $@ ../bin


#  Fortran has gotos, java does not.  So we need to 
#  translate goto statements.
$(JAVAB):	
	cd $(GOTO_TRANS);make

f2jlex: f2jlex.o f2j.h
	$(CC) $(CFLAGS) -o f2jlex f2jlex.o

f2jlex.o: f2jlex.c

f2jparse.tab.c f2jparse.tab.h:  f2jparse.y
	$(YACC) $(YFLAGS) f2jparse.y

f2jmain.o:  f2jmain.c f2j.h f2jparse.y

dlist.o: dlist.c
 
dlist.o: dlist.c dlist.h

f2jparse.tab.o: f2jparse.tab.c f2j.h

codegen.o:  codegen.c f2j.h

#  vcg = visualization of compiler graphs.

vcg_emitter.o:  vcg_emitter.c f2j.h

opcode.o: opcode.c f2j.h

symtab.o: symtab.c symtab.h

typeassign.o: typeassign.c f2j.h

typecheck.o: typecheck.c f2j.h

optimize.o: optimize.c f2j.h

lexdebug:  f2jlex.c
	$(CC) $(FLAGS) -o lexdebug -DSTANDALONE  f2jlex.c 

clean: goto bin
	rm -f *.o *.class f2jparse.c f2jparse.tab.c f2jparse.tab.h \
              tmp f2j core a.out *.output *~  *.vcg

goto:
	cd $(GOTO_TRANS); $(MAKE) realclean

bin:
	cd bin; $(MAKE) clean

#realclean: clean goto
#	rm -f ../bin/f2java ../bin/puref2j
