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

EAPI=5

inherit flag-o-matic libtool multilib

if [[ ${PV} == *9999* ]]; then
	EHG_REPO_URI="http://hg.debian.org/hg/xine-lib/xine-lib-1.2"
	inherit autotools mercurial eutils
	unset NLS_IUSE
	NLS_DEPEND="sys-devel/gettext"
	NLS_RDEPEND="virtual/libintl"
else
	KEYWORDS="amd64 hppa ppc ppc64 x86 ~amd64-fbsd ~x86-fbsd"
	SRC_URI="mirror://sourceforge/xine/${P}.tar.xz"
	NLS_IUSE="nls"
	NLS_DEPEND="nls? ( sys-devel/gettext )"
	NLS_RDEPEND="nls? ( virtual/libintl )"
fi

DESCRIPTION="Core libraries for Xine movie player"
HOMEPAGE="http://xine.sourceforge.net/"

LICENSE="GPL-2"
SLOT="1"
IUSE="a52 aac aalib +alsa altivec bluray +css directfb dts dvb dxr3 fbcon flac fusion gtk imagemagick ipv6 jack jpeg libcaca mad +mmap mng modplug musepack opengl oss pulseaudio samba sdl speex theora truetype v4l vaapi vcd vdpau vdr vidix +vis vorbis vpx wavpack +X +xcb xinerama +xv xvmc ${NLS_IUSE}"

RDEPEND="${NLS_RDEPEND}
	dev-libs/libxdg-basedir
	media-libs/libdvdnav
	sys-libs/zlib
	|| ( media-video/ffmpeg:0 media-libs/libpostproc <media-video/libav-0.8.2-r1 )
	virtual/ffmpeg
	virtual/libiconv
	a52? ( media-libs/a52dec )
	aac? ( media-libs/faad2 )
	aalib? ( media-libs/aalib )
	alsa? ( media-libs/alsa-lib )
	bluray? ( >=media-libs/libbluray-0.2.1 )
	css? ( >=media-libs/libdvdcss-1.2.10 )
	directfb? ( dev-libs/DirectFB )
	dts? ( media-libs/libdca )
	dxr3? ( media-libs/libfame )
	flac? ( media-libs/flac )
	fusion? ( media-libs/FusionSound )
	gtk? ( x11-libs/gdk-pixbuf:2 )
	imagemagick? ( || ( media-gfx/imagemagick media-gfx/graphicsmagick ) )
	jack? ( >=media-sound/jack-audio-connection-kit-0.100 )
	jpeg? ( virtual/jpeg:0 )
	libcaca? ( media-libs/libcaca )
	mad? ( media-libs/libmad )
	mng? ( media-libs/libmng )
	modplug? ( >=media-libs/libmodplug-0.8.8.1 )
	musepack? ( >=media-sound/musepack-tools-444 )
	opengl? (
		virtual/glu
		virtual/opengl
		)
	pulseaudio? ( media-sound/pulseaudio )
	samba? ( net-fs/samba )
	sdl? ( media-libs/libsdl )
	speex? (
		media-libs/libogg
		media-libs/speex
		)
	theora? (
		media-libs/libogg
		media-libs/libtheora
		)
	truetype? (
		media-libs/fontconfig
		media-libs/freetype:2
		)
	v4l? ( media-libs/libv4l )
	vaapi? ( x11-libs/libva )
	vcd? (
		>=media-video/vcdimager-0.7.23
		dev-libs/libcdio[-minimal]
		)
	vdpau? ( x11-libs/libvdpau )
	vorbis? (
		media-libs/libogg
		media-libs/libvorbis
		)
	vpx? ( media-libs/libvpx )
	wavpack? ( media-sound/wavpack )
	X? (
		x11-libs/libX11
		x11-libs/libXext
		)
	xcb? ( x11-libs/libxcb )
	xinerama? ( x11-libs/libXinerama )
	xv? ( x11-libs/libXv )
	xvmc? ( x11-libs/libXvMC )"
DEPEND="${RDEPEND}
	${NLS_DEPEND}
	app-arch/xz-utils
	virtual/pkgconfig
	>=sys-devel/libtool-2.2.6b
	oss? ( virtual/os-headers )
	v4l? ( virtual/os-headers )
	X? (
		x11-libs/libXt
		x11-proto/xf86vidmodeproto
		x11-proto/xproto
		)
	xv? ( x11-proto/videoproto )
	xvmc? ( x11-proto/videoproto )
	xinerama? ( x11-proto/xineramaproto )"
REQUIRED_USE="vidix? ( || ( X fbcon ) )
	xv? ( X )
	xinerama? ( X )"

src_prepare() {
	sed -i -e '/define VDR_ABS_FIFO_DIR/s|".*"|"/var/vdr/xine"|' src/vdr/input_vdr.c || die

	if [[ ${PV} == *9999* ]]; then
		epatch_user
		eautoreconf
	else
		elibtoolize
	fi

	local x
	for x in 0 1 2 3; do
		sed -i -e "/^O${x}_CFLAGS=\"-O${x}\"/d" configure || die
	done
}

src_configure() {
	[[ ${CHOST} == i?86-* ]] && append-flags -fomit-frame-pointer #422519

	local win32dir #197236
	if has_multilib_profile; then
		win32dir=/usr/$(ABI="x86" get_libdir)/win32
	else
		win32dir=/usr/$(get_libdir)/win32
	fi

	local myconf=()
	[[ ${PV} == *9999* ]] || myconf=( $(use_enable nls) )

	if has_version '>=media-video/ffmpeg-2.2:0'; then
		myconf+=( --enable-avformat ) #507474
	fi

	econf \
		$(use_enable ipv6) \
		$(use_enable altivec) \
		$(use_enable vis) \
		--disable-optimizations \
		$(use_enable mmap) \
		$(use_enable oss) \
		$(use_enable aalib) \
		$(use_enable directfb) \
		$(use_enable dxr3) \
		$(use_enable fbcon fb) \
		$(use_enable opengl) $(use_enable opengl glu) \
		$(use_enable vidix) \
		$(use_enable xinerama) \
		$(use_enable xvmc) \
		$(use_enable vdpau) \
		$(use_enable vaapi) \
		$(use_enable dvb) \
		--disable-gnomevfs \
		$(use_enable samba) \
		--disable-v4l $(use_enable v4l v4l2) $(use_enable v4l libv4l) \
		$(use_enable vcd) \
		$(use_enable vdr) \
		$(use_enable bluray) \
		$(use_enable a52 a52dec) \
		$(use_enable aac faad) \
		$(use_enable gtk gdkpixbuf) \
		$(use_enable jpeg libjpeg) \
		$(use_enable dts) \
		$(use_enable mad) \
		$(use_enable modplug) \
		$(use_enable musepack) \
		$(use_enable mng) \
		--disable-real-codecs \
		--disable-w32dll \
		$(use_enable vpx) \
		$(use_with truetype freetype) $(use_with truetype fontconfig) \
		$(use_with X x) \
		$(use_with alsa) \
		--without-esound \
		$(use_with fusion fusionsound) \
		$(use_with jack) \
		$(use_with pulseaudio) \
		$(use_with libcaca caca) \
		$(use_with sdl) \
		$(use_with xcb) \
		--with-xv-path=/usr/$(get_libdir) \
		$(use_with imagemagick) \
		--with-external-dvdnav \
		$(use_with flac libflac) \
		$(use_with speex) \
		$(use_with theora) \
		$(use_with vorbis) \
		--with-real-codecs-path=/usr/$(get_libdir)/codecs \
		--with-w32-path=${win32dir} \
		$(use_with wavpack) \
		"${myconf[@]}"
}

src_compile() {
	# enable verbose building, bug #448140
	emake V=1
}

src_install() {
	emake \
		DESTDIR="${D}" \
		docdir="/usr/share/doc/${PF}" \
		htmldir="/usr/share/doc/${PF}/html" \
		install

	rm -f \
		"${ED}"usr/lib*/libxine*.la \
		"${ED}"usr/share/doc/${PF}/COPYING
}
