# 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-:=
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_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 $@ $<

