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

PROCPS_AR:=procps.a
ifndef $(PROCPS_DIR)
PROCPS_DIR:=$(top_builddir)/procps/
endif
srcdir=$(top_srcdir)/procps

PROCPS-y:=
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

ifneq ($(strip $(PROCPS-y)),)
libraries-y+=$(PROCPS_DIR)$(PROCPS_AR)
endif

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_DIR)$(PROCPS_AR): $(patsubst %,$(PROCPS_DIR)%, $(PROCPS-y))
	$(do_ar)

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