#
# makefile to make eag-compile and eag-skel
#
RELEASE = 1

VERSION = 6

TOP = $(HOME)/eag

LDIR = $(TOP)/lib

IDIR = $(TOP)/include

BDIR = $(TOP)/bin

X11LDIR = /usr/local/X11R6/lib

CC = gcc

DCFL = -Wall -O

CFLAGS = $(DCFL) -I$(IDIR) -I.

LIBS = $(LDIR)/libeag.a

LDFLAGS = 

COMPSRCS = \
	main.c \
	meta.c \
	gentemplates.c \
	rules.c \
	recursion.c \
	lookahead.c \
	eag_unparser.c \
	warshall.c \
	lex.c \
	prepare.c \
	layout.c \
	reduce.c \
	topdown.c \
	codemeta.c \
	lr.c \
	leftcorner.c \
	tree.c \
	gentree.c \
	ident.c \
	common.c \
	typecheck.c \
	empty.c \
	flow.c \
	numbering.c \
	parser.c \
	placeholder.c

SKELSRCS = \
	skelmain.c \
	codeskel.c \
	gentree.c \
	numbering.c \
	tree.c \
	parser.c \
	lex.c

SRCS = $(COMPSRCS) $(SKELSRCS)

EXTHDRS = $(IDIR)/memalloc.h \
	  $(IDIR)/textstorage.h

HDRS =	tree.h \
	meta.h \
	recursion.h \
	layout.h \
	warshall.h \
	gentemplates.h \
	rules.h \
	codemeta.h \
	reduce.h \
	lookahead.h \
	numbering.h \
	codeskel.h \
	gentree.h \
	flow.h \
	eag_unparser.h \
	lex.h \
	topdown.h \
	version.h \
	lr.h \
	leftcorner.h \
	prepare.h \
	ident.h \
	main.h \
	common.h \
	sizes.h \
	typecheck.h \
	empty.h \
	parser.h \
	placeholder.h

COMPOBJS = \
	tree.o \
	recursion.o \
	meta.o \
	lookahead.o \
	numbering.o \
	gentemplates.o \
	rules.o \
	layout.o \
	reduce.o \
	warshall.o \
	flow.o \
	eag_unparser.o \
	gentree.o \
	lex.o \
	ident.o \
	topdown.o \
	prepare.o \
	codemeta.o \
	lr.o \
	leftcorner.o \
	main.o \
	typecheck.o \
	common.o \
	empty.o \
	parser.o \
	placeholder.o

SKELOBJS = \
	skelmain.o \
	tree.o \
	gentree.o \
	numbering.o \
	codeskel.o \
	parser.o \
	lex.o

OBJS = $(COMPOBJS) $(SKELOBJS)

DOC =

COMPILER = eag-compile

SKELETON = eag-skel

PROGS = $(COMPILER) $(SKELETON)

SCRIPTS = eagcc eaged eagccl eagedl

MAKEFILE = Makefile

JUNK = tmp core makelog skeleton.log skeleton.aux skeleton.dvi

DISTFILES = $(SRCS) $(DOC) $(HDRS) $(MAKEFILE) $(SKELFILES)

help :
	@echo " Possible make targets:"
	@echo "all		Create local running programs."
	@echo "lint		Type check local files."
	@echo "clean		Free disk space."
	@echo "distfiles	List distribution files."
	@echo "install		Install relevant files."
	@echo "test		Run tests."

all: $(PROGS) $(SCRIPTS)

eagcc: $(MAKEFILE)
	echo '#!/bin/sh' > $@
	echo '$(CC) $(CFLAGS) -c $$1.c' >> $@
	echo '$(CC) -o $$1 -L$(LDIR) $$1.o -leag $$2 $$3 $$4 $$5 $$6 $$7' >> $@
	chmod 755 $@

eagccl: $(MAKEFILE)
	echo '#!/bin/sh' > $@
	echo '$(CC) -o $$1 -L$(LDIR) $$1.o -leag $$2 $$3 $$4 $$5 $$6 $$7' >> $@
	chmod 755 $@

eaged: $(MAKEFILE)
	echo '#!/bin/sh' > $@
	echo '$(CC) $(CFLAGS) -c $$1.c' >> $@
	echo '$(CC) -o $$1 -L$(LDIR) -L$(X11LDIR) $$1.o -ledt -lXedt -leag -lXaw -lXt -lX11 -lXmu -lXext -lSM -lICE -lm $$2 $$3 $$4 $$5' >> $@
	chmod 755 $@

eagedl: $(MAKEFILE)
	echo '#!/bin/sh' > $@
	echo '$(CC) -o $$1 -L$(LDIR) -L$(X11LDIR) $$1.o -ledt -lXedt -leag -lXaw -lXt -lX11 -lXmu -lXext -lSM -lICE -lm $$2 $$3 $$4 $$5' >> $@
	chmod 755 $@

test:
	@echo "Sorry, no testing available"

install: $(PROGS) $(SCRIPTS)
	cp $(PROGS) $(BDIR)
	strip $(BDIR)/$(COMPILER)
	strip $(BDIR)/$(SKELETON)
	cp $(SCRIPTS) $(BDIR)

clean:
	rm -f $(JUNK) $(OBJS) $(PROGS) $(SCRIPTS)

distfiles:
	@echo $(DISTFILES) | tr ' ' '\012'

lint: lint-compile lint-skel

lint-compile: $(COMPSRCS)
	lint $(LINTFLAGS) $(COMPSRCS) $(LINTLIBS)

lint-skel: $(COMPSRCS)
	lint $(LINTFLAGS) $(SKELSRCS) $(LINTLIBS)

# Non-standard make rules
###
version.h: $(MAKEFILE)
	echo '/*' > $@
	echo '   File: version.h' >> $@
	echo '   Generated on '`date` >> $@
	echo '*/' >> $@
	echo '#ifndef IncVersion' >> $@
	echo '#define IncVersion' >> $@
	echo '#define ReleaseNr $(RELEASE)' >> $@
	echo '#define VersionNr $(VERSION)' >> $@
	echo '#endif /* IncVersion */' >> $@

$(COMPILER): $(COMPOBJS) $(LIBS)
	$(CC) $(LDFLAGS) $(COMPOBJS) $(LIBS) -o $@

$(SKELETON): $(SKELOBJS) $(LIBS)
	$(CC) $(LDFLAGS) $(SKELOBJS) $(LIBS) -o $@

main.o: $(EXTHDRS) $(HDRS)
	$(CC) $(CFLAGS) -DPATH=\"$(IDIR)\" -c main.c
tree.o: $(EXTHDRS) tree.h
lex.o: $(EXTHDRS) lex.h
parser.o: $(EXTHDRS) parser.h tree.h gentree.h sizes.h typecheck.h lex.h
ident.o: $(EXTHDRS) tree.h ident.h numbering.h
gentree.o: $(EXTHDRS) tree.h gentree.h
typecheck.o: $(EXTHDRS) tree.h typecheck.h numbering.h
empty.o: $(EXTHDRS) tree.h empty.h main.h numbering.h
leftcorner.o: $(EXTHDRS) tree.h leftcorner.h typecheck.h \
		main.h common.h codemeta.h gentemplates.h numbering.h \
		recursion.h
lr.o: $(EXTHDRS) tree.h lr.h typecheck.h main.h common.h codemeta.h numbering.h
topdown.o: $(EXTHDRS) tree.h topdown.h typecheck.h main.h\
	   codemeta.h common.h gentemplates.h numbering.h
common.o: $(EXTHDRS) sizes.h common.h tree.h main.h numbering.h
prepare.o: $(EXTHDRS) tree.h prepare.h numbering.h
eag_unparser.o: $(EXTHDRS) tree.h eag_unparser.h numbering.h
flow.o: $(EXTHDRS) tree.h flow.h main.h numbering.h
lookahead.o: $(EXTHDRS) tree.h main.h lookahead.h numbering.h
reduce.o: $(EXTHDRS) tree.h main.h reduce.h numbering.h
numbering.o: $(EXTHDRS) tree.h main.h numbering.h
recursion.o: $(EXTHDRS) tree.h main.h numbering.h recursion.h warshall.h
placeholder.o: $(EXTHDRS) tree.h placeholder.h numbering.h
warshall.o: $(EXTHDRS) warshall.h
gentemplates.o: $(EXTHDRS) tree.h gentemplates.h main.h \
		layout.h common.h numbering.h
rules.o: $(EXTHDRS) tree.h rules.h main.h layout.h common.h numbering.h
meta.o: $(EXTHDRS) tree.h meta.h main.h numbering.h
codemeta.o: $(EXTHDRS) tree.h main.h common.h codemeta.h numbering.h
skelmain.o: $(EXTHDRS) main.h parser.h codeskel.h numbering.h
codeskel.o: $(EXTHDRS) main.h tree.h codeskel.h sizes.h numbering.h
layout.o: $(EXTHDRS) main.h tree.h layout.h numbering.h
