# Makefile for busybox
#
# Copyright (C) 1999-2002 by 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
#

LIBIPROUTE_AR:=libiproute.a
ifndef $(LIBIPROUTE_DIR)
LIBIPROUTE_DIR:=$(TOPDIR)networking/libiproute/
endif

LIBIPROUTE-$(CONFIG_IP) += \
	ip_parse_common_args.o \
	ipaddress.o \
	iplink.o \
	iproute.o \
	iptunnel.o \
	libnetlink.o \
	ll_addr.o \
	ll_map.o \
	ll_proto.o \
	ll_types.o \
	rt_names.o \
	rtm_map.o \
	utils.o

libraries-y+=$(LIBIPROUTE_DIR)$(LIBIPROUTE_AR)

$(LIBIPROUTE_DIR)$(LIBIPROUTE_AR): $(patsubst %,$(LIBIPROUTE_DIR)%, $(LIBIPROUTE-y))
	$(AR) -ro $@ $(patsubst %,$(LIBIPROUTE_DIR)%, $(LIBIPROUTE-y))

