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

INIT_AR:=init.a
ifndef $(INIT_DIR)
INIT_DIR:=$(top_builddir)/init/
endif
srcdir=$(top_srcdir)/init

INIT-y:=
INIT-$(CONFIG_HALT)			+= halt.o
INIT-$(CONFIG_INIT)			+= init.o
INIT-$(CONFIG_MESG)			+= mesg.o

ifeq ($(strip $(CONFIG_HALT)),y)
CONFIG_INIT_SHARED=y
else
ifeq ($(strip $(CONFIG_INIT)),y)
CONFIG_INIT_SHARED=y
else
CONFIG_INIT_SHARED=n
endif
endif

INIT-$(CONFIG_INIT_SHARED)        += init_shared.o

ifneq ($(strip $(INIT-y)),)
libraries-y+=$(INIT_DIR)$(INIT_AR)
endif

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

$(INIT_DIR)$(INIT_AR): $(patsubst %,$(INIT_DIR)%, $(INIT-y))
	$(do_ar)

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