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

MISCUTILS_AR:=miscutils.a
ifndef $(MISCUTILS_DIR)
MISCUTILS_DIR:=$(TOPDIR)miscutils/
endif


MISCUTILS-y:=
MISCUTILS-$(CONFIG_ADJTIMEX)		+= adjtimex.o
MISCUTILS-$(CONFIG_DC)			+= dc.o
MISCUTILS-$(CONFIG_DUTMP)		+= dutmp.o
MISCUTILS-$(CONFIG_MAKEDEVS)		+= makedevs.o
MISCUTILS-$(CONFIG_MKTEMP)		+= mktemp.o
MISCUTILS-$(CONFIG_MT)			+= mt.o
MISCUTILS-$(CONFIG_READLINK)		+= readlink.o
MISCUTILS-$(CONFIG_TIME)		+= time.o
MISCUTILS-$(CONFIG_UPDATE)		+= update.o
MISCUTILS-$(CONFIG_WATCHDOG)		+= watchdog.o

libraries-y+=$(MISCUTILS_DIR)$(MISCUTILS_AR)

$(MISCUTILS_DIR)$(MISCUTILS_AR): $(patsubst %,$(MISCUTILS_DIR)%, $(MISCUTILS-y))
	$(AR) -ro $@ $(patsubst %,$(MISCUTILS_DIR)%, $(MISCUTILS-y))

