# Copyright 1999-2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 LUA_COMPAT=( lua5-{3..4} ) PYTHON_COMPAT=( python3_{12..14} ) inherit fcaps lua-single python-any-r1 qt-utils toolchain-funcs xdg cmake DESCRIPTION="Network protocol analyzer (sniffer)" HOMEPAGE="https://www.wireshark.org/" if [[ ${PV} == *9999* ]]; then EGIT_REPO_URI="https://gitlab.com/wireshark/wireshark.git" inherit git-r3 else VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/wireshark.asc inherit verify-sig SRC_URI=" https://www.wireshark.org/download/src/all-versions/${P}.tar.xz verify-sig? ( https://www.wireshark.org/download/SIGNATURES-${PV}.txt -> ${P}-signatures.txt ) " KEYWORDS="~amd64" fi LICENSE="GPL-2" SLOT="0/${PV}" IUSE="androiddump bcg729 brotli +capinfos +captype ciscodump +dftest doc dpauxmon" IUSE+=" +dumpcap +editcap +gui http2 http3 ilbc kerberos lua lz4 maxminddb" IUSE+=" +mergecap +minizip +netlink opus pkcs11 +plugins +pcap +randpkt" IUSE+=" +randpktdump +reordercap sbc selinux +sharkd smi snappy spandsp sshdump ssl" IUSE+=" sdjournal +stratoshark test +text2pcap +tshark +udpdump wifi xxhash zlib +zstd" REQUIRED_USE=" lua? ( ${LUA_REQUIRED_USE} ) stratoshark? ( gui ) " RESTRICT="!test? ( test )" RDEPEND=" acct-group/pcap >=dev-libs/glib-2.50.0:2 dev-libs/libpcre2:= dev-libs/libxml2:= >=net-dns/c-ares-1.13.0:= >=dev-libs/libgcrypt-1.8.0:= media-libs/speexdsp bcg729? ( media-libs/bcg729 ) brotli? ( app-arch/brotli:= ) ciscodump? ( >=net-libs/libssh-0.6:= ) filecaps? ( sys-libs/libcap ) http2? ( >=net-libs/nghttp2-1.11.0:= ) http3? ( net-libs/nghttp3 ) ilbc? ( media-libs/libilbc:= ) kerberos? ( virtual/krb5 ) lua? ( ${LUA_DEPS} ) lz4? ( app-arch/lz4:= ) maxminddb? ( dev-libs/libmaxminddb:= ) minizip? ( virtual/minizip:= ) netlink? ( dev-libs/libnl:3 ) opus? ( media-libs/opus ) pcap? ( net-libs/libpcap ) gui? ( dev-qt/qtbase:6[concurrent,gui,widgets] dev-qt/qt5compat:6 dev-qt/qtmultimedia:6 dev-qt/qtsvg:6 x11-misc/xdg-utils ) sbc? ( media-libs/sbc ) sdjournal? ( sys-apps/systemd:= ) smi? ( net-libs/libsmi ) snappy? ( app-arch/snappy:= ) spandsp? ( media-libs/spandsp:= ) sshdump? ( >=net-libs/libssh-0.6:= ) ssl? ( >=net-libs/gnutls-3.5.8:=[pkcs11?] ) stratoshark? ( >=dev-libs/falcosecurity-libs-0.17.1:= dev-libs/uthash >=net-libs/libssh-0.6:= ) wifi? ( >=net-libs/libssh-0.6:= ) xxhash? ( dev-libs/xxhash ) zlib? ( virtual/zlib:= ) zstd? ( app-arch/zstd:= ) " DEPEND="${RDEPEND}" BDEPEND=" ${PYTHON_DEPS} dev-lang/perl app-alternatives/lex sys-devel/gettext virtual/pkgconfig doc? ( app-text/doxygen dev-ruby/asciidoctor dev-libs/libxslt ) gui? ( dev-qt/qttools:6[linguist] ) test? ( $(python_gen_any_dep ' dev-python/pytest[${PYTHON_USEDEP}] dev-python/pytest-xdist[${PYTHON_USEDEP}] ') ) " RDEPEND=" ${RDEPEND} gui? ( virtual/freedesktop-icon-theme ) selinux? ( sec-policy/selinux-wireshark ) " if [[ ${PV} != *9999* ]]; then BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-wireshark )" fi PATCHES=( "${FILESDIR}/4.4.6-lto.patch" ) python_check_deps() { use test || return 0 python_has_version -b "dev-python/pytest[${PYTHON_USEDEP}]" && python_has_version -b "dev-python/pytest-xdist[${PYTHON_USEDEP}]" } pkg_setup() { use lua && lua-single_pkg_setup python-any-r1_pkg_setup } src_unpack() { if [[ ${PV} == *9999* ]]; then git-r3_src_unpack else if use verify-sig; then cd "${DISTDIR}" || die verify-sig_verify_signed_checksums \ ${P}-signatures.txt openssl-dgst ${P}.tar.xz cd "${WORKDIR}" || die fi default fi } src_prepare() { if use lua; then sed -i "s/set(LUA_VERSIONS5 5.5 5.4 5.3 5.2 5.1 5.0)/set(LUA_VERSIONS5 ${ELUA#lua})/g" \ cmake/modules/FindLua.cmake || die fi cmake_src_prepare } src_configure() { local mycmakeargs python_setup mycmakeargs=( -DPython3_EXECUTABLE="${PYTHON}" -DCMAKE_DISABLE_FIND_PACKAGE_{Asciidoctor,DOXYGEN}=$(usex !doc) -DLEMON_EXECUTABLE= -DRPMBUILD_EXECUTABLE= -DGIT_EXECUTABLE= -DENABLE_CCACHE=OFF $(use androiddump && use pcap && echo -DEXTCAP_ANDROIDDUMP_LIBPCAP=yes) -DBUILD_androiddump=$(usex androiddump) -DBUILD_capinfos=$(usex capinfos) -DBUILD_captype=$(usex captype) -DBUILD_ciscodump=$(usex ciscodump) -DBUILD_dftest=$(usex dftest) -DBUILD_dpauxmon=$(usex dpauxmon) -DBUILD_dumpcap=$(usex dumpcap) -DBUILD_editcap=$(usex editcap) -DBUILD_mergecap=$(usex mergecap) -DBUILD_mmdbresolve=$(usex maxminddb) -DBUILD_randpkt=$(usex randpkt) -DBUILD_randpktdump=$(usex randpktdump) -DBUILD_reordercap=$(usex reordercap) -DBUILD_sdjournal=$(usex sdjournal) -DBUILD_sharkd=$(usex sharkd) -DBUILD_sshdump=$(usex sshdump) -DBUILD_text2pcap=$(usex text2pcap) -DBUILD_tfshark=OFF -DBUILD_tshark=$(usex tshark) -DBUILD_udpdump=$(usex udpdump) -DBUILD_wireshark=$(usex gui) -DBUILD_stratoshark=$(usex stratoshark) -DBUILD_strato=$(usex stratoshark) -DBUILD_dumpcalls=$(usex stratoshark) -DBUILD_falcodump=$(usex stratoshark) -DBUILD_sshdig=$(usex stratoshark) -DUSE_qt6=$(usex gui) -DENABLE_WERROR=OFF -DENABLE_BCG729=$(usex bcg729) -DENABLE_BROTLI=$(usex brotli) -DENABLE_CAP=$(usex filecaps caps) -DENABLE_GNUTLS=$(usex ssl) -DENABLE_PKCS11=$(usex pkcs11) -DENABLE_ILBC=$(usex ilbc) -DENABLE_KERBEROS=$(usex kerberos) -DENABLE_LUA=$(usex lua) -DENABLE_LZ4=$(usex lz4) -DENABLE_MINIZIP=$(usex minizip) -DENABLE_MINIZIPNG=OFF -DENABLE_NETLINK=$(usex netlink) -DENABLE_NGHTTP2=$(usex http2) -DENABLE_NGHTTP3=$(usex http3) -DENABLE_OPUS=$(usex opus) -DENABLE_PCAP=$(usex pcap) -DENABLE_PLUGINS=$(usex plugins) -DENABLE_PLUGIN_IFDEMO=OFF -DENABLE_SBC=$(usex sbc) -DENABLE_SMI=$(usex smi) -DENABLE_SNAPPY=$(usex snappy) -DENABLE_SPANDSP=$(usex spandsp) -DBUILD_wifidump=$(usex wifi) -DENABLE_XXHASH=$(usex xxhash) -DENABLE_ZLIB=$(usex zlib) -DENABLE_ZLIBNG=OFF -DENABLE_ZSTD=$(usex zstd) ) tc-is-lto && mycmakeargs+=( -DENABLE_LTO=ON ) cmake_src_configure } src_test() { cmake_build test-programs epytest --disable-capture --skip-missing-programs=all \ --program-path "${BUILD_DIR}"/run } src_install() { cmake_src_install install-headers dodoc AUTHORS ChangeLog README* doc/randpkt.txt doc/README* insinto /usr/include/wireshark doins "${BUILD_DIR}"/config.h local dir dirs=( epan epan/crypt epan/dfilter epan/dissectors epan/ftypes wiretap wsutil wsutil/wmem ) for dir in "${dirs[@]}"; do insinto /usr/include/wireshark/${dir} doins ${dir}/*.h done if use gui; then local s for s in 16 32 48 64 128 256 512 1024; do [[ -f resources/icons/wsicon${s}.png ]] || continue insinto /usr/share/icons/hicolor/${s}x${s}/apps newins resources/icons/wsicon${s}.png wireshark.png done for s in 16 24 32 48 64 128 256; do [[ -f resources/icons/WiresharkDoc-${s}.png ]] || continue insinto /usr/share/icons/hicolor/${s}x${s}/mimetypes newins resources/icons/WiresharkDoc-${s}.png application-vnd.tcpdump.pcap.png done fi if [[ -d ${ED}/usr/share/appdata ]]; then rm -r "${ED}"/usr/share/appdata || die fi } pkg_postinst() { xdg_pkg_postinst chgrp pcap "${EROOT}"/usr/bin/dumpcap if use dumpcap && use pcap; then fcaps -o 0 -g pcap -m 4710 -M 0710 \ cap_dac_read_search,cap_net_raw,cap_net_admin \ "${EROOT}"/usr/bin/dumpcap fi ewarn "To capture network traffic as a normal user, add the user to the pcap group." }