@@ -323,6 +323,33 @@ check_cap()
fi
}
+check_sys_queue()
+{
+ cat >$TMPDIR/queue_test.c <<EOF
+#include <sys/queue.h>
+struct nest_qentry {
+ int attr_type;
+ TAILQ_ENTRY(nest_qentry) nest_entries;
+};
+int main(int argc, char **argv) {
+ return 0;
+}
+EOF
+ if $CC -I$INCLUDE -o $TMPDIR/queue_test $TMPDIR/queue_test.c >/dev/null 2>&1; then
+ echo "no"
+ else
+ if ${PKG_CONFIG} libbsd --exists; then
+ echo 'CFLAGS += -DHAVE_LIBBSD_SYS_QUEUE' `${PKG_CONFIG} libbsd --cflags` >>$CONFIG
+ echo 'LDLIBS +=' `${PKG_CONFIG} libbsd --libs` >> $CONFIG
+ echo "no"
+ else
+ echo 'CFLAGS += -DNEED_SYS_QUEUE' >>$CONFIG
+ echo "yes"
+ fi
+ fi
+ rm -f $TMPDIR/queue_test.c $TMPDIR/queue_test
+}
+
quiet_config()
{
cat <<EOF
@@ -398,6 +425,9 @@ check_strlcpy
echo -n "libcap support: "
check_cap
+echo -n "need for sys/queue.h API: "
+check_sys_queue
+
echo >> $CONFIG
echo "%.o: %.c" >> $CONFIG
echo ' $(QUIET_CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CPPFLAGS) -c -o $@ $<' >> $CONFIG
@@ -25,7 +25,14 @@
#include <linux/devlink.h>
#include <libmnl/libmnl.h>
#include <netinet/ether.h>
-#include <sys/queue.h>
+#ifdef HAVE_LIBBSD_SYS_QUEUE
+# include <bsd/sys/queue.h>
+#else
+# include <sys/queue.h>
+#endif
+#ifdef NEED_SYS_QUEUE
+# error "No <sys/queue.h> implementation found."
+#endif
#include "SNAPSHOT.h"
#include "list.h"
On sys/queue.h does not exist linux-musl targets and fails build as: devlink.c:28:10: fatal error: sys/queue.h: No such file or directory 28 | #include <sys/queue.h> | ^~~~~~~~~~~~~ The change pulls in 'sys/queue.h' from libbsd in case system headers don't already provides it. Tested on linux-musl and linux-glibc. Bug: https://bugs.gentoo.org/690486 CC: Stephen Hemminger <stephen@networkplumber.org> CC: netdev@vger.kernel.org Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org> --- configure | 30 ++++++++++++++++++++++++++++++ devlink/devlink.c | 9 ++++++++- 2 files changed, 38 insertions(+), 1 deletion(-)