# Makefile for busybox
#
# Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
#
# Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
#

LIBIPROUTE_AR:=libiproute.a
ifndef $(LIBIPROUTE_DIR)
LIBIPROUTE_DIR:=$(top_builddir)/networking/libiproute
endif
srcdir=$(top_srcdir)/networking/libiproute

LIBIPROUTE-y:=
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

LIBIPROUTE-$(CONFIG_IPADDR) += \
	ip_parse_common_args.o \
	ipaddress.o \
	libnetlink.o \
	ll_addr.o \
	ll_map.o \
	ll_types.o \
	rt_names.o \
	utils.o

LIBIPROUTE-$(CONFIG_IPLINK) += \
	ip_parse_common_args.o \
	ipaddress.o \
	iplink.o \
	libnetlink.o \
	ll_addr.o \
	ll_map.o \
	ll_types.o \
	rt_names.o \
	utils.o

LIBIPROUTE-$(CONFIG_IPROUTE) += \
	ip_parse_common_args.o \
	iproute.o \
	libnetlink.o \
	ll_map.o \
	rt_names.o \
	rtm_map.o \
	utils.o

LIBIPROUTE-$(CONFIG_IPTUNNEL) += \
	ip_parse_common_args.o \
	iptunnel.o \
	rt_names.o \
	utils.o

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

LIBIPROUTE_SRC-y:=$(patsubst %,$(srcdir)/%,$(subst .o,.c,$(LIBIPROUTE-y)))
LIBIPROUTE_SRC-a:=$(wildcard $(srcdir)/*.c)
LIBRARY_SRC-y+=$(LIBIPROUTE_SRC-y)
LIBRARY_SRC-a+=$(LIBIPROUTE_SRC-a)

LIBIPROUTE-obj:=$(LIBIPROUTE_DIR)/$(LIBIPROUTE_AR)

ifneq ($(strip $(LIBIPROUTE-y)),)
libraries-y+=$(LIBIPROUTE_DIR)/$(LIBIPROUTE_AR)
endif

$(LIBIPROUTE_DIR)/$(LIBIPROUTE_AR): $(patsubst %,$(LIBIPROUTE_DIR)/%,$(LIBIPROUTE-y))
	$(do_ar)

$(LIBIPROUTE_DIR)/%.o: $(srcdir)/%.c
	$(compile.c)
