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

NETWORKING-$(CONFIG_ARPING)       += arping.o
NETWORKING-$(CONFIG_DNSD)         += dnsd.o
NETWORKING-$(CONFIG_ETHER_WAKE)   += ether-wake.o
NETWORKING-$(CONFIG_FAKEIDENTD)   += fakeidentd.o
NETWORKING-$(CONFIG_FTPGET)       += ftpgetput.o
NETWORKING-$(CONFIG_FTPPUT)       += ftpgetput.o
NETWORKING-$(CONFIG_HOSTNAME)     += hostname.o
NETWORKING-$(CONFIG_HTTPD)        += httpd.o
NETWORKING-$(CONFIG_IFCONFIG)     += ifconfig.o interface.o
NETWORKING-$(CONFIG_IFUPDOWN)     += ifupdown.o
NETWORKING-$(CONFIG_INETD)        += inetd.o
NETWORKING-$(CONFIG_IP)           += ip.o
NETWORKING-$(CONFIG_IPCALC)       += ipcalc.o
NETWORKING-$(CONFIG_IPADDR)       += ipaddr.o
NETWORKING-$(CONFIG_IPLINK)       += iplink.o
NETWORKING-$(CONFIG_IPROUTE)      += iproute.o
NETWORKING-$(CONFIG_IPTUNNEL)     += iptunnel.o
NETWORKING-$(CONFIG_NAMEIF)       += nameif.o
NETWORKING-$(CONFIG_NC)           += nc.o
NETWORKING-$(CONFIG_NETSTAT)      += netstat.o
NETWORKING-$(CONFIG_NSLOOKUP)     += nslookup.o
NETWORKING-$(CONFIG_PING)         += ping.o
NETWORKING-$(CONFIG_PING6)        += ping6.o
NETWORKING-$(CONFIG_ROUTE)        += route.o
NETWORKING-$(CONFIG_TELNET)       += telnet.o
NETWORKING-$(CONFIG_TELNETD)      += telnetd.o
NETWORKING-$(CONFIG_TFTP)         += tftp.o
NETWORKING-$(CONFIG_TRACEROUTE)   += traceroute.o
NETWORKING-$(CONFIG_VCONFIG)      += vconfig.o
NETWORKING-$(CONFIG_WGET)         += wget.o
NETWORKING-$(CONFIG_ZCIP)         += zcip.o

NETWORKING-y:=$(sort $(NETWORKING-y))

needcrypt-y:=
needcrypt-$(CONFIG_FEATURE_HTTPD_AUTH_MD5) := y
ifeq ($(needcrypt-y),y)
	LIBRARIES := -lcrypt $(filter-out -lcrypt,$(LIBRARIES))
endif

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

LIBRARY_DEFINE-y+= -I$(top_srcdir)/networking
LIBRARY_DEFINE-a+= -I$(top_srcdir)/networking

networking_OBJ:=  $(patsubst %,$(objdir)/%,$(NETWORKING-y))

