# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=6
inherit ltprune libtool linux-info udev toolchain-funcs fcaps

DESCRIPTION="An interface for filesystems implemented in userspace"
HOMEPAGE="https://github.com/libfuse/libfuse"
SRC_URI="https://github.com/libfuse/libfuse/releases/download/${P}/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="*"
IUSE="examples kernel_linux kernel_FreeBSD static-libs"

PDEPEND="kernel_FreeBSD? ( sys-fs/fuse4bsd )"
DEPEND="virtual/pkgconfig"
RDEPEND="sys-fs/fuse-common"

pkg_setup() {
	if use kernel_linux ; then
		if kernel_is lt 2 6 9 ; then
			die "Your kernel is too old."
		fi
		CONFIG_CHECK="~FUSE_FS"
		FUSE_FS_WARNING="You need to have FUSE module built to use user-mode utils"
		linux-info_pkg_setup
	fi
}

src_prepare() {
	local PATCHES=(
		"${FILESDIR}"/${PN}-2.8.5-fix-lazy-binding.patch
		"${FILESDIR}"/${PN}-2.8.5-gold.patch
		"${FILESDIR}"/${PN}-2.8.6-remove-setuid.patch
		"${FILESDIR}"/${PN}-2.9.3-kernel-types.patch
		"${FILESDIR}"/${PN}-2.9.7-pass-fuse-fd.patch
		"${FILESDIR}"/${PN}-2.9.8-user-option.patch
	)
	# sandbox violation with mtab writability wrt #438250
	# don't sed configure.in without eautoreconf because of maintainer mode
	sed -i 's:umount --fake:true --fake:' configure || die
	elibtoolize

	default
}

src_configure() {
	econf \
		INIT_D_PATH="${EPREFIX}/etc/init.d" \
		MOUNT_FUSE_PATH="${EPREFIX}/sbin" \
		UDEV_RULES_PATH="${EPREFIX}/$(get_udevdir)/rules.d" \
		$(use_enable static-libs static) \
		--disable-example
}

src_install() {
	local DOCS=( AUTHORS ChangeLog README.md README.NFS NEWS doc/how-fuse-works doc/kernel.txt )
	default

	if use examples ; then
		docinto examples
		dodoc example/*
	fi

	if use kernel_FreeBSD ; then
		insinto /usr/include/fuse
		doins include/fuse_kernel.h
	fi

	prune_libtool_files

	# installed via fuse-common
	rm -r "${ED%/}"/{etc,$(get_udevdir)} || die
	rm "${ED%/}"/usr/share/man/man8/mount.fuse.* || die
	rm "${ED%/}"/sbin/mount.fuse || die

	# handled by the device manager
	rm -r "${D%/}"/dev || die
}

pkg_postinst() {
	# CHROMIUM: remove-setuid.patch removes suid. Add fcaps instead.
	fcaps cap_sys_admin usr/bin/fusermount
}
