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

CONSOLETOOLS_AR:=console-tools.a
ifndef $(CONSOLETOOLS_DIR)
CONSOLETOOLS_DIR:=$(TOPDIR)console-tools/
endif

CONSOLETOOLS_DIR-y:=
CONSOLETOOLS_DIR-$(CONFIG_CHVT)		+= chvt.o
CONSOLETOOLS_DIR-$(CONFIG_CLEAR)	+= clear.o
CONSOLETOOLS_DIR-$(CONFIG_DEALLOCVT)	+= deallocvt.o
CONSOLETOOLS_DIR-$(CONFIG_DUMPKMAP)	+= dumpkmap.o
CONSOLETOOLS_DIR-$(CONFIG_LOADACM)	+= loadacm.o
CONSOLETOOLS_DIR-$(CONFIG_LOADFONT)	+= loadfont.o
CONSOLETOOLS_DIR-$(CONFIG_LOADKMAP)	+= loadkmap.o
CONSOLETOOLS_DIR-$(CONFIG_OPENVT)	+= openvt.o
CONSOLETOOLS_DIR-$(CONFIG_RESET)	+= reset.o
CONSOLETOOLS_DIR-$(CONFIG_SETKEYCODES)	+= setkeycodes.o

libraries-y+=$(CONSOLETOOLS_DIR)$(CONSOLETOOLS_AR)

$(CONSOLETOOLS_DIR)$(CONSOLETOOLS_AR): $(patsubst %,$(CONSOLETOOLS_DIR)%, $(CONSOLETOOLS_DIR-y))
	$(AR) -ro $@ $(patsubst %,$(CONSOLETOOLS_DIR)%, $(CONSOLETOOLS_DIR-y))

