blob: 7688ba0d45643da373ff85bee195a1c42451e9b2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
inherit toolchain-funcs flag-o-matic multilib
if [[ ${PV} == "9999" ]] ; then
EGIT_REPO_URI="https://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git"
inherit git-r3
else
SRC_URI="https://www.kernel.org/pub/linux/utils/net/${PN}/${P}.tar.xz"
KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
fi
DESCRIPTION="kernel routing and traffic control utilities"
HOMEPAGE="https://wiki.linuxfoundation.org/networking/iproute2"
LICENSE="GPL-2"
SLOT="0"
IUSE="atm berkdb bpf caps elf +iptables ipv6 libbsd minimal selinux"
# We could make libmnl optional, but it's tiny, so eh
RDEPEND="
!net-misc/arpd
!minimal? ( net-libs/libmnl:= )
atm? ( net-dialup/linux-atm )
berkdb? ( sys-libs/db:= )
bpf? ( dev-libs/libbpf:= )
caps? ( sys-libs/libcap )
elf? ( virtual/libelf:= )
iptables? ( >=net-firewall/iptables-1.4.20:= )
libbsd? ( dev-libs/libbsd )
selinux? ( sys-libs/libselinux )
"
# We require newer linux-headers for ipset support #549948 and some defines #553876
DEPEND="
${RDEPEND}
>=sys-kernel/linux-headers-3.16
"
BDEPEND="
app-arch/xz-utils
>=sys-devel/bison-2.4
sys-devel/flex
virtual/pkgconfig
"
PATCHES=(
"${FILESDIR}"/${PN}-3.1.0-mtu.patch #291907
"${FILESDIR}"/${PN}-5.12.0-configure-nomagic.patch # bug 643722
#"${FILESDIR}"/${PN}-5.1.0-portability.patch
"${FILESDIR}"/${PN}-5.7.0-mix-signal.h-include.patch
)
doecho() {
echo "${@}"
"${@}" || die
}
src_prepare() {
if ! use ipv6 ; then
PATCHES+=(
"${FILESDIR}"/${PN}-4.20.0-no-ipv6.patch #326849
)
fi
default
# Fix version if necessary
local versionfile="include/version.h"
if [[ "${PV}" != 9999 ]] && ! grep -Fq "${PV}" ${versionfile} ; then
einfo "Fixing version string"
sed "s@\"[[:digit:]\.]\+\"@\"${PV}\"@" \
-i ${versionfile} || die
fi
# echo -n is not POSIX compliant
sed 's@echo -n@printf@' -i configure || die
sed -i \
-e '/^CC :\?=/d' \
-e "/^LIBDIR/s:=.*:=/$(get_libdir):" \
-e "s|-O2|${CFLAGS} ${CPPFLAGS}|" \
-e "/^HOSTCC/s:=.*:= $(tc-getBUILD_CC):" \
-e "/^DBM_INCLUDE/s:=.*:=${T}:" \
Makefile || die
# build against system headers
rm -r include/netinet || die #include/linux include/ip{,6}tables{,_common}.h include/libiptc
sed -i 's:TCPI_OPT_ECN_SEEN:16:' misc/ss.c || die
if use minimal ; then
sed -i -e '/^SUBDIRS=/s:=.*:=lib tc ip:' Makefile || die
fi
}
src_configure() {
tc-export AR CC PKG_CONFIG
# This sure is ugly. Should probably move into toolchain-funcs at some point.
local setns
pushd "${T}" >/dev/null
printf '#include <sched.h>\nint main(){return setns(0, 0);}\n' > test.c
${CC} ${CFLAGS} ${CPPFLAGS} -D_GNU_SOURCE ${LDFLAGS} test.c >&/dev/null && setns=y || setns=n
echo 'int main(){return 0;}' > test.c
${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} test.c -lresolv >&/dev/null || sed -i '/^LDLIBS/s:-lresolv::' "${S}"/Makefile
popd >/dev/null
# run "configure" script first which will create "config.mk"...
# Using econf breaks since 5.14.0 (a9c3d70d902a0473ee5c13336317006a52ce8242)
doecho ./configure --libbpf_force $(usex bpf on off)
# ...now switch on/off requested features via USE flags
# this is only useful if the test did not set other things, per bug #643722
cat <<-EOF >> config.mk
TC_CONFIG_ATM := $(usex atm y n)
TC_CONFIG_XT := $(usex iptables y n)
TC_CONFIG_NO_XT := $(usex iptables n y)
# We've locked in recent enough kernel headers #549948
TC_CONFIG_IPSET := y
HAVE_BERKELEY_DB := $(usex berkdb y n)
HAVE_CAP := $(usex caps y n)
HAVE_MNL := $(usex minimal n y)
HAVE_ELF := $(usex elf y n)
HAVE_SELINUX := $(usex selinux y n)
IP_CONFIG_SETNS := ${setns}
# Use correct iptables dir, #144265 #293709
IPT_LIB_DIR := $(use iptables && ${PKG_CONFIG} xtables --variable=xtlibdir)
HAVE_LIBBSD := $(usex libbsd y n)
EOF
}
src_compile() {
emake V=1 NETNS_RUN_DIR=/run/netns
}
src_install() {
if use minimal ; then
into /
dosbin tc/tc
dobin ip/ip
return 0
fi
emake \
DESTDIR="${D}" \
PREFIX="${EPREFIX}/usr" \
LIBDIR="${EPREFIX}"/$(get_libdir) \
SBINDIR="${EPREFIX}"/sbin \
CONFDIR="${EPREFIX}"/etc/iproute2 \
DOCDIR="${EPREFIX}"/usr/share/doc/${PF} \
MANDIR="${EPREFIX}"/usr/share/man \
ARPDDIR="${EPREFIX}"/var/lib/arpd \
install
dodir /bin
mv "${ED}"/{s,}bin/ip || die #330115
dolib.a lib/libnetlink.a
insinto /usr/include
doins include/libnetlink.h
# This local header pulls in a lot of linux headers it
# doesn't directly need. Delete this header that requires
# linux-headers-3.8 until that goes stable. #467716
sed -i '/linux\/netconf.h/d' "${ED}"/usr/include/libnetlink.h || die
if use berkdb ; then
keepdir /var/lib/arpd
# bug 47482, arpd doesn't need to be in /sbin
dodir /usr/bin
mv "${ED}"/sbin/arpd "${ED}"/usr/bin/ || die
elif [[ -d "${ED}"/var/lib/arpd ]]; then
rmdir --ignore-fail-on-non-empty -p "${ED}"/var/lib/arpd || die
fi
}
|