# Copyright 1999-2024 Martin V\"ath and Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit prefix strip-linguas toolchain-funcs

DESCRIPTION="Standard commands to read man pages"
HOMEPAGE="http://primates.ximian.com/~flucifredi/man/"
SRC_URI="http://primates.ximian.com/~flucifredi/man/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha amd64 arm ~arm64 hppa m68k ~mips ppc ppc64 s390 sparc x86"
IUSE="cache +lzma nls selinux"

DEPEND="nls? ( sys-devel/gettext )"
RDEPEND="acct-group/man
	acct-user/man
	>=sys-apps/groff-1.19.2-r1
	!sys-apps/man-db
	lzma? ( app-arch/xz-utils )
	selinux? ( sec-policy/selinux-makewhatis )"

src_prepare() {
	eapply -p0 "${FILESDIR}"/man-1.6f-man2html-compression-2.patch
	eapply -p0 "${FILESDIR}"/man-1.6-cross-compile.patch
	eapply "${FILESDIR}"/man-1.6f-unicode.patch #146315
	eapply "${FILESDIR}"/man-1.6c-cut-duplicate-manpaths.patch
	eapply "${FILESDIR}"/man-1.5m2-apropos.patch
	eapply "${FILESDIR}"/man-1.6g-fbsd.patch #138123
	eapply -p0 "${FILESDIR}"/man-1.6e-headers.patch
	eapply "${FILESDIR}"/man-1.6f-so-search-2.patch
	eapply -p0 "${FILESDIR}"/man-1.6g-compress.patch #205147
	eapply "${FILESDIR}"/man-1.6f-parallel-build.patch #207148 #258916
	eapply "${FILESDIR}"/man-1.6g-xz.patch #302380
	eapply "${FILESDIR}"/man-1.6f-makewhatis-compression-cleanup.patch #331979
	eapply "${FILESDIR}"/man-1.6g-echo-escape.patch #523874
	eapply "${FILESDIR}"/man-1.6g-gawk-5.patch #683494
	# make sure `less` handles escape sequences #287183
	sed -i -e '/^DEFAULTLESSOPT=/s:"$:R":' configure
	default
}

echoit() { echo "$@" ; "$@" ; }
src_configure() {
	local mylang=
	strip-linguas $(eval $(grep ^LANGUAGES= configure) ; echo ${LANGUAGES//,/ })

	unset NLSPATH #175258

	tc-export CC BUILD_CC

	if use nls ; then
		if [[ -z ${LINGUAS} ]] ; then
			mylang="all"
		else
			mylang="${LINGUAS// /,}"
		fi
	else
		mylang="none"
	fi
	export COMPRESS
	if use lzma ; then
		COMPRESS="${EPREFIX}"/usr/bin/xz
	else
		COMPRESS="${EPREFIX}"/bin/bzip2
	fi

	if [[ -n ${EPREFIX} ]]; then
		hprefixify configure || die
		sed -i \
			-e "s/man_user=root/man_user=$(id -u)/"  \
			-e "s/man_group=man/man_group=$(id -g)/" \
			configure || die "Failed to disable suid/sgid options for man"
		sed -i -e 's:/usr/bin:@bindir@:' man2html/Makefile.in || die
	fi

	echoit \
	./configure \
		-bindir="${EPREFIX}"/usr/bin \
		-confdir="${EPREFIX}"/etc \
		+sgid +fhs \
		+lang ${mylang} \
		|| die "configure failed"
}

src_install() {
	unset NLSPATH #175258

	emake PREFIX="${ED}" install || die "make install failed"
	dosym man /usr/bin/manpath

	dodoc LSM README* TODO

	# makewhatis only adds man-pages from the last 24hrs
	exeinto /etc/cron.daily
	newexe "${FILESDIR}"/makewhatis.cron makewhatis

	keepdir /var/cache/man
	[[ -z ${EPREFIX} ]] && diropts -m0775 -g man
	local mansects=$(grep ^MANSECT "${ED}"/etc/man.conf | cut -f2-)
	for x in ${mansects//:/ } ; do
		keepdir /var/cache/man/cat${x}
	done
}

pkg_postinst() {
	local files f i
	einfo "Forcing sane permissions onto ${ROOT}/var/cache/man (Bug #40322)"
	if use cache ; then
		chown -R root:man "${EROOT}"/var/cache/man
		chmod -R g+w "${EROOT}"/var/cache/man
		[[ -e ${EROOT}/var/cache/man/whatis ]] \
			&& chown root:0 "${EROOT}"/var/cache/man/whatis
	elif test -d "${EROOT}"/var/cache/man ; then
		rm -rfv -- "${EROOT}"/var/cache/man
	fi

	echo

	for f in "${EROOT}"/etc/cron.{daily,weekly}/makewhatis{,.cron} ; do
		case ${f} in
		*/etc/cron.daily/makewhatis)
			continue;;
		esac
		test -r "${f}" || continue
		case $(md5sum -- "${f}") in
		"8b2016cc778ed4e2570b912c0f420266 "*)
			rm -f -- "${f}";;
		esac
	done
	files=
	i=false
	for f in "${EROOT}"/etc/cron.{daily,weekly}/makewhatis{,.cron} ; do
		test -r "${f}" || continue
		if [ -z "${files}" ] ; then
			files=${f}
		else
			files="${files} ${f}"
			i=:
		fi
	done
	if ${i} ; then
		ewarn "You have multiple makewhatis cron files installed."
		ewarn "You might want to delete all but one of these:"
		ewarn "${files}"
	fi
}