commit:     99e3374e9cb8d121c3d534111de8fbad950b51bd
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sat Aug 27 05:40:38 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat Aug 27 06:05:55 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=99e3374e

net-libs/libpcap: drop -L/usr/lib from pcap-config output

Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...bpcap-1.10.1-pcap-config-no-hardcoded-lib.patch | 100 ++++++++++++++++++++
 .../libpcap/files/libpcap-1.10.1-pcap-config.patch |  43 +++++++++
 net-libs/libpcap/libpcap-1.10.1-r2.ebuild          | 103 +++++++++++++++++++++
 3 files changed, 246 insertions(+)

diff --git 
a/net-libs/libpcap/files/libpcap-1.10.1-pcap-config-no-hardcoded-lib.patch 
b/net-libs/libpcap/files/libpcap-1.10.1-pcap-config-no-hardcoded-lib.patch
new file mode 100644
index 000000000000..2fc617dcda2f
--- /dev/null
+++ b/net-libs/libpcap/files/libpcap-1.10.1-pcap-config-no-hardcoded-lib.patch
@@ -0,0 +1,100 @@
+https://github.com/the-tcpdump-group/libpcap/commit/84cb8cfdbf99a5fbc8127e3f092dc4d36ab513e9
+
+From 84cb8cfdbf99a5fbc8127e3f092dc4d36ab513e9 Mon Sep 17 00:00:00 2001
+From: Guy Harris <ghar...@sonic.net>
+Date: Mon, 2 Aug 2021 01:04:53 -0700
+Subject: [PATCH] pcap-config: don't provide -L/usr/lib for pkg-config --libs.
+
+It shouldn't be necessary, as C compilers generally look there by
+default and...
+
+...it can cause problems if the libpcap you want *isn't* in /usr/lib.
+For example, on some systems that support both 32-bit and 64-bit
+executables, this might cause the 32-bit library to be found, even on
+64-bit platforms, with hilarity ensuing afterwards.
+
+In particular, on Solaris 11, where /usr/lib has the 32-bit libraries
+and /usr/lib/{something} has the 64-bit libraries ({something} depends
+on whether it's SPARC or x86), that's what happens if you try to do a
+CMake build of tcpdump against the system libpcap:
+
+The CMake file for finding pcap converts the -lpcap provided by
+pcap-config into the absolute path of libpcap, and that's the path of
+the 32-bit library, as it looks in /usr/lib.  (CMake really wants "find
+library" scripts to supply a list of libraries giving their absolute
+paths.)
+
+Thus, if you're using GCC, the tests done to find out what pcap APIs are
+available will fail, as the test programs get build 64-bit but are
+linked with the 32-bit libpcap; the link fails as you're mixing 32-bit
+and 64-bit code, and the CMake script treats that as meaning "the
+function isn't available".
+
+(Sun C apparently somehow manages either to build 32-bit code by
+default, so that linking with /usr/lib/libpcap.so succeeds, or realizes
+that linking 64-bit code with /usr/lib/{library}.so is bogus and links
+with /usr/lib/{something}/libpcap.so instead.)
+
+Debian removed the -L in pcap-config for similar reasons; to quote the
+comment at the beginning of the patch file:
+
+       Remove -L<libdir> from default pcap-config --libs output, as
+       libdir is already in the default toolchain search path on
+       Debian, and we want the generated script to be arch-independent.
+
+(We don't remove it from the .pc file; we assume that 1) pkg-config and
+2) the packager of libpcap does what is necessary to make this work.)
+--- a/pcap-config.in
++++ b/pcap-config.in
+@@ -41,6 +41,13 @@ do
+       esac
+       shift
+ done
++#
++# If libdir isn't /usr/lib, add it to the link-time linker path.
++#
++if [ "$libdir" != "/usr/lib" ]
++then
++      LPATH=-L$libdir
++fi
+ if [ "$V_RPATH_OPT" != "" ]
+ then
+       #
+@@ -59,16 +66,16 @@ then
+       #
+       if [ "$show_cflags" = 1 -a "$show_libs" = 1 ]
+       then
+-              echo "-I$includedir -L$libdir -lpcap $LIBS"
++              echo "-I$includedir $LPATH -lpcap $LIBS"
+       elif [ "$show_cflags" = 1 -a "$show_additional_libs" = 1 ]
+       then
+-              echo "-I$includedir -L$libdir $LIBS"
++              echo "-I$includedir $LPATH $LIBS"
+       elif [ "$show_cflags" = 1 ]
+       then
+               echo "-I$includedir"
+       elif [ "$show_libs" = 1 ]
+       then
+-              echo "-L$libdir -lpcap $LIBS"
++              echo "$LPATH -lpcap $LIBS"
+       elif [ "$show_additional_libs" = 1 ]
+       then
+               echo "$LIBS"
+@@ -80,7 +87,7 @@ else
+       #
+       if [ "$show_cflags" = 1 -a "$show_libs" = 1 ]
+       then
+-              echo "-I$includedir -L$libdir $RPATH -l$PACKAGE_NAME"
++              echo "-I$includedir $LPATH $RPATH -l$PACKAGE_NAME"
+       elif [ "$show_cflags" = 1 -a "$show_additional_libs" = 1 ]
+       then
+               echo "-I$includedir"
+@@ -89,6 +96,6 @@ else
+               echo "-I$includedir"
+       elif [ "$show_libs" = 1 ]
+       then
+-              echo "-L$libdir $RPATH -l$PACKAGE_NAME"
++              echo "$LPATH $RPATH -l$PACKAGE_NAME"
+       fi
+ fi
+

diff --git a/net-libs/libpcap/files/libpcap-1.10.1-pcap-config.patch 
b/net-libs/libpcap/files/libpcap-1.10.1-pcap-config.patch
new file mode 100644
index 000000000000..1fa8d411ead6
--- /dev/null
+++ b/net-libs/libpcap/files/libpcap-1.10.1-pcap-config.patch
@@ -0,0 +1,43 @@
+--- a/pcap-config.in
++++ b/pcap-config.in
+@@ -66,16 +66,16 @@ then
+       #
+       if [ "$show_cflags" = 1 -a "$show_libs" = 1 ]
+       then
+-              echo "-I$includedir $LPATH -lpcap $LIBS"
++              echo "-lpcap $LIBS"
+       elif [ "$show_cflags" = 1 -a "$show_additional_libs" = 1 ]
+       then
+-              echo "-I$includedir $LPATH $LIBS"
++              echo "$LIBS"
+       elif [ "$show_cflags" = 1 ]
+       then
+-              echo "-I$includedir"
++              echo ""
+       elif [ "$show_libs" = 1 ]
+       then
+-              echo "$LPATH -lpcap $LIBS"
++              echo "-lpcap $LIBS"
+       elif [ "$show_additional_libs" = 1 ]
+       then
+               echo "$LIBS"
+@@ -87,15 +87,15 @@ else
+       #
+       if [ "$show_cflags" = 1 -a "$show_libs" = 1 ]
+       then
+-              echo "-I$includedir $LPATH $RPATH -l$PACKAGE_NAME"
++              echo " $RPATH -l$PACKAGE_NAME"
+       elif [ "$show_cflags" = 1 -a "$show_additional_libs" = 1 ]
+       then
+-              echo "-I$includedir"
++              echo ""
+       elif [ "$show_cflags" = 1 ]
+       then
+-              echo "-I$includedir"
++              echo ""
+       elif [ "$show_libs" = 1 ]
+       then
+-              echo "$LPATH $RPATH -l$PACKAGE_NAME"
++              echo "$RPATH -l$PACKAGE_NAME"
+       fi
+ fi

diff --git a/net-libs/libpcap/libpcap-1.10.1-r2.ebuild 
b/net-libs/libpcap/libpcap-1.10.1-r2.ebuild
new file mode 100644
index 000000000000..477ba7b57d29
--- /dev/null
+++ b/net-libs/libpcap/libpcap-1.10.1-r2.ebuild
@@ -0,0 +1,103 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools multilib-minimal
+
+DESCRIPTION="A system-independent library for user-level network packet 
capture"
+HOMEPAGE="https://www.tcpdump.org/ 
https://github.com/the-tcpdump-group/libpcap";
+
+if [[ ${PV} == *9999* ]] ; then
+       EGIT_REPO_URI="https://github.com/the-tcpdump-group/libpcap";
+       inherit git-r3
+else
+       VERIFY_SIG_OPENPGP_KEY_PATH=${BROOT}/usr/share/openpgp-keys/tcpdump.asc
+       inherit verify-sig
+
+       # Note: drop -upstream on bump, this is just because we switched to the 
official
+       # distfiles for verify-sig
+       SRC_URI="https://www.tcpdump.org/release/${P}.tar.gz -> 
${P}-upstream.tar.gz"
+       SRC_URI+=" verify-sig? ( 
https://www.tcpdump.org/release/${P}.tar.gz.sig -> ${P}-upstream.tar.gz.sig )"
+
+       KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ppc ppc64 
~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos 
~sparc-solaris ~x86-solaris"
+fi
+
+LICENSE="BSD"
+SLOT="0"
+IUSE="bluetooth dbus netlink rdma remote static-libs usb yydebug"
+
+RDEPEND="
+       bluetooth? ( net-wireless/bluez:=[${MULTILIB_USEDEP}] )
+       dbus? ( sys-apps/dbus[${MULTILIB_USEDEP}] )
+       netlink? ( dev-libs/libnl:3[${MULTILIB_USEDEP}] )
+       remote? ( virtual/libcrypt:=[${MULTILIB_USEDEP}] )
+       rdma? ( sys-cluster/rdma-core )
+       usb? ( virtual/libusb:1[${MULTILIB_USEDEP}] )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+       sys-devel/flex
+       virtual/yacc
+       dbus? ( virtual/pkgconfig )
+"
+
+if [[ ${PV} != *9999* ]] ; then
+       BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-tcpdump )"
+fi
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-1.10.0-usbmon.patch
+
+       # Drop ${P}-pcap-config-no-hardcoded-lib.patch on next release
+       "${FILESDIR}"/${P}-pcap-config-no-hardcoded-lib.patch
+
+       # We need to keep this, it's just rebased on top of the above
+       # ${P}-pcap-config-no-hardcoded-lib.patch. Drop this comment then too,
+       # but keep this patch.
+       "${FILESDIR}"/${PN}-1.10.1-pcap-config.patch
+)
+
+src_prepare() {
+       default
+
+       if ! [[ -f VERSION ]]; then
+               echo ${PV} > VERSION || die
+       fi
+
+       eautoreconf
+}
+
+multilib_src_configure() {
+       ECONF_SOURCE="${S}" \
+       econf \
+               $(use_enable bluetooth) \
+               $(use_enable dbus) \
+               $(use_enable rdma) \
+               $(use_enable remote) \
+               $(use_enable usb) \
+               $(use_enable yydebug) \
+               $(use_with netlink libnl) \
+               --enable-ipv6
+}
+
+multilib_src_compile() {
+       emake all shared
+}
+
+multilib_src_install_all() {
+       dodoc CREDITS CHANGES VERSION TODO README.* doc/README.*
+
+       # remove static libraries (--disable-static does not work)
+       if ! use static-libs; then
+               find "${ED}" -name '*.a' -exec rm {} + || die
+       fi
+
+       find "${ED}" -name '*.la' -delete || die
+
+       # We need this to build pppd on G/FBSD systems
+       if [[ "${USERLAND}" == "BSD" ]]; then
+               insinto /usr/include
+               doins pcap-int.h portability.h
+       fi
+}

Reply via email to