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

EAPI=2
CROS_WORKON_PROJECT="chromiumos/platform/factory_test_init"

inherit cros-workon

DESCRIPTION="Upstart jobs for the Chrome OS factory test image"
HOMEPAGE="http://www.chromium.org/"
SRC_URI=""
LICENSE="BSD"
SLOT="0"
KEYWORDS="~amd64 ~arm ~x86"
IUSE=""

DEPEND=""

RDEPEND="chromeos-base/chromeos-init
	sys-apps/coreutils
	sys-apps/module-init-tools
	sys-apps/upstart
	sys-process/procps
	"

CROS_WORKON_LOCALNAME="factory_test_init"

src_install() {
	dodir /etc/init
	insinto /etc/init
	doins factory.conf
	doins factorylog.conf
}

modify_upstart() {
	local upstart_file="$1"
	local new_rules="$2"
	local upstart_path="${ROOT}/etc/init/${upstart_file}"

	if [ ! -f "$upstart_path" ]; then
		ewarn "Ignore non-exist upstart file: ${upstart_file}"
		return
	fi

	grep -q "^start on " "${upstart_path}" ||
		die "Unknown format in upstart file: ${upstart_file}"

	sed -i "s/^start on .*/start on $new_rules/" "${upstart_path}" ||
		die "Failed to modify upstart file: ${upstart_file}"
}

disable_upstart() {
	modify_upstart "$1" "never"
}

pkg_postinst() {
	# Create factory test image tags
	touch "${ROOT}/root/.factory_test"
	touch "${ROOT}/root/.leave_firmware_alone"

	disable_upstart "ui.conf"
	disable_upstart "update-engine.conf"
	disable_upstart "tlsdated.conf"
	disable_upstart "laptop-mode-boot.conf"
	disable_upstart "laptop-mode-resume.conf"
	disable_upstart "powerd.conf"

	modify_upstart "boot-complete.conf" "started boot-services"
	modify_upstart "chromeos-touch-update.conf" "starting factory"
	modify_upstart "chrontel.conf" "factory-ui-started"
}
