#
# Makefile for ANTLR 1.33
#
# SOFTWARE RIGHTS
#
# We reserve no LEGAL rights to the Purdue Compiler Construction Tool
# Set (PCCTS) -- PCCTS is in the public domain.  An individual or
# company may do whatever they wish with source code distributed with
# PCCTS or the code generated by PCCTS, including the incorporation of
# PCCTS, or its output, into commerical software.
# 
# We encourage users to develop software with PCCTS.  However, we do ask
# that credit is given to us for developing PCCTS.  By "credit",
# we mean that if you incorporate our source code into one of your
# programs (commercial product, research project, or otherwise) that you
# acknowledge this fact somewhere in the documentation, research report,
# etc...  If you like PCCTS and have developed a nice tool with the
# output, please mention that you developed it using PCCTS.  In
# addition, we ask that this header remain intact in our source code.
# As long as these guidelines are kept, we expect to continue enhancing
# this system and expect to make other tools available as they are
# completed.
#
# ANTLR 1.33
# Terence Parr
# Parr Research Corporation
# with Purdue University
# and AHPCRC, University of Minnesota
# 1989-1995
#
# Ported to Borland C++, IBM C-Set/2 and Microsoft 6.0 by
# Ed Harfmann
# Micro Data Base Systems
# Lafayette, Indiana
#
SET=../support/set
PCCTS_H=../h

#
#   UNIX  (default)
#
CC=cc
ANTLR=${WORKSPACE}/Tools/bin/antlr
DLG=${WORKSPACE}/Tools/bin/dlg
OBJ_EXT=o
OUT_OBJ = -o
ANSI=-ansi
AOTHER=
CFLAGS= -O0 -g -I. -I$(SET) -I$(PCCTS_H) -DUSER_ZZSYN $(COTHER) $(ANSI) -DZZLEXBUFSIZE=32000
#
# SGI Users, use this CFLAGS
#
#CFLAGS= -O -I. -I$(SET) -I$(PCCTS_H) -DUSER_ZZSYN -woff 3262

OBJ=antlr.o scan.o err.o bits.o build.o fset2.o fset.o gen.o \
        globals.o hash.o lex.o main.o misc.o set.o pred.o egman.o mrhoist.o fcache.o $(OBJOTHER)

antlr : $(OBJ) $(SRC)
		$(CC) $(CFLAGS) -o antlr $(OBJ)
		mv antlr ${WORKSPACE}/Tools/bin

# what files does PCCTS generate (both ANTLR and DLG)
PCCTS_GEN=antlr.c scan.c err.c tokens.h mode.h parser.dlg stdpccts.h remap.h

SRC=antlr.c scan.c err.c bits.c build.c fset2.c fset.c gen.c globals.c \
	hash.c lex.c main.c misc.c $(SET)/set.c pred.c egman.c mrhoist.c fcache.c

#
# Don't worry about the ambiguity messages coming from antlr
# for making antlr.c etc...  [should be 10 of them, I think]
#
antlr.c stdpccts.h parser.dlg tokens.h err.c : antlr.g
	$(ANTLR) -gh antlr.g $(AOTHER)

antlr.o : antlr.c mode.h tokens.h

scan.o : scan.c mode.h tokens.h

scan.c mode.h: parser.dlg
	$(DLG) -C2 parser.dlg scan.c

set.o : $(SET)/set.c
	$(CC) $(CFLAGS) -c -o set.o $(SET)/set.c


#
# ****** These next targets are common to UNIX and PC world ********
#

#clean up all the intermediate files
clean:
	rm -f *.$(OBJ_EXT) core

#remove everything in clean plus the PCCTS files generated
scrub:
	rm -f $(PCCTS_GEN) *.$(OBJ_EXT) core
