# 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.

APPLETS_AR:=applets.a
ifndef $(APPLETS_DIR)
APPLETS_DIR:=$(top_builddir)/applets/
endif
srcdir=$(top_srcdir)/applets

APPLET_SRC:=applets.c busybox.c
APPLET_OBJ:= $(patsubst %.c,$(APPLETS_DIR)%.o, $(APPLET_SRC))

libraries-y+=$(APPLETS_DIR)$(APPLETS_AR)

$(APPLETS_DIR)$(APPLETS_AR): $(APPLET_OBJ)
	$(AR) $(ARFLAGS) $@ $(APPLET_OBJ)

$(APPLET_OBJ): $(top_builddir)/.config 
$(APPLET_OBJ): $(APPLETS_DIR)%.o: $(srcdir)/%.c
	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<

