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

EAPI="7"

inherit toolchain-funcs elisp-common

MYPV="$(ver_rs 1 _)"

DESCRIPTION="a literate programming tool, lighter than web"
HOMEPAGE="https://www.cs.tufts.edu/~nr/noweb/"
SRC_URI="https://github.com/nrnrnr/${PN}/archive/v${MYPV}.tar.gz -> ${P}.tar.gz"

LICENSE="
	|| ( BSD-2 noweb )
	emacs? ( GPL-2 )
"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~ppc-macos ~x64-macos"
IUSE="emacs examples"

DEPEND="
	dev-lang/icon
	sys-apps/debianutils
	virtual/tex-base

	emacs? ( app-editors/emacs:= )
"
RDEPEND="${DEPEND}"

S="${WORKDIR}/${PN}-${MYPV}"

SITEFILE="50${PN}-gentoo.el"

src_prepare() {
	# glibc2.10 compat (bug 270757)
#	mkdir d && cp -r c/* d/
	sed "s/getline (/getline_nonlibc (/" -i src/c/getline.{c,h} || die
	sed "s/getline(/getline_nonlibc(/" -i src/c/{notangle.c,getline.c,finduses.c} || die
#	diff -u d/ c/

	# dont run texhash...
	sed -i -e "s/texhash/true/" src/Makefile || die
	# dont strip...
	sed -i -e "s/strip/true/" src/Makefile || die

	sed -i -e "s/CC=gcc -ansi -pedantic -O -Wall -Werror//" src/Makefile || die
	sed -i -e "s/CFLAGS=//" src/Makefile || die
	sed -i -e "s/CC=gcc -ansi -pedantic -O -Wall -Werror//" src/c/Makefile || die
	sed -i -e "s/CFLAGS=//" src/c/Makefile || die

	eapply "${FILESDIR}/${P}-recmake.patch"

	sed -i -e "s/CC = cc//" contrib/norman/numarkup/Makefile || die
	sed -i -e "s/CFLAGS = -O//" contrib/norman/numarkup/Makefile || die

	eapply "${FILESDIR}/${P}-ldflags.patch"
	eapply_user
}

src_compile() {
	# noweb tries to use notangle and noweb; see bug #50429
	cd "${S}/src/c"

	emake	ICONC="icont" \
		CC="$(tc-getCC)" \
		CFLAGS="${CFLAGS}" \
		LIBSRC="icon" || die

	export PATH="${PATH}:${T}"
	cd "${S}/src"

	emake	ICONC="icont" \
		CC="$(tc-getCC)" \
		BIN="${T}" \
		LIB="${T}" \
		LIBSRC="icon" \
		install-code || die "make temporal install failed."

	emake	ICONC="icont" \
		CC="$(tc-getCC)" \
		CFLAGS="${CFLAGS}" \
		LIBSRC="icon" || die "make failed"

	# Set awk to awk not nawk
	./awkname awk

	if use emacs; then
		elisp-compile elisp/noweb-mode.el || die "elisp-compile failed"
	fi
}

src_install () {
	cd "${S}/src"

	# It needs the directories to exist first...
	dodir /usr/bin
	dodir "/usr/libexec/${PN}"
	dodir /usr/share/man
	dodir /usr/share/texmf-site/tex/inputs

	emake	ICONC="icont" \
		BIN="${ED}/usr/bin" \
		LIBSRC="icon" \
		LIBNAME="${EPREFIX}/usr/libexec/${PN}" \
		LIB="${ED}/usr/libexec/${PN}" \
		MAN="${ED}/usr/share/man" \
		TEXNAME="${EPREFIX}/usr/share/texmf-site/tex/inputs" \
		TEXINPUTS="${ED}/usr/share/texmf-site/tex/inputs" \
		install || die "make install failed"

	cd "${S}"

	if use examples; then
		insinto "/usr/share/doc/${PF}/examples"
		doins -r examples/.
	fi

	if use emacs; then
		elisp-install "${PN}" "${S}"/src/elisp/noweb-mode.{el,elc} \
			|| die "elisp-install failed"
		elisp-site-file-install "${FILESDIR}/${SITEFILE}" \
			|| die "elisp-site-file-install failed"
	fi
	einstalldocs
}

pkg_postinst() {
	use emacs && elisp-site-regen
	einfo "Running texhash to complete installation.."
	texhash
}

pkg_postrm() {
	use emacs && elisp-site-regen
}
