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

srcdir:=$(top_srcdir)/debianutils
objdir:=$(top_builddir)/debianutils

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

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_OBJ:=  $(patsubst %,$(objdir)/%,$(DEBIANUTILS-y))

$(debianutils_OBJ): $(objdir)/%.o: $(srcdir)/%.c
$(objdir)/debianutils.a: $(debianutils_OBJ)
libraries-y:=$(libraries-y) $(objdir)/debianutils.a

