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 libelf & libmnl based only on presence. - Links based on libselinux based only on presence. Closes: https://bugs.gentoo.org/643722 Signed-off-by: Robin H. Johnson diff -Nuar --exclude '*~' --exclude '.*.swp' --exclude '*.orig' iproute2-4.14.1.orig/bridge/Makefile iproute2-4.14.1/bridge/Makefile --- iproute2-4.14.1.orig/bridge/Makefile 2017-11-13 10:09:57.000000000 -0800 +++ iproute2-4.14.1/bridge/Makefile 2018-01-07 14:24:23.350726423 -0800 @@ -1,6 +1,7 @@ BROBJ = bridge.o fdb.o monitor.o link.o mdb.o vlan.o include ../config.mk +include ../config.include all: bridge diff -Nuar --exclude '*~' --exclude '.*.swp' --exclude '*.orig' iproute2-4.14.1.orig/config.include iproute2-4.14.1/config.include --- iproute2-4.14.1.orig/config.include 1969-12-31 16:00:00.000000000 -0800 +++ iproute2-4.14.1/config.include 2018-01-07 14:25:34.406126921 -0800 @@ -0,0 +1,22 @@ +# 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 + +# Rules can only be declared after all variables in them are known. +%.o: %.c + $(QUIET_CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $< + +# vim: ft=make: diff -Nuar --exclude '*~' --exclude '.*.swp' --exclude '*.orig' iproute2-4.14.1.orig/configure iproute2-4.14.1/configure --- iproute2-4.14.1.orig/configure 2017-11-13 10:09:57.000000000 -0800 +++ iproute2-4.14.1/configure 2018-01-07 14:25:49.242419367 -0800 @@ -223,7 +223,7 @@ 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 @@ -268,8 +268,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 @@ -283,8 +283,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_CFLAGS += -DHAVE_SELINUX' `${PKG_CONFIG} --cflags libselinux` >>$CONFIG + echo 'HAVE_SELINUX_LDLIBS +=' `${PKG_CONFIG} --libs libselinux` >>$CONFIG else echo "no" fi @@ -297,8 +297,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 @@ -425,7 +425,3 @@ echo -n "docs:" check_docs echo - -echo >> $CONFIG -echo "%.o: %.c" >> $CONFIG -echo ' $(QUIET_CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<' >> $CONFIG diff -Nuar --exclude '*~' --exclude '.*.swp' --exclude '*.orig' iproute2-4.14.1.orig/devlink/Makefile iproute2-4.14.1/devlink/Makefile --- iproute2-4.14.1.orig/devlink/Makefile 2017-11-13 10:09:57.000000000 -0800 +++ iproute2-4.14.1/devlink/Makefile 2018-01-07 14:24:23.351726442 -0800 @@ -1,4 +1,5 @@ include ../config.mk +include ../config.include ifeq ($(HAVE_MNL),y) diff -Nuar --exclude '*~' --exclude '.*.swp' --exclude '*.orig' iproute2-4.14.1.orig/genl/Makefile iproute2-4.14.1/genl/Makefile --- iproute2-4.14.1.orig/genl/Makefile 2017-11-13 10:09:57.000000000 -0800 +++ iproute2-4.14.1/genl/Makefile 2018-01-07 14:24:23.351726442 -0800 @@ -1,6 +1,7 @@ GENLOBJ=genl.o include ../config.mk +include ../config.include SHARED_LIBS ?= y CFLAGS += -fno-strict-aliasing diff -Nuar --exclude '*~' --exclude '.*.swp' --exclude '*.orig' iproute2-4.14.1.orig/ip/Makefile iproute2-4.14.1/ip/Makefile --- iproute2-4.14.1.orig/ip/Makefile 2017-11-13 10:09:57.000000000 -0800 +++ iproute2-4.14.1/ip/Makefile 2018-01-07 14:24:23.351726442 -0800 @@ -14,6 +14,7 @@ RTMONOBJ=rtmon.o include ../config.mk +include ../config.include ALLOBJ=$(IPOBJ) $(RTMONOBJ) SCRIPTS=ifcfg rtpr routel routef diff -Nuar --exclude '*~' --exclude '.*.swp' --exclude '*.orig' iproute2-4.14.1.orig/lib/Makefile iproute2-4.14.1/lib/Makefile --- iproute2-4.14.1.orig/lib/Makefile 2017-11-13 10:09:57.000000000 -0800 +++ iproute2-4.14.1/lib/Makefile 2018-01-07 14:24:23.351726442 -0800 @@ -1,4 +1,5 @@ include ../config.mk +include ../config.include CFLAGS += -fPIC diff -Nuar --exclude '*~' --exclude '.*.swp' --exclude '*.orig' iproute2-4.14.1.orig/misc/Makefile iproute2-4.14.1/misc/Makefile --- iproute2-4.14.1.orig/misc/Makefile 2017-11-13 10:09:57.000000000 -0800 +++ iproute2-4.14.1/misc/Makefile 2018-01-07 14:24:23.351726442 -0800 @@ -4,6 +4,7 @@ TARGETS=ss nstat ifstat rtacct lnstat include ../config.mk +include ../config.include ifeq ($(HAVE_BERKELEY_DB),y) TARGETS += arpd diff -Nuar --exclude '*~' --exclude '.*.swp' --exclude '*.orig' iproute2-4.14.1.orig/netem/Makefile iproute2-4.14.1/netem/Makefile --- iproute2-4.14.1.orig/netem/Makefile 2017-11-13 10:09:57.000000000 -0800 +++ iproute2-4.14.1/netem/Makefile 2018-01-07 14:24:23.351726442 -0800 @@ -1,4 +1,5 @@ include ../config.mk +include ../config.include DISTGEN = maketable normal pareto paretonormal DISTDATA = normal.dist pareto.dist paretonormal.dist experimental.dist diff -Nuar --exclude '*~' --exclude '.*.swp' --exclude '*.orig' iproute2-4.14.1.orig/rdma/Makefile iproute2-4.14.1/rdma/Makefile --- iproute2-4.14.1.orig/rdma/Makefile 2017-11-13 10:09:57.000000000 -0800 +++ iproute2-4.14.1/rdma/Makefile 2018-01-07 14:24:23.352726462 -0800 @@ -1,4 +1,5 @@ include ../config.mk +include ../config.include ifeq ($(HAVE_MNL),y) diff -Nuar --exclude '*~' --exclude '.*.swp' --exclude '*.orig' iproute2-4.14.1.orig/tc/Makefile iproute2-4.14.1/tc/Makefile --- iproute2-4.14.1.orig/tc/Makefile 2017-11-13 10:09:57.000000000 -0800 +++ iproute2-4.14.1/tc/Makefile 2018-01-07 14:24:23.352726462 -0800 @@ -3,6 +3,7 @@ emp_ematch.yacc.o emp_ematch.lex.o include ../config.mk +include ../config.include SHARED_LIBS ?= y diff -Nuar --exclude '*~' --exclude '.*.swp' --exclude '*.orig' iproute2-4.14.1.orig/tipc/Makefile iproute2-4.14.1/tipc/Makefile --- iproute2-4.14.1.orig/tipc/Makefile 2017-11-13 10:09:57.000000000 -0800 +++ iproute2-4.14.1/tipc/Makefile 2018-01-07 14:24:23.352726462 -0800 @@ -1,4 +1,5 @@ include ../config.mk +include ../config.include ifeq ($(HAVE_MNL),y)