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

FINDUTILS_AR:=findutils.a
ifndef $(FINDUTILS_DIR)
FINDUTILS_DIR:=$(top_builddir)/findutils/
endif
srcdir=$(top_srcdir)/findutils

FINDUTILS-y:=
FINDUTILS-$(CONFIG_FIND)	+= find.o
FINDUTILS-$(CONFIG_GREP)	+= grep.o
FINDUTILS-$(CONFIG_XARGS)	+= xargs.o

libraries-y+=$(FINDUTILS_DIR)$(FINDUTILS_AR)

FINDUTILS_SRC-y:=$(patsubst %.o,$(srcdir)/%.c,$(FINDUTILS-y))
FINDUTILS_SRC-a:=$(wildcard $(srcdir)/*.c)
APPLET_SRC-y+=$(FINDUTILS_SRC-y)
APPLET_SRC-a+=$(FINDUTILS_SRC-a)

$(FINDUTILS_DIR)$(FINDUTILS_AR): $(patsubst %,$(FINDUTILS_DIR)%, $(FINDUTILS-y))
	$(do_ar)

$(FINDUTILS_DIR)%.o: $(srcdir)/%.c
	$(compile.c)
