net-snmp: Backport a patch to make sure $(LDFLAGS) is before any libs

After commit 1997d3d6c4 (net-snmp: Do not
pass LDFLAGS to compiler), some linker flags, like "-Wl,--as-needed",
appear too late on the linker command line. Backport a patch that
corrects the order of the arguments given to the linker.

Unfortunately, the patch is not enough. libtool reorders the arguments
given to libtool --mode=link so that any lib dependencies appear before
other linker arguments. Therefore it is needed to inject -Wl,--as-needed
on the linker command line that libtool produces.

Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
Peter Kjellerstedt 2025-10-10 21:01:11 +02:00 committed by Khem Raj
parent 441873fdc5
commit 52e2cac8e0
No known key found for this signature in database
GPG Key ID: BB053355919D3314
2 changed files with 258 additions and 1 deletions

View File

@ -0,0 +1,252 @@
From 10883d754750865e42327826ee90d7eda3741dda Mon Sep 17 00:00:00 2001
From: Sam James <sam@gentoo.org>
Date: Fri, 2 Dec 2022 02:26:29 +0000
Subject: [PATCH] Fix LDFLAGS vs LIBS ordering
LDFLAGS must come before both LIBS & any listed objects in order
for certain valid LDFLAGS, like '-Wl,--as-needed' to work correctly
(otherwise it'll either take no effect or discard libraries when
they're needed).
Gentoo has been carrying this patch for a while.
Signed-off-by: Sam James <sam@gentoo.org>
Upstream-Status: Backport [https://github.com/net-snmp/net-snmp/commit/72b47b9b41d2640ed4810297f2e26f5eb9d2fa31]
Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
---
Makefile.top | 4 ++--
agent/Makefile.in | 16 ++++++-------
agent/helpers/Makefile.in | 2 +-
apps/Makefile.in | 46 ++++++++++++++++++------------------
apps/snmpnetstat/Makefile.in | 2 +-
snmplib/Makefile.in | 4 ++--
testing/Makefile.in | 8 +++----
7 files changed, 41 insertions(+), 41 deletions(-)
diff --git a/Makefile.top b/Makefile.top
index 53e0392..5de5648 100644
--- a/Makefile.top
+++ b/Makefile.top
@@ -86,11 +86,11 @@ LIBCURRENT = 42
LIBAGE = 2
LIBREVISION = 1
-LIB_LD_CMD = $(LIBTOOL) --mode=link $(LINKCC) $(CFLAGS) -rpath $(libdir) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) @LD_NO_UNDEFINED@ -o
+LIB_LD_CMD = $(LIBTOOL) --mode=link $(LINKCC) $(CFLAGS) $(LDFLAGS) -rpath $(libdir) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) @LD_NO_UNDEFINED@ -o
LIB_EXTENSION = la
LIB_VERSION =
LIB_LDCONFIG_CMD = echo "do not ldconfig\n"
-LINK = $(LIBTOOL) --mode=link $(LINKCC)
+LINK = $(LIBTOOL) --mode=link $(LINKCC) $(LDFLAGS)
# RANLIB = @RANLIB@
RANLIB = :
diff --git a/agent/Makefile.in b/agent/Makefile.in
index 44f8818..6008eb8 100644
--- a/agent/Makefile.in
+++ b/agent/Makefile.in
@@ -288,26 +288,26 @@ all: agentlib subdirs miblib $(INSTALLBINPROGS) $(INSTALLSBINPROGS)
# build stuff targets
#
getkstat: getkstat.o
- $(CC) $(CFLAGS) -o $@ $? $(LIBS)
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $? $(LIBS)
getkstat.o: mibgroup/kernel_sunos5.c
- $(CC) $(CFLAGS) -o $@ -D_GETKSTAT_TEST -DDODEBUG -c $?
+ $(CC) $(CFLAGS) -o $@ -D_GETKSTAT_TEST -DDODEBUG -c $?
getmibstat: getmibstat.o
- $(CC) $(CFLAGS) -o $@ $? $(LIBS)
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $? $(LIBS)
getmibstat.o: mibgroup/kernel_sunos5.c
- $(CC) $(CFLAGS) -o $@ -D_GETMIBSTAT_TEST -DDODEBUG -c $?
+ $(CC) $(CFLAGS) -o $@ -D_GETMIBSTAT_TEST -DDODEBUG -c $?
-snmpd$(EXEEXT): ${LAGENTOBJS} $(USELIBS) $(AGENTLIB) $(HELPERLIB) $(MIBLIB) $(LIBTARG)
- $(LINK) $(CFLAGS) -o $@ ${LAGENTOBJS} ${LDFLAGS} ${OUR_AGENT_LIBS}
+snmpd$(EXEEXT): ${LAGENTOBJS} $(USELIBS) $(AGENTLIB) $(HELPERLIB) $(MIBLIB) $(LIBTARG)
+ $(LINK) $(CFLAGS) $(LDFLAGS) -o $@ ${LAGENTOBJS} ${OUR_AGENT_LIBS}
libnetsnmpagent.$(LIB_EXTENSION)$(LIB_VERSION): ${LLIBAGENTOBJS} $(USELIBS)
- $(LIB_LD_CMD) $(AGENTLIB) ${LLIBAGENTOBJS} $(USELIBS) ${LAGENTLIBS} $(LDFLAGS) $(PERLLDOPTS_FOR_LIBS) @AGENTLIBS@
+ $(LIB_LD_CMD) $(AGENTLIB) $(LDFLAGS) ${LLIBAGENTOBJS} $(USELIBS) ${LAGENTLIBS} $(PERLLDOPTS_FOR_LIBS) @AGENTLIBS@
$(RANLIB) $(AGENTLIB)
libnetsnmpmibs.$(LIB_EXTENSION)$(LIB_VERSION): ${LMIBOBJS} $(AGENTLIB) $(USELIBS) subdirs
- $(LIB_LD_CMD) $(MIBLIB) ${LMIBOBJS} $(AGENTLIB) $(USELIBS) $(LDFLAGS) ${LMIBLIBS} $(PERLLDOPTS_FOR_LIBS) @AGENTLIBS@
+ $(LIB_LD_CMD) $(MIBLIB) $(LDFLAGS) ${LMIBOBJS} $(AGENTLIB) $(USELIBS) ${LMIBLIBS} $(PERLLDOPTS_FOR_LIBS) @AGENTLIBS@
$(RANLIB) $(MIBLIB)
agentlib: $(AGENTLIB)
diff --git a/agent/helpers/Makefile.in b/agent/helpers/Makefile.in
index 51f409d..05a9adc 100644
--- a/agent/helpers/Makefile.in
+++ b/agent/helpers/Makefile.in
@@ -32,5 +32,5 @@ LOBJS = dummy.lo
all: standardall
libnetsnmphelpers.$(LIB_EXTENSION)$(LIB_VERSION): $(LOBJS)
- $(LIB_LD_CMD) $@ $(LOBJS) $(LDFLAGS)
+ $(LIB_LD_CMD) $@ $(LDFLAGS) $(LOBJS)
$(RANLIB) $@
diff --git a/apps/Makefile.in b/apps/Makefile.in
index 57b8524..b5b26f9 100644
--- a/apps/Makefile.in
+++ b/apps/Makefile.in
@@ -161,37 +161,37 @@ OTHERUNINSTALL=snmpinformuninstall snmptrapdperluninstall \
# build rules
#
snmpwalk$(EXEEXT): snmpwalk.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpwalk.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpwalk.$(OSUFFIX) ${LIBS}
snmpbulkwalk$(EXEEXT): snmpbulkwalk.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpbulkwalk.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpbulkwalk.$(OSUFFIX) ${LIBS}
snmpbulkget$(EXEEXT): snmpbulkget.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpbulkget.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpbulkget.$(OSUFFIX) ${LIBS}
snmptranslate$(EXEEXT): snmptranslate.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmptranslate.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmptranslate.$(OSUFFIX) ${LIBS}
snmpstatus$(EXEEXT): snmpstatus.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpstatus.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpstatus.$(OSUFFIX) ${LIBS}
snmpget$(EXEEXT): snmpget.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpget.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpget.$(OSUFFIX) ${LIBS}
snmpdelta$(EXEEXT): snmpdelta.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpdelta.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpdelta.$(OSUFFIX) ${LIBS}
snmptable$(EXEEXT): snmptable.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmptable.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmptable.$(OSUFFIX) ${LIBS}
snmptest$(EXEEXT): snmptest.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmptest.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmptest.$(OSUFFIX) ${LIBS}
snmptrapd$(EXEEXT): $(TRAPD_OBJECTS) $(USETRAPLIBS) $(INSTALLLIBS)
- $(LINK) ${CFLAGS} -o $@ $(TRAPD_OBJECTS) $(INSTALLLIBS) ${LDFLAGS} ${TRAPLIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ $(TRAPD_OBJECTS) $(INSTALLLIBS) ${TRAPLIBS}
snmptrap$(EXEEXT): snmptrap.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmptrap.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmptrap.$(OSUFFIX) ${LIBS}
snmpinform$(EXEEXT): snmptrap$(EXEEXT)
rm -f snmpinform
@@ -202,40 +202,40 @@ snmptop$(EXEEXT): snmpps$(EXEEXT)
$(LN_S) snmpps$(EXEEXT) snmptop$(EXEEXT)
snmpset$(EXEEXT): snmpset.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpset.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpset.$(OSUFFIX) ${LIBS}
snmpusm$(EXEEXT): snmpusm.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpusm.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpusm.$(OSUFFIX) ${LIBS}
snmpvacm$(EXEEXT): snmpvacm.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpvacm.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpvacm.$(OSUFFIX) ${LIBS}
snmptls$(EXEEXT): snmptls.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmptls.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmptls.$(OSUFFIX) ${LIBS}
agentxtrap$(EXEEXT): agentxtrap.$(OSUFFIX) $(USEAGENTLIBS)
- $(LINK) ${CFLAGS} -o $@ agentxtrap.$(OSUFFIX) ${LDFLAGS} $(USEAGENTLIBS) $(PERLLDOPTS_FOR_APPS) ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ agentxtrap.$(OSUFFIX) $(USEAGENTLIBS) $(PERLLDOPTS_FOR_APPS) ${LIBS}
snmpgetnext$(EXEEXT): snmpgetnext.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpgetnext.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpgetnext.$(OSUFFIX) ${LIBS}
encode_keychange$(EXEEXT): encode_keychange.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ encode_keychange.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ encode_keychange.$(OSUFFIX) ${LIBS}
snmpdf$(EXEEXT): snmpdf.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpdf.$(OSUFFIX) ${LDFLAGS} ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpdf.$(OSUFFIX) ${LIBS}
snmpps$(EXEEXT): snmpps.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpps.$(OSUFFIX) ${LDFLAGS} @LIBCURSES@ ${LIBS}
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpps.$(OSUFFIX) @LIBCURSES@ ${LIBS}
snmpping$(EXEEXT): snmpping.$(OSUFFIX) $(USELIBS)
- $(LINK) ${CFLAGS} -o $@ snmpping.$(OSUFFIX) ${LDFLAGS} ${LIBS} -lm
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpping.$(OSUFFIX) ${LIBS} -lm
snmppcap$(EXEEXT): snmppcap.$(OSUFFIX) $(USEAGENTLIBS)
- $(LINK) ${CFLAGS} -o $@ snmppcap.$(OSUFFIX) ${LDFLAGS} ${USEAGENTLIBS} ${LIBS} -lpcap
+ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmppcap.$(OSUFFIX) ${USEAGENTLIBS} ${LIBS} -lpcap
libnetsnmptrapd.$(LIB_EXTENSION)$(LIB_VERSION): $(LLIBTRAPD_OBJS)
- $(LIB_LD_CMD) $@ ${LLIBTRAPD_OBJS} $(MIBLIB) $(MYSQL_LIBS) $(USELIBS) $(PERLLDOPTS_FOR_LIBS) $(LDFLAGS)
+ $(LIB_LD_CMD) $@ $(LDFLAGS) ${LLIBTRAPD_OBJS} $(MIBLIB) $(MYSQL_LIBS) $(USELIBS) $(PERLLDOPTS_FOR_LIBS)
$(RANLIB) $@
snmpinforminstall:
diff --git a/apps/snmpnetstat/Makefile.in b/apps/snmpnetstat/Makefile.in
index dfb566d..8a8cb21 100644
--- a/apps/snmpnetstat/Makefile.in
+++ b/apps/snmpnetstat/Makefile.in
@@ -34,4 +34,4 @@ LIBS= ../../snmplib/libnetsnmp.$(LIB_EXTENSION)$(LIB_VERSION) $(VAL_LIBS) @LIBS
all: standardall
snmpnetstat$(EXEEXT): ${LOBJS} ${USELIBS}
- ${LINK} ${CFLAGS} -o $@ ${LOBJS} ${LOCAL_LIBS} ${LDFLAGS} ${LIBS}
+ ${LINK} ${CFLAGS} ${LDFLAGS} -o $@ ${LOBJS} ${LOCAL_LIBS} ${LIBS}
diff --git a/snmplib/Makefile.in b/snmplib/Makefile.in
index ecbfc4d..1501636 100644
--- a/snmplib/Makefile.in
+++ b/snmplib/Makefile.in
@@ -230,11 +230,11 @@ all: standardall
# how to build the libraries.
libnetsnmp.$(LIB_EXTENSION)$(LIB_VERSION): $(TOBJS)
- $(LIB_LD_CMD) $@ $(TOBJS) $(LDFLAGS) @LNETSNMPLIBS@
+ $(LIB_LD_CMD) $@ $(LDFLAGS) $(TOBJS) @LNETSNMPLIBS@
$(RANLIB) $@
libsnmp.$(LIB_EXTENSION)$(LIB_VERSION): $(TOBJS)
- $(LIB_LD_CMD) $@ $(TOBJS) $(LDFLAGS) @LNETSNMPLIBS@
+ $(LIB_LD_CMD) $@ $(LDFLAGS) $(TOBJS) @LNETSNMPLIBS@
$(RANLIB) $@
#
diff --git a/testing/Makefile.in b/testing/Makefile.in
index 79d069d..a6d920e 100644
--- a/testing/Makefile.in
+++ b/testing/Makefile.in
@@ -61,16 +61,16 @@ test-mibs:
cd $(srcdir)/rfc1213 ; ./run
etest: etimetest.o $(PARSEOBJS) $(USELIBS)
- ${CC} -o $@ etimetest.o $(PARSEOBJS) ${LDFLAGS} ${LIBS}
+ ${CC} ${LDFLAGS} -o $@ etimetest.o $(PARSEOBJS) ${LIBS}
ktest: keymanagetest.o $(PARSEOBJS) $(USELIBS)
- ${CC} -o $@ keymanagetest.o $(PARSEOBJS) ${LDFLAGS} ${LIBS}
+ ${CC} ${LDFLAGS} -o $@ keymanagetest.o $(PARSEOBJS) ${LIBS}
misctest: misctest.o $(PARSEOBJS) $(USELIBS)
- ${CC} -o $@ misctest.o $(PARSEOBJS) ${LDFLAGS} ${LIBS}
+ ${CC} ${LDFLAGS} -o $@ misctest.o $(PARSEOBJS) ${LIBS}
stest: scapitest.o $(PARSEOBJS) $(USELIBS)
- ${CC} -o $@ scapitest.o $(PARSEOBJS) ${LDFLAGS} ${LIBS}
+ ${CC} ${LDFLAGS} -o $@ scapitest.o $(PARSEOBJS) ${LIBS}
clean: testclean
rm -f *.o core *.core $(TARG)

View File

@ -30,6 +30,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/net-snmp/net-snmp-${PV}.tar.gz \
file://0001-Android-Fix-the-build.patch \
file://netsnmp-swinst-crash.patch \
file://net-snmp-5.9.4-kernel-6.7.patch \
file://0001-Fix-LDFLAGS-vs-LIBS-ordering.patch \
"
SRC_URI[sha256sum] = "8b4de01391e74e3c7014beb43961a2d6d6fa03acc34280b9585f4930745b0544"
@ -117,6 +118,10 @@ do_configure:append() {
-e "s@^NSC_LIBDIR=-L.*@NSC_LIBDIR=-L${STAGING_DIR_TARGET}\$\{libdir\}@g" \
-e "s@^NSC_LDFLAGS=\"-L.* @NSC_LDFLAGS=\"-L${STAGING_DIR_TARGET}\$\{libdir\} @g" \
-i ${B}/net-snmp-config
# Make libtool inject -Wl,--as-needed so that it is specified before any lib
# dependencies. This is needed due to libtools' reordering of the arguments.
[ -z "${ASNEEDED}" ] || sed -e "s@CC -shared@\0 ${ASNEEDED}@" -i ${B}/libtool
}
do_install:append() {