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

EAPI=7
CROS_WORKON_PROJECT="chromiumos/platform/bmpblk"
CROS_WORKON_LOCALNAME="../platform/bmpblk"
CROS_WORKON_OUTOFTREE_BUILD="1"
CROS_WORKON_USE_VCSID="1"

# TODO(hungte) When "tweaking ebuilds by source repository" is implemented, we
# can generate this list by some script inside source repo.
CROS_BOARDS=(
	ambassador
	asurada
	atlas
	auron_paine
	auron_yuna
	banjo
	buddy
	butterfly
	candy
	chell
	cid
	clapper
	cranky
	daisy
	daisy_snow
	daisy_spring
	daisy_skate
	dedede
	deltaur
	dragonegg
	drallion
	endeavour
	enguarde
	expresso
	eve
	falco
	fizz
	flapjack
	glados
	glimmer
	gnawty
	grunt
	guado
	hatch
	jacuzzi
	kalista
	kevin
	kip
	kukui
	lars
	leon
	link
	lulu
	lumpy
	mccloud
	meowth
	monroe
	mushu
	nami
	nautilus
	ninja
	nocturne
	nyan
	nyan_big
	octopus
	orco
	palkia
	panther
	parrot
	peach_pi
	peach_pit
	peppy
	poppy
	puff
	quawks
	rammus
	reks
	rikku
	sarien
	scarlet
	soraka
	squawks
	stout
	stumpy
	sumo
	swanky
	tglrvp
	tidus
	tricky
	trogdor
	veyron_brain
	veyron_danger
	veyron_jerry
	veyron_mickey
	veyron_minnie
	veyron_pinky
	veyron_romy
	volteer
	winky
	wolf
	zako
	zoombini
	zork
)

PYTHON_COMPAT=( python3_{6..8} )
inherit cros-workon cros-board python-any-r1

DESCRIPTION="Chrome OS Firmware Bitmap Block"
HOMEPAGE="https://chromium.googlesource.com/chromiumos/platform/bmpblk/"
SRC_URI=""
LICENSE="BSD-Google"
KEYWORDS="~*"
IUSE="detachable diag_payload +minidiag physical_presence_power
	physical_presence_recovery"

BDEPEND="${PYTHON_DEPS}"
DEPEND="virtual/chromeos-vendor-strings"

src_prepare() {
	export BOARD="$(get_current_board_with_variant "${ARCH}-generic")"
	export VCSID

	default

	# if fontconfig's cache is empty, prepare single use cache.
	# That's still faster than having each process (of which there
	# are many) re-scan the fonts
	if find /usr/share/cache/fontconfig -maxdepth 0 -type d -empty \
		-exec false {} +; then

		return
	fi

	TMPCACHE=$(mktemp -d)
	cat > $TMPCACHE/local-conf.xml <<-EOF
		<?xml version="1.0"?>
		<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
		<fontconfig>
		<cachedir>$TMPCACHE</cachedir>
		<include>/etc/fonts/fonts.conf</include>
		</fontconfig>
	EOF
	export FONTCONFIG_FILE=$TMPCACHE/local-conf.xml
	fc-cache -v
}

src_compile() {
	local vendor_strings_dir="${SYSROOT}/firmware/vendor-strings"
	if use detachable ; then
		export DETACHABLE=1
	fi

	# Both diag_payload and minidiag need additional UI images from
	# chromeos-bmpblk.
	if use diag_payload || use minidiag ; then
		export DIAGNOSTIC_UI=1
	fi
	if [[ -f "${vendor_strings_dir}/vendor_format.yaml" ]] ; then
		export VENDOR_STRINGS_DIR="${vendor_strings_dir}"
	fi
	if use physical_presence_power ; then
		export PHYSICAL_PRESENCE="power"
	elif use physical_presence_recovery ; then
		export PHYSICAL_PRESENCE="recovery"
	else
		export PHYSICAL_PRESENCE="keyboard"
	fi
	emake OUTPUT="${WORKDIR}" BOARD="${BOARD}"
	emake OUTPUT="${WORKDIR}/${BOARD}" ARCHIVER="/usr/bin/archive" archive
	if [[ "${BOARD}" == "${ARCH}-generic" ]]; then
		printf "1" > "${WORKDIR}/${BOARD}/vbgfx_not_scaled"
	fi
}

doins_if_exist() {
	local f
	for f in "$@"; do
		if [[ -r "${f}" ]]; then
			doins "${f}"
		fi
	done
}

src_install() {
	# Most bitmaps need to reside in the RO CBFS only. Many boards do
	# not have enough space in the RW CBFS regions to contain all
	# image files.
	insinto /firmware/cbfs-ro-compress
	# These files aren't necessary for debug builds. When these files
	# are missing, Depthcharge will render text-only screens. They look
	# obviously not ready for release.
	doins_if_exist "${WORKDIR}/${BOARD}"/vbgfx.bin
	doins_if_exist "${WORKDIR}/${BOARD}"/locales
	doins_if_exist "${WORKDIR}/${BOARD}"/locale/ro/locale_*.bin
	doins_if_exist "${WORKDIR}/${BOARD}"/font.bin
	# This flag tells the firmware_Bmpblk test to flag this build as
	# not ready for release.
	doins_if_exist "${WORKDIR}/${BOARD}"/vbgfx_not_scaled

	# However, if specific bitmaps need to be updated via RW update,
	# we should also install here.
	insinto /firmware/cbfs-rw-compress-override
	doins_if_exist "${WORKDIR}/${BOARD}"/locale/rw/rw_locale_*.bin
}
