# Makefile for busybox
#
# Copyright (C) 1999-2002 Erik Andersen <andersee@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#

INIT_AR:=init.a
ifndef $(INIT_DIR)
INIT_DIR:=$(TOPDIR)init/
endif

INIT-y:=
INIT-$(CONFIG_HALT)			+= halt.o
INIT-$(CONFIG_INIT)			+= init.o
INIT-$(CONFIG_MESG)			+= mesg.o
INIT-$(CONFIG_MINIT)			+= minit.o
INIT-$(CONFIG_MSVC)			+= msvc.o
INIT-$(CONFIG_PIDFILEHACK)		+= pidfilehack.o
INIT-$(CONFIG_POWEROFF)			+= poweroff.o
INIT-$(CONFIG_REBOOT)			+= reboot.o
INIT-$(CONFIG_START_STOP_DAEMON)	+= start_stop_daemon.o

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

$(INIT_DIR)$(INIT_AR): $(patsubst %,$(INIT_DIR)%, $(INIT-y))
	$(AR) -ro $@ $(patsubst %,$(INIT_DIR)%, $(INIT-y))

