SHELL =		/bin/sh

#######
include $(BUILDHOME)/buildprefs/make.pre
#######

TARGET =	$(OBJ_DIR)/libbuiltins.a

DEFS =		-DHAVE_CONFIG_H -DSHELL
INCLUDES +=	-I. -I.. -I../lib

CFLAGS +=	$(DEFS) $(SYSTEM_FLAGS)

.SUFFIXES:
.SUFFIXES:	.def .c .o

# How to make a .c file from a .def file.
.def.c:
		./mkbuiltins -D . $<

DEFSRC =	\
		alias.def \
		bind.def \
		break.def \
		builtin.def \
		cd.def \
		colon.def \
		command.def \
		declare.def \
		echo.def \
		enable.def \
		eval.def \
		exec.def \
		exit.def \
		fc.def \
		fg_bg.def \
		getopts.def \
		hash.def \
		help.def \
		history.def \
		jobs.def \
		kill.def \
		let.def \
		printf.def \
		pushd.def \
		read.def \
		return.def \
		set.def \
		setattr.def \
		shift.def \
		shopt.def \
		source.def \
		suspend.def \
		test.def \
		times.def \
		trap.def \
		type.def \
		ulimit.def \
		umask.def \
		wait.def

# This def file produces no .c file.
DEFSRC2 = \
		reserved.def

GEN_C =		$(addsuffix .c, $(basename $(DEFSRC)))

SRCS =		$(GEN_C) \
		bashgetopt.c \
		builtins.c \
		common.c \
		evalfile.c \
		evalstring.c \
		getopt.c \

OBJS =		$(SRCS_LIST_TO_OBJS)

all:		$(TARGET)

$(TARGET):	mkbuiltins $(OBJ_DIR) $(OBJS)
		rm -f $@
		$(AR) $(ARFLAGS) $@ $(OBJS)

builtext.h builtins.c: mkbuiltins $(DEFSRC) $(DEFSRC2)
		@-if test -f builtins.c; then mv -f builtins.c old-builtins.c; fi
		@-if test -f builtext.h; then mv -f builtext.h old-builtext.h; fi
		./mkbuiltins -externfile builtext.h -structfile builtins.c -noproduction -D . $(DEFSRC) $(DEFSRC2)
		@-if cmp -s old-builtext.h builtext.h; then \
			mv old-builtext.h builtext.h; \
		else \
			rm -f old-builtext.h; \
		fi
		@-if cmp -s old-builtins.c builtins.c; then \
			mv old-builtins.c builtins.c; \
		else \
			rm -f old-builtins.c; \
		fi

mkbuiltins: mkbuiltins.c 
ifeq ($(COMPILER), metrowerks)
		$(CC) -I- -I. -I.. $(INCLUDES) -c $<
		$(LD) -o $@ $@.o
else
		$(CC) -I.. $(INCLUDES) -o $@ $<
endif

pipesize.h:	psize.aux
		$(SHELL) ./psize.sh > pipesize.h

psize.aux: psize.c	
ifeq ($(COMPILER), metrowerks)
		$(CC) -I- -I. -I.. $(INCLUDES) -c -o $@.o $<
		$(LD) -o $@ $@.o
else
		$(CC) -I.. $(INCLUDES) -o $@ $<
endif

$(OBJS):	mkbuiltins ../config.h

$(OBJ_DIR)/ulimit.o:	pipesize.h
$(OBJ_DIR)/declare.o:	builtext.h
$(OBJ_DIR)/exit.o:	builtext.h
$(OBJ_DIR)/pushd.o:	builtext.h

clean::
		rm -f builtext.h builtins.c mkbuiltins $(OBJ_DIR)/mkbuiltins.o pipesize.h psize.aux $(OBJ_DIR)/psize.o
		rm -f $(addsuffix .c, $(foreach file, $(DEFSRC), $(basename $(file))))

#######
include $(BUILDHOME)/buildprefs/make.post
#######
