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

srcdir=$(top_srcdir)/init
objdir=$(top_builddir)/init

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

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_OBJ:=  $(patsubst %,$(objdir)/%,$(INIT-y))

