# 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="c9c09040342b719ad0188b154091a713719b0d42"
CROS_WORKON_TREE="1aa1ed277eaa201fa220609529fd02a7af732a86"
CROS_WORKON_PROJECT="chromiumos/third_party/flashrom"
CROS_WORKON_EGIT_BRANCH="master"

inherit cros-workon toolchain-funcs meson cros-sanitizers

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
	+cli
	dediprog
	developerbox_spi
	digilent_spi
	drkaiser
	+dummy
	+ft2232_spi
	gfxnvidia
	ich_descriptors
	+internal
	+it8212
	jlink_spi
	+linux_mtd
	+linux_spi
	+mediatek_i2c_spi
	mstarddc_spi
	nic3com
	nicintel
	nicintel_eeprom
	nicintel_spi
	nicnatsemi
	nicrealtek
	ogp_spi
	+parade_lspcon
	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() {
	# Constructing programmers array from enabled IUSE flags
	local flag programmer_flags=(
		atahpt atapromise atavia buspirate_spi ch341a_spi dediprog developerbox_spi
		digilent_spi drkaiser dummy ft2232_spi gfxnvidia internal it8212 jlink_spi
		linux_mtd linux_spi mediatek_i2c_spi mstarddc_spi nic3com nicintel_eeprom
		nicintel_spi nicintel nicnatsemi nicrealtek ogp_spi parade_lspcon pickit2_spi
		pony_spi raiden_debug_spi rayer_spi realtek_mst_i2c_spi satamv satasii
		serprog stlinkv3_spi usbblaster_spi
	)
	local programmers=$(
		# shellcheck disable=SC2046
		printf '%s,' $(for flag in "${programmer_flags[@]}"; do usev "${flag}"; done)
	)

	# Remove trailing comma.
	programmers=${programmers%,}

	local emesonargs=(
		-Ddefault_library="$(usex static static shared)"
		-Ddefault_programmer_name=internal
		-Dprogrammer="${programmers}"
		$(meson_feature cli classic_cli)
		$(meson_feature ich_descriptors ich_descriptors_tool)
		$(meson_feature wiki classic_cli_print_wiki)
	)
	sanitizers-setup-env
	meson_src_configure
}

src_install() {
	meson_src_install
}

src_test() {
	meson_src_test
}
