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

CONSOLETOOLS_AR:=console-tools.a
ifndef $(CONSOLETOOLS_DIR)
CONSOLETOOLS_DIR:=$(top_builddir)/console-tools/
endif
srcdir=$(top_srcdir)/console-tools

CONSOLETOOLS-y:=
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-$(CONFIG_SETLOGCONS)	+= setlogcons.o

ifneq ($(strip $(CONSOLETOOLS-y)),)
libraries-y+=$(CONSOLETOOLS_DIR)$(CONSOLETOOLS_AR)
endif
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)

$(CONSOLETOOLS_DIR)$(CONSOLETOOLS_AR): $(patsubst %,$(CONSOLETOOLS_DIR)%, $(CONSOLETOOLS-y))
	$(do_ar)

$(CONSOLETOOLS_DIR)%.o: $(srcdir)/%.c
	$(compile.c)
