pcapsipdump: fix missing libbsd depend

When libbsd is available in staging it will be picked up by pcapsipdump
during the compile. The binary will link to libbsd, causing an
additional dependency. Currently the builds on the bots are failing
because of this.

The only function pcapsipdump is using from libbsd is strlcpy(). This
function is also provided by uClibc as well as musl.

Attached patch adds a detection mechanism that checks whether libc
provides strlcpy(). This way the dependency on libbsd is only required if
building against a libc which doesn't package strlcpy(), like glibc.
DEPENDS are updated to reflect that.

Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
This commit is contained in:
Sebastian Kemper 2019-10-09 19:40:04 +02:00
parent 0675bd3b2a
commit af47baec2e
2 changed files with 66 additions and 2 deletions

View file

@ -13,7 +13,7 @@ PKG_SOURCE_PROTO:=svn
PKG_SOURCE_URL:=https://svn.code.sf.net/p/pcapsipdump/code/trunk
PKG_SOURCE_VERSION:=151
PKG_SOURCE_DATE=2019-10-07
PKG_RELEASE:=1
PKG_RELEASE:=2
PKG_MIRROR_HASH:=a029b29946f0492220fc9c60ef3e7f0a7a0c660f0047957eab6802ae6b9f9ed4
PKG_LICENSE:=GPL-2.0+
@ -26,7 +26,7 @@ define Package/pcapsipdump
SECTION:=net
CATEGORY:=Network
SUBMENU:=Telephony
DEPENDS:=+libpcap $(CXX_DEPENDS)
DEPENDS:=$(CXX_DEPENDS) +USE_GLIBC:libbsd +libpcap
TITLE:=SIP sessions dumping tool
URL:=http://sourceforge.net/projects/pcapsipdump/
endef

View file

@ -0,0 +1,64 @@
--- a/Makefile
+++ b/Makefile
@@ -2,8 +2,12 @@ LIBS ?= -lpcap -lstdc++
RELEASEFLAGS ?= -O3 -Wall
#CXXFLAGS ?= --std=c++0x
+# check if libc provides BSD's strlcpy
+ifeq ($(shell $(CXX) $(CXXFLAGS) -D_BSD_SOURCE $(LDFLAGS) $(DEFS) -o /dev/null \
+ make-checks/strlcpy.cpp 2>/dev/null; echo $$?),0)
+ BSDSTR_DEFS := -D_BSD_SOURCE -DUSE_LIBC_STRLCPY
# auto-detect if bsd/strings.h is available
-ifeq ($(shell $(CXX) $(CXXFLAGS) $(LDFLAGS) $(DEFS) -E -o /dev/null \
+else ifeq ($(shell $(CXX) $(CXXFLAGS) $(LDFLAGS) $(DEFS) -E -o /dev/null \
make-checks/libbsd.cpp 2>/dev/null; echo $$?),0)
BSDSTR_DEFS := -DUSE_BSD_STRING_H
BSDSTR_LIBS := -lbsd
--- a/pcapsipdump_lib.h
+++ b/pcapsipdump_lib.h
@@ -3,7 +3,7 @@
#ifndef BSD
#ifdef USE_BSD_STRING_H
#include <bsd/string.h>
- #else
+ #elif !defined(USE_LIBC_STRLCPY)
#define strlcpy strncpy
#endif
#endif
--- a/make-checks/all.mk
+++ b/make-checks/all.mk
@@ -1,5 +1,5 @@
-make-checks/all: make-checks/cxx make-checks/libpcap make-checks/libbsd
+make-checks/all: make-checks/cxx make-checks/libpcap make-checks/strlcpy make-checks/libbsd
@touch make-checks/all
make-checks/clean:
- rm -f make-checks/all make-checks/cxx make-checks/libpcap make-checks/libbsd
+ rm -f make-checks/all make-checks/cxx make-checks/libpcap make-checks/strlcpy make-checks/libbsd
--- a/make-checks/libbsd.mk
+++ b/make-checks/libbsd.mk
@@ -2,5 +2,5 @@ CHECK_LIBBSD = $(CXX) $(CXXFLAGS) $(LDFL
make-checks/libbsd:
@$(CHECK_LIBBSD) || (\
- echo "*** notice: recommended library not found: libbsd"; \
+ echo "*** notice: library not found: libbsd"; \
true)
--- /dev/null
+++ b/make-checks/strlcpy.cpp
@@ -0,0 +1,6 @@
+#include <string.h>
+int main(int argc, char **argv) {
+ char dst[10];
+ strlcpy(dst, "test", sizeof(dst));
+ return 0;
+}
--- /dev/null
+++ b/make-checks/strlcpy.mk
@@ -0,0 +1,6 @@
+CHECK_STRLCPY = $(CXX) $(CXXFLAGS) -D_BSD_SOURCE $(LDFLAGS) make-checks/strlcpy.cpp -o make-checks/strlcpy 2>/dev/null
+
+make-checks/strlcpy:
+ @$(CHECK_STRLCPY) || (\
+ echo "*** notice: your libc doesn't provide strlcpy()"; \
+ true)