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

SYSKLOGD_AR:=sysklogd.a
ifndef $(SYSKLOGD_DIR)
SYSKLOGD_DIR:=$(top_builddir)/sysklogd/
endif
srcdir=$(top_srcdir)/sysklogd

SYSKLOGD-y:=
SYSKLOGD-$(CONFIG_KLOGD)		+= klogd.o
SYSKLOGD-$(CONFIG_LOGGER)		+= logger.o
SYSKLOGD-$(CONFIG_LOGREAD)		+= logread.o
SYSKLOGD-$(CONFIG_SYSLOGD)		+= syslogd.o

ifneq ($(strip $(SYSKLOGD-y)),)
libraries-y+=$(SYSKLOGD_DIR)$(SYSKLOGD_AR)
endif

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

$(SYSKLOGD_DIR)$(SYSKLOGD_AR): $(patsubst %,$(SYSKLOGD_DIR)%, $(SYSKLOGD-y))
	$(do_ar)

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