# @(#) $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 = make

# 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 noicons stackextend optimize
DEFS =
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
exec_prefix = $(prefix)
bindir = $(exec_prefix)/bin
libdir = $(exec_prefix)/lib
includedir = $(prefix)/include
manext = 1
mandir = $(prefix)/man/man$(manext)

INSTALLMAN = man

SHELL =
srcdir = .
VPATH =

LN_S =
YACC = yacc
SED = sed
CC = sc
WMERGE = wmerge
AR = oml
RANLIB =
INSTALL =
INSTALL_DATA =
INSTALL_PROGRAM =

# 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 ansidfa.o ecs.o ansigen.o main.o ansimisc.o nfa.o parse.o \
	ansiskel.o ansisym.o ansitblcmp.o yylex.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 Makefile.in mkskel.sh flex.skl \
	$(HEADERS) $(SOURCES) $(LIBSRCS) MISC \
	flex.1 flexdoc.1 \
	scan.c install.sh mkinstalldirs configure

DIST_NAME = flex

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

FLEXLIB = libfl.lib

all: flex

flex: $(OBJECTS) $(FLEXLIB) ansiscan.o
	$(CC) $(CFLAGS) link to flex $(LDFLAGS) ansiscan.o $(OBJECTS) $(FLEXLIB) $(LIBS)

bootflex: $(OBJECTS) $(FLEXLIB) bootscan.o
	$(CC) $(CFLAGS) link to flex $(LDFLAGS) bootscan.o $(OBJECTS) $(FLEXLIB) $(LIBS)

parse.c: ansiparse.y
	$(YACC) -d ansiparse.y
	copy y.tab.c parse.c
	copy y.tab.h parse.h
	@delete y.tab.c y.tab.h
ansiparse.y: $(srcdir)/parse.y parse.ych
	$(WMERGE) $(srcdir)/parse.y parse.ych ansiparse.y

parse.h: parse.c

ansiscan.o: ansiscan.c parse.h flexdef.h
ansiscan.c: ansiscan.l
	$(FLEX) $(FLEX_FLAGS) $(COMPRESSION) ansiscan.l >ansiscan.tmp
	$(SED) s,\"$(srcdir)/ansiscan.l\",\"ansiscan.l\", <ansiscan.tmp >ansiscan.c
	@delete ansiscan.tmp
ansiscan.l: $(srcdir)/scan.l scan.lch
	$(WMERGE) $(srcdir)/scan.l scan.lch ansiscan.l

bootscan.o: bootscan.c
bootscan.c: $(srcdir)/initscan.c scan.lch
	$(WMERGE) $(srcdir)/initscan.c scan.lch bootscan.c

yylex.o: yylex.c parse.h flexdef.h

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

main.o: main.c flexdef.h version.h
ccl.o: ccl.c flexdef.h
ansidfa.o: ansidfa.c
ansidfa.c: dfa.c dfa.ch flexdef.h
	$(WMERGE) dfa.c dfa.ch ansidfa.c
ecs.o: ecs.c flexdef.h
ansigen.o: ansigen.c
ansigen.c: gen.c gen.ch flexdef.h
	$(WMERGE) gen.c gen.ch ansigen.c
ansimisc.o: ansimisc.c
ansimisc.c: misc.c misc.ch flexdef.h
	$(WMERGE) misc.c misc.ch ansimisc.c
nfa.o: nfa.c flexdef.h
parse.o: parse.c flexdef.h
ansiskel.o: ansiskel.c flexdef.h
ansisym.o: ansisym.c
ansisym.c: sym.c sym.ch flexdef.h
	$(WMERGE) sym.c sym.ch ansisym.c
ansitblcmp.o: ansitblcmp.c
ansitblcmp.c: tblcmp.c tblcmp.ch flexdef.h
	$(WMERGE) tblcmp.c tblcmp.ch ansitblcmp.c

alloca.o: alloca.c
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -Dxmalloc=yy_flex_xmalloc alloca.c

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

test: check
check: flex ansiscan.l
	./flex $(FLEX_FLAGS) $(COMPRESSION) $(srcdir)/ansiscan.l > temp_a
	$(SED) s,"$(srcdir)/ansiscan.l","ansiscan.l", < temp_a > temp_b
	-diff ansiscan.c temp_b -l10000 -w
	@delete temp_?

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)

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) bootscan.c\
	alloca.c lex.yy.(c|cc) $(FLEXLIB)

veryclean: clean
	-delete flex
