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

EAPI=5

# ebuild generated by hackport 0.4.5.9999
#hackport: flags: -all_extensions,+with_threaded,+with_utf8,with_iwlib:wifi,with_alsa:alsa,with_xft:xft,with_datezone:timezone,with_dbus:dbus,with_mpd:mpd,with_inotify:inotify,with_mpris:mpris,with_xpm:xpm

CABAL_FEATURES="bin"
inherit haskell-cabal

DESCRIPTION="A Minimalistic Text Based Status Bar"
HOMEPAGE="http://xmobar.org"
SRC_URI="mirror://hackage/packages/archive/${PN}/${PV}/${P}.tar.gz"

LICENSE="BSD"
SLOT="0"
KEYWORDS="amd64 x86"
IUSE="alsa dbus inotify mpd mpris timezone wifi xft xpm"

RDEPEND=">=dev-haskell/http-4000.2.4:=
	>=dev-haskell/mtl-2.1:= <dev-haskell/mtl-2.3:=
	dev-haskell/old-locale:=
	>=dev-haskell/parsec-3.1:= <dev-haskell/parsec-3.2:=
	dev-haskell/regex-compat:=
	>=dev-haskell/stm-2.3:= <dev-haskell/stm-2.5:=
	dev-haskell/transformers:=
	>=dev-haskell/utf8-string-0.3:= <dev-haskell/utf8-string-1.1:=
	>=dev-haskell/x11-1.6.1:=
	>=dev-lang/ghc-7.4.1:=
	x11-libs/libXrandr
	x11-libs/libXrender
	alsa? ( >=dev-haskell/alsa-core-0.5:= <dev-haskell/alsa-core-0.6:=
		>=dev-haskell/alsa-mixer-0.2:= <dev-haskell/alsa-mixer-0.3:= )
	dbus? ( >=dev-haskell/dbus-0.10:= )
	inotify? ( >=dev-haskell/hinotify-0.3:= <dev-haskell/hinotify-0.4:= )
	mpd? ( >=dev-haskell/libmpd-0.9:= <dev-haskell/libmpd-0.10:= )
	mpris? ( >=dev-haskell/dbus-0.10:= )
	timezone? ( >=dev-haskell/timezone-olson-0.1:= <dev-haskell/timezone-olson-0.2:=
			>=dev-haskell/timezone-series-0.1:= <dev-haskell/timezone-series-0.2:= )
	wifi? ( net-wireless/wireless-tools )
	xft? ( >=dev-haskell/x11-xft-0.2:= <dev-haskell/x11-xft-0.4:= )
	xpm? ( x11-libs/libXpm )
"
DEPEND="${RDEPEND}
	>=dev-haskell/cabal-1.6
"

src_prepare() {
	# xmobar is an idle multithreaded program
	# which sits in 'while { sleep(1); }'
	# loops in multiple threads.
	# It has a pathological behaviour in GHC:
	#   everything program does is thread context switch
	#   100 times per second. It's easily seen with
	#
	#       $ strace -f -p `pidof xmobar`
	#
	#   where rt_sigreturn() manages to enter/exit
	# kernel 32 times in each second to do nothing
	# This workaround allows shrinkng wakeups/thread
	# switches down to one per second (internal xmobar's
	# cycle).
	# Be careful when remove it :]
	HCFLAGS+=" -with-rtsopts=-V0"
}

src_configure() {
	haskell-cabal_src_configure \
		--flag=-all_extensions \
		$(cabal_flag alsa with_alsa) \
		$(cabal_flag timezone with_datezone) \
		$(cabal_flag dbus with_dbus) \
		$(cabal_flag inotify with_inotify) \
		$(cabal_flag wifi with_iwlib) \
		$(cabal_flag mpd with_mpd) \
		$(cabal_flag mpris with_mpris) \
		--flag=with_threaded \
		--flag=with_utf8 \
		$(cabal_flag xft with_xft) \
		$(cabal_flag xpm with_xpm)
}

src_install() {
	cabal_src_install

	dodoc samples/xmobar.config readme.md news.md
}
