blob: 1a585bbc0d1da6b11019fcdc58688cb6c2ef0456 [file] [log] [blame]
Zdenek Behan12ad1c52010-08-03 16:34:37 -07001# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2# Distributed under the terms of the GNU General Public License v2
3
4#
5# Original Author: The Chromium OS Authors <chromium-os-dev@chromium.org>
6# Purpose: Eclass for handling autotest test packages
7#
8
Aviv Keshet4144c8d2013-07-22 10:52:53 -07009inherit cros-constants
10
Zdenek Behan9e98f322010-08-26 18:56:54 -070011RDEPEND="( autotest? ( >=chromeos-base/autotest-0.0.1-r3 ) )"
Zdenek Behan12ad1c52010-08-03 16:34:37 -070012
Zdenek Behan302e7482011-02-01 21:58:52 +010013IUSE="+buildcheck autotest opengles"
Zdenek Behan12ad1c52010-08-03 16:34:37 -070014
15# Ensure the configures run by autotest pick up the right config.site
Zdenek Behan99bf5842010-08-04 17:23:38 -070016export CONFIG_SITE="/usr/share/config.site"
17export AUTOTEST_WORKDIR="${WORKDIR}/autotest-work"
Zdenek Behan12ad1c52010-08-03 16:34:37 -070018
Zdenek Behancd997a32010-08-20 12:55:44 -070019# @ECLASS-VARIABLE: AUTOTEST_CLIENT_*
20# @DESCRIPTION:
21# Location of the appropriate test directory inside ${S}
22: ${AUTOTEST_CLIENT_TESTS:=client/tests}
23: ${AUTOTEST_CLIENT_SITE_TESTS:=client/site_tests}
Zdenek Behan41463c92010-08-23 12:12:31 -070024: ${AUTOTEST_CONFIG:=client/config}
25: ${AUTOTEST_DEPS:=client/deps}
26: ${AUTOTEST_PROFILERS:=client/profilers}
27
28# @ECLASS-VARIABLE: AUTOTEST_*_LIST
29# @DESCRIPTION:
30# The list of deps/configs/profilers provided with this package
Chris Sosa6bde1602012-03-15 23:19:57 -070031: ${AUTOTEST_CONFIG_LIST:=}
32: ${AUTOTEST_DEPS_LIST:=}
33: ${AUTOTEST_PROFILERS_LIST:=}
Zdenek Behancd997a32010-08-20 12:55:44 -070034
Zdenek Behand012b762010-09-01 21:22:26 -070035# @ECLASS-VARIABLE: AUTOTEST_FORCE_LIST
36# @DESCRIPTION:
37# Sometimes we just want to forget about useflags and build what's inside
38: ${AUTOTEST_FORCE_TEST_LIST:=}
39
Zdenek Behanb1f7c892010-09-22 12:25:38 -070040# @ECLASS-VARIABLE: AUTOTEST_FILE_MASK
41# @DESCRIPTION:
42# The list of 'find' expressions to find in the resulting image and delete
43: ${AUTOTEST_FILE_MASK:=}
44
Chris Sosa6bde1602012-03-15 23:19:57 -070045fast_cp() {
Zdenek Behan7922d132010-09-24 14:18:05 -070046 cp -l "$@" || cp "$@"
47}
48
Chris Sosa6bde1602012-03-15 23:19:57 -070049get_test_list() {
Zdenek Behand012b762010-09-01 21:22:26 -070050 if [ -n "${AUTOTEST_FORCE_TEST_LIST}" ]; then
51 # list forced
52 echo "${AUTOTEST_FORCE_TEST_LIST}"
53 return
54 fi
55
56 # we cache the result of this operation in AUTOTEST_TESTS,
57 # because it's expensive and does not change over the course of one ebuild run
Albert Chaulk85eeef52014-01-08 15:26:33 -033058 local tests=$(portageq use_reduce "${IUSE_TESTS[*]}")
59 local result="${tests//[+-]tests_/}"
Zdenek Behand012b762010-09-01 21:22:26 -070060 result="${result//tests_/}"
61
62 result=$(for test in ${result}; do use tests_${test} && echo -n "${test} "; done)
63 echo "${result}"
64}
65
Chris Sosa6bde1602012-03-15 23:19:57 -070066# Pythonify the list of packages by doing the equivalent of ','.join(args)
67pythonify_test_list() {
68 local result=$(printf '%s,' "$@")
69 echo ${result%,}
Zdenek Behan12ad1c52010-08-03 16:34:37 -070070}
71
72# Create python package init files for top level test case dirs.
Chris Sosa6bde1602012-03-15 23:19:57 -070073touch_init_py() {
Zdenek Behan12ad1c52010-08-03 16:34:37 -070074 local dirs=${1}
75 for base_dir in $dirs
76 do
77 local sub_dirs="$(find ${base_dir} -maxdepth 1 -type d)"
78 for sub_dir in ${sub_dirs}
79 do
80 touch ${sub_dir}/__init__.py
81 done
82 touch ${base_dir}/__init__.py
83 done
84}
85
Zdenek Behan361d8142012-03-19 04:30:45 +010086# Exports a CROS_WORKON_SUBDIRS_TO_COPY variable to ensure that only the
87# necessary files will be copied. This cannot be applied globally, as some
88# ebuilds may not have tests only.
89autotest_restrict_workon_subdirs() {
90 CROS_WORKON_SUBDIRS_TO_COPY=()
91 local var
92 for var in AUTOTEST_{CLIENT,SERVER}_{TESTS,SITE_TESTS} \
93 AUTOTEST_{CONFIG,DEPS,PROFILERS}; do
94 CROS_WORKON_SUBDIRS_TO_COPY+=( ${!var} )
95 done
96}
97
Chris Sosa6bde1602012-03-15 23:19:57 -070098setup_cross_toolchain() {
Mike Frysingerb1eda9e2012-03-08 14:56:18 -050099 tc-export CC CXX AR RANLIB LD NM STRIP PKG_CONFIG
100 export CCFLAGS="$CFLAGS"
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700101}
102
Chris Sosa6bde1602012-03-15 23:19:57 -0700103create_autotest_workdir() {
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700104 local dst=${1}
105
106 # create a working enviroment for pre-building
Aviv Keshet4144c8d2013-07-22 10:52:53 -0700107 ln -sf "${SYSROOT}"${AUTOTEST_BASE}/{conmux,tko,global_config.ini,shadow_config.ini} "${dst}"/
Zdenek Behan99bf5842010-08-04 17:23:38 -0700108
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700109 # NOTE: in order to make autotest not notice it's running from /usr/local/, we need
110 # to make sure the binaries are real, because they do the path magic
111 local root_path base_path
Chris Masone21512432010-11-15 16:18:57 -0800112 for base_path in utils server; do
Aviv Keshet4144c8d2013-07-22 10:52:53 -0700113 root_path="${SYSROOT}${AUTOTEST_BASE}/${base_path}"
Chris Masone21512432010-11-15 16:18:57 -0800114 mkdir -p "${dst}/${base_path}"
115 for entry in $(ls "${root_path}"); do
Zdenek Behan7e9e32f2012-02-28 03:15:46 +0100116 # Take all important binaries from SYSROOT install, make a copy.
117 if [ -d "${root_path}/${entry}" ]; then
118 # Ignore anything that has already been put in place by
119 # something else. This will typically be server/{site_tests,tests}.
120 if ! [ -e "${dst}/${base_path}/${entry}" ]; then
121 ln -sf "${root_path}/${entry}" "${dst}/${base_path}/"
122 fi
Chris Masone21512432010-11-15 16:18:57 -0800123 else
124 cp -f ${root_path}/${entry} ${dst}/${base_path}/
125 fi
126 done
127 done
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700128 for base_path in client client/bin; do
Aviv Keshet4144c8d2013-07-22 10:52:53 -0700129 root_path="${SYSROOT}${AUTOTEST_BASE}/${base_path}"
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700130 mkdir -p "${dst}/${base_path}"
131
Zdenek Behan451e07f2010-08-06 11:25:37 -0700132 # Skip bin, because it is processed separately, and test-provided dirs
133 # Also don't symlink to packages, because that kills the build
Zdenek Behan41463c92010-08-23 12:12:31 -0700134 for entry in $(ls "${root_path}" | \
135 grep -v "\(bin\|tests\|site_tests\|config\|deps\|profilers\|packages\)$"); do
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700136 ln -sf "${root_path}/${entry}" "${dst}/${base_path}/"
137 done
138 done
139 # replace the important binaries with real copies
140 for base_path in autotest autotest_client; do
Aviv Keshet4144c8d2013-07-22 10:52:53 -0700141 root_path="${SYSROOT}${AUTOTEST_BASE}/client/bin/${base_path}"
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700142 rm "${dst}/client/bin/${base_path}"
143 cp -f ${root_path} "${dst}/client/bin/${base_path}"
144 done
Zdenek Behan448ddaa2010-08-24 11:18:50 -0700145
146 # Selectively pull in deps that are not provided by the current test package
147 for base_path in config deps profilers; do
Aviv Keshet4144c8d2013-07-22 10:52:53 -0700148 for dir in "${SYSROOT}${AUTOTEST_BASE}/client/${base_path}"/*; do
Zdenek Behan448ddaa2010-08-24 11:18:50 -0700149 if [ -d "${dir}" ] && \
150 ! [ -d "${AUTOTEST_WORKDIR}/client/${base_path}/$(basename ${dir})" ]; then
151 # directory does not exist, create a symlink
152 ln -sf "${dir}" "${AUTOTEST_WORKDIR}/client/${base_path}/$(basename ${dir})"
153 fi
154 done
155 done
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700156}
157
Chris Sosa6bde1602012-03-15 23:19:57 -0700158print_test_dirs() {
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700159 local testroot="${1}"
Chris Sosa6bde1602012-03-15 23:19:57 -0700160 local ignore_test_contents="${2}"
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700161
162 pushd "${testroot}" 1> /dev/null
163 for test in *; do
Chris Sosa6bde1602012-03-15 23:19:57 -0700164 if [ -d "${test}" ] && [ -n "${ignore_test_contents}" -o \
165 -f "${test}/${test}".py ]; then
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700166 echo "${test}"
167 fi
168 done
169 popd 1> /dev/null
170}
171
Zdenek Behaneee7bc22010-08-20 18:33:13 -0700172# checks IUSE_TESTS and sees if at least one of these is enabled
Chris Sosa6bde1602012-03-15 23:19:57 -0700173are_we_used() {
Zdenek Behan14ae4892010-08-26 15:25:30 -0700174 if ! use autotest; then
175 # unused
176 return 1
177 fi
178
Zdenek Behand012b762010-09-01 21:22:26 -0700179 [ -n "$(get_test_list)" ] && return 0
Zdenek Behaneee7bc22010-08-20 18:33:13 -0700180
181 # unused
182 return 1
183}
184
Chris Sosa6bde1602012-03-15 23:19:57 -0700185autotest_src_prepare() {
Zdenek Behaneee7bc22010-08-20 18:33:13 -0700186 are_we_used || return 0
187 einfo "Preparing tests"
188
189 # FIXME: These directories are needed, autotest quietly dies if
190 # they don't even exist. They may, however, stay empty.
Zdenek Behanc02fc472010-08-13 12:55:07 -0700191 mkdir -p "${AUTOTEST_WORKDIR}"/client/tests
192 mkdir -p "${AUTOTEST_WORKDIR}"/client/site_tests
Zdenek Behan41463c92010-08-23 12:12:31 -0700193 mkdir -p "${AUTOTEST_WORKDIR}"/client/config
194 mkdir -p "${AUTOTEST_WORKDIR}"/client/deps
195 mkdir -p "${AUTOTEST_WORKDIR}"/client/profilers
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700196
Zdenek Behand012b762010-09-01 21:22:26 -0700197 TEST_LIST=$(get_test_list)
198
Zdenek Behan448ddaa2010-08-24 11:18:50 -0700199 # Pull in the individual test cases.
Zdenek Behan31315b32010-08-05 16:34:39 -0700200 for l1 in client server; do
201 for l2 in site_tests tests; do
Zdenek Behancd997a32010-08-20 12:55:44 -0700202 # pick up the indicated location of test sources
203 eval srcdir=${WORKDIR}/${P}/\${AUTOTEST_${l1^^*}_${l2^^*}}
204
Zdenek Behand012b762010-09-01 21:22:26 -0700205 # test does have this directory
206 for test in ${TEST_LIST}; do
207 if [ -d "${srcdir}/${test}" ]; then
Zdenek Behan7922d132010-09-24 14:18:05 -0700208 fast_cp -fpr "${srcdir}/${test}" "${AUTOTEST_WORKDIR}/${l1}/${l2}"/ || die
Zdenek Behand012b762010-09-01 21:22:26 -0700209 fi
210 done
Zdenek Behan31315b32010-08-05 16:34:39 -0700211 done
212 done
Zdenek Behan99bf5842010-08-04 17:23:38 -0700213
Zdenek Behan448ddaa2010-08-24 11:18:50 -0700214 # Pull in all the deps provided by this package, selectively.
Zdenek Behan41463c92010-08-23 12:12:31 -0700215 for l2 in config deps profilers; do
216 # pick up the indicated location of test sources
217 eval srcdir=${WORKDIR}/${P}/\${AUTOTEST_${l2^^*}}
218
219 if [ -d "${srcdir}" ]; then # test does have this directory
220 pushd "${srcdir}" 1> /dev/null
221 eval deplist=\${AUTOTEST_${l2^^*}_LIST}
222
223 if [ "${deplist}" = "*" ]; then
Zdenek Behan7922d132010-09-24 14:18:05 -0700224 fast_cp -fpr * "${AUTOTEST_WORKDIR}/client/${l2}"
Zdenek Behan41463c92010-08-23 12:12:31 -0700225 else
226 for dir in ${deplist}; do
Zdenek Behan7922d132010-09-24 14:18:05 -0700227 fast_cp -fpr "${dir}" "${AUTOTEST_WORKDIR}/client/${l2}"/ || die
Zdenek Behan41463c92010-08-23 12:12:31 -0700228 done
229 fi
230 popd 1> /dev/null
231 fi
232 done
233
Zdenek Behan474fbae2010-08-20 21:13:22 -0700234 # FIXME: We'd like if this were not necessary, and autotest supported out-of-tree build
Zdenek Behan99bf5842010-08-04 17:23:38 -0700235 create_autotest_workdir "${AUTOTEST_WORKDIR}"
Zdenek Behaneee7bc22010-08-20 18:33:13 -0700236
Zdenek Behanf93c208a2010-09-21 18:53:58 -0700237 # Each test directory needs to be visited and have an __init__.py created.
238 # However, that only applies to the directories which have a main .py file.
Zdenek Behanedb527a2010-09-22 12:24:14 -0700239 pushd "${AUTOTEST_WORKDIR}" > /dev/null || die "AUTOTEST_WORKDIR does not exist?!"
Chris Sosa1767b532012-11-09 15:13:15 -0800240 for dir in client/tests client/site_tests; do
Zdenek Behanedb527a2010-09-22 12:24:14 -0700241 pushd "${dir}" > /dev/null || continue
Zdenek Behanf93c208a2010-09-21 18:53:58 -0700242 for sub in *; do
243 [ -f "${sub}/${sub}.py" ] || continue
Zdenek Behan1ec164a2010-08-17 19:06:31 -0700244
Zdenek Behanf93c208a2010-09-21 18:53:58 -0700245 touch_init_py ${sub}
246 done
Zdenek Behanedb527a2010-09-22 12:24:14 -0700247 popd > /dev/null
Zdenek Behan1ec164a2010-08-17 19:06:31 -0700248 done
Zdenek Behanedb527a2010-09-22 12:24:14 -0700249 popd > /dev/null
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700250
251 # Cleanup checked-in binaries that don't support the target architecture
252 [[ ${E_MACHINE} == "" ]] && return 0;
Zdenek Behan092f4632010-09-21 19:34:01 -0700253 rm -fv $( scanelf -RmyBF%a "${AUTOTEST_WORKDIR}" | grep -v -e ^${E_MACHINE} )
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700254}
255
Chris Sosa6bde1602012-03-15 23:19:57 -0700256autotest_src_compile() {
Zdenek Behan48096a82010-09-23 19:39:26 -0700257 if ! are_we_used; then
258 ewarn "***************************************************************"
259 ewarn "* Not building any tests, because the requested list is empty *"
260 ewarn "***************************************************************"
261 return 0
262 fi
Zdenek Behaneee7bc22010-08-20 18:33:13 -0700263 einfo "Compiling tests"
264
Zdenek Behan31315b32010-08-05 16:34:39 -0700265 pushd "${AUTOTEST_WORKDIR}" 1> /dev/null
Zdenek Behan99bf5842010-08-04 17:23:38 -0700266
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700267 setup_cross_toolchain
268
269 if use opengles ; then
270 graphics_backend=OPENGLES
271 else
272 graphics_backend=OPENGL
273 fi
274
Zdenek Behan9e979bb2010-09-23 17:32:05 -0700275 # HACK: Some of the autotests depend on SYSROOT being defined, and die
276 # a gruesome death if it isn't. But SYSROOT does not need to exist, for
277 # example on the host, it doesn't. Let's define a compatible variable
278 # here in case we have none.
279 export SYSROOT=${SYSROOT:-"/"}
280
Zdenek Behan8ad65252010-09-07 12:35:19 -0700281 # This only prints the tests that have the associated .py
282 # (and therefore a setup function)
283 local prebuild_test_dirs="
Chris Sosa1767b532012-11-09 15:13:15 -0800284 client/tests client/site_tests"
Zdenek Behan8ad65252010-09-07 12:35:19 -0700285 TESTS=$(\
286 for dir in ${prebuild_test_dirs}; do
287 print_test_dirs "${AUTOTEST_WORKDIR}/${dir}"
Chris Sosa6bde1602012-03-15 23:19:57 -0700288 done | sort -u)
Zdenek Behan9afd0a32011-01-21 01:47:02 +0100289 NR_TESTS=$(echo ${TESTS}|wc -w)
290 if ! [ "${NR_TESTS}" = "0" ]; then
291 einfo "Building tests (${NR_TESTS}):"
292 einfo "${TESTS}"
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700293
Zdenek Behan9afd0a32011-01-21 01:47:02 +0100294 NORMAL=$(echo -e "\e[0m")
295 GREEN=$(echo -e "\e[1;32m")
296 RED=$(echo -e "\e[1;31m")
Zdenek Behan402fea02010-09-14 13:50:09 -0700297
Zdenek Behan9afd0a32011-01-21 01:47:02 +0100298 # Call autotest to prebuild all test cases.
299 # Parse output through a colorifying sed script
300 ( GRAPHICS_BACKEND="$graphics_backend" LOGNAME=${SUDO_USER} \
301 client/bin/autotest_client --quiet \
302 --client_test_setup=$(pythonify_test_list ${TESTS}) \
303 || ! use buildcheck || die "Tests failed to build."
304 ) | sed -e "s/\(INFO:root:setup\)/${GREEN}* \1${NORMAL}/" \
305 -e "s/\(ERROR:root:\[.*\]\)/${RED}\1${NORMAL}/"
306 else
307 einfo "No tests to prebuild, skipping"
308 fi
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700309
310 # Cleanup some temp files after compiling
Zdenek Behan7c162bb2012-05-14 18:42:15 +0200311 for mask in '*.[do]' '*.pyc' ${AUTOTEST_FILE_MASK}; do
Zdenek Behanb1f7c892010-09-22 12:25:38 -0700312 einfo "Purging ${mask}"
313 find . -name "${mask}" -delete
314 done
Zdenek Behan31315b32010-08-05 16:34:39 -0700315
316 popd 1> /dev/null
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700317}
318
Chris Sosa6bde1602012-03-15 23:19:57 -0700319autotest_src_install() {
Zdenek Behaneee7bc22010-08-20 18:33:13 -0700320 are_we_used || return 0
321 einfo "Installing tests"
322
Zdenek Behan448ddaa2010-08-24 11:18:50 -0700323 # Install all test cases, after setup has been called on them.
324 # We install everything, because nothing else is copied into the
325 # testcase directories besides what this package provides.
Zdenek Behan1ec164a2010-08-17 19:06:31 -0700326 local instdirs="
327 client/tests
Chris Sosa1767b532012-11-09 15:13:15 -0800328 client/site_tests"
Zdenek Behan1ec164a2010-08-17 19:06:31 -0700329
330 for dir in ${instdirs}; do
Zdenek Behancd997a32010-08-20 12:55:44 -0700331 [ -d "${AUTOTEST_WORKDIR}/${dir}" ] || continue
Zdenek Behan1ec164a2010-08-17 19:06:31 -0700332
Aviv Keshet4144c8d2013-07-22 10:52:53 -0700333 insinto ${AUTOTEST_BASE}/$(dirname ${dir})
Zdenek Behan1ec164a2010-08-17 19:06:31 -0700334 doins -r "${AUTOTEST_WORKDIR}/${dir}"
335 done
336
Zdenek Behan448ddaa2010-08-24 11:18:50 -0700337 # Install the deps, configs, profilers.
338 # Difference from above is, we don't install the whole thing, just
339 # the stuff provided by this package, by looking at AUTOTEST_*_LIST.
340 instdirs="
341 config
342 deps
343 profilers"
344
345 for dir in ${instdirs}; do
346 [ -d "${AUTOTEST_WORKDIR}/client/${dir}" ] || continue
347
Aviv Keshet4144c8d2013-07-22 10:52:53 -0700348 insinto ${AUTOTEST_BASE}/client/${dir}
Zdenek Behan448ddaa2010-08-24 11:18:50 -0700349
Aviv Keshet605cfb12014-02-12 14:52:23 -0800350 # Capitalize the string dir (e.g. profilers -> PROFILERS)
351 # then pull out the value of e.g. AUTOTEST_PROFILERS_LIST
352 # into provided.
Zdenek Behan448ddaa2010-08-24 11:18:50 -0700353 eval provided=\${AUTOTEST_${dir^^*}_LIST}
Aviv Keshet605cfb12014-02-12 14:52:23 -0800354
355 # If provided is *, we evaluate the wildcard outselves
356 # by running `ls` inside of the approriate subdirectory
357 # of the ebuild workdir.
Zdenek Behan448ddaa2010-08-24 11:18:50 -0700358 if [ "${provided}" = "*" ]; then
359 if eval pushd "${WORKDIR}/${P}/\${AUTOTEST_${dir^^*}}" &> /dev/null; then
360 provided=$(ls)
361 popd 1> /dev/null
362 else
363 provided=""
364 fi
365 fi
366
367 for item in ${provided}; do
Aviv Keshet605cfb12014-02-12 14:52:23 -0800368 local item_path="${AUTOTEST_WORKDIR}/client/${dir}/${item}"
369 # Warn on files that do not exist, rather than failing. See
370 # crbug.com/342512 for context.
371 if [[ -e "${item_path}" ]]; then
372 doins -r "${item_path}"
373 else
374 ewarn "No file ${item_path}, skipping."
375 fi
Zdenek Behan448ddaa2010-08-24 11:18:50 -0700376 done
377 done
378
Zdenek Behan1ec164a2010-08-17 19:06:31 -0700379 # TODO: Not all needs to be executable, but it's hard to pick selectively.
380 # The source repo should already contain stuff with the right permissions.
Aviv Keshet4144c8d2013-07-22 10:52:53 -0700381 chmod -R a+x "${D}"${AUTOTEST_BASE}/*
Zdenek Behan12ad1c52010-08-03 16:34:37 -0700382}
383
Chris Sosa6bde1602012-03-15 23:19:57 -0700384autotest_pkg_postinst() {
Mandeep Singh Baines060c2db2012-12-07 17:12:31 -0800385 are_we_used || return 0
Aviv Keshet4144c8d2013-07-22 10:52:53 -0700386 local root_autotest_dir="${ROOT}${AUTOTEST_BASE}"
387 local path_to_image="${D}${AUTOTEST_BASE}"
Chris Sosa6bde1602012-03-15 23:19:57 -0700388 # Should only happen when running emerge on a DUT.
Aviv Keshet4144c8d2013-07-22 10:52:53 -0700389 if [ ! -e "${root_autotest_dir}/utils/packager.py" ]; then
Chris Sosa6bde1602012-03-15 23:19:57 -0700390 einfo "Skipping packaging as no autotest installation detected."
391 return 0
392 fi
Chris Masone21512432010-11-15 16:18:57 -0800393
Chris Sosa6bde1602012-03-15 23:19:57 -0700394 # Gather the artifacts we want autotest to package.
395 local test_opt dep_opt prof_opt
Chris Sosaccb6c8b2012-03-09 10:47:32 -0800396
Chris Sosa6bde1602012-03-15 23:19:57 -0700397 # Only client tests can be packaged.
398 local tests_to_package_dirs="client/tests client/site_tests"
399 local client_tests=$(\
400 for dir in ${tests_to_package_dirs}; do
401 print_test_dirs "${path_to_image}/${dir}" yes
402 done | sort -u)
403
404 if [ -n "${client_tests}" ] && [ "${client_tests}" != "myfaketest" ]; then
Aviv Keshet28ecfa62013-09-03 17:42:16 -0700405 test_opt="--test=$(pythonify_test_list ${client_tests})"
Chris Sosa6bde1602012-03-15 23:19:57 -0700406 fi
407
Aviv Keshete90ff5d2013-09-10 15:55:06 -0700408 if [ -n "${AUTOTEST_DEPS_LIST}" ]; then
409 dep_opt="--dep=$(pythonify_test_list ${AUTOTEST_DEPS_LIST})"
410 fi
Chris Sosa6bde1602012-03-15 23:19:57 -0700411
Aviv Keshete90ff5d2013-09-10 15:55:06 -0700412 # For *, we must generate the list of profilers.
413 if [ "${AUTOTEST_PROFILERS_LIST}" = "*" ]; then
414 AUTOTEST_PROFILERS_LIST=$(\
415 print_test_dirs "${path_to_image}/client/profilers" yes | sort -u)
416 fi
417
418 if [ -n "${AUTOTEST_PROFILERS_LIST}" ]; then
419 prof_opt="--profiler=$(pythonify_test_list ${AUTOTEST_PROFILERS_LIST})"
Chris Sosa6bde1602012-03-15 23:19:57 -0700420 fi
421
422 if [ -n "${test_opt}" -o -n "${dep_opt}" -o -n "${prof_opt}" ]; then
423 einfo "Running packager with options ${test_opt} ${dep_opt} ${prof_opt}"
Aviv Keshetdfc4d922013-09-17 16:32:32 -0700424 local logfile=${root_autotest_dir}/packages/${CATEGORY}_${PN}.log
Chris Sosa6bde1602012-03-15 23:19:57 -0700425 flock "${root_autotest_dir}/packages" \
Zdenek Behan7c162bb2012-05-14 18:42:15 +0200426 -c "python -B ${root_autotest_dir}/utils/packager.py \
Chris Sosa6bde1602012-03-15 23:19:57 -0700427 -r ${root_autotest_dir}/packages \
Aviv Keshet1616e692013-09-11 18:19:13 -0700428 ${test_opt} ${dep_opt} ${prof_opt} upload && \
429 echo ${CATEGORY}/${PN} > ${logfile} && \
430 echo ${test_opt} ${dep_opt} ${prof_opt} >> ${logfile}"
Chris Sosa6bde1602012-03-15 23:19:57 -0700431 else
432 einfo "Packager not run as nothing was found to package."
433 fi
Chris Masone21512432010-11-15 16:18:57 -0800434}
435
Zdenek Behan361d8142012-03-19 04:30:45 +0100436if [[ "${CROS_WORKON_PROJECT}" == "chromiumos/third_party/autotest" ]]; then
437 # Using main autotest repo. Automatically restricting checkout.
438 # Note that this does not happen if the inherit is done prior to setting
439 # CROS_WORKON_* variables.
440 autotest_restrict_workon_subdirs
441fi
442
Chris Sosaccb6c8b2012-03-09 10:47:32 -0800443EXPORT_FUNCTIONS src_compile src_prepare src_install pkg_postinst