# Makefile for busybox
#
# Copyright (C) 1999-2002 Erik Andersen <andersee@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#

NETWORKING_AR:=networking.a
ifndef $(NETWORKING_DIR)
NETWORKING_DIR:=$(TOPDIR)networking/
endif

NETWORKING-y:=
NETWORKING-$(CONFIG_HOSTNAME)		+= hostname.o
NETWORKING-$(CONFIG_IFCONFIG)		+= ifconfig.o
NETWORKING-$(CONFIG_NC)			+= nc.o
NETWORKING-$(CONFIG_NETSTAT)		+= netstat.o
NETWORKING-$(CONFIG_NSLOOKUP)		+= nslookup.o
NETWORKING-$(CONFIG_PING)		+= ping.o
NETWORKING-$(CONFIG_ROUTE)		+= route.o
NETWORKING-$(CONFIG_TELNET)		+= telnet.o
NETWORKING-$(CONFIG_TFTP)		+= tftp.o
NETWORKING-$(CONFIG_TRACEROUTE)		+= traceroute.o
NETWORKING-$(CONFIG_WGET)		+= wget.o

libraries-y+=$(NETWORKING_DIR)$(NETWORKING_AR)

$(NETWORKING_DIR)$(NETWORKING_AR): $(patsubst %,$(NETWORKING_DIR)%, $(NETWORKING-y))
	$(AR) -ro $@ $(patsubst %,$(NETWORKING_DIR)%, $(NETWORKING-y))

