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

COREUTILS_AR:=coreutils.a
ifndef $(COREUTILS_DIR)
COREUTILS_DIR:=$(top_builddir)/coreutils/
endif
srcdir=$(top_srcdir)/coreutils

COREUTILS-y:=
COREUTILS-$(CONFIG_BASENAME)  += basename.o
COREUTILS-$(CONFIG_CAL)       += cal.o
COREUTILS-$(CONFIG_CAT)       += cat.o
COREUTILS-$(CONFIG_CATV)      += catv.o
COREUTILS-$(CONFIG_CHGRP)     += chgrp.o
COREUTILS-$(CONFIG_CHMOD)     += chmod.o
COREUTILS-$(CONFIG_CHOWN)     += chown.o
COREUTILS-$(CONFIG_CHROOT)    += chroot.o
COREUTILS-$(CONFIG_CKSUM)     += cksum.o
COREUTILS-$(CONFIG_CMP)       += cmp.o
COREUTILS-$(CONFIG_COMM)      += comm.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_DIFF)      += diff.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_INSTALL)   += install.o
COREUTILS-$(CONFIG_LENGTH)    += length.o
COREUTILS-$(CONFIG_LN)        += ln.o
COREUTILS-$(CONFIG_LOGNAME)   += logname.o
COREUTILS-$(CONFIG_LS)        += ls.o
COREUTILS-$(CONFIG_MD5SUM)    += md5_sha1_sum.o
COREUTILS-$(CONFIG_MKDIR)     += mkdir.o
COREUTILS-$(CONFIG_MKFIFO)    += mkfifo.o
COREUTILS-$(CONFIG_MKNOD)     += mknod.o
COREUTILS-$(CONFIG_MV)        += mv.o
COREUTILS-$(CONFIG_NICE)      += nice.o
COREUTILS-$(CONFIG_NOHUP)     += nohup.o
COREUTILS-$(CONFIG_OD)        += od.o
COREUTILS-$(CONFIG_PRINTENV)  += printenv.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_SEQ)       += seq.o
COREUTILS-$(CONFIG_SHA1SUM)   += md5_sha1_sum.o
COREUTILS-$(CONFIG_SLEEP)     += sleep.o
COREUTILS-$(CONFIG_SORT)      += sort.o
COREUTILS-$(CONFIG_STAT)      += stat.o
COREUTILS-$(CONFIG_STTY)      += stty.o
COREUTILS-$(CONFIG_SUM)       += sum.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

COREUTILS-y:=$(sort $(COREUTILS-y))

ifneq ($(strip $(COREUTILS-y)),)
libraries-y+=$(COREUTILS_DIR)$(COREUTILS_AR)
endif

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

$(COREUTILS_DIR)$(COREUTILS_AR): $(patsubst %,$(COREUTILS_DIR)%, $(COREUTILS-y))
	$(do_ar)

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