Index: bin/cros_workon_make |
diff --git a/bin/cros_workon_make b/bin/cros_workon_make |
new file mode 100755 |
index 0000000000000000000000000000000000000000..95cc709a5dd41ec4246c8913d50a535ae0b85592 |
--- /dev/null |
+++ b/bin/cros_workon_make |
@@ -0,0 +1,93 @@ |
+#!/bin/bash |
+ |
+# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+# |
+# Simple wrapper script to build a cros_workon package incrementally. |
+# You must already be cros_workon'ing the package in question. |
+ |
+. "$(dirname $0)/../common.sh" |
+ |
+# Script must be run inside the chroot. |
+assert_inside_chroot |
+ |
+get_default_board |
+ |
+DEFINE_string board "${DEFAULT_BOARD}" \ |
+ "Board for which to build the package." |
+DEFINE_boolean test "${FLAGS_FALSE}" \ |
+ "Compile and run tests as well." |
+DEFINE_boolean reconf "${FLAGS_FALSE}" \ |
+ "Re-run configure and prepare steps." |
+DEFINE_boolean install "${FLAGS_FALSE}" \ |
+ "Incrementally build and install your package." |
+DEFINE_boolean scrub "${FLAGS_FALSE}" \ |
+ "Blow away all in-tree files not managed by git." |
anush
2010/11/23 16:04:59
Should we call this "distclean" to keep with make'
Chris Masone
2010/11/23 19:42:21
I'm torn. --scrub is really destructive, moreso t
rochberg
2010/11/29 21:04:06
+1 to "are you sure"---files you forgot to git add
|
+ |
+set -e |
+# Parse command line. |
+FLAGS "$@" || exit 1 |
+eval set -- "${FLAGS_ARGV}" |
+ |
+if [ $# -lt 1 ]; then |
+ echo "Usage: ${0} [OPTIONS] <package (read: ebuild) basename>" |
+ exit 1 |
+fi |
+ |
+if [ -n "${FLAGS_board}" ]; then |
+ BOARD_DIR=/build/"${FLAGS_board}" |
+ EBUILDCMD=ebuild-"${FLAGS_board}" |
+ EMERGECMD=emerge-"${FLAGS_board}" |
+ EQUERYCMD=equery-"${FLAGS_board}" |
+ BOARD_STR="${FLAGS_board}" |
+ BOARD_KEYWORD="$(portageq-${FLAGS_board} envvar ARCH)" |
+fi |
+ |
+unstable_suffix="9999" |
+workon_name="${1}-${unstable_suffix}" |
+pkgfile= |
+workpath= |
+ |
+if ! pkgfile=$("${EQUERYCMD}" which "${workon_name}" 2> /dev/null); then |
+ if ACCEPT_KEYWORDS="~${BOARD_KEYWORD}" "${EQUERYCMD}" which "${workon_name}" \ |
+ > /dev/null 2>&1; then |
+ die "run './cros_workon --board ${BOARD_STR} start ${1}' first!" 1>&2 |
anush
2010/11/23 16:04:59
I was wondering if we should just call the command
Chris Masone
2010/11/23 19:42:21
I always prefer the toolbox approach to the swiss
|
+ fi |
+ die "error looking up package $1" |
+fi |
+ |
+if [ "${FLAGS_scrub}" = "${FLAGS_TRUE}" ]; then |
+ eval $(${EBUILDCMD} $(${EQUERYCMD} which ${workon_name}) info) |
+ srcdir=$(readlink -m ${CROS_WORKON_SRCDIR}) |
+ trunkdir=$(readlink -m ${CHROOT_TRUNK_DIR}) |
+ project_path=${srcdir#${trunkdir}/} |
+ if ! (cd "${GCLIENT_ROOT}/${project_path}" && git clean -xf); then |
+ die "Could not scrub source directory" |
+ fi |
+ exit 0 |
+fi |
+ |
+workpath=$(\ |
+ echo "${pkgfile}" | \ |
+ awk -F '/' '{ print $(NF-2) "/" $(NF-1) }')-"${unstable_suffix}" |
+ |
+emerge_features= |
+to_do="compile" |
+if [ "${FLAGS_test}" = "${FLAGS_TRUE}" ]; then |
+ to_do="test" |
+ emerge_features="test" |
+fi |
+if [ "${FLAGS_install}" = "${FLAGS_TRUE}" ]; then |
anush
2010/11/23 16:04:59
Can we make this the default i.e without an "insta
Chris Masone
2010/11/23 19:42:21
No, the whole point of this tool is to enable incr
|
+ FEATURES="${emerge_features}" "${EMERGECMD}" "${1}" |
+ exit $? |
+fi |
+ |
+clean= |
+if [ "${FLAGS_reconf}" = "${FLAGS_TRUE}" ]; then |
+ clean="clean" |
+else |
+ rm -f "/build/${BOARD_STR}/tmp/portage/${workpath}/.compiled" |
+fi |
+SANDBOX_WRITE=~/trunk CROS_WORKON_INPLACE=1 \ |
+ "${EBUILDCMD}" "${pkgfile}" ${clean} "${to_do}" |
anush
2010/11/23 16:04:59
If we make the default as "install" then this need
Chris Masone
2010/11/23 19:42:21
nah, I think this should stay the default. I'm wr
rochberg
2010/11/29 21:04:06
Since my incremental workflow involves the device,
rochberg
2010/11/29 21:04:06
Since my incremental workflow involves the device,
|