# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2

CROS_WORKON_PROJECT="chromiumos/platform/vboot_reference"
inherit cros-workon

DESCRIPTION="Chrome OS verified boot tools"
LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64 ~arm ~x86"
IUSE="minimal rbtest tpmtests"
EAPI="2"

DEPEND="app-crypt/trousers
	dev-libs/openssl
	sys-apps/util-linux
        !minimal? ( dev-libs/libyaml )"

src_compile() {
	tc-export CC AR CXX
	local err_msg="${PN} compile failed. "
	err_msg+="Try running 'make clean' in the package root directory"
	emake ARCH=$(tc-arch) MINIMAL=$(usev minimal) || die "${err_msg}"
	if use rbtest; then
		emake ARCH=$(tc-arch) rbtest || die "${err_msg}"
	fi
}

src_install() {
	local dst_dir

	if use minimal ; then
		# Installing on the target. Cherry pick programs generated
		# by src_compile in the source tree build/ subdirectory
		einfo "Installing target programs"
		local progs='utility/dump_kernel_config'
		progs+=' utility/crossystem'
		progs+=' utility/dev_sign_file'
		progs+=' utility/tpm_init_temp_fix'
		progs+=' utility/tpmc'
		progs+=' utility/vbutil_key'
		progs+=' utility/vbutil_keyblock'
		progs+=' utility/vbutil_kernel'
		progs+=' utility/vbutil_firmware'
		progs+=' utility/gbb_utility'
		progs+=' utility/dump_fmap'
		progs+=' utility/dev_debug_vboot'
		progs+=' cgpt/cgpt'

		into /usr
		for prog in ${progs}; do
			dobin "${S}"/build/"${prog}"
		done

                einfo "Installing TPM tools"
                exeinto /usr/sbin
                doexe "utility/tpm-nvsize"
                doexe "utility/chromeos-tpm-recovery"

		einfo "Installing dev tools"
		dst_dir='/usr/share/vboot/bin'
		local src_dir='scripts/image_signing'
		dodir "${dst_dir}"
		exeinto "${dst_dir}"
		doexe "${src_dir}/common_minimal.sh"
		doexe "${src_dir}/resign_firmwarefd.sh"
		doexe "${src_dir}/make_dev_firmware.sh"
		doexe "${src_dir}/make_dev_ssd.sh"

		# TODO(hungte) Since we now install all keyset into
		# /usr/share/vboot/devkeys, maybe SAFT does not need to install
		# its own keys anymore.
		einfo "Installing keys for SAFT"
		local keys_to_install='recovery_kernel_data_key.vbprivk'
		keys_to_install+=' firmware.keyblock '
		keys_to_install+=' firmware_data_key.vbprivk'
		keys_to_install+=' kernel_subkey.vbpubk'
		keys_to_install+=' kernel_data_key.vbprivk'

		dst_dir='/usr/sbin/firmware/saft'
		dodir "${dst_dir}"
		insinto "${dst_dir}"
		for key in ${keys_to_install}; do
			doins "tests/devkeys/${key}"
		done

	else
		# Installing on host.
		emake DESTDIR="${D}/usr/bin" install || \
			die "${PN} install failed."

		# Install bitmap-generating scripts to /usr/share/vboot/bitmaps
		einfo "Installing bitmap-generating scripts"
		dst_dir='/usr/share/vboot/bitmaps'
		dodir "${dst_dir}"
		exeinto "${dst_dir}"
		doexe scripts/bitmaps/*.sh
		dst_dir='/usr/share/vboot/bitmaps/originals'
		dodir "${dst_dir}"
		insinto "${dst_dir}"
		doins scripts/bitmaps/originals/*

	fi
	if use rbtest; then
		emake DESTDIR="${D}/usr/bin" BUILD="${S}"/build -C tests \
		      install-rbtest || die "${PN} install failed."
	fi
	if use tpmtests; then
		into /usr
		# copy files starting with tpmtest, but skip .d files.
		dobin "${S}"/build/tests/tpm_lite/tpmtest*[^.]?
		dobin "${S}"/build/utility/tpm_set_readsrkpub
	fi

	# Install devkeys to /usr/share/vboot/devkeys
	# (shared by host and target)
	einfo "Installing devkeys"
	dst_dir='/usr/share/vboot/devkeys'
	dodir "${dst_dir}"
	insinto "${dst_dir}"
	doins tests/devkeys/*
}
