Gentoo Archives: gentoo-commits

From: Lars Wendler <polynomial-c@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: sys-apps/iproute2/files/, sys-apps/iproute2/
Date: Tue, 23 Feb 2021 14:55:43
Message-Id: 1614092137.44390e4679901e3c8984e4a54bb2b22898584450.polynomial-c@gentoo
1 commit: 44390e4679901e3c8984e4a54bb2b22898584450
2 Author: Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
3 AuthorDate: Tue Feb 23 14:50:51 2021 +0000
4 Commit: Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
5 CommitDate: Tue Feb 23 14:55:37 2021 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=44390e46
7
8 sys-apps/iproute2: 5.10.0 revbump to make libbsd dep optional
9
10 Package-Manager: Portage-3.0.15, Repoman-3.0.2
11 Signed-off-by: Lars Wendler <polynomial-c <AT> gentoo.org>
12
13 .../files/iproute2-5.10.0-configure-nomagic.patch | 226 +++++++++++++++++++++
14 sys-apps/iproute2/iproute2-5.10.0-r1.ebuild | 168 +++++++++++++++
15 2 files changed, 394 insertions(+)
16
17 diff --git a/sys-apps/iproute2/files/iproute2-5.10.0-configure-nomagic.patch b/sys-apps/iproute2/files/iproute2-5.10.0-configure-nomagic.patch
18 new file mode 100644
19 index 00000000000..cf8ca335f21
20 --- /dev/null
21 +++ b/sys-apps/iproute2/files/iproute2-5.10.0-configure-nomagic.patch
22 @@ -0,0 +1,226 @@
23 +The hand-rolled configure script, for multiple options (selinux,mnl,elf), sets
24 +a variable as well as modifying CFLAGS & LDLIBS.
25 +
26 +If config.mk is later amended to disable a feature, the CFLAGS/LDLIBS tweaks
27 +are still in place.
28 +
29 +Push the CFLAGS/LDLIBS changes into new conditional Makefile code, so that they
30 +are only passed when correctly needed.
31 +
32 +Prior Gentoo testcase for reproduction:
33 +USE=minimal ebuild ... compile.
34 +- Linking with libelf, libmnl & libcap based only on presence.
35 +- Links based on libselinux based only on presence.
36 +
37 +Closes: https://bugs.gentoo.org/643722
38 +Signed-off-by: Robin H. Johnson <robbat2@g.o>
39 +
40 +Forward-ported from v4.14.1 to v4.16.0 by Lars Wendler <polynomial-c@g.o>
41 +Added libcap to v4.17.0 by Lars Wendler <polynomial-c@g.o>
42 +Forward-ported from v4.17.0 to v4.20.0 by Lars Wendler <polynomial-c@g.o>
43 +Forward-ported from v4.20.0 to v5.10.0 by Lars Wendler <polynomial-c@g.o>
44 +
45 +--- iproute2-5.10.0/bridge/Makefile
46 ++++ iproute2-5.10.0/bridge/Makefile
47 +@@ -2,6 +2,7 @@
48 + BROBJ = bridge.o fdb.o monitor.o link.o mdb.o vlan.o
49 +
50 + include ../config.mk
51 ++include ../config.include
52 +
53 + all: bridge
54 +
55 +--- iproute2-5.10.0/config.include
56 ++++ iproute2-5.10.0/config.include
57 +@@ -0,0 +1,32 @@
58 ++# We can only modify CFLAGS/LDLIBS after all the config options are known.
59 ++ifeq ($(IP_CONFIG_SETNS),y)
60 ++ CFLAGS += $(IP_CONFIG_SETNS_CFLAGS)
61 ++endif
62 ++ifeq ($(HAVE_ELF),y)
63 ++ CFLAGS += $(HAVE_ELF_CFLAGS)
64 ++ LDLIBS += $(HAVE_ELF_LDLIBS)
65 ++endif
66 ++ifeq ($(HAVE_SELINUX),y)
67 ++ CFLAGS += $(HAVE_SELINUX_CFLAGS)
68 ++ LDLIBS += $(HAVE_SELINUX_LDLIBS)
69 ++endif
70 ++ifeq ($(HAVE_MNL),y)
71 ++ CFLAGS += $(HAVE_MNL_CFLAGS)
72 ++ LDLIBS += $(HAVE_MNL_LDLIBS)
73 ++endif
74 ++ifeq ($(HAVE_CAP),y)
75 ++ CFLAGS += $(HAVE_CAP_CFLAGS)
76 ++ LDLIBS += $(HAVE_CAP_LDLIBS)
77 ++endif
78 ++ifeq ($(HAVE_LIBBSD),y)
79 ++ CFLAGS += $(HAVE_LIBBSD_CFLAGS)
80 ++ LDLIBS += $(HAVE_LIBBSD_LDLIBS)
81 ++else
82 ++ CFLAGS += -DNEED_STRLCPY
83 ++endif
84 ++
85 ++# Rules can only be declared after all variables in them are known.
86 ++%.o: %.c
87 ++ $(QUIET_CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CPPFLAGS) -c -o $@ $<
88 ++
89 ++# vim: ft=make:
90 +--- iproute2-5.10.0/configure
91 ++++ iproute2-5.10.0/configure
92 +@@ -190,7 +190,7 @@
93 + if $CC -I$INCLUDE -o $TMPDIR/setnstest $TMPDIR/setnstest.c >/dev/null 2>&1; then
94 + echo "IP_CONFIG_SETNS:=y" >>$CONFIG
95 + echo "yes"
96 +- echo "CFLAGS += -DHAVE_SETNS" >>$CONFIG
97 ++ echo "IP_CONFIG_SETNS_CFLAGS += -DHAVE_SETNS" >>$CONFIG
98 + else
99 + echo "no"
100 + fi
101 +@@ -233,8 +233,8 @@
102 + echo "HAVE_ELF:=y" >>$CONFIG
103 + echo "yes"
104 +
105 +- echo 'CFLAGS += -DHAVE_ELF' `${PKG_CONFIG} libelf --cflags` >> $CONFIG
106 +- echo 'LDLIBS += ' `${PKG_CONFIG} libelf --libs` >>$CONFIG
107 ++ echo 'HAVE_ELF_CFLAGS += -DHAVE_ELF' `${PKG_CONFIG} libelf --cflags` >> $CONFIG
108 ++ echo 'HAVE_ELF_LDLIBS += ' `${PKG_CONFIG} libelf --libs` >>$CONFIG
109 + else
110 + echo "no"
111 + fi
112 +@@ -247,8 +247,8 @@
113 + echo "HAVE_SELINUX:=y" >>$CONFIG
114 + echo "yes"
115 +
116 +- echo 'LDLIBS +=' `${PKG_CONFIG} --libs libselinux` >>$CONFIG
117 +- echo 'CFLAGS += -DHAVE_SELINUX' `${PKG_CONFIG} --cflags libselinux` >>$CONFIG
118 ++ echo 'HAVE_SELINUX_CFLAGS += -DHAVE_SELINUX' `${PKG_CONFIG} --cflags libselinux` >>$CONFIG
119 ++ echo 'HAVE_SELINUX_LDLIBS +=' `${PKG_CONFIG} --libs libselinux` >>$CONFIG
120 + else
121 + echo "no"
122 + fi
123 +@@ -260,8 +260,8 @@
124 + echo "HAVE_MNL:=y" >>$CONFIG
125 + echo "yes"
126 +
127 +- echo 'CFLAGS += -DHAVE_LIBMNL' `${PKG_CONFIG} libmnl --cflags` >>$CONFIG
128 +- echo 'LDLIBS +=' `${PKG_CONFIG} libmnl --libs` >> $CONFIG
129 ++ echo 'HAVE_MNL_CFLAGS += -DHAVE_LIBMNL' `${PKG_CONFIG} libmnl --cflags` >>$CONFIG
130 ++ echo 'HAVE_MNL_LDLIBS +=' `${PKG_CONFIG} libmnl --libs` >> $CONFIG
131 + else
132 + echo "no"
133 + fi
134 +@@ -301,8 +301,8 @@
135 + echo "no"
136 + else
137 + if ${PKG_CONFIG} libbsd --exists; then
138 +- echo 'CFLAGS += -DHAVE_LIBBSD' `${PKG_CONFIG} libbsd --cflags` >>$CONFIG
139 +- echo 'LDLIBS +=' `${PKG_CONFIG} libbsd --libs` >> $CONFIG
140 ++ echo 'HAVE_LIBBSD_CFLAGS += -DHAVE_LIBBSD' `${PKG_CONFIG} libbsd --cflags` >>$CONFIG
141 ++ echo 'HAVE_LIBBSD_LDLIBS +=' `${PKG_CONFIG} libbsd --libs` >> $CONFIG
142 + echo "no"
143 + else
144 + echo 'CFLAGS += -DNEED_STRLCPY' >>$CONFIG
145 +@@ -318,8 +318,8 @@
146 + echo "HAVE_CAP:=y" >>$CONFIG
147 + echo "yes"
148 +
149 +- echo 'CFLAGS += -DHAVE_LIBCAP' `${PKG_CONFIG} libcap --cflags` >>$CONFIG
150 +- echo 'LDLIBS +=' `${PKG_CONFIG} libcap --libs` >> $CONFIG
151 ++ echo 'HAVE_CAP_CFLAGS += -DHAVE_LIBCAP' `${PKG_CONFIG} libcap --cflags` >>$CONFIG
152 ++ echo 'HAVE_CAP_LDLIBS +=' `${PKG_CONFIG} libcap --libs` >> $CONFIG
153 + else
154 + echo "no"
155 + fi
156 +@@ -399,7 +399,3 @@
157 +
158 + echo -n "libcap support: "
159 + check_cap
160 +-
161 +-echo >> $CONFIG
162 +-echo "%.o: %.c" >> $CONFIG
163 +-echo ' $(QUIET_CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CPPFLAGS) -c -o $@ $<' >> $CONFIG
164 +--- iproute2-5.10.0/devlink/Makefile
165 ++++ iproute2-5.10.0/devlink/Makefile
166 +@@ -1,5 +1,6 @@
167 + # SPDX-License-Identifier: GPL-2.0
168 + include ../config.mk
169 ++include ../config.include
170 +
171 + TARGETS :=
172 +
173 +--- iproute2-5.10.0/genl/Makefile
174 ++++ iproute2-5.10.0/genl/Makefile
175 +@@ -2,6 +2,7 @@
176 + GENLOBJ=genl.o
177 +
178 + include ../config.mk
179 ++include ../config.include
180 + SHARED_LIBS ?= y
181 +
182 + CFLAGS += -fno-strict-aliasing
183 +--- iproute2-5.10.0/ip/Makefile
184 ++++ iproute2-5.10.0/ip/Makefile
185 +@@ -16,6 +16,7 @@
186 + RTMONOBJ=rtmon.o
187 +
188 + include ../config.mk
189 ++include ../config.include
190 +
191 + ALLOBJ=$(IPOBJ) $(RTMONOBJ)
192 + SCRIPTS=ifcfg rtpr routel routef
193 +--- iproute2-5.10.0/lib/Makefile
194 ++++ iproute2-5.10.0/lib/Makefile
195 +@@ -1,5 +1,6 @@
196 + # SPDX-License-Identifier: GPL-2.0
197 + include ../config.mk
198 ++include ../config.include
199 +
200 + CFLAGS += -fPIC
201 +
202 +--- iproute2-5.10.0/misc/Makefile
203 ++++ iproute2-5.10.0/misc/Makefile
204 +@@ -5,6 +5,7 @@
205 + TARGETS=ss nstat ifstat rtacct lnstat
206 +
207 + include ../config.mk
208 ++include ../config.include
209 +
210 + ifeq ($(HAVE_BERKELEY_DB),y)
211 + TARGETS += arpd
212 +--- iproute2-5.10.0/netem/Makefile
213 ++++ iproute2-5.10.0/netem/Makefile
214 +@@ -1,5 +1,6 @@
215 + # SPDX-License-Identifier: GPL-2.0
216 + include ../config.mk
217 ++include ../config.include
218 +
219 + DISTGEN = maketable normal pareto paretonormal
220 + DISTDATA = normal.dist pareto.dist paretonormal.dist experimental.dist
221 +--- iproute2-5.10.0/rdma/Makefile
222 ++++ iproute2-5.10.0/rdma/Makefile
223 +@@ -1,5 +1,6 @@
224 + # SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
225 + include ../config.mk
226 ++include ../config.include
227 +
228 + TARGETS :=
229 +
230 +--- iproute2-5.10.0/tc/Makefile
231 ++++ iproute2-5.10.0/tc/Makefile
232 +@@ -4,6 +4,7 @@
233 + emp_ematch.tab.o emp_ematch.lex.o
234 +
235 + include ../config.mk
236 ++include ../config.include
237 +
238 + SHARED_LIBS ?= y
239 +
240 +--- iproute2-5.10.0/tipc/Makefile
241 ++++ iproute2-5.10.0/tipc/Makefile
242 +@@ -1,5 +1,6 @@
243 + # SPDX-License-Identifier: GPL-2.0
244 + include ../config.mk
245 ++include ../config.include
246 +
247 + TARGETS :=
248 +
249
250 diff --git a/sys-apps/iproute2/iproute2-5.10.0-r1.ebuild b/sys-apps/iproute2/iproute2-5.10.0-r1.ebuild
251 new file mode 100644
252 index 00000000000..98e5c3cf25b
253 --- /dev/null
254 +++ b/sys-apps/iproute2/iproute2-5.10.0-r1.ebuild
255 @@ -0,0 +1,168 @@
256 +# Copyright 1999-2021 Gentoo Authors
257 +# Distributed under the terms of the GNU General Public License v2
258 +
259 +EAPI=7
260 +
261 +inherit toolchain-funcs flag-o-matic multilib
262 +
263 +if [[ ${PV} == "9999" ]] ; then
264 + EGIT_REPO_URI="https://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git"
265 + inherit git-r3
266 +else
267 + SRC_URI="https://www.kernel.org/pub/linux/utils/net/${PN}/${P}.tar.xz"
268 + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
269 +fi
270 +
271 +DESCRIPTION="kernel routing and traffic control utilities"
272 +HOMEPAGE="https://wiki.linuxfoundation.org/networking/iproute2"
273 +
274 +LICENSE="GPL-2"
275 +SLOT="0"
276 +IUSE="atm berkdb caps elf +iptables ipv6 libbsd minimal selinux"
277 +
278 +# We could make libmnl optional, but it's tiny, so eh
279 +RDEPEND="
280 + !net-misc/arpd
281 + !minimal? ( net-libs/libmnl )
282 + atm? ( net-dialup/linux-atm )
283 + berkdb? ( sys-libs/db:= )
284 + caps? ( sys-libs/libcap )
285 + elf? ( virtual/libelf )
286 + iptables? ( >=net-firewall/iptables-1.4.20:= )
287 + libbsd? ( dev-libs/libbsd )
288 + selinux? ( sys-libs/libselinux )
289 +"
290 +# We require newer linux-headers for ipset support #549948 and some defines #553876
291 +DEPEND="
292 + ${RDEPEND}
293 + >=sys-kernel/linux-headers-3.16
294 +"
295 +BDEPEND="
296 + app-arch/xz-utils
297 + >=sys-devel/bison-2.4
298 + sys-devel/flex
299 + virtual/pkgconfig
300 +"
301 +
302 +PATCHES=(
303 + "${FILESDIR}"/${PN}-3.1.0-mtu.patch #291907
304 + "${FILESDIR}"/${PN}-5.10.0-configure-nomagic.patch # bug 643722
305 + "${FILESDIR}"/${PN}-5.1.0-portability.patch
306 + "${FILESDIR}"/${PN}-5.7.0-mix-signal.h-include.patch
307 +)
308 +
309 +src_prepare() {
310 + if ! use ipv6 ; then
311 + PATCHES+=(
312 + "${FILESDIR}"/${PN}-4.20.0-no-ipv6.patch #326849
313 + )
314 + fi
315 +
316 + default
317 +
318 + # Fix version if necessary
319 + local versionfile="include/version.h"
320 + if ! grep -Fq "${PV}" ${versionfile} ; then
321 + einfo "Fixing version string"
322 + sed "s@\"[[:digit:]\.]\+\"@\"${PV}\"@" \
323 + -i ${versionfile} || die
324 + fi
325 +
326 + # echo -n is not POSIX compliant
327 + sed 's@echo -n@printf@' -i configure || die
328 +
329 + sed -i \
330 + -e '/^CC :\?=/d' \
331 + -e "/^LIBDIR/s:=.*:=/$(get_libdir):" \
332 + -e "s|-O2|${CFLAGS} ${CPPFLAGS}|" \
333 + -e "/^HOSTCC/s:=.*:= $(tc-getBUILD_CC):" \
334 + -e "/^DBM_INCLUDE/s:=.*:=${T}:" \
335 + Makefile || die
336 +
337 + # build against system headers
338 + rm -r include/netinet || die #include/linux include/ip{,6}tables{,_common}.h include/libiptc
339 + sed -i 's:TCPI_OPT_ECN_SEEN:16:' misc/ss.c || die
340 +
341 + if use minimal ; then
342 + sed -i -e '/^SUBDIRS=/s:=.*:=lib tc ip:' Makefile || die
343 + fi
344 +}
345 +
346 +src_configure() {
347 + tc-export AR CC PKG_CONFIG
348 +
349 + # This sure is ugly. Should probably move into toolchain-funcs at some point.
350 + local setns
351 + pushd "${T}" >/dev/null
352 + printf '#include <sched.h>\nint main(){return setns(0, 0);}\n' > test.c
353 + ${CC} ${CFLAGS} ${CPPFLAGS} -D_GNU_SOURCE ${LDFLAGS} test.c >&/dev/null && setns=y || setns=n
354 + echo 'int main(){return 0;}' > test.c
355 + ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} test.c -lresolv >&/dev/null || sed -i '/^LDLIBS/s:-lresolv::' "${S}"/Makefile
356 + popd >/dev/null
357 +
358 + # run "configure" script first which will create "config.mk"...
359 + econf
360 +
361 + # ...now switch on/off requested features via USE flags
362 + # this is only useful if the test did not set other things, per bug #643722
363 + cat <<-EOF >> config.mk
364 + TC_CONFIG_ATM := $(usex atm y n)
365 + TC_CONFIG_XT := $(usex iptables y n)
366 + TC_CONFIG_NO_XT := $(usex iptables n y)
367 + # We've locked in recent enough kernel headers #549948
368 + TC_CONFIG_IPSET := y
369 + HAVE_BERKELEY_DB := $(usex berkdb y n)
370 + HAVE_CAP := $(usex caps y n)
371 + HAVE_MNL := $(usex minimal n y)
372 + HAVE_ELF := $(usex elf y n)
373 + HAVE_SELINUX := $(usex selinux y n)
374 + IP_CONFIG_SETNS := ${setns}
375 + # Use correct iptables dir, #144265 #293709
376 + IPT_LIB_DIR := $(use iptables && ${PKG_CONFIG} xtables --variable=xtlibdir)
377 + HAVE_LIBBSD := $(usex libbsd y n)
378 + EOF
379 +}
380 +
381 +src_compile() {
382 + emake V=1 NETNS_RUN_DIR=/run/netns
383 +}
384 +
385 +src_install() {
386 + if use minimal ; then
387 + into /
388 + dosbin tc/tc
389 + dobin ip/ip
390 + return 0
391 + fi
392 +
393 + emake \
394 + DESTDIR="${D}" \
395 + PREFIX="${EPREFIX}/usr" \
396 + LIBDIR="${EPREFIX}"/$(get_libdir) \
397 + SBINDIR="${EPREFIX}"/sbin \
398 + CONFDIR="${EPREFIX}"/etc/iproute2 \
399 + DOCDIR="${EPREFIX}"/usr/share/doc/${PF} \
400 + MANDIR="${EPREFIX}"/usr/share/man \
401 + ARPDDIR="${EPREFIX}"/var/lib/arpd \
402 + install
403 +
404 + dodir /bin
405 + mv "${ED}"/{s,}bin/ip || die #330115
406 +
407 + dolib.a lib/libnetlink.a
408 + insinto /usr/include
409 + doins include/libnetlink.h
410 + # This local header pulls in a lot of linux headers it
411 + # doesn't directly need. Delete this header that requires
412 + # linux-headers-3.8 until that goes stable. #467716
413 + sed -i '/linux\/netconf.h/d' "${ED}"/usr/include/libnetlink.h || die
414 +
415 + if use berkdb ; then
416 + keepdir /var/lib/arpd
417 + # bug 47482, arpd doesn't need to be in /sbin
418 + dodir /usr/bin
419 + mv "${ED}"/sbin/arpd "${ED}"/usr/bin/ || die
420 + elif [[ -d "${ED}"/var/lib/arpd ]]; then
421 + rmdir --ignore-fail-on-non-empty -p "${ED}"/var/lib/arpd || die
422 + fi
423 +}