# Makefile for flex 2.4.7 for the Amiga using SAS/C 6.51
# 08/17/94 by Carsten Steger <stegerc@informatik.tu-muenchen.de>
#
# If you build flex from scratch, you will have to call smake twice because
# of a bug in smake that tries to generate scan.c by using flex, although
# the rule for .bootstrap has already copied initscan.c to scan.c.


MAKE = smake
MAKEFILE = Makefile.amiga

CFLAGS = data=f parm=r
CLFLAGS = parm=b
OFLAGS = opt ign=304
DEFS = def=HAVE_STRING_H=1
LDFLAGS = link
LIBS =

BINDIR = SC:c/
LIBDIR = LIB:
INCLUDEDIR = CXXINCLUDE:

YACC = yacc
CC = sc
AR = oml


CPPFLAGS = $(DEFS)

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

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 \
	scan.o skel.o sym.o tblcmp.o yylex.o alloca.o

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

FLEX = flex
FLEX_FLAGS = -ist $(PERF_REPORT)
COMPRESSION =
PERF_REPORT = -p

FLEXLIB = fl.lib


all: flex

flex: .bootstrap $(OBJECTS) $(FLEXLIB)
	$(CC) $(OBJECTS) to=flex $(CFLAGS) $(LDFLAGS) lib=$(FLEXLIB) $(LIBS)

.bootstrap: initscan.c
	@-delete scan.c quiet
	copy initscan.c scan.c
	@touch .bootstrap

parse.c: parse.y
	$(YACC) -d parse.y
	sed "/extern char.*malloc/d" <y.tab.c >parse.c
	@-delete y.tab.c quiet
	@copy y.tab.h parse.h
	@-delete y.tab.h quiet

parse.h: parse.c

scan.c: scan.l
	$(FLEX) $(FLEX_FLAGS) $(COMPRESSION) scan.l >scan.c

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

skel.c: flex.skl mkskel.amiga
	execute mkskel.amiga flex.skl skel.c

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

alloca.o: alloca.c config.h
	$(CC) $(CPPFLAGS) $(CFLAGS) $(OFLAGS) def=STACK_DIRECTION=-1 \
	def=xmalloc=yy_flex_xmalloc def=HAVE_CONFIG_H=1 alloca.c

alloca.c: MISC/alloca.c
	@-delete alloca.c quiet
	@-copy MISC/alloca.c alloca.c

config.h: config.h.amiga
	copy config.h.amiga config.h

libmain.o: libmain.c
	$(CC) $(CPPFLAGS) $(CLFLAGS) $(OFLAGS) $<

libyywrap.o: libyywrap.c
	$(CC) $(CPPFLAGS) $(CLFLAGS) $(OFLAGS) $<

test: check
check: flex
	flex $(FLEX_FLAGS) $(COMPRESSION) scan.l >scan.tmp
	diff scan.c scan.tmp
	@echo "*E[33mCheck successful, using COMPRESSION=$(COMPRESSION)*E[0m"
	@-delete scan.tmp quiet

bigcheck:
	@-delete scan.c quiet
	$(MAKE) -f $(MAKEFILE) COMPRESSION=-C OFLAGS= check
	@-delete scan.c quiet
	$(MAKE) -f $(MAKEFILE) COMPRESSION=-Ce OFLAGS= check
	@-delete scan.c quiet
	$(MAKE) -f $(MAKEFILE) COMPRESSION=-Cm OFLAGS= check
	@-delete scan.c quiet
	$(MAKE) -f $(MAKEFILE) COMPRESSION=-Cfea OFLAGS= check
	@-delete scan.c quiet
	$(MAKE) -f $(MAKEFILE) COMPRESSION=-CFer OFLAGS= check
	@-delete scan.c quiet
	$(MAKE) -f $(MAKEFILE) COMPRESSION=-l PERF_REPORT= OFLAGS= check
	@-delete scan.c quiet
	$(MAKE) -f $(MAKEFILE)
	@echo "*E[33mAll checks successful*E[0m"

$(FLEXLIB): $(LIBOBJS)
	$(AR) $(FLEXLIB) r $(LIBOBJS)

flex.man: flex.1
	groff -Tascii -man flex.1 >flex.man

flexdoc.man: flexdoc.1
	groff -Tascii -man flexdoc.1 >flexdoc.man

install: flex $(FLEXLIB)
	copy flex $(BINDIR)flex
	copy flex "$(BINDIR)flex++"
	copy fl.lib $(LIBDIR)fl.lib
	copy FlexLexer.h $(INCLUDEDIR)FlexLexer.h

uninstall:
	-delete $(BINDIR)flex $(BINDIR)flex++ quiet
	-delete $(LIBDIR)fl.lib quiet
	-delete $(INCLUDEDIR)FlexLexer.h quiet

mostlyclean:
	-delete scan.tmp quiet

clean: mostlyclean
	-delete parse.c parse.h \#?.o alloca.c flex.lnk $(FLEXLIB) quiet

distclean: clean
	-delete .bootstrap flex scan.c config.h quiet

realclean: distclean
	-delete flex.man flexdoc.man quiet
