# Makefile for busybox
#
# Copyright (C) 1999-2005 by Erik Andersen <andersen@codepoet.org>
#
# Licensed under the GPL v2, see the file LICENSE in this tarball.

SHELL_AR:=shell.a
ifndef $(SHELL_DIR)
SHELL_DIR:=$(top_builddir)/shell/
endif
srcdir=$(top_srcdir)/shell

SHELLT-y:=
SHELLT-$(CONFIG_ASH)				+= ash.o
SHELLT-$(CONFIG_HUSH)				+= hush.o
SHELLT-$(CONFIG_LASH)				+= lash.o
SHELLT-$(CONFIG_MSH)				+= msh.o
SHELLT-$(CONFIG_FEATURE_COMMAND_EDITING)	+= cmdedit.o

libraries-y+=$(SHELL_DIR)$(SHELL_AR)

$(SHELL_DIR)$(SHELL_AR): $(patsubst %,$(SHELL_DIR)%, $(SHELLT-y))
	$(AR) $(ARFLAGS) $@ $(patsubst %,$(SHELL_DIR)%, $(SHELLT-y))

$(SHELL_DIR)%.o: $(srcdir)/%.c
	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<

