# Makefile for busybox
#
# Copyright (C) 1999-2005 by Erik Andersen <andersen@codepoet.org>
#
# Licensed under GPLv2, see file LICENSE in this source tree.

lib-y:=

INSERT
lib-$(CONFIG_ARP)          += arp.o interface.o
lib-$(CONFIG_ARPING)       += arping.o
lib-$(CONFIG_BRCTL)        += brctl.o
lib-$(CONFIG_DNSD)         += dnsd.o
lib-$(CONFIG_ETHER_WAKE)   += ether-wake.o
lib-$(CONFIG_FAKEIDENTD)   += isrv_identd.o isrv.o
lib-$(CONFIG_FTPD)         += ftpd.o
lib-$(CONFIG_FTPGET)       += ftpgetput.o
lib-$(CONFIG_FTPPUT)       += ftpgetput.o
lib-$(CONFIG_HOSTNAME)     += hostname.o
lib-$(CONFIG_HTTPD)        += httpd.o
lib-$(CONFIG_IFCONFIG)     += ifconfig.o interface.o
lib-$(CONFIG_IFENSLAVE)    += ifenslave.o interface.o
lib-$(CONFIG_IFPLUGD)      += ifplugd.o
lib-$(CONFIG_IFUPDOWN)     += ifupdown.o
lib-$(CONFIG_INETD)        += inetd.o
lib-$(CONFIG_IP)           += ip.o
lib-$(CONFIG_IPCALC)       += ipcalc.o
lib-$(CONFIG_NAMEIF)       += nameif.o
lib-$(CONFIG_NC)           += nc.o
lib-$(CONFIG_NETSTAT)      += netstat.o
lib-$(CONFIG_NSLOOKUP)     += nslookup.o
lib-$(CONFIG_NTPD)         += ntpd.o
lib-$(CONFIG_PSCAN)        += pscan.o
lib-$(CONFIG_ROUTE)        += route.o
lib-$(CONFIG_SLATTACH)     += slattach.o
lib-$(CONFIG_TC)           += tc.o
lib-$(CONFIG_TELNET)       += telnet.o
lib-$(CONFIG_TELNETD)      += telnetd.o
lib-$(CONFIG_TFTP)         += tftp.o
lib-$(CONFIG_TFTPD)        += tftp.o
lib-$(CONFIG_TRACEROUTE)   += traceroute.o
lib-$(CONFIG_TUNCTL)       += tunctl.o
lib-$(CONFIG_VCONFIG)      += vconfig.o
lib-$(CONFIG_ZCIP)         += zcip.o

lib-$(CONFIG_TCPSVD)       += tcpudp.o tcpudp_perhost.o
lib-$(CONFIG_UDPSVD)       += tcpudp.o tcpudp_perhost.o
