# 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_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
}
