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

lib-y:=
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_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_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_PING)         += ping.o
lib-$(CONFIG_PING6)        += ping.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_VCONFIG)      += vconfig.o
lib-$(CONFIG_WGET)         += wget.o
lib-$(CONFIG_ZCIP)         += zcip.o

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