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

MODUTILS_AR:=modutils.a
ifndef $(MODUTILS_DIR)
MODUTILS_DIR:=$(top_builddir)/modutils/
endif
srcdir=$(top_srcdir)/modutils

MODUTILS-y:=
MODUTILS-$(CONFIG_INSMOD)		+= insmod.o
MODUTILS-$(CONFIG_LSMOD)		+= lsmod.o
MODUTILS-$(CONFIG_MODPROBE)		+= modprobe.o
MODUTILS-$(CONFIG_RMMOD)		+= rmmod.o

ifneq ($(strip $(MODUTILS-y)),)
libraries-y+=$(MODUTILS_DIR)$(MODUTILS_AR)
endif

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

$(MODUTILS_DIR)$(MODUTILS_AR): $(patsubst %,$(MODUTILS_DIR)%, $(MODUTILS-y))
	$(do_ar)

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