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

DEBIANUTILS_AR:=debianutils.a
ifndef $(DEBIANUTILS_DIR)
DEBIANUTILS_DIR:=$(top_builddir)/debianutils/
endif
srcdir=$(top_srcdir)/debianutils

DEBIANUTILS-y:=
DEBIANUTILS-$(CONFIG_MKTEMP)		+= mktemp.o
DEBIANUTILS-$(CONFIG_PIPE_PROGRESS)	+= pipe_progress.o
DEBIANUTILS-$(CONFIG_READLINK)		+= readlink.o
DEBIANUTILS-$(CONFIG_RUN_PARTS)		+= run_parts.o
DEBIANUTILS-$(CONFIG_START_STOP_DAEMON)	+= start_stop_daemon.o
DEBIANUTILS-$(CONFIG_WHICH)		+= which.o

ifneq ($(strip $(DEBIANUTILS-y)),)
libraries-y+=$(DEBIANUTILS_DIR)$(DEBIANUTILS_AR)
endif
DEBIANUTILS_SRC-y:=$(patsubst %.o,$(srcdir)/%.c,$(DEBIANUTILS-y))
DEBIANUTILS_SRC-a:=$(wildcard $(srcdir)/*.c)
APPLET_SRC-y+=$(DEBIANUTILS_SRC-y)
APPLET_SRC-a+=$(DEBIANUTILS_SRC-a)

$(DEBIANUTILS_DIR)$(DEBIANUTILS_AR): $(patsubst %,$(DEBIANUTILS_DIR)%, $(DEBIANUTILS-y))
	$(do_ar)

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