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

EAPI=7

inherit toolchain-funcs

DESCRIPTION="Suite of tools compiling mdoc and man"
HOMEPAGE="https://mdocml.bsd.lv/"
SRC_URI="https://mdocml.bsd.lv/snapshots/${P}.tar.gz"

LICENSE="ISC"
SLOT="0"
KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86"
IUSE="cgi selinux system-man test"
RESTRICT="!test? ( test )"

RDEPEND="sys-libs/zlib
	system-man? ( !sys-apps/man-db )
"
DEPEND="${RDEPEND}
	cgi? ( sys-libs/zlib[static-libs] )
"
BDEPEND="
	cgi? ( app-text/highlight )
	test? ( dev-lang/perl )
"
RDEPEND+=" selinux? ( sec-policy/selinux-makewhatis )"

PATCHES=(
	"${FILESDIR}"/${PN}-1.14.5-r1-www-install.patch
)

pkg_pretend() {
	if use system-man ; then
		# only support uncompressed and gzip
		[[ -n ${PORTAGE_COMPRESS+unset} ]] && \
		[[ "${PORTAGE_COMPRESS}" == "gzip" || "${PORTAGE_COMPRESS}" == "" ]] || \
		ewarn "only PORTAGE_COMPRESS=gzip or '' is supported, man pages will not be indexed"
	fi
}

src_prepare() {
	default

	# The db-install change is to support parallel installs.
	sed -i \
		-e '/ar rs/s:ar:$(AR):' \
		-e '/^db-install:/s:$: base-install:' \
		Makefile || die

	# make-4.3 doesn't like the CC line (bug #706024)
	# and "echo -n" is not portable
	sed \
		-e "s@^\(CC=\).*\$@\1\"$(tc-getCC)\"@" \
		-e 's@echo -n@printf@g' \
		-i configure || die

	cat <<-EOF > "configure.local"
		PREFIX="${EPREFIX}/usr"
		BINDIR="${EPREFIX}/usr/bin"
		SBINDIR="${EPREFIX}/usr/sbin"
		LIBDIR="${EPREFIX}/usr/$(get_libdir)"
		MANDIR="${EPREFIX}/usr/share/man"
		INCLUDEDIR="${EPREFIX}/usr/include/mandoc"
		EXAMPLEDIR="${EPREFIX}/usr/share/examples/mandoc"
		MANPATH_DEFAULT="${EPREFIX}/usr/man:${EPREFIX}/usr/share/man:${EPREFIX}/usr/local/man:${EPREFIX}/usr/local/share/man"

		CFLAGS="${CFLAGS} ${CPPFLAGS}"
		LDFLAGS="${LDFLAGS}"
		AR="$(tc-getAR)"
		CC="$(tc-getCC)"
		# The STATIC variable is only used by man.cgi.
		STATIC=

		# conflicts with sys-apps/groff
		BINM_SOELIM=msoelim
		MANM_ROFF=mandoc_roff
		# conflicts with sys-apps/man-pages
		MANM_MAN=mandoc_man

		# fix utf-8 locale on musl
		$(usex elibc_musl UTF8_LOCALE=C.UTF-8 '')
	EOF
	use system-man || cat <<-EOF >> "configure.local"
		BINM_MAN=mman
		BINM_APROPOS=mapropos
		BINM_WHATIS=mwhatis
		BINM_MAKEWHATIS=mmakewhatis
		MANM_MDOC=mandoc_mdoc
		MANM_EQN=mandoc_eqn
		MANM_TBL=mandoc_tbl
		MANM_MANCONF=mman.conf
	EOF
	if use cgi; then
		cp cgi.h{.example,} || die
	fi
	if [[ -n "${MANDOC_CGI_H}" ]]; then
		cp "${MANDOC_CGI_H}" cgi.h || die
	fi

	# ./configure does not propagate all configure.local
	# settings to Makefile.local settings.
	tc-export AR
}

src_compile() {
	default
	use cgi && emake man.cgi
}

src_test() {
	emake regress
}

src_install() {
	emake DESTDIR="${D}" install
	use cgi && emake DESTDIR="${D}" cgi-install www-install

	if use system-man ; then
		exeinto /etc/cron.daily
		newexe "${FILESDIR}"/mandoc.cron-r0 mandoc
	fi
}

pkg_postinst() {
	if use system-man ; then
		elog "Generating mandoc database"
		makewhatis || die
	fi
}