Re: [PATCH iptables] build: use pkg-config for libpcap

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2023-04-01, at 12:43:04 +0100, Jeremy Sowden wrote:
> On 2023-03-31, at 22:36:01 +0000, Alyssa Ross wrote:
> > If building statically, with libpcap built with libnl support, linking
> > will fail, as the compiler won't be able to find the libnl symbols
> > since static libraries don't contain dependency information.  To fix
> > this, use pkg-config to find the flags for linking libpcap, since the
> > pkg-config files contain the neccesary dependency information.
>                                ^^^^^^^^^
> "necessary"			       
> 
> > Signed-off-by: Alyssa Ross <hi@xxxxxxxxx>
> 
> LGTM.

Actually, there is a problem.  See below.

> The only thing I would say is that pkg-config support was added
> to libpcap comparatively recently (2018).  When I made similar changes
> to ulogd2 last year, I added a fall-back to pcap-config:
> 
>   https://git.netfilter.org/ulogd2/commit/?id=be4df8f66eb843dc19c7d1fed7c33fd7a40c2e21
> 
> > ---
> >  configure.ac      | 3 ++-
> >  utils/Makefile.am | 6 +++---
> >  2 files changed, 5 insertions(+), 4 deletions(-)
> > 
> > diff --git a/configure.ac b/configure.ac
> > index bc2ed47b..e0bb26aa 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -114,7 +114,8 @@ AM_CONDITIONAL([ENABLE_NFTABLES], [test "$enable_nftables" = "yes"])
> >  AM_CONDITIONAL([ENABLE_CONNLABEL], [test "$enable_connlabel" = "yes"])
> >  
> >  if test "x$enable_bpfc" = "xyes" || test "x$enable_nfsynproxy" = "xyes"; then
> > -	AC_CHECK_LIB(pcap, pcap_compile,, AC_MSG_ERROR(missing libpcap library required by bpf compiler or nfsynproxy tool))
> > +	PKG_CHECK_MODULES([libpcap], [libpcap], [], [
> > +		AC_MSG_ERROR(missing libpcap library required by bpf compiler or nfsynproxy tool)])
> >  fi

When autoconf first encounters `PKG_CHECK_MODULES`, if `$PKG_CONFIG` is
not already defined it will execute `PKG_PROG_PKG_CONFIG` to find it.
However, because you are calling `PKG_CHECK_MODULES` in a conditional,
if `$enable_bpfc` and `$enable_nfsynproxy` are not `yes`, the expansion
of `PKG_PROG_PKG_CONFIG` will not be executed and so the following
pkg-config checks will fail:

  checking for libnfnetlink >= 1.0... no
  checking for libmnl >= 1.0... no
  *** Error: No suitable libmnl found. ***
      Please install the 'libmnl' package
      Or consider --disable-nftables to skip
      iptables-compat over nftables support.

Something like this will fix it:

  @@ -14,6 +14,7 @@ AC_PROG_CC
   AM_PROG_CC_C_O
   m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
   LT_INIT([disable-static])
  +PKG_PROG_PKG_CONFIG
   
   AC_ARG_WITH([kernel],
          AS_HELP_STRING([--with-kernel=PATH],

> >  PKG_CHECK_MODULES([libnfnetlink], [libnfnetlink >= 1.0],
> > diff --git a/utils/Makefile.am b/utils/Makefile.am
> > index e9eec48f..34056514 100644
> > --- a/utils/Makefile.am
> > +++ b/utils/Makefile.am
> > @@ -2,7 +2,7 @@
> >  
> >  AM_CFLAGS = ${regular_CFLAGS}
> >  AM_CPPFLAGS = ${regular_CPPFLAGS} -I${top_builddir}/include \
> > -              -I${top_srcdir}/include ${libnfnetlink_CFLAGS}
> > +              -I${top_srcdir}/include ${libnfnetlink_CFLAGS} ${libpcap_CFLAGS}
> >  AM_LDFLAGS = ${regular_LDFLAGS}
> >  
> >  sbin_PROGRAMS =
> > @@ -25,12 +25,12 @@ endif
> >  if ENABLE_BPFC
> >  man_MANS += nfbpf_compile.8
> >  sbin_PROGRAMS += nfbpf_compile
> > -nfbpf_compile_LDADD = -lpcap
> > +nfbpf_compile_LDADD = ${libpcap_LIBS}
> >  endif
> >  
> >  if ENABLE_SYNCONF
> >  sbin_PROGRAMS += nfsynproxy
> > -nfsynproxy_LDADD = -lpcap
> > +nfsynproxy_LDADD = ${libpcap_LIBS}
> >  endif
> >  
> >  CLEANFILES = nfnl_osf.8 nfbpf_compile.8
> > 
> > base-commit: 09f0bfe2032454d21e3650e7ac75c4dc53f3c881
> > -- 
> > 2.37.1
> > 
> > 

J.


Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux