# Copyright 1999-2024 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 PYTHON_COMPAT=( python3_{10..13} ) inherit bash-completion-r1 gnome2-utils linux-info optfeature inherit plocale python-single-r1 systemd xdg-utils DESCRIPTION="Firewall daemon with D-Bus interface providing a dynamic firewall" HOMEPAGE="https://firewalld.org/" SRC_URI="https://github.com/firewalld/firewalld/releases/download/v${PV}/${P}.tar.bz2" LICENSE="GPL-2+" SLOT="0" KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86" IUSE="gui selinux test" # Tests are too unreliable in sandbox environment RESTRICT="!test? ( test ) test" REQUIRED_USE="${PYTHON_REQUIRED_USE}" RDEPEND=" ${PYTHON_DEPS} || ( >=sys-apps/openrc-0.11.5 sys-apps/openrc-navi sys-apps/systemd ) $(python_gen_cond_dep ' dev-python/dbus-python[${PYTHON_USEDEP}] dev-python/pygobject:3[${PYTHON_USEDEP}] >=net-firewall/nftables-0.9.4[python,json,${PYTHON_USEDEP}] gui? ( x11-libs/gtk+:3 dev-python/PyQt6[gui,widgets,${PYTHON_USEDEP}] ) ') net-firewall/nftables[xtables(+)] selinux? ( sec-policy/selinux-firewalld ) " DEPEND=" ${RDEPEND} dev-libs/glib:2 " BDEPEND=" app-text/docbook-xml-dtd >=dev-util/intltool-0.35 sys-devel/gettext " # Testsuite's Makefile.am calls missing(!) # ... but this seems to be consistent with the autoconf docs? # Needs more investigation: https://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/autom4te-Invocation.html QA_AM_MAINTAINER_MODE=".*--run autom4te --language=autotest.*" PLOCALES="ar as ast bg bn_IN ca cs da de el en_GB en_US es et eu fa fi fr gl gu hi hr hu ia id it ja ka kn ko lt ml mr nl or pa pl pt pt_BR ro ru si sk sl sq sr sr@latin sv ta te tr uk zh_CN zh_TW" PATCHES=( "${FILESDIR}"/${PN}-2.2.1-systemd-service.patch ) pkg_setup() { # See bug #830132 for the huge list # We can probably narrow it down a bit but it's rather fragile local CONFIG_CHECK=" ~NF_CONNTRACK ~NETFILTER_XT_MATCH_CONNTRACK ~NETFILTER ~NETFILTER_ADVANCED ~NETFILTER_INGRESS ~NF_NAT_MASQUERADE ~NF_NAT_REDIRECT ~NF_TABLES_INET ~NF_TABLES_IPV4 ~NF_TABLES_IPV6 ~NF_CONNTRACK ~NF_CONNTRACK_BROADCAST ~NF_CONNTRACK_NETBIOS_NS ~NF_CONNTRACK_TFTP ~NF_CT_NETLINK ~NF_CT_NETLINK_HELPER ~NF_DEFRAG_IPV4 ~NF_DEFRAG_IPV6 ~NF_NAT ~NF_NAT_TFTP ~NF_REJECT_IPV4 ~NF_REJECT_IPV6 ~NF_SOCKET_IPV4 ~NF_SOCKET_IPV6 ~NF_TABLES ~NF_TPROXY_IPV4 ~NF_TPROXY_IPV6 ~IP_NF_FILTER ~IP_NF_IPTABLES ~IP_NF_MANGLE ~IP_NF_NAT ~IP_NF_RAW ~IP_NF_SECURITY ~IP_NF_TARGET_MASQUERADE ~IP_NF_TARGET_REJECT ~IP6_NF_FILTER ~IP6_NF_IPTABLES ~IP6_NF_MANGLE ~IP6_NF_NAT ~IP6_NF_RAW ~IP6_NF_SECURITY ~IP6_NF_TARGET_MASQUERADE ~IP6_NF_TARGET_REJECT ~IP_SET ~NETFILTER_CONNCOUNT ~NETFILTER_NETLINK ~NETFILTER_NETLINK_OSF ~NETFILTER_NETLINK_QUEUE ~NETFILTER_SYNPROXY ~NETFILTER_XTABLES ~NETFILTER_XT_CONNMARK ~NETFILTER_XT_MATCH_CONNTRACK ~NETFILTER_XT_MATCH_MULTIPORT ~NETFILTER_XT_MATCH_STATE ~NETFILTER_XT_NAT ~NETFILTER_XT_TARGET_MASQUERADE ~NFT_COMPAT ~NFT_CT ~NFT_FIB ~NFT_FIB_INET ~NFT_FIB_IPV4 ~NFT_FIB_IPV6 ~NFT_HASH ~NFT_LIMIT ~NFT_LOG ~NFT_MASQ ~NFT_NAT ~NFT_QUEUE ~NFT_QUOTA ~NFT_REDIR ~NFT_REJECT ~NFT_REJECT_INET ~NFT_REJECT_IPV4 ~NFT_REJECT_IPV6 ~NFT_SOCKET ~NFT_SYNPROXY ~NFT_TPROXY ~NFT_TUNNEL ~NFT_XFRM " # kernel >= 4.19 has a unified NF_CONNTRACK module, bug #692944 if kernel_is -lt 4 19; then CONFIG_CHECK+=" ~NF_CONNTRACK_IPV4 ~NF_CONNTRACK_IPV6" fi # bug #831259 if kernel_is -le 5 4 ; then CONFIG_CHECK+=" ~NF_TABLES_SET" fi # bug #853055 if kernel_is -lt 5 18 ; then CONFIG_CHECK+=" ~NFT_COUNTER" fi # bug #926685 if kernel_is -le 6 1 ; then CONFIG_CHECK+=" ~NFT_OBJREF" fi linux-info_pkg_setup } src_prepare() { default plocale_find_changes "po" "" ".po" || die plocale_get_locales | sed -e 's/ /\n/g' > po/LINGUAS } src_configure() { python_setup local myeconfargs=( --enable-systemd --with-systemd-unitdir="$(systemd_get_systemunitdir)" --with-bashcompletiondir="$(get_bashcompdir)" ) econf "${myeconfargs[@]}" } src_install() { default python_optimize # Get rid of junk rm -rf "${ED}"/etc/sysconfig/ || die # For non-gui installs we need to remove GUI bits if ! use gui; then rm -rf "${ED}"/etc/xdg/autostart || die rm -f "${ED}"/usr/bin/firewall-applet || die rm -f "${ED}"/usr/bin/firewall-config || die rm -rf "${ED}"/usr/share/applications || die rm -rf "${ED}"/usr/share/icons || die fi newinitd "${FILESDIR}"/firewalld.init firewalld } pkg_preinst() { gnome2_schemas_savelist } pkg_postinst() { xdg_icon_cache_update gnome2_schemas_update # bug #833569 optfeature "changing zones with NetworkManager" gnome-extra/nm-applet } pkg_postrm() { xdg_icon_cache_update gnome2_schemas_update }