# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/www-plugins/adobe-flash/adobe-flash-10.1.53.64.ebuild,v 1.10 2010/07/11 10:46:49 lxnay Exp $

EAPI=1
inherit nsplugins rpm multilib toolchain-funcs

MY_32B_URI="http://fpdownload.macromedia.com/get/flashplayer/current/flash-plugin-${PV}-release.i386.rpm"

DESCRIPTION="Adobe Flash Player"
SRC_URI="${MY_32B_URI}"
HOMEPAGE="http://www.adobe.com/"
IUSE="multilib"
SLOT="0"

KEYWORDS="-* amd64 x86"
LICENSE="AdobeFlash-10.1"
RESTRICT="strip mirror"

S="${WORKDIR}"

# Remove >glibc-2.4 dependency since we use 2.10 from package.provided
NATIVE_DEPS="x11-libs/gtk+:2
	media-libs/fontconfig
	dev-libs/nss
	net-misc/curl"

EMUL_DEPS=">=app-emulation/emul-linux-x86-gtklibs-20100409-r1
	app-emulation/emul-linux-x86-soundlibs"

RDEPEND="x86? ( $NATIVE_DEPS )
	amd64? ( $EMUL_DEPS )
	|| ( media-fonts/liberation-fonts media-fonts/corefonts )"

# Ignore QA warnings in these binary closed-source libraries, since we can't fix
# them:
QA_EXECSTACK="opt/netscape/plugins32/libflashplayer.so
	opt/netscape/plugins/libflashplayer.so"

QA_DT_HASH="opt/netscape/plugins32/libflashplayer.so
	opt/netscape/plugins/libflashplayer.so"

pkg_setup() {
	if use x86; then
		export native_install=1
	elif use amd64; then
		# As of 10.1, no more native 64b version *grumble grumble*
		unset native_install
		unset need_lahf_wrapper
		export amd64_32bit=1
	fi
}

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

src_install() {
	if [[ $native_install ]]; then
		# 32b RPM has things hidden in funny places
		use x86 && pushd "${S}/usr/lib/flash-plugin"

		exeinto /opt/netscape/plugins
		doexe libflashplayer.so
		inst_plugin /opt/netscape/plugins/libflashplayer.so

		use x86 && popd

		# 64b tarball has no readme file.
		use x86 && dodoc "${S}/usr/share/doc/flash-plugin-${PV}/readme.txt"
	fi

	if [[ $need_lahf_wrapper ]]; then
		# This experimental wrapper, from Maks Verver via bug #268336 should
		# emulate the missing lahf instruction affected platforms.
		exeinto /opt/netscape/plugins
		doexe flashplugin-lahf-fix.so
		inst_plugin /opt/netscape/plugins/flashplugin-lahf-fix.so
	fi

	if [[ $amd64_32bit ]]; then
		oldabi="${ABI}"
		ABI="x86"

		# 32b plugin
		pushd "${S}/usr/lib/flash-plugin"
			exeinto /opt/netscape/plugins32/
			doexe libflashplayer.so
			inst_plugin /opt/netscape/plugins32/libflashplayer.so
			dodoc "${S}/usr/share/doc/flash-plugin-${PV}/readme.txt"
		popd

		ABI="${oldabi}"
	fi

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

pkg_postinst() {
	if use amd64; then
		elog "Adobe has released 10.1 in only a 32-bit version and upgrading"
		elog "is required to close a major security vulnerability:"
		elog "  http://bugs.gentoo.org/322855"
		elog
		elog "Furthermore, there are stability problems when running 10.1 in a"
		elog "64-bit browser with nspluginwrapper.  The current recommended"
		elog "configuration is to use a 32-bit browser such as"
		elog "www-client/firefox-bin:"
		elog "  http://bugs.gentoo.org/324365"
		elog
		# Temporarily skip automatic nspluginwrapper stuff, since it is fraught
		# with peril (Bug #324365):
		#
		#if has_version 'www-plugins/nspluginwrapper'; then
		#	if [[ $native_install ]]; then
		#		# TODO: Perhaps parse the output of 'nspluginwrapper -l'
		#		#       However, the 64b flash plugin makes 'nspluginwrapper -l' segfault.
		#		local FLASH_WRAPPER="${ROOT}/usr/lib64/nsbrowser/plugins/npwrapper.libflashplayer.so"
		#		if [[ -f ${FLASH_WRAPPER} ]]; then
		#			einfo "Removing duplicate 32-bit plugin wrapper: Native 64-bit plugin installed"
		#			nspluginwrapper -r "${FLASH_WRAPPER}"
		#		fi
		#		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[+32bit -64bit]"
		#		fi
		#	else
		#		oldabi="${ABI}"
		#		ABI="x86"
		#		local FLASH_SOURCE="${ROOT}/usr/$(get_libdir)/${PLUGINS_DIR}/libflashplayer.so"
		#
		#		einfo "nspluginwrapper detected: Installing plugin wrapper"
		#		nspluginwrapper -i "${FLASH_SOURCE}"
		#
		#		ABI="${oldabi}"
		#	fi
		#elif [[ ! $native_install ]]; then
		#	einfo "To use the 32-bit flash player in a native 64-bit firefox,"
		#	einfo "you must install www-plugins/nspluginwrapper"
		#fi
	fi

	ewarn "Flash player is closed-source, with a long history of security"
	ewarn "issues.  Please consider only running flash applets you know to"
	ewarn "be safe.  The 'flashblock' extension may help for mozilla users:"
	ewarn "  https://addons.mozilla.org/en-US/firefox/addon/433"
}
