# 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
INIT-$(CONFIG_POWEROFF)			+= poweroff.o
INIT-$(CONFIG_REBOOT)			+= reboot.o

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

ifeq ($(strip $(CONFIG_INIT_SHARED)),y)
INIT-$(CONFIG_INIT_SHARED)        += init_shared.o
endif

libraries-y+=$(INIT_DIR)$(INIT_AR)

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

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

