# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/www-plugins/adobe-flash/adobe-flash-11.2.202.378.ebuild,v 1.2 2014/06/10 21:19:19 zlogene Exp $

EAPI=5
inherit nsplugins toolchain-funcs versionator multilib multilib-minimal

DESCRIPTION="Adobe Flash Player"
HOMEPAGE="http://www.adobe.com/products/flashplayer.html"

AF_URI="http://fpdownload.macromedia.com/get/flashplayer/pdc"
AF_DB_URI="http://fpdownload.macromedia.com/pub/flashplayer/updaters"
PV_M=$(get_major_version)
AF_32_URI="${AF_URI}/${PV}/install_flash_player_${PV_M}_linux.i386.tar.gz -> ${P}.i386.tar.gz"
AF_64_URI="${AF_URI}/${PV}/install_flash_player_${PV_M}_linux.x86_64.tar.gz -> ${P}.x86_64.tar.gz"
AF_32_DB_URI="${AF_DB_URI}/${PV_M}/flashplayer_${PV_M}_plugin_debug.i386.tar.gz -> ${P}-debug.i386.tar.gz"

SRC_URI="
	abi_x86_32? (
		!debug? ( ${AF_32_URI} )
		debug? ( ${AF_32_DB_URI} )
	)
	abi_x86_64? ( ${AF_64_URI} )
"
IUSE="debug kde selinux sse2"
REQUIRED_USE="
	sse2 debug? ( abi_x86_32 )
	|| ( abi_x86_64 abi_x86_32 )
"
SLOT="0"

KEYWORDS="-* amd64 x86"
LICENSE="AdobeFlash-11.x"
RESTRICT="strip mirror"

S="${WORKDIR}"

NATIVE_DEPS="
	dev-libs/atk
	dev-libs/glib:2
	dev-libs/nspr
	dev-libs/nss
	kde? (
		dev-qt/qtcore:4
		dev-qt/qtdbus:4
		dev-qt/qtgui:4
		dev-qt/qtsvg:4
		kde-base/kdelibs
		x11-libs/libICE
		x11-libs/libSM
		x11-libs/libXau
		x11-libs/libXdmcp
		x11-libs/libXext
		x11-libs/libXft
		x11-libs/libXpm
	)
	media-libs/fontconfig
	media-libs/freetype
	>=sys-libs/glibc-2.4
	x11-libs/cairo
	x11-libs/gdk-pixbuf
	x11-libs/gtk+:2
	x11-libs/libX11
	x11-libs/libXcursor
	x11-libs/libXext
	x11-libs/libXrender
	x11-libs/libXt
	x11-libs/pango
"

DEPEND="
	amd64? ( abi_x86_32? ( !abi_x86_64? ( www-plugins/nspluginwrapper ) ) )
	selinux? ( sec-policy/selinux-flash )
"
RDEPEND="
	${DEPEND}
	abi_x86_64? ( ${NATIVE_DEPS} )
	abi_x86_32? (
		amd64? (
			|| (
				(
					dev-libs/atk[abi_x86_32(-)]
					x11-libs/cairo[abi_x86_32(-)]
					x11-libs/gdk-pixbuf[abi_x86_32(-)]
					x11-libs/gtk+:2[abi_x86_32(-)]
					x11-libs/pango[abi_x86_32(-)]
				)
				app-emulation/emul-linux-x86-gtklibs
			)
			|| (
				(
					dev-libs/glib:2[abi_x86_32(-)]
					dev-libs/nspr[abi_x86_32(-)]
					dev-libs/nss[abi_x86_32(-)]
				)
				app-emulation/emul-linux-x86-baselibs
			)
			|| (
				(
					media-libs/fontconfig[abi_x86_32(-)]
					media-libs/freetype[abi_x86_32(-)]
					x11-libs/libX11[abi_x86_32(-)]
					x11-libs/libXcursor[abi_x86_32(-)]
					x11-libs/libXext[abi_x86_32(-)]
					x11-libs/libXrender[abi_x86_32(-)]
					x11-libs/libXt[abi_x86_32(-)]
				)
				app-emulation/emul-linux-x86-xlibs
			)
		)
		x86? ( ${NATIVE_DEPS} )
	)
	|| ( media-fonts/liberation-fonts media-fonts/corefonts )
"

# Ignore QA warnings in these closed-source binaries, since we can't fix them:
QA_PREBUILT="usr/*"

any_cpu_missing_flag() {
	local value=${1}
	grep '^flags' /proc/cpuinfo | grep -qv "${value}"
}

pkg_setup() {
	unset need_lahf_wrapper
	if use abi_x86_64 && any_cpu_missing_flag 'lahf_lm'; then
		export need_lahf_wrapper=1
	fi
}

src_unpack() {
	local files=( ${A} )

	multilib_src_unpack() {
		mkdir -p "${BUILD_DIR}" || die
		cd "${BUILD_DIR}" || die

		# we need to filter out the other archive(s)
		local other_abi
		[[ ${ABI} == amd64 ]] && other_abi=i386 || other_abi=x86_64
		unpack ${files[@]//*${other_abi}*/}
	}

	multilib_parallel_foreach_abi multilib_src_unpack
}

src_configure() { :; }

multilib_src_compile() {
	if [[ ${ABI} == amd64 && ${need_lahf_wrapper} ]]; then
		# This experimental wrapper, from Maks Verver via bug #268336 should
		# emulate the missing lahf instruction affected platforms.
		set -- $(tc-getCC) -fPIC -shared -nostdlib -lc \
			-oflashplugin-lahf-fix.so  "${FILESDIR}/flashplugin-lahf-fix.c"
		echo "${@}" >&2
		"${@}" || die "Compile of flashplugin-lahf-fix.so failed"
	fi
}

multilib_src_install() {
	# PLUGINS_DIR comes from nsplugins.eclass
	exeinto /usr/$(get_libdir)/${PLUGINS_DIR}
	doexe libflashplayer.so

	if [[ ${ABI} == amd64 && ${need_lahf_wrapper} ]]; then
		# This experimental wrapper, from Maks Verver via bug #268336 should
		# emulate the missing lahf instruction affected platforms.
		doexe flashplugin-lahf-fix.so
	fi

	if multilib_is_native_abi; then
		if use kde; then
			local pkglibdir=lib
			[[ -d usr/lib64 ]] && pkglibdir=lib64

			exeinto /usr/$(get_libdir)/kde4
			doexe usr/${pkglibdir}/kde4/kcm_adobe_flash_player.so
			insinto /usr/share/kde4/services
			doins usr/share/kde4/services/kcm_adobe_flash_player.desktop
		else
			# No KDE applet, so allow the GTK utility to show up in KDE:
			sed -i usr/share/applications/flash-player-properties.desktop \
				-e "/^NotShowIn=KDE;/d" || die "sed of .desktop file failed"
		fi

		# The userland 'flash-player-properties' standalone app:
		dobin usr/bin/flash-player-properties

		# Icon and .desktop for 'flash-player-properties'
		insinto /usr/share
		doins -r usr/share/{icons,applications}
		dosym ../icons/hicolor/48x48/apps/flash-player-properties.png \
			/usr/share/pixmaps/flash-player-properties.png
	fi

	# The magic config file!
	insinto "/etc/adobe"
	doins "${FILESDIR}/mms.cfg"
}

unregister_pluginwrapper() {
	# TODO: Perhaps parse the output of 'nspluginwrapper -l'
	# TODO: However, the 64b flash plugin makes
	# TODO: 'nspluginwrapper -l' segfault.
	local FLASH_WRAPPER="${ROOT}/usr/lib64/${PLUGINS_DIR}/npwrapper.libflashplayer.so"
	if has_version 'www-plugins/nspluginwrapper' && [[ -f ${FLASH_WRAPPER} ]]; then
		einfo "Removing 32-bit plugin wrapper"
		nspluginwrapper -r "${FLASH_WRAPPER}"
	fi
}

pkg_postinst() {
	if use amd64 ; then
		if [[ ${need_lahf_wrapper} ]]; then
			ewarn "Your processor does not support the 'lahf' instruction which is used"
			ewarn "by Adobe's 64-bit flash binary. We have installed a wrapper which"
			ewarn "should allow this plugin to run. If you encounter problems, please"
			ewarn "adjust your USE flags to install only the 32-bit version and reinstall:"
			ewarn " ${CATEGORY}/${PN}[abi_x86_32,-abi_x86_64]"
			elog
		fi
		# needed to clean up upgrades from older installs
		if use abi_x86_64 && [[ -n ${REPLACING_VERSIONS} ]]; then
			unregister_pluginwrapper
		fi
		if has_version 'www-plugins/nspluginwrapper'; then
			if use abi_x86_32 && ! use abi_x86_64; then
				einfo "nspluginwrapper detected: Installing plugin wrapper"
				local oldabi="${ABI}"
				ABI="x86"
				local FLASH_SOURCE="${ROOT}/usr/lib32/${PLUGINS_DIR}/libflashplayer.so"
				nspluginwrapper -i "${FLASH_SOURCE}"
				ABI="${oldabi}"
			fi
		elif use abi_x86_32; then
			elog "To use the 32-bit flash player in a native 64-bit browser,"
			elog "you must install www-plugins/nspluginwrapper"
		fi
	fi
}

pkg_prerm() {
	use amd64 && use abi_x86_32 && ! use abi_x86_64 && \
		unregister_pluginwrapper
}
