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

EAPI="5"

SCM=""
if [ "${PV%9999}" != "${PV}" ] ; then
	SCM="git-r3"

	if [ "${PV%.9999}" != "${PV}" ] ; then
		EGIT_REPO_URI="git://git.videolan.org/vlc/vlc-${PV%.9999}.git"
	else
		EGIT_REPO_URI="git://git.videolan.org/vlc.git"
	fi
fi

inherit eutils multilib autotools toolchain-funcs flag-o-matic virtualx ${SCM}

MY_PV="${PV/_/-}"
MY_PV="${MY_PV/-beta/-test}"
MY_P="${PN}-${MY_PV}"

DESCRIPTION="VLC media player - Video player and streamer"
HOMEPAGE="http://www.videolan.org/vlc/"
if [ "${PV%9999}" != "${PV}" ] ; then # Live ebuild
	SRC_URI=""
elif [[ "${MY_P}" == "${P}" ]]; then
	SRC_URI="http://download.videolan.org/pub/videolan/${PN}/${PV}/${P}.tar.xz"
else
	SRC_URI="http://download.videolan.org/pub/videolan/testing/${MY_P}/${MY_P}.tar.xz"
fi

LICENSE="LGPL-2.1 GPL-2"
SLOT="0/5-7" # vlc - vlccore

if [ "${PV%9999}" = "${PV}" ] ; then
	KEYWORDS="~amd64 ~arm ~ppc -sparc ~x86 ~x86-fbsd"
else
	KEYWORDS=""
fi

IUSE="a52 aalib alsa altivec atmo +audioqueue avahi +avcodec
	+avformat bidi bluray cdda cddb chromaprint dbus dc1394 debug dirac
	directfb directx dts dvb +dvbpsi dvd dxva2 elibc_glibc egl +encode faad fdk
	fluidsynth +ffmpeg flac fontconfig +gcrypt gme gnome gnutls
	growl httpd ieee1394 ios-vout jack kate kde libass libav libcaca libnotify
	+libsamplerate libtiger linsys libtar lirc live lua +macosx
	+macosx-audio +macosx-dialog-provider +macosx-eyetv +macosx-quartztext
	+macosx-qtkit +macosx-vout matroska media-library cpu_flags_x86_mmx modplug mp3 mpeg
	mtp musepack ncurses neon ogg omxil opencv opengl optimisememory opus
	png +postproc projectm pulseaudio +qt4 rdp rtsp run-as-root samba
	schroedinger sdl sdl-image sftp shout sid skins speex cpu_flags_x86_sse svg +swscale
	taglib theora tremor truetype twolame udev upnp vaapi v4l vcdx vdpau
	vlm vnc vorbis wma-fixed +X x264 +xcb xml xv zvbi"

RDEPEND="
		!<media-video/ffmpeg-1.2:0
		dev-libs/libgpg-error:0
		net-dns/libidn:0
		>=sys-libs/zlib-1.2.5.1-r2:0[minizip]
		virtual/libintl:0
		a52? ( >=media-libs/a52dec-0.7.4-r3:0 )
		aalib? ( media-libs/aalib:0 )
		alsa? ( >=media-libs/alsa-lib-1.0.24:0 )
		avahi? ( >=net-dns/avahi-0.6:0[dbus] )
		avcodec? (
			!libav? ( media-video/ffmpeg:0= )
			libav? ( media-video/libav:0= )
		)
		avformat? (
			!libav? ( media-video/ffmpeg:0= )
			libav? ( media-video/libav:0= )
		)
		bidi? ( >=dev-libs/fribidi-0.10.4:0 )
		bluray? ( >=media-libs/libbluray-0.2.1:0 )
		cddb? ( >=media-libs/libcddb-1.2.0:0 )
		chromaprint? ( >=media-libs/chromaprint-0.6:0 )
		dbus? ( >=sys-apps/dbus-1.0.2:0 )
		dc1394? ( >=sys-libs/libraw1394-2.0.1:0 >=media-libs/libdc1394-2.1.0:2 )
		dirac? ( >=media-video/dirac-0.10.0:0 )
		directfb? ( dev-libs/DirectFB:0 sys-libs/zlib:0 )
		dts? ( media-libs/libdca:0 )
		dvbpsi? ( >=media-libs/libdvbpsi-0.2.1:0 )
		dvd? ( media-libs/libdvdread:0 >=media-libs/libdvdnav-0.1.9:0 )
		egl? ( virtual/opengl:0 )
		elibc_glibc? ( >=sys-libs/glibc-2.8:2.2 )
		faad? ( >=media-libs/faad2-2.6.1:0 )
		fdk? ( media-libs/fdk-aac:0 )
		flac? ( media-libs/libogg:0 >=media-libs/flac-1.1.2:0 )
		fluidsynth? ( >=media-sound/fluidsynth-1.1.2:0 )
		fontconfig? ( media-libs/fontconfig:1.0 )
		gcrypt? ( >=dev-libs/libgcrypt-1.2.0:0= )
		gme? ( media-libs/game-music-emu:0 )
		gnome? ( gnome-base/gnome-vfs:2 dev-libs/glib:2 )
		gnutls? ( >=net-libs/gnutls-3.0.20:0 )
		ieee1394? ( >=sys-libs/libraw1394-2.0.1:0 >=sys-libs/libavc1394-0.5.3:0 )
		ios-vout? ( virtual/opengl:0 )
		jack? ( >=media-sound/jack-audio-connection-kit-0.99.0-r1:0 )
		kate? ( >=media-libs/libkate-0.3.0:0 )
		libass? ( >=media-libs/libass-0.9.8:0 media-libs/fontconfig:1.0 )
		libcaca? ( >=media-libs/libcaca-0.99_beta14:0 )
		libnotify? ( x11-libs/libnotify:0 x11-libs/gtk+:2 x11-libs/gdk-pixbuf:2 dev-libs/glib:2 )
		libsamplerate? ( media-libs/libsamplerate:0 )
		libtar? ( >=dev-libs/libtar-1.2.11-r3:0 )
		libtiger? ( >=media-libs/libtiger-0.3.1:0 )
		linsys? ( >=media-libs/zvbi-0.2.28:0 )
		lirc? ( app-misc/lirc:0 )
		live? ( >=media-plugins/live-2011.12.23:0 )
		lua? ( >=dev-lang/lua-5.1:0 )
		macosx-vout? ( virtual/opengl:0 )
		matroska? (	>=dev-libs/libebml-1.0.0:0= >=media-libs/libmatroska-1.0.0:0= )
		modplug? ( >=media-libs/libmodplug-0.8.8.1:0 )
		mp3? ( media-libs/libmad:0 )
		mpeg? ( >=media-libs/libmpeg2-0.3.2:0 )
		mtp? ( >=media-libs/libmtp-1.0.0:0 )
		musepack? ( >=media-sound/musepack-tools-444:0 )
		ncurses? ( sys-libs/ncurses:0=[unicode] )
		ogg? ( media-libs/libogg:0 )
		opencv? ( >media-libs/opencv-2.0:0 )
		opengl? ( virtual/opengl:0 >=x11-libs/libX11-1.3.99.901:0 )
		opus? ( >=media-libs/opus-1.0.3:0 )
		png? ( media-libs/libpng:0= sys-libs/zlib:0 )
		postproc? (
			!libav? ( >=media-video/ffmpeg-1.2:0= )
			libav? ( media-libs/libpostproc:0= )
		)
		projectm? ( media-libs/libprojectm:0 media-fonts/dejavu:0 )
		pulseaudio? ( >=media-sound/pulseaudio-0.9.22:0 )
		qt4? ( >=dev-qt/qtgui-4.6.0:4 >=dev-qt/qtcore-4.6.0:4 )
		rdp? ( <net-misc/freerdp-1.2:0= )
		samba? ( || ( >=net-fs/samba-3.4.6:0[smbclient] >=net-fs/samba-4.0.0:0[client] ) )
		schroedinger? ( >=media-libs/schroedinger-1.0.10:0 )
		sdl? ( >=media-libs/libsdl-1.2.10:0
			sdl-image? ( >=media-libs/sdl-image-1.2.10:0 sys-libs/zlib:0 ) )
		sftp? ( net-libs/libssh2:0 )
		shout? ( media-libs/libshout:0 )
		sid? ( media-libs/libsidplay:2 )
		skins? ( x11-libs/libXext:0 x11-libs/libXpm:0 x11-libs/libXinerama:0 )
		speex? ( media-libs/speex:0 )
		svg? ( >=gnome-base/librsvg-2.9.0:2 )
		swscale? (
			!libav? ( media-video/ffmpeg:0= )
			libav? ( media-video/libav:0= )
		)
		taglib? ( >=media-libs/taglib-1.6.1:0 sys-libs/zlib:0 )
		theora? ( >=media-libs/libtheora-1.0_beta3:0 )
		tremor? ( media-libs/tremor:0 )
		truetype? ( media-libs/freetype:2 virtual/ttf-fonts:0
			!fontconfig? ( media-fonts/dejavu:0 ) )
		twolame? ( media-sound/twolame:0 )
		udev? ( >=virtual/udev-142:0 )
		upnp? ( net-libs/libupnp:0 )
		v4l? ( media-libs/libv4l:0 )
		vaapi? (
			x11-libs/libva:0[X]
			!libav? ( media-video/ffmpeg:0=[vaapi] )
			libav? ( media-video/libav:0=[vaapi] )
		)
		vcdx? ( >=dev-libs/libcdio-0.78.2:0 >=media-video/vcdimager-0.7.22:0 )
		vdpau? ( >=x11-libs/libvdpau-0.6:0 !<media-video/libav-10_beta1 )
		vnc? ( >=net-libs/libvncserver-0.9.9:0 )
		vorbis? ( media-libs/libvorbis:0 )
		X? ( x11-libs/libX11:0 )
		x264? ( >=media-libs/x264-0.0.20090923:0= )
		xcb? ( >=x11-libs/libxcb-1.6:0 >=x11-libs/xcb-util-0.3.4:0 >=x11-libs/xcb-util-keysyms-0.3.4:0 )
		xml? ( dev-libs/libxml2:2 )
		zvbi? ( >=media-libs/zvbi-0.2.25:0 )
"

DEPEND="${RDEPEND}
	kde? ( >=kde-base/kdelibs-4:4 )
	xcb? ( x11-proto/xproto:0 )
	app-arch/xz-utils:0
	>=sys-devel/gettext-0.18.3:*
	virtual/pkgconfig:*
"

REQUIRED_USE="
	aalib? ( X )
	bidi? ( truetype )
	cddb? ( cdda )
	dvb? ( dvbpsi )
	dxva2? ( avcodec )
	egl? ( X )
	ffmpeg? ( avcodec avformat swscale postproc )
	fontconfig? ( truetype )
	gnutls? ( gcrypt )
	httpd? ( lua )
	libcaca? ( X )
	libtar? ( skins )
	libtiger? ( kate )
	qt4? ( X )
	sdl? ( X )
	skins? ( truetype X qt4 )
	vaapi? ( avcodec X )
	vlm? ( encode )
	xv? ( xcb )
"

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

pkg_setup() {
	if [[ "${MERGE_TYPE}" != "binary" && "$(tc-getCC)" == *"gcc"* ]] ; then
		if [[ $(gcc-major-version) < 4 || ( $(gcc-major-version) == 4 && $(gcc-minor-version) < 5 ) ]] ; then
			die "You need to have at least >=sys-devel/gcc-4.5 to build and/or have a working vlc, see bug #426754."
		fi
	fi
}

src_unpack() {
	if [ "${PV%9999}" != "${PV}" ] ; then
		git-r3_src_unpack
	else
		unpack ${A}
	fi
}

src_prepare() {
	# Remove unnecessary warnings about unimplemented pragmas on gcc for now.
	# Need to recheck this with gcc 4.9 and every subsequent minor bump of gcc.
	#
	# config.h:792: warning: ignoring #pragma STDC FENV_ACCESS [-Wunknown-pragmas]
	# config.h:793: warning: ignoring #pragma STDC FP_CONTRACT [-Wunknown-pragmas]
	#
	# https://gcc.gnu.org/c99status.html
	if [[ "$(tc-getCC)" == *"gcc"* ]] ; then
		sed -i 's/ifndef __FAST_MATH__/if 0/g' configure.ac || die
	fi

	# Bootstrap when we are on a git checkout.
	if [[ "${PV%9999}" != "${PV}" ]] ; then
		./bootstrap
	fi

	# Make it build with libtool 1.5
	rm -f m4/lt* m4/libtool.m4 || die

	# We are not in a real git checkout due to the absence of a .git directory.
	touch src/revision.txt || die

	# Patch up incompatibilities and reconfigure autotools.
	epatch "${FILESDIR}"/${PN}-2.1.0-newer-rdp.patch
	epatch "${FILESDIR}"/${PN}-2.1.0-libva-1.2.1-compat.patch

	# Fix up broken audio when skipping using a fixed reversed bisected commit.
	epatch "${FILESDIR}"/${PN}-2.1.0-TomWij-bisected-PA-broken-underflow.patch

	# Disable avcodec checks when avcodec is not used.
	if ! use avcodec; then
		sed -i 's/^#if LIBAVCODEC_VERSION_CHECK(.*)$/#if 0/' modules/codec/avcodec/fourcc.c || die
	fi

	# Don't use --started-from-file when not using dbus.
	if ! use dbus ; then
		sed -i 's/ --started-from-file//' share/vlc.desktop.in || die
	fi

	# Disable a bogus check
	sed -i "s:libavcodec < 56:libavcodec < 57:g" configure.ac || die

	epatch_user

	eautoreconf

	# Disable automatic running of tests.
	find . -name 'Makefile.in' -exec sed -i 's/\(..*\)check-TESTS/\1/' {} \; || die

	# If qtchooser is installed, it may break the build, because moc,rcc and uic binaries for wrong qt version may be used.
	# Setting QT_SELECT environment variable will enforce correct binaries.
	if use qt4; then
		export QT_SELECT=qt4
	fi
}

src_configure() {
	# Compatibility fix for Samba 4.
	use samba && append-cppflags "-I/usr/include/samba-4.0"

	# We need to disable -fstack-check if use >=gcc 4.8.0.
	# See bug #499996
	use x86 && append-cflags $(test-flags-CC -fno-stack-check)

	# Needs libresid-builder from libsidplay:2 which is in another directory...
	# FIXME!
	append-ldflags "-L/usr/$(get_libdir)/sidplay/builders/"

	if use truetype || use projectm ; then
		local dejavu="/usr/share/fonts/dejavu/"
		myconf="--with-default-font=${dejavu}/DejaVuSans.ttf \
				--with-default-font-family=Sans \
				--with-default-monospace-font=${dejavu}/DejaVuSansMono.ttf
				--with-default-monospace-font-family=Monospace"
	fi

	econf \
		${myconf} \
		--enable-vlc \
		--docdir=/usr/share/doc/${PF} \
		--disable-dependency-tracking \
		--disable-optimizations \
		--disable-update-check \
		--enable-fast-install \
		--enable-screen \
		$(use_enable a52) \
		$(use_enable aalib aa) \
		$(use_enable alsa) \
		$(use_enable altivec) \
		$(use_enable atmo) \
		$(use_enable audioqueue) \
		$(use_enable avahi bonjour) \
		$(use_enable avcodec) \
		$(use_enable avformat) \
		$(use_enable bidi fribidi) \
		$(use_enable bluray) \
		$(use_enable cdda vcd) \
		$(use_enable cddb libcddb) \
		$(use_enable chromaprint) \
		$(use_enable dbus) \
		$(use_enable dirac) \
		$(use_enable directfb) \
		$(use_enable directx) \
		$(use_enable dc1394) \
		$(use_enable debug) \
		$(use_enable dts dca) \
		$(use_enable dvbpsi) \
		$(use_enable dvd dvdread) $(use_enable dvd dvdnav) \
		$(use_enable dxva2) \
		$(use_enable egl) \
		$(use_enable encode sout) \
		$(use_enable faad) \
		$(use_enable fdk fdkaac) \
		$(use_enable flac) \
		$(use_enable fluidsynth) \
		$(use_enable fontconfig) \
		$(use_enable gcrypt libgcrypt) \
		$(use_enable gme) \
		$(use_enable gnome gnomevfs) \
		$(use_enable gnutls) \
		$(use_enable growl) \
		$(use_enable httpd) \
		$(use_enable ieee1394 dv1394) \
		$(use_enable ios-vout) \
		$(use_enable ios-vout ios-vout2) \
		$(use_enable jack) \
		$(use_enable kate) \
		$(use_with kde kde-solid) \
		$(use_enable libass) \
		$(use_enable libcaca caca) \
		$(use_enable libnotify notify) \
		$(use_enable libsamplerate samplerate) \
		$(use_enable libtar) \
		$(use_enable libtiger tiger) \
		$(use_enable linsys) \
		$(use_enable lirc) \
		$(use_enable live live555) \
		$(use_enable lua) \
		$(use_enable macosx-audio) \
		$(use_enable macosx-dialog-provider) \
		$(use_enable macosx-eyetv) \
		$(use_enable macosx-qtkit) \
		$(use_enable macosx-quartztext) \
		$(use_enable macosx-vout) \
		$(use_enable matroska mkv) \
		$(use_enable cpu_flags_x86_mmx mmx) \
		$(use_enable modplug mod) \
		$(use_enable mp3 mad) \
		$(use_enable mpeg libmpeg2) \
		$(use_enable mtp) \
		$(use_enable musepack mpc) \
		$(use_enable ncurses) \
		$(use_enable neon) \
		$(use_enable ogg) $(use_enable ogg mux_ogg) \
		$(use_enable omxil) \
		$(use_enable omxil omxil-vout) \
		$(use_enable opencv) \
		$(use_enable opengl glx) \
		$(use_enable opus) \
		$(use_enable optimisememory optimize-memory) \
		$(use_enable png) \
		$(use_enable postproc) \
		$(use_enable projectm) \
		$(use_enable pulseaudio pulse) \
		$(use_enable qt4 qt) \
		$(use_enable rdp libfreerdp) \
		$(use_enable rtsp realrtsp) \
		$(use_enable run-as-root) \
		$(use_enable samba smbclient) \
		$(use_enable schroedinger) \
		$(use_enable sdl) \
		$(use_enable sdl-image) \
		$(use_enable sid) \
		$(use_enable sftp) \
		$(use_enable shout) \
		$(use_enable skins skins2) \
		$(use_enable speex) \
		$(use_enable cpu_flags_x86_sse sse) \
		$(use_enable svg) \
		$(use_enable swscale) \
		$(use_enable taglib) \
		$(use_enable theora) \
		$(use_enable tremor) \
		$(use_enable truetype freetype) \
		$(use_enable twolame) \
		$(use_enable udev) \
		$(use_enable upnp) \
		$(use_enable v4l v4l2) \
		$(use_enable vaapi libva) \
		$(use_enable vcdx) \
		$(use_enable vdpau) \
		$(use_enable vlm) \
		$(use_enable vnc libvnc) \
		$(use_enable vorbis) \
		$(use_enable wma-fixed) \
		$(use_with X x) \
		$(use_enable x264) \
		$(use_enable xcb) \
		$(use_enable xml libxml2) \
		$(use_enable xv xvideo) \
		$(use_enable zvbi) $(use_enable !zvbi telx) \
		--disable-coverage \
		--disable-cprof \
		--disable-crystalhd \
		--disable-decklink \
		--disable-gles1 \
		--disable-gles2 \
		--disable-goom \
		--disable-ios-audio \
		--disable-kai \
		--disable-kva \
		--disable-maintainer-mode \
		--disable-merge-ffmpeg \
		--disable-opensles \
		--disable-oss \
		--disable-quicksync \
		--disable-quicktime \
		--disable-rpi-omxil \
		--disable-shine \
		--disable-sndio \
		--disable-vda \
		--disable-vsxu \
		--disable-wasapi

		# ^ We don't have these disabled libraries in the Portage tree yet.

	# _FORTIFY_SOURCE is set to 2 in config.h, which is also the default value on Gentoo.
	# Other values of _FORTIFY_SOURCE may break the build (bug 523144), so definition should not be removed from config.h.
	# To prevent redefinition warnings, we undefine _FORTIFY_SOURCE at the very start of config.h file
	sed -i '1i#undef _FORTIFY_SOURCE' "${S}"/config.h || die
}

src_test() {
	Xemake check-TESTS
}

DOCS="AUTHORS THANKS NEWS README doc/fortunes.txt doc/intf-vcd.txt"

src_install() {
	default

	# Punt useless libtool's .la files
	find "${D}" -name '*.la' -delete
}

pkg_postinst() {
	if [ "$ROOT" = "/" ] && [ -x "/usr/$(get_libdir)/vlc/vlc-cache-gen" ] ; then
		einfo "Running /usr/$(get_libdir)/vlc/vlc-cache-gen on /usr/$(get_libdir)/vlc/plugins/"
		"/usr/$(get_libdir)/vlc/vlc-cache-gen" -f "/usr/$(get_libdir)/vlc/plugins/"
	else
		ewarn "We cannot run vlc-cache-gen (most likely ROOT!=/)"
		ewarn "Please run /usr/$(get_libdir)/vlc/vlc-cache-gen manually"
		ewarn "If you do not do it, vlc will take a long time to load."
	fi
}
