# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=5

inherit eutils multilib

PATCHSET_VER="1"
MY_P=mercury-srcdist-${PV}

DESCRIPTION="Additional libraries and tools that are not part of the Mercury standard library"
HOMEPAGE="http://www.mercurylang.org/index.html"
SRC_URI="http://dl.mercurylang.org/release/${MY_P}.tar.gz
	mirror://gentoo/${P}-gentoo-patchset-${PATCHSET_VER}.tar.gz"

LICENSE="GPL-2 LGPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"

IUSE="X cairo examples glut iodbc ncurses odbc opengl ssl tcl tk xml"

RDEPEND="~dev-lang/mercury-${PV}
	cairo? ( >=x11-libs/cairo-1.10.0 )
	glut? ( media-libs/freeglut )
	odbc? ( dev-db/unixODBC )
	iodbc? ( !odbc? ( dev-db/libiodbc ) )
	ncurses? ( sys-libs/ncurses:= )
	opengl? (
		virtual/opengl
		virtual/glu
	)
	tcl? ( tk? (
			dev-lang/tcl:0
			dev-lang/tk:0
			x11-libs/libX11
			x11-libs/libXmu
		)
	)"

DEPEND="${RDEPEND}"

S="${WORKDIR}"/${MY_P}/extras

mercury_pkgs()
{
	echo   "base64
		cgi
		complex_numbers
		dynamic_linking
		error
		fixed
		lex
		moose
		posix
		solver_types/library
		$(use ncurses && echo curs curses)
		$(use glut && echo graphics/mercury_glut)
		$(use opengl && echo graphics/mercury_opengl)
		$(use tcl && use tk && echo graphics/mercury_tcltk)
		$(use odbc && echo odbc || use iodbc && echo odbc)
		$(has_version dev-lang/mercury[-minimal] && echo references)
		$(usev xml)"
}

src_prepare() {
	cd "${WORKDIR}"

	EPATCH_FORCE=yes
	EPATCH_SUFFIX=patch
	if [[ -d "${WORKDIR}"/${PV} ]] ; then
		epatch "${WORKDIR}"/${PV}
	fi

	cd "${S}"
	if use odbc; then
		cp odbc/Mmakefile.odbc odbc/Mmakefile
	elif use iodbc; then
		cp odbc/Mmakefile.iodbc odbc/Mmakefile
	fi
}

src_compile() {
	local MERCURY_PKGS="$(mercury_pkgs)"

	# Mercury dependency generation must be run single-threaded
	mmake -j1 \
		SUBDIRS="${MERCURY_PKGS}" \
		depend || die "mmake depend failed"

	# Compiling Mercury submodules is not thread-safe
	mmake -j1 \
		SUBDIRS="${MERCURY_PKGS}" \
		EXTRA_MLFLAGS=--no-strip \
		EXTRA_CFLAGS="${CFLAGS}" \
		EXTRA_LDFLAGS="${LDFLAGS}" \
		EXTRA_LD_LIBFLAGS="${LDFLAGS}" \
		|| die "mmake failed"

	if use cairo; then
		cd "${S}"/graphics/mercury_cairo
		mmc --make libmercury_cairo \
			|| die "mmc --make libmercury_cairo failed"
	fi
}

src_install() {
	local MERCURY_PKGS="$(mercury_pkgs)"

	# Compiling Mercury submodules is not thread-safe
	mmake -j1 \
		SUBDIRS="${MERCURY_PKGS}" \
		EXTRA_MLFLAGS=--no-strip \
		EXTRA_CFLAGS="${CFLAGS}" \
		EXTRA_LDFLAGS="${LDFLAGS}" \
		EXTRA_LD_LIBFLAGS="${LDFLAGS}" \
		INSTALL_PREFIX="${D}"/usr \
		install || die "mmake install failed"

	if use cairo; then
		cd "${S}"/graphics/mercury_cairo
		INSTALL_PREFIX="${D}"/usr \
		mmc --make libmercury_cairo.install \
			|| die "mmc --make libmercury_cairo.install failed"
	fi

	find "${D}"/usr/$(get_libdir)/mercury -type l | xargs rm

	cd "${S}"
	if use examples; then
		insinto /usr/share/doc/${PF}/samples/base64
		doins base64/*.m || die

		insinto /usr/share/doc/${PF}/samples/complex_numbers
		doins complex_numbers/samples/* || die

		insinto /usr/share/doc/${PF}/samples/dynamic_linking
		doins dynamic_linking/hello.m || die

		insinto /usr/share/doc/${PF}/samples/error
		doins error/* || die

		insinto /usr/share/doc/${PF}/samples/fixed
		doins fixed/*.m || die

		insinto /usr/share/doc/${PF}/samples/gator
		doins -r gator/* || die

		insinto /usr/share/doc/${PF}/samples/lex
		doins lex/samples/* || die

		insinto /usr/share/doc/${PF}/samples/log4m
		doins log4m/*.m || die

		insinto /usr/share/doc/${PF}/samples/monte
		doins monte/*.m || die

		insinto /usr/share/doc/${PF}/samples/moose
		doins moose/samples/* || die

		insinto /usr/share/doc/${PF}/samples/net
		doins net/*.m || die

		if use ncurses; then
			insinto /usr/share/doc/${PF}/samples/curs
			doins curs/samples/* || die

			insinto /usr/share/doc/${PF}/samples/curses
			doins curses/sample/* || die
		fi

		if use X; then
			insinto /usr/share/doc/${PF}/samples/graphics
			doins graphics/easyx/samples/*.m || die
		fi

		if use glut && use opengl; then
			insinto /usr/share/doc/${PF}/samples/graphics
			doins graphics/samples/calc/* || die
			doins graphics/samples/gears/* || die
			doins graphics/samples/maze/* || die
			doins graphics/samples/pent/* || die
		fi

		if use opengl && use tcl && use tk; then
			insinto /usr/share/doc/${PF}/samples/graphics
			doins graphics/samples/pent/*.m || die
		fi

		if use ssl; then
			insinto /usr/share/doc/${PF}/samples/mopenssl
			doins mopenssl/*.m || die
		fi

		ecvs_clean
	fi

	dodoc README || die
}