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

EAPI=7
inherit autotools flag-o-matic sgml-catalog-r1 toolchain-funcs

DESCRIPTION="Jade is an implementation of DSSSL for formatting SGML and XML documents"
HOMEPAGE="https://openjade.sourceforge.net"
SRC_URI="https://downloads.sourceforge.net/project/${PN}/${PN}/${PV}/${P}.tar.gz"

LICENSE="MIT"
SLOT="0"
KEYWORDS="~alpha amd64 arm arm64 hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris"

RDEPEND="
	app-text/sgml-common
	>=app-text/opensp-1.5.1
"
DEPEND="${RDEPEND}
	dev-lang/perl
"

src_prepare() {
	default

	eapply "${FILESDIR}"/${P}-deplibs.patch
	eapply "${FILESDIR}"/${P}-ldflags.patch
	eapply "${FILESDIR}"/${P}-msggen.pl.patch
	eapply "${FILESDIR}"/${P}-respect-ldflags.patch
	eapply "${FILESDIR}"/${P}-libosp-la.patch
	eapply "${FILESDIR}"/${P}-gcc46.patch
	eapply "${FILESDIR}"/${P}-no-undefined.patch
	eapply "${FILESDIR}"/${P}-wchar_t-uint.patch
	eapply "${FILESDIR}"/${P}-chmod.patch #487218
	eapply "${FILESDIR}"/${P}-autoconf-2.70.patch #765034

	# Please note!  Opts are disabled.  If you know what you're doing
	# feel free to remove this line.  It may cause problems with
	# docbook-sgml-utils among other things.
	#ALLOWED_FLAGS="-O -O1 -O2 -pipe -g -march"
	strip-flags

	# Default CFLAGS and CXXFLAGS is -O2 but this make openjade segfault
	# on hppa. Using -O1 works fine. So I force it here.
	use hppa && replace-flags -O2 -O1

	ln -s config/configure.in configure.ac || die
	cp "${FILESDIR}"/${P}-acinclude.m4 acinclude.m4 || die
	rm config/missing || die

	AT_NOEAUTOMAKE=yes \
	eautoreconf
}

src_configure() {
	# avoids dead-store elimination optimization
	# leading to segfaults on GCC 6
	# bug #592590 #596506
	tc-is-clang || append-cxxflags $(test-flags-CXX -fno-lifetime-dse)

	# We need Prefix env, bug #287358
	CONFIG_SHELL="${CONFIG_SHELL:-${BASH}}" \
	econf \
		--enable-http \
		--enable-default-catalog="${EPREFIX}"/etc/sgml/catalog \
		--enable-default-search-path="${EPREFIX}"/usr/share/sgml \
		--enable-splibdir="${EPREFIX}"/usr/$(get_libdir) \
		--libdir="${EPREFIX}"/usr/$(get_libdir) \
		--datadir="${EPREFIX}"/usr/share/sgml/${P} \
		--disable-static
}

src_compile() {
	unset INCLUDE #412725
	emake -j1 SHELL="${BASH}"
}

src_install() {
	#dodir /usr/$(get_libdir)

	make DESTDIR="${D}" \
		SHELL="${BASH}" \
		libdir="${EPREFIX}"/usr/$(get_libdir) \
		install install-man

	find "${D}" -name '*.la' -delete || die

	dosym openjade /usr/bin/jade
	dosym onsgmls /usr/bin/nsgmls
	dosym osgmlnorm /usr/bin/sgmlnorm
	dosym ospam /usr/bin/spam
	dosym ospent /usr/bin/spent
	dosym osx /usr/bin/sgml2xml

	insinto /usr/share/sgml/${P}
	doins dsssl/builtins.dsl

	newins - catalog <<-EOF
		SYSTEM "builtins.dsl" "builtins.dsl"
	EOF
	doins -r pubtext
	insinto /usr/share/sgml/${P}/dsssl
	doins dsssl/{dsssl.dtd,style-sheet.dtd,fot.dtd}
	newins "${FILESDIR}"/${P}.dsssl-catalog catalog

	# Breaks sgml2xml among other things
	#insinto /usr/share/sgml/${P}/unicode
	#doins unicode/{catalog,unicode.sd,unicode.syn,gensyntax.pl}

	insinto /etc/sgml
	newins - "${P}.cat" <<-EOF
		CATALOG "${EPREFIX}/usr/share/sgml/openjade-${PV}/catalog"
		CATALOG "${EPREFIX}/usr/share/sgml/openjade-${PV}/dsssl/catalog"
	EOF

	local HTML_DOCS=( doc/*.htm )
	einstalldocs
	dodoc -r jadedoc
}

pkg_preinst() {
	# work-around old revision removing it
	cp "${ED}"/etc/sgml/${P}.cat "${T}" || die
}

pkg_postinst() {
	local backup=${T}/${P}.cat
	local real=${EROOT}/etc/sgml/${P}.cat
	if ! cmp -s "${backup}" "${real}"; then
		cp "${backup}" "${real}" || die
	fi
	# this one's shared with docbook-dsssl, so we need to do it in postinst
	if ! grep -q -s ${P}.cat \
			"${EROOT}"/etc/sgml/sgml-docbook.cat; then
		ebegin "Adding ${P}.cat to /etc/sgml/sgml-docbook.cat"
		cat >> "${EROOT}"/etc/sgml/sgml-docbook.cat <<-EOF
			CATALOG "${EPREFIX}/etc/sgml/${P}.cat"
		EOF
		eend ${?}
	fi
	sgml-catalog-r1_pkg_postinst
}

pkg_postrm() {
	if [[ -z ${REPLACED_BY_VERSION} ]]; then
		ebegin "Removing ${P}.cat from /etc/sgml/sgml-docbook.cat"
		sed -i -e '/${P}/d' \
			"${EROOT}"/etc/sgml/sgml-docbook.cat
		eend ${?}
		if [[ ! -s ${EROOT}/etc/sgml/sgml-docbook.cat ]]; then
			rm -f "${EROOT}"/etc/sgml/sgml-docbook.cat
		fi
	fi
	sgml-catalog-r1_pkg_postrm
}