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

EDITOR_AR:=editors.a
ifndef $(EDITOR_DIR)
EDITOR_DIR:=$(top_builddir)/editors/
endif
srcdir=$(top_srcdir)/editors

EDITOR-y:=
EDITOR-$(CONFIG_AWK)	   += awk.o
EDITOR-$(CONFIG_PATCH)	   += patch.o
EDITOR-$(CONFIG_SED)       += sed.o
EDITOR-$(CONFIG_VI)        += vi.o

libraries-y+=$(EDITOR_DIR)$(EDITOR_AR)

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

needlibm-y:=
needlibm-$(CONFIG_FEATURE_AWK_MATH) := y

ifeq ($(needlibm-y),y)
  LIBRARIES := -lm $(filter-out -lm,$(LIBRARIES))
endif

$(EDITOR_DIR)$(EDITOR_AR): $(patsubst %,$(EDITOR_DIR)%, $(EDITOR-y))
	$(do_ar)

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