# 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)/console-tools
objdir=$(top_builddir)/console-tools

CONSOLETOOLS-$(CONFIG_CHVT)		+= chvt.o
CONSOLETOOLS-$(CONFIG_CLEAR)		+= clear.o
CONSOLETOOLS-$(CONFIG_DEALLOCVT)	+= deallocvt.o
CONSOLETOOLS-$(CONFIG_DUMPKMAP)		+= dumpkmap.o
CONSOLETOOLS-$(CONFIG_SETCONSOLE)	+= setconsole.o
CONSOLETOOLS-$(CONFIG_LOADFONT)		+= loadfont.o
CONSOLETOOLS-$(CONFIG_LOADKMAP)		+= loadkmap.o
CONSOLETOOLS-$(CONFIG_OPENVT)		+= openvt.o
CONSOLETOOLS-$(CONFIG_RESET)		+= reset.o
CONSOLETOOLS-$(CONFIG_SETKEYCODES)	+= setkeycodes.o


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

console-tools_OBJ:=  $(patsubst %,$(objdir)/%,$(CONSOLETOOLS-y))

