The hand-rolled configure script, for multiple options (selinux,mnl,elf), sets a variable as well as modifying CFLAGS & LDLIBS. If config.mk is later amended to disable a feature, the CFLAGS/LDLIBS tweaks are still in place. Push the CFLAGS/LDLIBS changes into new conditional Makefile code, so that they are only passed when correctly needed. Prior Gentoo testcase for reproduction: USE=minimal ebuild ... compile. - Linking with libbsd, libelf, libmnl & libcap based only on presence. - Links based on libselinux based only on presence. Closes: https://bugs.gentoo.org/643722 Signed-off-by: Robin H. Johnson Forward-ported from v4.14.1 to v4.16.0 by Lars Wendler Added libcap to v4.17.0 by Lars Wendler Forward-ported from v4.17.0 to v4.20.0 by Lars Wendler Forward-ported from v4.20.0 to v5.11.0 by Lars Wendler Forward-ported from v5.11.0 to v5.12.0 by Lars Wendler Update 2023-09-05: Removed libbsd enforcement from config.include for bug #911727 by Holger Hoffstätte Forward-ported from v6.5.0 to v6.7.0 by Lars Wendler --- iproute2-6.7.0/bridge/Makefile +++ iproute2-6.7.0/bridge/Makefile @@ -2,6 +2,7 @@ BROBJ = bridge.o fdb.o monitor.o link.o mdb.o vlan.o vni.o include ../config.mk +include ../config.include all: bridge --- iproute2-6.7.0/config.include +++ iproute2-6.7.0/config.include @@ -0,0 +1,26 @@ +# We can only modify CFLAGS/LDLIBS after all the config options are known. +ifeq ($(IP_CONFIG_SETNS),y) + CFLAGS += $(IP_CONFIG_SETNS_CFLAGS) +endif +ifeq ($(HAVE_ELF),y) + CFLAGS += $(HAVE_ELF_CFLAGS) + LDLIBS += $(HAVE_ELF_LDLIBS) +endif +ifeq ($(HAVE_SELINUX),y) + CFLAGS += $(HAVE_SELINUX_CFLAGS) + LDLIBS += $(HAVE_SELINUX_LDLIBS) +endif +ifeq ($(HAVE_MNL),y) + CFLAGS += $(HAVE_MNL_CFLAGS) + LDLIBS += $(HAVE_MNL_LDLIBS) +endif +ifeq ($(HAVE_CAP),y) + CFLAGS += $(HAVE_CAP_CFLAGS) + LDLIBS += $(HAVE_CAP_LDLIBS) +endif + +# Rules can only be declared after all variables in them are known. +%.o: %.c + $(QUIET_CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CPPFLAGS) -c -o $@ $< + +# vim: ft=make: --- iproute2-6.7.0/configure +++ iproute2-6.7.0/configure @@ -183,7 +183,7 @@ if $CC -I$INCLUDE -o $TMPDIR/setnstest $TMPDIR/setnstest.c >/dev/null 2>&1; then echo "IP_CONFIG_SETNS:=y" >>$CONFIG echo "yes" - echo "CFLAGS += -DHAVE_SETNS" >>$CONFIG + echo "IP_CONFIG_SETNS_CFLAGS += -DHAVE_SETNS" >>$CONFIG else echo "no" fi @@ -250,8 +250,8 @@ echo "HAVE_ELF:=y" >>$CONFIG echo "yes" - echo 'CFLAGS += -DHAVE_ELF' "$(${PKG_CONFIG} libelf --cflags)" >> $CONFIG - echo 'LDLIBS += ' "$(${PKG_CONFIG} libelf --libs)" >>$CONFIG + echo 'HAVE_ELF_CFLAGS += -DHAVE_ELF' "$(${PKG_CONFIG} libelf --cflags)" >> $CONFIG + echo 'HAVE_ELF_LDLIBS += ' "$(${PKG_CONFIG} libelf --libs)" >>$CONFIG else echo "no" fi @@ -369,8 +369,8 @@ echo "HAVE_SELINUX:=y" >>$CONFIG echo "yes" - echo 'LDLIBS +=' "$(${PKG_CONFIG} --libs libselinux)" >>$CONFIG - echo 'CFLAGS += -DHAVE_SELINUX' "$(${PKG_CONFIG} --cflags libselinux)" >>$CONFIG + echo 'HAVE_SELINUX_LDLIBS +=' "$(${PKG_CONFIG} --libs libselinux)" >>$CONFIG + echo 'HAVE_SELINUX_CFLAGS += -DHAVE_SELINUX' "$(${PKG_CONFIG} --cflags libselinux)" >>$CONFIG else echo "no" fi @@ -395,8 +395,8 @@ echo "HAVE_MNL:=y" >>$CONFIG echo "yes" - echo 'CFLAGS += -DHAVE_LIBMNL' "$(${PKG_CONFIG} libmnl --cflags)" >>$CONFIG - echo 'LDLIBS +=' "$(${PKG_CONFIG} libmnl --libs)" >> $CONFIG + echo 'HAVE_MNL_CFLAGS += -DHAVE_LIBMNL' "$(${PKG_CONFIG} libmnl --cflags)" >>$CONFIG + echo 'HAVE_MNL_LDLIBS +=' "$(${PKG_CONFIG} libmnl --libs)" >> $CONFIG else echo "no" fi @@ -436,8 +436,8 @@ echo "no" else if ${PKG_CONFIG} libbsd --exists; then - echo 'CFLAGS += -DHAVE_LIBBSD' "$(${PKG_CONFIG} libbsd --cflags)" >>$CONFIG - echo 'LDLIBS +=' "$(${PKG_CONFIG} libbsd --libs)" >> $CONFIG + echo 'HAVE_LIBBSD_CFLAGS += -DHAVE_LIBBSD' "$(${PKG_CONFIG} libbsd --cflags)" >>$CONFIG + echo 'HAVE_LIBBSD_LDLIBS +=' "$(${PKG_CONFIG} libbsd --libs)" >> $CONFIG echo "no" else echo 'CFLAGS += -DNEED_STRLCPY' >>$CONFIG @@ -453,8 +453,8 @@ echo "HAVE_CAP:=y" >>$CONFIG echo "yes" - echo 'CFLAGS += -DHAVE_LIBCAP' "$(${PKG_CONFIG} libcap --cflags)" >>$CONFIG - echo 'LDLIBS +=' "$(${PKG_CONFIG} libcap --libs)" >> $CONFIG + echo 'HAVE_CAP_CFLAGS += -DHAVE_LIBCAP' "$(${PKG_CONFIG} libcap --cflags)" >>$CONFIG + echo 'HAVE_CAP_LDLIBS +=' "$(${PKG_CONFIG} libcap --libs)" >> $CONFIG else echo "no" fi @@ -647,7 +647,3 @@ echo -n "color output: " check_color - -echo >> $CONFIG -echo "%.o: %.c" >> $CONFIG -echo ' $(QUIET_CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CPPFLAGS) -c -o $@ $<' >> $CONFIG --- iproute2-6.7.0/dcb/Makefile +++ iproute2-6.7.0/dcb/Makefile @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 include ../config.mk +include ../config.include DCBOBJ = dcb.o \ dcb_app.o \ --- iproute2-6.7.0/devlink/Makefile +++ iproute2-6.7.0/devlink/Makefile @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 include ../config.mk +include ../config.include DEVLINKOBJ = devlink.o mnlg.o TARGETS += devlink --- iproute2-6.7.0/genl/Makefile +++ iproute2-6.7.0/genl/Makefile @@ -2,6 +2,7 @@ GENLOBJ=genl.o include ../config.mk +include ../config.include SHARED_LIBS ?= y CFLAGS += -fno-strict-aliasing --- iproute2-6.7.0/ip/Makefile +++ iproute2-6.7.0/ip/Makefile @@ -18,6 +18,7 @@ RTMONOBJ=rtmon.o include ../config.mk +include ../config.include ALLOBJ=$(IPOBJ) $(RTMONOBJ) SCRIPTS=routel --- iproute2-6.7.0/lib/Makefile +++ iproute2-6.7.0/lib/Makefile @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 include ../config.mk +include ../config.include CFLAGS += -fPIC --- iproute2-6.7.0/misc/Makefile +++ iproute2-6.7.0/misc/Makefile @@ -5,6 +5,7 @@ TARGETS=ss nstat ifstat rtacct lnstat include ../config.mk +include ../config.include ifeq ($(HAVE_BERKELEY_DB),y) TARGETS += arpd --- iproute2-6.7.0/netem/Makefile +++ iproute2-6.7.0/netem/Makefile @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 include ../config.mk +include ../config.include DISTGEN = maketable normal pareto paretonormal DISTDATA = normal.dist pareto.dist paretonormal.dist experimental.dist --- iproute2-6.7.0/rdma/Makefile +++ iproute2-6.7.0/rdma/Makefile @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB include ../config.mk +include ../config.include CFLAGS += -I./include/uapi/ --- iproute2-6.7.0/tc/Makefile +++ iproute2-6.7.0/tc/Makefile @@ -4,6 +4,7 @@ emp_ematch.tab.o emp_ematch.lex.o include ../config.mk +include ../config.include SHARED_LIBS ?= y --- iproute2-6.7.0/tipc/Makefile +++ iproute2-6.7.0/tipc/Makefile @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 include ../config.mk +include ../config.include TIPCOBJ=bearer.o \ cmdl.o link.o \ --- iproute2-6.7.0/vdpa/Makefile +++ iproute2-6.7.0/vdpa/Makefile @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 include ../config.mk +include ../config.include CFLAGS += -I./include/uapi/ VDPAOBJ = vdpa.o