# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

inherit eutils cros-binary

# Synaptics touchpad generic eclass.
IUSE="is_touchpad ps_touchpad"

RDEPEND="x11-base/xorg-server"
DEPEND="${RDEPEND}"

# @ECLASS-VARIABLE: SYNAPTICS_TOUCHPAD_PN
# @DESCRIPTION: The packagename used as part of the binary tarball filename.
: ${SYNAPTICS_TOUCHPAD_PN:=${PN}}

export_uri() {
	local XORG_VERSION_STRING
	local XORG_VERSION
	local X_VERSION

	XORG_VERSION_STRING=$(grep "XORG_VERSION_CURRENT" "$ROOT/usr/include/xorg/xorg-server.h")
	XORG_VERSION_STRING=${XORG_VERSION_STRING/#\#define*XORG_VERSION_CURRENT}
	XORG_VERSION=$(($XORG_VERSION_STRING))

	if [ $XORG_VERSION -ge 11100000 ]; then
		X_VERSION=1.11
	elif [ $XORG_VERSION -ge 11000000 ]; then
		X_VERSION=1.10
	elif [ $XORG_VERSION -ge 10903000 ]; then
		X_VERSION=1.9
	else
		X_VERSION=1.7
	fi
	CROS_BINARY_URI="http://commondatastorage.googleapis.com/synaptics/${SYNAPTICS_TOUCHPAD_PN}-xorg-${X_VERSION}-${PV}-${PR}.tar.gz"
}

synaptics-touchpad_src_unpack() {
	export_uri
	cros-binary_src_unpack
}

synaptics-touchpad_src_install() {
	# Currently you must have files/* in each ebuild that inherits
	# from here. These files will go away soon after they are pushed
	# into the synaptics tarball.
	export_uri
	cros-binary_src_install
	if [ $(ls "${D}" | wc -l) -eq 1 ]; then
		local extra_dir="$(ls "${D}")"
		mv "${D}/${extra_dir}/"* "${D}/"
		rmdir "${D}/${extra_dir}/"
	fi

	exeinto /opt/Synaptics/bin
	doexe "${FILESDIR}/tpcontrol_syncontrol" || die

	# If it exists, install synlogger to log calls to the Synaptics binaries.
	# The original binaries themselves are appended with _bin, and symlinks are
	# created with their original names that point at synlogger.
	if [ -f "${FILESDIR}/synlogger" ]; then
		doexe "${FILESDIR}/synlogger" || die
		local f
		for f in syn{control,detect,reflash} ; do
			mv "${D}"/opt/Synaptics/bin/${f}{,_bin} || die
			dosym synlogger /opt/Synaptics/bin/${f} || die
		done
	fi

	# link the appropriate config files for the type of trackpad
	if use is_touchpad && use ps_touchpad; then
	   die "Specify only one type of touchpad"
	elif use is_touchpad; then
	   dosym HKLM_Kernel_IS /opt/Synaptics/HKLM_Kernel || die
	   dosym HKLM_User_IS /opt/Synaptics/HKLM_User || die
	elif use ps_touchpad; then
	   dosym HKLM_Kernel_PS /opt/Synaptics/HKLM_Kernel || die
	   dosym HKLM_User_PS /opt/Synaptics/HKLM_User || die
	else
	   die "Type of touchpad not specified"
	fi
}
