# Makefile for busybox
#
# Copyright (C) 1999-2002 Erik Andersen <andersee@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#

PROCPS_AR:=procps.a
ifndef $(PROCPS_DIR)
PROCPS_DIR:=$(TOPDIR)procps/
endif

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_TOP)		+= top.o
PROCPS-$(CONFIG_UPTIME)		+= uptime.o

libraries-y+=$(PROCPS_DIR)$(PROCPS_AR)

$(PROCPS_DIR)$(PROCPS_AR): $(patsubst %,$(PROCPS_DIR)%, $(PROCPS-y))
	$(AR) -ro $@ $(patsubst %,$(PROCPS_DIR)%, $(PROCPS-y))

