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

EAPI=5

# ebuild generated by hackport 0.3.9999

CABAL_FEATURES="bin lib profile haddock hoogle hscolour"
inherit eutils haskell-cabal bash-completion-r1

DESCRIPTION="a distributed, interactive, smart revision control system"
HOMEPAGE="http://darcs.net/"
SRC_URI="mirror://hackage/packages/archive/${PN}/${PV}/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0/${PV}"
KEYWORDS="alpha amd64 ia64 ppc ppc64 sparc x86 ~x86-fbsd ~x86-freebsd ~amd64-linux ~x86-linux ~ppc-macos ~x86-macos ~x86-solaris"
IUSE="doc test"

RDEPEND="=dev-haskell/extensible-exceptions-0.1*:=[profile?]
		>=dev-haskell/hashed-storage-0.5.6:=[profile?]
		<dev-haskell/hashed-storage-0.6:=[profile?]
		>=dev-haskell/haskeline-0.6.3:=[profile?]
		<dev-haskell/haskeline-0.8:=[profile?]
		=dev-haskell/html-1.0*:=[profile?]
		=dev-haskell/mmap-0.5*:=[profile?]
		>=dev-haskell/mtl-1.0:=[profile?]
		<dev-haskell/mtl-2.3:=[profile?]
		>=dev-haskell/parsec-2.0:=[profile?]
		<dev-haskell/parsec-3.2:=[profile?]
		=dev-haskell/random-1.0*:=[profile?]
		>=dev-haskell/regex-compat-0.95.1:=[profile?]
		>=dev-haskell/tar-0.3:=[profile?]
		<dev-haskell/tar-0.5:=[profile?]
		>=dev-haskell/terminfo-0.3:=[profile?] <dev-haskell/terminfo-0.5:=[profile?]
		>=dev-haskell/text-0.11.0.6:=[profile?]
		>=dev-haskell/utf8-string-0.3.6:=[profile?] <dev-haskell/utf8-string-0.4:=[profile?]
		>=dev-haskell/vector-0.7:=[profile?]
		>=dev-haskell/zlib-0.5.1.0:=[profile?]
		<dev-haskell/zlib-0.6.0.0:=[profile?]
		>=dev-lang/ghc-6.10.4:=
		net-misc/curl"
DEPEND="${RDEPEND}
		>=dev-haskell/cabal-1.8
		doc? ( virtual/latex-base
			|| (	dev-tex/latex2html[png]
				dev-tex/latex2html[gif]
			)
		)
		test? ( >=dev-haskell/cmdlib-0.2.1[profile?]
				<dev-haskell/cmdlib-0.4[profile?]
				=dev-haskell/findbin-0.0*[profile?]
				>=dev-haskell/quickcheck-2.3
				>=dev-haskell/shellish-0.1.3[profile?]
				<dev-haskell/shellish-0.2[profile?]
				>=dev-haskell/test-framework-0.4.0[profile?]
				>=dev-haskell/test-framework-hunit-0.2.2[profile?]
				>=dev-haskell/test-framework-quickcheck2-0.2.8[profile?]
		)
		"

src_prepare() {
	rm "${S}/tests/add_permissions.sh" || die "Could not rm add_permissions.sh"
	rm "${S}/tests/send-output-v1.sh" || die "Could not rm send-output-v1.sh"
	rm "${S}/tests/send-output-v2.sh" || die "Could not rm send-output-v2.sh"
	rm "${S}/tests/utf8.sh" || die "Could not rm utf8.sh"

	epatch "${FILESDIR}"/${P}-ghc-7.8-part-1.patch
	epatch "${FILESDIR}"/${P}-ghc-7.8-part-2.patch
	epatch "${FILESDIR}"/${P}-fix-nonatomic-global.patch
	epatch "${FILESDIR}"/${P}-issue2364.patch
	epatch "${FILESDIR}"/${P}-issue2364-part-2.patch

	cabal_chdeps \
		'text       >= 0.11.0.6 && < 0.12.0.0' 'text       >= 0.11.0.6' \
		'terminfo == 0.3.*' 'terminfo >= 0.3 && < 0.5' \
		'array      >= 0.1 && < 0.5' 'array >= 0.1 && <0.6' \
		'process    >= 1.0.0.0 && < 1.2.0.0' 'process    >= 1.0.0.0 && < 1.3' \
		'unix >= 1.0 && < 2.7' 'unix >=1.0 && <2.8' \
		'base >= 4.5 && < 4.7' 'base >= 4.5 && < 4.8' \
		'ghc >= 6.10 && < 7.8' 'ghc >= 6.10' \
		'mtl          >= 1.0 && < 2.2' 'mtl          >= 1.0 && < 2.3'
}

src_configure() {
	# checking whether ghc supports -threaded flag
	# Beware: http://www.haskell.org/ghc/docs/latest/html/users_guide/options-phases.html#options-linker
	# contains: 'The ability to make a foreign call that does not block all other Haskell threads.'
	# It might have interactivity impact.

	threaded_flag=""
	if $(ghc-getghc) --info | grep "Support SMP" | grep -q "YES"; then
		threaded_flag="--flags=threaded"
		einfo "$P will be built with threads support"
	else
		threaded_flag="--flags=-threaded"
		einfo "$P will be built without threads support"
	fi

	# Use curl for net stuff to avoid strict version dep on HTTP and network
	cabal_src_configure \
		--flags=curl \
		--flags=-http \
		--flags=color \
		--flags=terminfo \
		--flags=mmap \
		--flags=force-char8-encoding \
		$threaded_flag \
		$(cabal_flag test)
}

src_test() {
	# run cabal test from haskell-cabal
	haskell-cabal_src_test || die "cabal test failed"
}

src_install() {
	cabal_src_install
	newbashcomp "${S}/contrib/darcs_completion" "${PN}"

	# fixup perms in such an an awkward way
	mv "${ED}/usr/share/man/man1/darcs.1" "${S}/darcs.1" || die "darcs.1 not found"
	doman "${S}/darcs.1" || die "failed to register darcs.1 as a manpage"
}

pkg_postinst() {
	ghc-package_pkg_postinst

	ewarn "NOTE: in order for the darcs send command to work properly,"
	ewarn "you must properly configure your mail transport agent to relay"
	ewarn "outgoing mail.  For example, if you are using ssmtp, please edit"
	ewarn "${EPREFIX}/etc/ssmtp/ssmtp.conf with appropriate values for your site."
}