# NOTE: Makefile.in is converted into Makefile by the configure script
# in the parent directory.  Once configure has run, you can recreate
# the Makefile by running just config.status.

# === Variables set by config.stat ===

VERSION=	@VERSION@

srcdir=		@srcdir@
VPATH=		@srcdir@

CC=		@CC@
RANLIB=		@RANLIB@
AR=		@AR@

DEFS=		@DEFS@
LIBS=		@LIBS@


# === Other things that are customizable but not by configure ===

INCLDIR=	$(srcdir)/../Include
OPT=		@OPT@
CFLAGS=		$(OPT) -I$(INCLDIR) -I.. $(DEFS)

MKDEP=		mkdep
SHELL=		/bin/sh


# === Fixed definitions ===

POBJS=		acceler.o grammar1.o \
		listnode.o node.o parser.o \
		parsetok.o tokenizer.o bitset.o \
		metagrammar.o

OBJS=		$(POBJS) intrcheck.o myreadline.o

PGENMAIN=	pgenmain.o

PGOBJS=		firstsets.o grammar.o pgen.o printgrammar.o

PGENOBJS=	$(PGENMAIN) $(POBJS) $(PGOBJS)

DOBJS=		$(PGENMAIN) $(OBJS) $(PGOBJS)

PGEN=		pgen

LIBRARY=	../libpython$(VERSION).a

# === Rules ===

all:		$(PGEN) $(OBJS)

# This target is used by the master Makefile to add the objects to the library
add2lib:	$(OBJS)
		$(AR) cr $(LIBRARY) $(OBJS)
		touch add2lib

$(PGEN):	$(PGENOBJS)
		$(CC) $(OPT) $(PGENOBJS) $(LIBS) -o $(PGEN)

clean:
		-rm -f *.o core *~ [@,#]* *.old *.orig *.rej add2lib

clobber:	clean
		-rm -f $(PGEN) *.a tags TAGS

Makefile:	$(srcdir)/Makefile.in ../config.status
		(cd ..; CONFIG_FILES=Parser/Makefile CONFIG_HEADERS= \
		$(SHELL) config.status)

depend:
		$(MKDEP) $(CFLAGS) `echo $(DOBJS) | tr ' ' '\012' | \
					sed 's|\(.*\)\.o|$(srcdir)/\1.c|'`

.PRECIOUS:	Makefile

acceler.o: acceler.c
grammar1.o: grammar1.c
intrcheck.o: intrcheck.c
listnode.o: listnode.c
myreadline.o: myreadline.c
node.o: node.c
parser.o: parser.c
parsetok.o: parsetok.c
tokenizer.o: tokenizer.c
bitset.o: bitset.c
firstsets.o: firstsets.c
grammar.o: grammar.c
metagrammar.o: metagrammar.c
pgen.o: pgen.c
printgrammar.o: printgrammar.c
pgenmain.o: pgenmain.c

# DO NOT DELETE THIS LINE -- mkdep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
