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

COREUTILS_AR:=coreutils.a
ifndef $(COREUTILS_DIR)
COREUTILS_DIR:=$(TOPDIR)coreutils/
endif

COREUTILS-y:=
COREUTILS-$(CONFIG_BASENAME)		+= basename.o
COREUTILS-$(CONFIG_CAL)		+= cal.o
COREUTILS-$(CONFIG_CAT)		+= cat.o
COREUTILS-$(CONFIG_CHGRP)	+= chgrp.o
COREUTILS-$(CONFIG_CHMOD)	+= chmod.o
COREUTILS-$(CONFIG_CHOWN)	+= chown.o
COREUTILS-$(CONFIG_CHROOT)		+= chroot.o
COREUTILS-$(CONFIG_CMP)		+= cmp.o
COREUTILS-$(CONFIG_CP)		+= cp.o
COREUTILS-$(CONFIG_CUT)		+= cut.o
COREUTILS-$(CONFIG_DATE)		+= date.o
COREUTILS-$(CONFIG_DD)		+= dd.o
COREUTILS-$(CONFIG_DF)		+= df.o
COREUTILS-$(CONFIG_DIRNAME)		+= dirname.o
COREUTILS-$(CONFIG_DOS2UNIX)	+= dos2unix.o
COREUTILS-$(CONFIG_DU)		+= du.o
COREUTILS-$(CONFIG_ECHO)		+= echo.o
COREUTILS-$(CONFIG_ENV)		+= env.o
COREUTILS-$(CONFIG_EXPR)		+= expr.o
COREUTILS-$(CONFIG_FALSE)		+= false.o
COREUTILS-$(CONFIG_FOLD)	+= fold.o
COREUTILS-$(CONFIG_HEAD)	+= head.o
COREUTILS-$(CONFIG_HOSTID)		+= hostid.o
COREUTILS-$(CONFIG_ID)			+= id.o
COREUTILS-$(CONFIG_LENGTH)	+= length.o
COREUTILS-$(CONFIG_LN)		+= ln.o
COREUTILS-$(CONFIG_LOGNAME)		+= logname.o
COREUTILS-$(CONFIG_LS)		+= ls.o
COREUTILS-$(CONFIG_MD5SUM)	+= md5sum.o
COREUTILS-$(CONFIG_MKDIR)	+= mkdir.o
COREUTILS-$(CONFIG_MKFIFO)	+= mkfifo.o
COREUTILS-$(CONFIG_MKNOD)	+= mknod.o
COREUTILS-$(CONFIG_MV)		+= mv.o
COREUTILS-$(CONFIG_OD)		+= od.o
COREUTILS-$(CONFIG_PRINTF)		+= printf.o
COREUTILS-$(CONFIG_PWD)		+= pwd.o
COREUTILS-$(CONFIG_REALPATH)		+= realpath.o
COREUTILS-$(CONFIG_RM)		+= rm.o
COREUTILS-$(CONFIG_RMDIR)	+= rmdir.o
COREUTILS-$(CONFIG_SHA1SUM)	+= sha1sum.o
COREUTILS-$(CONFIG_SLEEP)		+= sleep.o
COREUTILS-$(CONFIG_SORT)	+= sort.o
COREUTILS-$(CONFIG_STTY)		+= stty.o
COREUTILS-$(CONFIG_SYNC)	+= sync.o
COREUTILS-$(CONFIG_TAIL)	+= tail.o
COREUTILS-$(CONFIG_TEE)		+= tee.o
COREUTILS-$(CONFIG_TEST)		+= test.o
COREUTILS-$(CONFIG_TOUCH)	+= touch.o
COREUTILS-$(CONFIG_TR)		+= tr.o
COREUTILS-$(CONFIG_TRUE)		+= true.o
COREUTILS-$(CONFIG_TTY)		+= tty.o
COREUTILS-$(CONFIG_UNAME)		+= uname.o
COREUTILS-$(CONFIG_UNIQ)	+= uniq.o
COREUTILS-$(CONFIG_USLEEP)		+= usleep.o
COREUTILS-$(CONFIG_UUDECODE)	+= uudecode.o
COREUTILS-$(CONFIG_UUENCODE)	+= uuencode.o
COREUTILS-$(CONFIG_WATCH)		+= watch.o
COREUTILS-$(CONFIG_WC)		+= wc.o
COREUTILS-$(CONFIG_WHO)		+= who.o
COREUTILS-$(CONFIG_WHOAMI)		+= whoami.o
COREUTILS-$(CONFIG_YES)		+= yes.o

libraries-y+=$(COREUTILS_DIR)$(COREUTILS_AR)

$(COREUTILS_DIR)$(COREUTILS_AR): $(patsubst %,$(COREUTILS_DIR)%, $(COREUTILS-y))
	$(AR) -ro $@ $(patsubst %,$(COREUTILS_DIR)%, $(COREUTILS-y))

