# 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

libraries-y+=$(SYSKLOGD_DIR)$(SYSKLOGD_AR)

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))
	$(AR) $(ARFLAGS) $@ $(patsubst %,$(SYSKLOGD_DIR)%, $(SYSKLOGD-y))

$(SYSKLOGD_DIR)%.o: $(srcdir)/%.c
	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<

