# Makefile for bison
# Copyright (C) 1984, 1989, 1991 Bob Corbett and Free Software Foundation, Inc.
# 
# This file is part of Bison, the GNU Compiler Compiler.
# 
# Bison is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# 
# Bison is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with Bison; see the file COPYING.  If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.

SHELL = /bin/sh

#### Start of system configuration section. ####

srcdir = @srcdir@
@VPATH@

CC = @CC@
INSTALL = @INSTALL@
INSTALLDATA = @INSTALLDATA@

# Things you might add to DEFS:
# -DSTDC_HEADERS	If you have ANSI C headers and libraries.
# -DUSG			If you have System V/ANSI C string and
#			memory functions and headers.
DEFS = @DEFS@

CDEBUG = -g
CFLAGS = $(CDEBUG) $(DEFS)
LDFLAGS = -g

LIBS = @LIBS@

# Some System V machines do not come with libPW.  If this is true, use
# the GNU alloca.o here.
ALLOCA = @ALLOCA@

prefix = /usr/local

# where the installed binary goes
bindir = $(prefix)/bin

# where the parsers go
datadir = $(prefix)/lib

# where the info files go
infodir = $(prefix)/info

# where manual pages go and what their extensions should be
mandir = $(prefix)/man/man$(manext)
manext = 1

#### End of system configuration section. ####

# names of parser files
PFILE = bison.simple
PFILE1 = bison.hairy

PFILES = -DXPFILE=\"$(datadir)/$(PFILE)\" \
	 -DXPFILE1=\"$(datadir)/$(PFILE1)\"

OBJECTS = LR0.obj allocate.obj closure.obj conflicts.obj derives.obj \
	  files.obj getargs.obj gram.obj lalr.obj lex.obj main.obj \
	  nullable.obj output.obj print.obj reader.obj reduce.obj symtab.obj \
	  warshall.obj version.obj getopt.obj getopt1.obj $(ALLOCA)

all: bison bison.info

clean:
	-rm -f *.obj core bison.exe

distclean: realclean
	-rm -f TAGS Makefile config.status

realclean: distclean
	-rm -f bison.info*

# Most of these deps are in case using RCS.
install: all mergedir.awk bison.1 $(srcdir)/$(PFILE) $(srcdir)/$(PFILE1)
	$(INSTALL) bison $(bindir)
	-cd $(datadir); rm -f $(PFILE) $(PFILE1)
# Copy bison.simple, inserting directory name into the #line commands.
	awk -f $(srcdir)/mergedir.awk dir=$(datadir) $(srcdir)/$(PFILE) > $(datadir)/$(PFILE)
	$(INSTALLDATA) $(srcdir)/$(PFILE1) $(datadir)
	chmod a+r $(datadir)/$(PFILE) $(datadir)/$(PFILE1) 
	$(INSTALLDATA) $(srcdir)/bison.1 $(mandir)/bison.$(manext)
	chmod a+r $(mandir)/bison.$(manext)
	$(INSTALLDATA) $(srcdir)/bison.info* $(infodir)

bison: $(OBJECTS)
	$(CC) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBS)

dist:
	echo bison-`sed -e '/version_string/!d' -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q version.c` > .fname
	-rm -rf `cat .fname`
	mkdir `cat .fname`
	ln  COPYING ChangeLog Makefile.in configure configure.in \
	    REFERENCES bison.1 \
	    bison.simple bison.hairy mergedir.awk \
	    LR0.c allocate.c closure.c conflicts.c derives.c \
	    files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \
	    output.c print.c reader.c reduce.c symtab.c version.c \
	    warshall.c files.h gram.h lex.h machine.h new.h state.h \
	    symtab.h system.h types.h bison.cld build.com vmsgetargs.c \
	    vmshlp.mar README bison.texinfo bison.info* texinfo.tex \
	  `cat .fname`
	cp -p getopt.[ch] getopt1.c alloca.c `cat .fname`
	tar chZf `cat .fname`.tar.Z `cat .fname`
	-rm -rf `cat .fname` .fname
.PHONY: dist

bison.info: bison.texinfo
	makeinfo $bison.texinfo<

TAGS: *.c *.h
	etags *.c *.h

# This file is different to pass the parser file names to the compiler.
files.o: files.c
	$(CC) -c $(CFLAGS) $(PFILES) $files.c< $(OUTPUT_OPTION)

LR0.o: system.h machine.h new.h gram.h state.h
closure.o: system.h machine.h new.h gram.h
conflicts.o: system.h machine.h new.h files.h gram.h state.h
derives.o: system.h new.h types.h gram.h
files.o: system.h files.h new.h gram.h
getargs.o: system.h files.h
lalr.o: system.h machine.h types.h state.h new.h gram.h
lex.o: system.h files.h symtab.h lex.h
main.o: system.h machine.h
nullable.o: system.h types.h gram.h new.h
output.o: system.h machine.h new.h files.h gram.h state.h
print.o: system.h machine.h new.h files.h gram.h state.h
reader.o: system.h files.h new.h symtab.h lex.h gram.h
reduce.o: system.h machine.h files.h new.h gram.h
symtab.o: system.h new.h symtab.h gram.h
warshall.o: system.h machine.h
