#	$NetBSD: Makefile,v 1.51 2000/12/29 16:30:31 bjh21 Exp $
#	@(#)Makefile	8.4 (Berkeley) 5/5/95

HOSTCC = gcc
WARNS=2
YHEADER=1
PROG=	sh
SHSRCS=	alias.c cd.c echo.c error.c eval.c exec.c expand.c \
	histedit.c input.c jobs.c mail.c main.c memalloc.c miscbltin.c \
	mystring.c options.c parser.c redir.c show.c trap.c output.c var.c \
	test.c setmode.c test.c
GENSRCS=builtins.c builtins.h init.c nodes.c arith.c arith.h lex.yy.c \
	nodes.h syntax.c syntax.h token.h signames.c
SRCS=	${SHSRCS} ${GENSRCS}

OBJS=alias.o cd.o bltin/echo.o error.o eval.o exec.o expand.o \
	histedit.o input.o jobs.o mail.o main.o memalloc.o miscbltin.o \
	mystring.o options.o output.o parser.o redir.o show.o \
	trap.o var.o bltin/test.o signames.o \
	builtins.o init.o nodes.o syntax.o arith.o lex.yy.o \
	setmode.o bltin/times.o

OPT_FLAGS=-Os -g
LDFLAGS=-g
CFLAGS=$(OPT_FLAGS) -DSHELL -I. -DNO_HISTORY -DBSD=1 -DSMALL -D_GNU_SOURCE \
	-DGLOB_BROKEN -D__COPYRIGHT\(x\)= -D__RCSID\(x\)= -D_DIAGASSERT\(x\)=
CFLAGS+=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64

all: $(PROG)

$(PROG): build-tools $(GENSRCS) $(GENHDRS) $(OBJS)
	$(CC) $(LDFLAGS) -o $(PROG) $(OBJS) $(LDLIBS)
	
lex.yy.c: arith_lex.l
	flex -8 $< 
	
CLEANFILES+= mkinit mkinit.o mknodes mknodes.o \
	mksyntax mksyntax.o
	
CLEANFILES+= ${GENSRCS} ${GENHDRS}

build-tools: mkinit mknodes mksyntax

.ORDER: builtins.c builtins.h
builtins.c builtins.h: mkbuiltins builtins.def
	sh mkbuiltins shell.h builtins.def `pwd`

INIT_DEPS = alias.c eval.c exec.c input.c jobs.c options.c parser.c \
	redir.c trap.c var.c output.c
	
init.c: mkinit $(INIT_DEPS)
	./mkinit $(INIT_DEPS)

mkinit: mkinit.c
	$(HOSTCC) -o $@ $<

mknodes: mknodes.c
	$(HOSTCC) -o $@ $<

mksyntax: mksyntax.c
	$(HOSTCC) -o $@ $<

signames.c: mksignames
	./mksignames

nodes.c nodes.h: mknodes nodetypes nodes.c.pat
	./mknodes ./nodetypes ./nodes.c.pat

syntax.c syntax.h: mksyntax
	./mksyntax

arith.c arith.h: arith.y
	yacc -d arith.y
	mv y.tab.h arith.h
	mv y.tab.c arith.c

token.h: mktokens
	sh ./mktokens

clean:
	rm -f $(PROG) $(OBJS) $(CLEANFILES) core
