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

MISCUTILS_AR:=miscutils.a
ifndef $(MISCUTILS_DIR)
MISCUTILS_DIR:=$(top_builddir)/miscutils/
endif
srcdir=$(top_srcdir)/miscutils

MISCUTILS-y:=
MISCUTILS-$(CONFIG_ADJTIMEX)    += adjtimex.o
MISCUTILS-$(CONFIG_CROND)       += crond.o
MISCUTILS-$(CONFIG_CRONTAB)     += crontab.o
MISCUTILS-$(CONFIG_BBCONFIG)    += bbconfig.o
MISCUTILS-$(CONFIG_DC)          += dc.o
MISCUTILS-$(CONFIG_DEVFSD)      += devfsd.o
MISCUTILS-$(CONFIG_EJECT)       += eject.o
MISCUTILS-$(CONFIG_HDPARM)      += hdparm.o
MISCUTILS-$(CONFIG_LAST)        += last.o
MISCUTILS-$(CONFIG_LESS)        += less.o
MISCUTILS-$(CONFIG_MAKEDEVS)    += makedevs.o
MISCUTILS-$(CONFIG_MOUNTPOINT)  += mountpoint.o
MISCUTILS-$(CONFIG_MT)          += mt.o
MISCUTILS-$(CONFIG_READAHEAD)   += readahead.o
MISCUTILS-$(CONFIG_RUNLEVEL)    += runlevel.o
MISCUTILS-$(CONFIG_RX)          += rx.o
MISCUTILS-$(CONFIG_SETSID)      += setsid.o
MISCUTILS-$(CONFIG_STRINGS)     += strings.o
MISCUTILS-$(CONFIG_TIME)        += time.o
MISCUTILS-$(CONFIG_WATCHDOG)    += watchdog.o

ifneq ($(strip $(MISCUTILS-y)),)
libraries-y+=$(MISCUTILS_DIR)$(MISCUTILS_AR)
endif

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

needlibm-y:=
needlibm-$(CONFIG_DC) := y

ifeq ($(needlibm-y),y)
  LIBRARIES := -lm $(filter-out -lm,$(LIBRARIES))
endif

$(MISCUTILS_DIR)$(MISCUTILS_AR): $(patsubst %,$(MISCUTILS_DIR)%, $(MISCUTILS-y))
	$(do_ar)

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