# 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)/procps
objdir:=$(top_builddir)/procps

PROCPS-$(CONFIG_FREE)		+= free.o
PROCPS-$(CONFIG_KILL)		+= kill.o
PROCPS-$(CONFIG_PIDOF)		+= pidof.o
PROCPS-$(CONFIG_PS)		+= ps.o
PROCPS-$(CONFIG_RENICE)		+= renice.o
PROCPS-$(CONFIG_BB_SYSCTL)	+= sysctl.o
PROCPS-$(CONFIG_TOP)		+= top.o
PROCPS-$(CONFIG_UPTIME)		+= uptime.o
PROCPS-$(CONFIG_FUSER)		+= fuser.o


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

procps_OBJ:=  $(patsubst %,$(objdir)/%,$(PROCPS-y))

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

