# @(#) $Header: Makefile.in,v 1.2 94/01/04 14:33:19 vern Exp $ (LBL)

# If your version of "make" does not define $(MAKE), comment in the
# definition of "MAKE" below.  (You only need to do this if you intend
# to do "make bigcheck" or "make dist".)
MAKE = smake

# Possible values for DEFS:
#
# For flex to always generate 8-bit scanners, add "-DDEFAULT_CSIZE=256"
# to DEFS.
#
# For Vax/VMS, add "-DVMS" to DEFS.
#
# For MS-DOS, add "-DMS_DOS" to DEFS.  See the directory MISC/MSDOS for
# additional info.

CFLAGS = data=far ignore=85 noicons stackextend optimize
DEFS = define=YYBISON=1 define=YY_NEVER_INTERACTIVE=1
LDFLAGS = noicons
LIBS =

# Installation targeting.  Files will be installed under the tree
# rooted at prefix.  flex will be installed in bindir, libfl.lib in
# libdir, FlexLexer.h will be installed in includedir, and the manual
# pages will be installed in mandir with extension manext.
# 
# Raw, unformatted troff source will be installed if INSTALLMAN=man,
# nroff preformatted versions will be installed if INSTALLMAN=cat.

prefix = Programmer:other # Change this for your AMIGA system.
exec_prefix = $(prefix)
bindir = $(exec_prefix)/bin
libdir = $(exec_prefix)/lib
includedir = $(prefix)/include
manext = 1
mandir = $(prefix)/man/man$(manext)

# You can define this to be "lex" if you want to replace lex at your site.
FLEX = flex

INSTALLMAN = man

SHELL =
srcdir = .
VPATH =

LN_S =
YACC = bison -y
SED = sed
CC = sc
WMERGE = wmerge # from the CWEB distribution
AR = oml
RANLIB =
INSTALL = copy clone
INSTALL_DATA = $(INSTALL)
INSTALL_PROGRAM = $(INSTALL)

# You normally do not need to modify anything below this point.
# ------------------------------------------------------------

CPPFLAGS = idir=. idir=$(srcdir) $(DEFS)

.c.o:
	$(CC) $(CPPFLAGS) $(CFLAGS) $<

HEADERS = flexdef.h version.h

SOURCES = ccl.c dfa.c ecs.c gen.c main.c misc.c nfa.c parse.y \
	scan.l skel.c sym.c tblcmp.c yylex.c
OBJECTS = ccl.o dfa.o ecs.o gen.o main.o misc.o nfa.o parse.o \
	skel.o sym.o tblcmp.o yylex.o \
	$(libdir)/alloca.o $(libdir)/xmalloc.o

LIBSRCS = libmain.c libyywrap.c
LIBOBJS = ansilibmain.o ansilibyywrap.o

LINTSRCS = ccl.c dfa.c ecs.c gen.c main.c misc.c nfa.c parse.c \
	scan.c skel.c sym.c tblcmp.c yylex.c

DISTFILES = README NEWS COPYING INSTALL FlexLexer.h \
	configure.in conf.in Makefile.in mkskel.sh skel.c flex.skl \
	$(HEADERS) $(SOURCES) $(LIBSRCS) MISC \
	flex.1 scan.c install.sh mkinstalldirs configure

DIST_NAME = flex

# which "flex" to use to generate scan.c from scan.l
FLEX_EXEC = ./$(FLEX)
FLEX_FLAGS = -t $(PERF_REPORT)
COMPRESSION =
PERF_REPORT = -p

FLEXLIB = libfl.lib

all: $(FLEX)

$(FLEX): $(OBJECTS) $(FLEXLIB) scan.o
	$(CC) $(CFLAGS) link to $(FLEX) $(LDFLAGS) $(OBJECTS) scan.o $(FLEXLIB) $(LIBS)

bootflex: $(OBJECTS) $(FLEXLIB) initscan.o
	$(CC) $(CFLAGS) link to $(FLEX) $(LDFLAGS) $(OBJECTS) initscan.o $(FLEXLIB) $(LIBS)

parse.c: ansiparse.y
	$(YACC) -d ansiparse.y
	$(SED) "/extern char.*malloc/d" <y.tab.c >parse.tmp
	copy parse.tmp parse.c
	copy y.tab.h parse.h
	@delete y.tab.c y.tab.h parse.tmp
ansiparse.y: $(srcdir)/parse.y parse.ych
	$(WMERGE) $(srcdir)/parse.y parse.ych ansiparse.y

parse.h: parse.c

scan.c: scan.l
	$(FLEX_EXEC) $(FLEX_FLAGS) $(COMPRESSION) $(srcdir)/scan.l >scan.tmp
	$(SED) s,\"$(srcdir)/scan.l\",\"scan.l\", <scan.tmp >scan.c
	@delete scan.tmp

scan.o: scan.c parse.h flexdef.h config.h
initscan.o: initscan.c parse.h flexdef.h config.h
yylex.o: yylex.c parse.h flexdef.h config.h

skel.c: flex.skl mkskel.sh
	$(SHELL) $(srcdir)/mkskel.sh $(srcdir)/flex.skl >skel.c

main.o: main.c flexdef.h config.h version.h
ccl.o: ccl.c flexdef.h config.h
dfa.o: dfa.c flexdef.h config.h
ecs.o: ecs.c flexdef.h config.h
gen.o: gen.c flexdef.h config.h
misc.o: misc.c flexdef.h config.h
nfa.o: nfa.c flexdef.h config.h
parse.o: parse.c flexdef.h config.h
skel.o: skel.c flexdef.h config.h
sym.o: sym.c flexdef.h config.h
tblcmp.o: tblcmp.c flexdef.h config.h

alloca.o: alloca.c
	$(CC) $(CPPFLAGS) $(CFLAGS) define=xmalloc=yy_flex_xmalloc alloca.c

alloca.c: $(srcdir)/MISC/alloca.c
	@delete alloca.c
	copy $(srcdir)/MISC/alloca.c .

test: check
check: flex
	$(FLEX_EXEC) $(FLEX_FLAGS) $(COMPRESSION) $(srcdir)/scan.l > temp_a
	$(SED) s,"$(srcdir)/scan.l","scan.l", < temp_a > temp_b
	-diff scan.c temp_b -l10000 -w
	@delete temp_?
	@echo "Check successful, using COMPRESSION='$(COMPRESSION)'"

bigcheck:
	delete scan.c
	$(MAKE) COMPRESSION=-C check
	delete scan.c
	$(MAKE) COMPRESSION=-Ce check
	delete scan.c
	$(MAKE) COMPRESSION=-Cm check
	delete scan.c
	$(MAKE) COMPRESSION=-Cfea check
	delete scan.c
	$(MAKE) COMPRESSION=-CFer check
	delete scan.c
	$(MAKE) COMPRESSION=-l PERF_REPORT= check
	delete scan.c
	$(MAKE)
	@echo "All checks successful"

$(FLEXLIB): $(LIBOBJS)
	$(AR) $(FLEXLIB) R $(LIBOBJS)

$(FLEX).man: flex.1 # SMAKE can't `cd', sorry.  And, I don't have nroff.
#	cd $(srcdir), nroff -man flex.1 >$(FLEX).man

install: $(FLEX) $(FLEXLIB)
	$(INSTALL_PROGRAM) $(FLEX) $(bindir)/$(FLEX)
#	@delete $(bindir)/$(FLEX)++
	$(INSTALL_DATA) $(FLEXLIB) $(libdir)/libfl.lib
	$(INSTALL_DATA) $(srcdir)/FlexLexer.h $(includedir)/FlexLexer.h

ansilibmain.o: ansilibmain.c
ansilibmain.c: libmain.c libmain.ch
	$(WMERGE) libmain.c libmain.ch ansilibmain.c
ansilibyywrap.o: ansilibyywrap.c
ansilibyywrap.c: libyywrap.c libyywrap.ch
	$(WMERGE) libyywrap.c libyywrap.ch ansilibyywrap.c

clean:
	-delete parse.(c|h) ansi\#? \#?.(bak|o|lnk) \
	alloca.c lex.yy.(c|cc) $(FLEXLIB)

veryclean: clean
	-delete $(FLEX) scan.c
