# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-apps/flashrom/flashrom-0.9.4.ebuild,v 1.5 2011/09/20 16:03:21 nativemad Exp $

EAPI=7
CROS_WORKON_COMMIT="94ed91682f82f4cdf3432b127b50a3b1e1e8e6aa"
CROS_WORKON_TREE="bd6ded88de17e9f3d2cf1441739100f961db0e57"
CROS_WORKON_PROJECT="chromiumos/third_party/flashrom"
CROS_WORKON_EGIT_BRANCH="master"

inherit cros-workon toolchain-funcs meson

DESCRIPTION="Utility for reading, writing, erasing and verifying flash ROM chips"
HOMEPAGE="https://flashrom.org/"
#SRC_URI="http://download.flashrom.org/releases/${P}.tar.bz2"
SRC_URI=""

LICENSE="GPL-2"
SLOT="0/0"
KEYWORDS="*"
IUSE="
	atahpt
	atapromise
	+atavia
	+buspirate_spi
	+ch341a_spi
	dediprog
	+developerbox_spi
	+digilent_spi
	+drkaiser
	+dummy
	ene_lpc
	+ft2232_spi
	+gfxnvidia
	+internal
	+it8212
	jlink_spi
	+linux_mtd
	+linux_spi
	+lspcon_i2c_spi
	mec1308
	mstarddc_spi
	+nic3com
	+nicintel
	+nicintel_eeprom
	+nicintel_spi
	+nicnatsemi
	+nicrealtek
	+ogp_spi
	+pickit2_spi
	+pony_spi
	+raiden_debug_spi
	+rayer_spi
	+realtek_mst_i2c_spi
	+satasii
	+satamv
	+serprog static
	+stlinkv3_spi
	test
	+usbblaster_spi
	+wiki
"

LIB_DEPEND="
	atahpt? ( sys-apps/pciutils[static-libs(+)] )
	atapromise? ( sys-apps/pciutils[static-libs(+)] )
	atavia? ( sys-apps/pciutils[static-libs(+)] )
	ch341a_spi? ( virtual/libusb:1[static-libs(+)] )
	dediprog? ( virtual/libusb:1[static-libs(+)] )
	developerbox_spi? ( virtual/libusb:1[static-libs(+)] )
	digilent_spi? ( virtual/libusb:1[static-libs(+)] )
	drkaiser? ( sys-apps/pciutils[static-libs(+)] )
	ft2232_spi? ( dev-embedded/libftdi:=[static-libs(+)] )
	gfxnvidia? ( sys-apps/pciutils[static-libs(+)] )
	internal? ( sys-apps/pciutils[static-libs(+)] )
	it8212? ( sys-apps/pciutils[static-libs(+)] )
	jlink_spi? ( dev-embedded/libjaylink[static-libs(+)] )
	nic3com? ( sys-apps/pciutils[static-libs(+)] )
	nicintel_eeprom? ( sys-apps/pciutils[static-libs(+)] )
	nicintel_spi? ( sys-apps/pciutils[static-libs(+)] )
	nicintel? ( sys-apps/pciutils[static-libs(+)] )
	nicnatsemi? ( sys-apps/pciutils[static-libs(+)] )
	nicrealtek? ( sys-apps/pciutils[static-libs(+)] )
	raiden_debug_spi? ( virtual/libusb:1[static-libs(+)] )
	ogp_spi? ( sys-apps/pciutils[static-libs(+)] )
	pickit2_spi? ( virtual/libusb:0[static-libs(+)] )
	rayer_spi? ( sys-apps/pciutils[static-libs(+)] )
	satamv? ( sys-apps/pciutils[static-libs(+)] )
	satasii? ( sys-apps/pciutils[static-libs(+)] )
	stlinkv3_spi? ( virtual/libusb:1[static-libs(+)] )
	usbblaster_spi? ( dev-embedded/libftdi:1=[static-libs(+)] )
"
RDEPEND="!static? ( ${LIB_DEPEND//\[static-libs(+)]} )"
DEPEND="${RDEPEND}
	static? ( ${LIB_DEPEND} )
	test? ( dev-util/cmocka )"
RDEPEND+=" internal? ( sys-apps/dmidecode )"

BDEPEND="sys-apps/diffutils"

DOCS=( README.chromiumos Documentation/ )

src_configure() {
	local emesonargs=(
		-Ddefault_library="$(usex static static shared)"
		-Ddefault_programmer_name=internal
		$(meson_use atahpt config_atahpt)
		$(meson_use atapromise config_atapromise)
		$(meson_use atavia config_atavia)
		$(meson_use buspirate_spi config_buspirate_spi)
		$(meson_use ch341a_spi config_ch341a_spi)
		$(meson_use dediprog config_dediprog)
		$(meson_use developerbox_spi config_developerbox_spi)
		$(meson_use digilent_spi config_digilent_spi)
		$(meson_use drkaiser config_drkaiser)
		$(meson_use dummy config_dummy)
		$(meson_use ene_lpc config_ene_lpc)
		$(meson_use ft2232_spi config_ft2232_spi)
		$(meson_use gfxnvidia config_gfxnvidia)
		$(meson_use internal config_internal)
		$(meson_use it8212 config_it8212)
		$(meson_use jlink_spi config_jlink_spi)
		$(meson_use linux_mtd config_linux_mtd)
		$(meson_use linux_spi config_linux_spi)
		$(meson_use lspcon_i2c_spi config_lspcon_i2c_spi)
		$(meson_use mec1308 config_mec1308)
		$(meson_use mstarddc_spi config_mstarddc_spi)
		$(meson_use nic3com config_nic3com)
		$(meson_use nicintel_eeprom config_nicintel_eeprom)
		$(meson_use nicintel_spi config_nicintel_spi)
		$(meson_use nicintel config_nicintel)
		$(meson_use nicnatsemi config_nicnatsemi)
		$(meson_use nicrealtek config_nicrealtek)
		$(meson_use ogp_spi config_ogp_spi)
		$(meson_use pickit2_spi config_pickit2_spi)
		$(meson_use pony_spi config_pony_spi)
		$(meson_use raiden_debug_spi config_raiden_debug_spi)
		$(meson_use rayer_spi config_rayer_spi)
		$(meson_use realtek_mst_i2c_spi config_realtek_mst_i2c_spi)
		$(meson_use satamv config_satamv)
		$(meson_use satasii config_satasii)
		$(meson_use serprog config_serprog)
		$(meson_use stlinkv3_spi config_stlinkv3_spi)
		$(meson_use usbblaster_spi config_usbblaster_spi)
		$(meson_use wiki print_wiki)
	)
	meson_src_configure
}

src_install() {
	meson_src_install
}

src_test() {
	meson_src_test
}
