Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 1 | # 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 Keshet | 4144c8d | 2013-07-22 10:52:53 -0700 | [diff] [blame] | 9 | inherit cros-constants |
| 10 | |
Zdenek Behan | 9e98f32 | 2010-08-26 18:56:54 -0700 | [diff] [blame] | 11 | RDEPEND="( autotest? ( >=chromeos-base/autotest-0.0.1-r3 ) )" |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 12 | |
Zdenek Behan | 302e748 | 2011-02-01 21:58:52 +0100 | [diff] [blame] | 13 | IUSE="+buildcheck autotest opengles" |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 14 | |
| 15 | # Ensure the configures run by autotest pick up the right config.site |
Zdenek Behan | 99bf584 | 2010-08-04 17:23:38 -0700 | [diff] [blame] | 16 | export CONFIG_SITE="/usr/share/config.site" |
| 17 | export AUTOTEST_WORKDIR="${WORKDIR}/autotest-work" |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 18 | |
Zdenek Behan | cd997a3 | 2010-08-20 12:55:44 -0700 | [diff] [blame] | 19 | # @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} |
Alex Miller | 01855e4 | 2014-04-06 22:43:36 -0700 | [diff] [blame] | 24 | : ${AUTOTEST_SERVER_TESTS:=server/tests} |
| 25 | : ${AUTOTEST_SERVER_SITE_TESTS:=server/site_tests} |
Zdenek Behan | 41463c9 | 2010-08-23 12:12:31 -0700 | [diff] [blame] | 26 | : ${AUTOTEST_CONFIG:=client/config} |
| 27 | : ${AUTOTEST_DEPS:=client/deps} |
| 28 | : ${AUTOTEST_PROFILERS:=client/profilers} |
| 29 | |
| 30 | # @ECLASS-VARIABLE: AUTOTEST_*_LIST |
| 31 | # @DESCRIPTION: |
| 32 | # The list of deps/configs/profilers provided with this package |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 33 | : ${AUTOTEST_CONFIG_LIST:=} |
| 34 | : ${AUTOTEST_DEPS_LIST:=} |
| 35 | : ${AUTOTEST_PROFILERS_LIST:=} |
Zdenek Behan | cd997a3 | 2010-08-20 12:55:44 -0700 | [diff] [blame] | 36 | |
Zdenek Behan | d012b76 | 2010-09-01 21:22:26 -0700 | [diff] [blame] | 37 | # @ECLASS-VARIABLE: AUTOTEST_FORCE_LIST |
| 38 | # @DESCRIPTION: |
| 39 | # Sometimes we just want to forget about useflags and build what's inside |
| 40 | : ${AUTOTEST_FORCE_TEST_LIST:=} |
| 41 | |
Zdenek Behan | b1f7c89 | 2010-09-22 12:25:38 -0700 | [diff] [blame] | 42 | # @ECLASS-VARIABLE: AUTOTEST_FILE_MASK |
| 43 | # @DESCRIPTION: |
| 44 | # The list of 'find' expressions to find in the resulting image and delete |
| 45 | : ${AUTOTEST_FILE_MASK:=} |
| 46 | |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 47 | fast_cp() { |
Zdenek Behan | 7922d13 | 2010-09-24 14:18:05 -0700 | [diff] [blame] | 48 | cp -l "$@" || cp "$@" |
| 49 | } |
| 50 | |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 51 | get_test_list() { |
Zdenek Behan | d012b76 | 2010-09-01 21:22:26 -0700 | [diff] [blame] | 52 | if [ -n "${AUTOTEST_FORCE_TEST_LIST}" ]; then |
| 53 | # list forced |
| 54 | echo "${AUTOTEST_FORCE_TEST_LIST}" |
| 55 | return |
| 56 | fi |
| 57 | |
| 58 | # we cache the result of this operation in AUTOTEST_TESTS, |
| 59 | # because it's expensive and does not change over the course of one ebuild run |
Albert Chaulk | 85eeef5 | 2014-01-08 15:26:33 -0330 | [diff] [blame] | 60 | local tests=$(portageq use_reduce "${IUSE_TESTS[*]}") |
| 61 | local result="${tests//[+-]tests_/}" |
Zdenek Behan | d012b76 | 2010-09-01 21:22:26 -0700 | [diff] [blame] | 62 | result="${result//tests_/}" |
| 63 | |
| 64 | result=$(for test in ${result}; do use tests_${test} && echo -n "${test} "; done) |
| 65 | echo "${result}" |
| 66 | } |
| 67 | |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 68 | # Pythonify the list of packages by doing the equivalent of ','.join(args) |
| 69 | pythonify_test_list() { |
| 70 | local result=$(printf '%s,' "$@") |
| 71 | echo ${result%,} |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 72 | } |
| 73 | |
| 74 | # Create python package init files for top level test case dirs. |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 75 | touch_init_py() { |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 76 | local dirs=${1} |
| 77 | for base_dir in $dirs |
| 78 | do |
| 79 | local sub_dirs="$(find ${base_dir} -maxdepth 1 -type d)" |
| 80 | for sub_dir in ${sub_dirs} |
| 81 | do |
| 82 | touch ${sub_dir}/__init__.py |
| 83 | done |
| 84 | touch ${base_dir}/__init__.py |
| 85 | done |
| 86 | } |
| 87 | |
Zdenek Behan | 361d814 | 2012-03-19 04:30:45 +0100 | [diff] [blame] | 88 | # Exports a CROS_WORKON_SUBDIRS_TO_COPY variable to ensure that only the |
| 89 | # necessary files will be copied. This cannot be applied globally, as some |
| 90 | # ebuilds may not have tests only. |
| 91 | autotest_restrict_workon_subdirs() { |
| 92 | CROS_WORKON_SUBDIRS_TO_COPY=() |
| 93 | local var |
| 94 | for var in AUTOTEST_{CLIENT,SERVER}_{TESTS,SITE_TESTS} \ |
| 95 | AUTOTEST_{CONFIG,DEPS,PROFILERS}; do |
| 96 | CROS_WORKON_SUBDIRS_TO_COPY+=( ${!var} ) |
| 97 | done |
| 98 | } |
| 99 | |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 100 | setup_cross_toolchain() { |
Mike Frysinger | b1eda9e | 2012-03-08 14:56:18 -0500 | [diff] [blame] | 101 | tc-export CC CXX AR RANLIB LD NM STRIP PKG_CONFIG |
| 102 | export CCFLAGS="$CFLAGS" |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 103 | } |
| 104 | |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 105 | create_autotest_workdir() { |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 106 | local dst=${1} |
| 107 | |
| 108 | # create a working enviroment for pre-building |
Aviv Keshet | 4144c8d | 2013-07-22 10:52:53 -0700 | [diff] [blame] | 109 | ln -sf "${SYSROOT}"${AUTOTEST_BASE}/{conmux,tko,global_config.ini,shadow_config.ini} "${dst}"/ |
Zdenek Behan | 99bf584 | 2010-08-04 17:23:38 -0700 | [diff] [blame] | 110 | |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 111 | # NOTE: in order to make autotest not notice it's running from /usr/local/, we need |
| 112 | # to make sure the binaries are real, because they do the path magic |
| 113 | local root_path base_path |
Chris Masone | 2151243 | 2010-11-15 16:18:57 -0800 | [diff] [blame] | 114 | for base_path in utils server; do |
Aviv Keshet | 4144c8d | 2013-07-22 10:52:53 -0700 | [diff] [blame] | 115 | root_path="${SYSROOT}${AUTOTEST_BASE}/${base_path}" |
Chris Masone | 2151243 | 2010-11-15 16:18:57 -0800 | [diff] [blame] | 116 | mkdir -p "${dst}/${base_path}" |
| 117 | for entry in $(ls "${root_path}"); do |
Zdenek Behan | 7e9e32f | 2012-02-28 03:15:46 +0100 | [diff] [blame] | 118 | # Take all important binaries from SYSROOT install, make a copy. |
| 119 | if [ -d "${root_path}/${entry}" ]; then |
| 120 | # Ignore anything that has already been put in place by |
| 121 | # something else. This will typically be server/{site_tests,tests}. |
| 122 | if ! [ -e "${dst}/${base_path}/${entry}" ]; then |
| 123 | ln -sf "${root_path}/${entry}" "${dst}/${base_path}/" |
| 124 | fi |
Chris Masone | 2151243 | 2010-11-15 16:18:57 -0800 | [diff] [blame] | 125 | else |
| 126 | cp -f ${root_path}/${entry} ${dst}/${base_path}/ |
| 127 | fi |
| 128 | done |
| 129 | done |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 130 | for base_path in client client/bin; do |
Aviv Keshet | 4144c8d | 2013-07-22 10:52:53 -0700 | [diff] [blame] | 131 | root_path="${SYSROOT}${AUTOTEST_BASE}/${base_path}" |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 132 | mkdir -p "${dst}/${base_path}" |
| 133 | |
Zdenek Behan | 451e07f | 2010-08-06 11:25:37 -0700 | [diff] [blame] | 134 | # Skip bin, because it is processed separately, and test-provided dirs |
| 135 | # Also don't symlink to packages, because that kills the build |
Zdenek Behan | 41463c9 | 2010-08-23 12:12:31 -0700 | [diff] [blame] | 136 | for entry in $(ls "${root_path}" | \ |
| 137 | grep -v "\(bin\|tests\|site_tests\|config\|deps\|profilers\|packages\)$"); do |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 138 | ln -sf "${root_path}/${entry}" "${dst}/${base_path}/" |
| 139 | done |
| 140 | done |
| 141 | # replace the important binaries with real copies |
| 142 | for base_path in autotest autotest_client; do |
Aviv Keshet | 4144c8d | 2013-07-22 10:52:53 -0700 | [diff] [blame] | 143 | root_path="${SYSROOT}${AUTOTEST_BASE}/client/bin/${base_path}" |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 144 | rm "${dst}/client/bin/${base_path}" |
| 145 | cp -f ${root_path} "${dst}/client/bin/${base_path}" |
| 146 | done |
Zdenek Behan | 448ddaa | 2010-08-24 11:18:50 -0700 | [diff] [blame] | 147 | |
| 148 | # Selectively pull in deps that are not provided by the current test package |
| 149 | for base_path in config deps profilers; do |
Aviv Keshet | 4144c8d | 2013-07-22 10:52:53 -0700 | [diff] [blame] | 150 | for dir in "${SYSROOT}${AUTOTEST_BASE}/client/${base_path}"/*; do |
Zdenek Behan | 448ddaa | 2010-08-24 11:18:50 -0700 | [diff] [blame] | 151 | if [ -d "${dir}" ] && \ |
| 152 | ! [ -d "${AUTOTEST_WORKDIR}/client/${base_path}/$(basename ${dir})" ]; then |
| 153 | # directory does not exist, create a symlink |
| 154 | ln -sf "${dir}" "${AUTOTEST_WORKDIR}/client/${base_path}/$(basename ${dir})" |
| 155 | fi |
| 156 | done |
| 157 | done |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 158 | } |
| 159 | |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 160 | print_test_dirs() { |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 161 | local testroot="${1}" |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 162 | local ignore_test_contents="${2}" |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 163 | |
| 164 | pushd "${testroot}" 1> /dev/null |
| 165 | for test in *; do |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 166 | if [ -d "${test}" ] && [ -n "${ignore_test_contents}" -o \ |
| 167 | -f "${test}/${test}".py ]; then |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 168 | echo "${test}" |
| 169 | fi |
| 170 | done |
| 171 | popd 1> /dev/null |
| 172 | } |
| 173 | |
Zdenek Behan | eee7bc2 | 2010-08-20 18:33:13 -0700 | [diff] [blame] | 174 | # checks IUSE_TESTS and sees if at least one of these is enabled |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 175 | are_we_used() { |
Zdenek Behan | 14ae489 | 2010-08-26 15:25:30 -0700 | [diff] [blame] | 176 | if ! use autotest; then |
| 177 | # unused |
| 178 | return 1 |
| 179 | fi |
| 180 | |
Zdenek Behan | d012b76 | 2010-09-01 21:22:26 -0700 | [diff] [blame] | 181 | [ -n "$(get_test_list)" ] && return 0 |
Zdenek Behan | eee7bc2 | 2010-08-20 18:33:13 -0700 | [diff] [blame] | 182 | |
| 183 | # unused |
| 184 | return 1 |
| 185 | } |
| 186 | |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 187 | autotest_src_prepare() { |
Zdenek Behan | eee7bc2 | 2010-08-20 18:33:13 -0700 | [diff] [blame] | 188 | are_we_used || return 0 |
| 189 | einfo "Preparing tests" |
| 190 | |
| 191 | # FIXME: These directories are needed, autotest quietly dies if |
| 192 | # they don't even exist. They may, however, stay empty. |
Zdenek Behan | c02fc47 | 2010-08-13 12:55:07 -0700 | [diff] [blame] | 193 | mkdir -p "${AUTOTEST_WORKDIR}"/client/tests |
| 194 | mkdir -p "${AUTOTEST_WORKDIR}"/client/site_tests |
Zdenek Behan | 41463c9 | 2010-08-23 12:12:31 -0700 | [diff] [blame] | 195 | mkdir -p "${AUTOTEST_WORKDIR}"/client/config |
| 196 | mkdir -p "${AUTOTEST_WORKDIR}"/client/deps |
| 197 | mkdir -p "${AUTOTEST_WORKDIR}"/client/profilers |
Alex Miller | 01855e4 | 2014-04-06 22:43:36 -0700 | [diff] [blame] | 198 | mkdir -p "${AUTOTEST_WORKDIR}"/server/tests |
| 199 | mkdir -p "${AUTOTEST_WORKDIR}"/server/site_tests |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 200 | |
Zdenek Behan | d012b76 | 2010-09-01 21:22:26 -0700 | [diff] [blame] | 201 | TEST_LIST=$(get_test_list) |
| 202 | |
Zdenek Behan | 448ddaa | 2010-08-24 11:18:50 -0700 | [diff] [blame] | 203 | # Pull in the individual test cases. |
Zdenek Behan | 31315b3 | 2010-08-05 16:34:39 -0700 | [diff] [blame] | 204 | for l1 in client server; do |
| 205 | for l2 in site_tests tests; do |
Zdenek Behan | cd997a3 | 2010-08-20 12:55:44 -0700 | [diff] [blame] | 206 | # pick up the indicated location of test sources |
| 207 | eval srcdir=${WORKDIR}/${P}/\${AUTOTEST_${l1^^*}_${l2^^*}} |
| 208 | |
Zdenek Behan | d012b76 | 2010-09-01 21:22:26 -0700 | [diff] [blame] | 209 | # test does have this directory |
| 210 | for test in ${TEST_LIST}; do |
| 211 | if [ -d "${srcdir}/${test}" ]; then |
Zdenek Behan | 7922d13 | 2010-09-24 14:18:05 -0700 | [diff] [blame] | 212 | fast_cp -fpr "${srcdir}/${test}" "${AUTOTEST_WORKDIR}/${l1}/${l2}"/ || die |
Zdenek Behan | d012b76 | 2010-09-01 21:22:26 -0700 | [diff] [blame] | 213 | fi |
| 214 | done |
Zdenek Behan | 31315b3 | 2010-08-05 16:34:39 -0700 | [diff] [blame] | 215 | done |
| 216 | done |
Zdenek Behan | 99bf584 | 2010-08-04 17:23:38 -0700 | [diff] [blame] | 217 | |
Zdenek Behan | 448ddaa | 2010-08-24 11:18:50 -0700 | [diff] [blame] | 218 | # Pull in all the deps provided by this package, selectively. |
Zdenek Behan | 41463c9 | 2010-08-23 12:12:31 -0700 | [diff] [blame] | 219 | for l2 in config deps profilers; do |
| 220 | # pick up the indicated location of test sources |
| 221 | eval srcdir=${WORKDIR}/${P}/\${AUTOTEST_${l2^^*}} |
| 222 | |
| 223 | if [ -d "${srcdir}" ]; then # test does have this directory |
| 224 | pushd "${srcdir}" 1> /dev/null |
| 225 | eval deplist=\${AUTOTEST_${l2^^*}_LIST} |
| 226 | |
| 227 | if [ "${deplist}" = "*" ]; then |
Zdenek Behan | 7922d13 | 2010-09-24 14:18:05 -0700 | [diff] [blame] | 228 | fast_cp -fpr * "${AUTOTEST_WORKDIR}/client/${l2}" |
Zdenek Behan | 41463c9 | 2010-08-23 12:12:31 -0700 | [diff] [blame] | 229 | else |
| 230 | for dir in ${deplist}; do |
Zdenek Behan | 7922d13 | 2010-09-24 14:18:05 -0700 | [diff] [blame] | 231 | fast_cp -fpr "${dir}" "${AUTOTEST_WORKDIR}/client/${l2}"/ || die |
Zdenek Behan | 41463c9 | 2010-08-23 12:12:31 -0700 | [diff] [blame] | 232 | done |
| 233 | fi |
| 234 | popd 1> /dev/null |
| 235 | fi |
| 236 | done |
| 237 | |
Zdenek Behan | 474fbae | 2010-08-20 21:13:22 -0700 | [diff] [blame] | 238 | # FIXME: We'd like if this were not necessary, and autotest supported out-of-tree build |
Zdenek Behan | 99bf584 | 2010-08-04 17:23:38 -0700 | [diff] [blame] | 239 | create_autotest_workdir "${AUTOTEST_WORKDIR}" |
Zdenek Behan | eee7bc2 | 2010-08-20 18:33:13 -0700 | [diff] [blame] | 240 | |
Zdenek Behan | f93c208a | 2010-09-21 18:53:58 -0700 | [diff] [blame] | 241 | # Each test directory needs to be visited and have an __init__.py created. |
| 242 | # However, that only applies to the directories which have a main .py file. |
Zdenek Behan | edb527a | 2010-09-22 12:24:14 -0700 | [diff] [blame] | 243 | pushd "${AUTOTEST_WORKDIR}" > /dev/null || die "AUTOTEST_WORKDIR does not exist?!" |
Alex Miller | 01855e4 | 2014-04-06 22:43:36 -0700 | [diff] [blame] | 244 | for dir in client/tests client/site_tests server/tests server/site_tests; do |
Zdenek Behan | edb527a | 2010-09-22 12:24:14 -0700 | [diff] [blame] | 245 | pushd "${dir}" > /dev/null || continue |
Zdenek Behan | f93c208a | 2010-09-21 18:53:58 -0700 | [diff] [blame] | 246 | for sub in *; do |
| 247 | [ -f "${sub}/${sub}.py" ] || continue |
Zdenek Behan | 1ec164a | 2010-08-17 19:06:31 -0700 | [diff] [blame] | 248 | |
Zdenek Behan | f93c208a | 2010-09-21 18:53:58 -0700 | [diff] [blame] | 249 | touch_init_py ${sub} |
| 250 | done |
Zdenek Behan | edb527a | 2010-09-22 12:24:14 -0700 | [diff] [blame] | 251 | popd > /dev/null |
Zdenek Behan | 1ec164a | 2010-08-17 19:06:31 -0700 | [diff] [blame] | 252 | done |
Zdenek Behan | edb527a | 2010-09-22 12:24:14 -0700 | [diff] [blame] | 253 | popd > /dev/null |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 254 | |
| 255 | # Cleanup checked-in binaries that don't support the target architecture |
| 256 | [[ ${E_MACHINE} == "" ]] && return 0; |
Zdenek Behan | 092f463 | 2010-09-21 19:34:01 -0700 | [diff] [blame] | 257 | rm -fv $( scanelf -RmyBF%a "${AUTOTEST_WORKDIR}" | grep -v -e ^${E_MACHINE} ) |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 258 | } |
| 259 | |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 260 | autotest_src_compile() { |
Zdenek Behan | 48096a8 | 2010-09-23 19:39:26 -0700 | [diff] [blame] | 261 | if ! are_we_used; then |
| 262 | ewarn "***************************************************************" |
| 263 | ewarn "* Not building any tests, because the requested list is empty *" |
| 264 | ewarn "***************************************************************" |
| 265 | return 0 |
| 266 | fi |
Zdenek Behan | eee7bc2 | 2010-08-20 18:33:13 -0700 | [diff] [blame] | 267 | einfo "Compiling tests" |
| 268 | |
Zdenek Behan | 31315b3 | 2010-08-05 16:34:39 -0700 | [diff] [blame] | 269 | pushd "${AUTOTEST_WORKDIR}" 1> /dev/null |
Zdenek Behan | 99bf584 | 2010-08-04 17:23:38 -0700 | [diff] [blame] | 270 | |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 271 | setup_cross_toolchain |
| 272 | |
| 273 | if use opengles ; then |
| 274 | graphics_backend=OPENGLES |
| 275 | else |
| 276 | graphics_backend=OPENGL |
| 277 | fi |
| 278 | |
Zdenek Behan | 9e979bb | 2010-09-23 17:32:05 -0700 | [diff] [blame] | 279 | # HACK: Some of the autotests depend on SYSROOT being defined, and die |
| 280 | # a gruesome death if it isn't. But SYSROOT does not need to exist, for |
| 281 | # example on the host, it doesn't. Let's define a compatible variable |
| 282 | # here in case we have none. |
| 283 | export SYSROOT=${SYSROOT:-"/"} |
| 284 | |
Zdenek Behan | 8ad6525 | 2010-09-07 12:35:19 -0700 | [diff] [blame] | 285 | # This only prints the tests that have the associated .py |
| 286 | # (and therefore a setup function) |
| 287 | local prebuild_test_dirs=" |
Chris Sosa | 1767b53 | 2012-11-09 15:13:15 -0800 | [diff] [blame] | 288 | client/tests client/site_tests" |
Zdenek Behan | 8ad6525 | 2010-09-07 12:35:19 -0700 | [diff] [blame] | 289 | TESTS=$(\ |
| 290 | for dir in ${prebuild_test_dirs}; do |
| 291 | print_test_dirs "${AUTOTEST_WORKDIR}/${dir}" |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 292 | done | sort -u) |
Zdenek Behan | 9afd0a3 | 2011-01-21 01:47:02 +0100 | [diff] [blame] | 293 | NR_TESTS=$(echo ${TESTS}|wc -w) |
| 294 | if ! [ "${NR_TESTS}" = "0" ]; then |
| 295 | einfo "Building tests (${NR_TESTS}):" |
| 296 | einfo "${TESTS}" |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 297 | |
Zdenek Behan | 9afd0a3 | 2011-01-21 01:47:02 +0100 | [diff] [blame] | 298 | NORMAL=$(echo -e "\e[0m") |
| 299 | GREEN=$(echo -e "\e[1;32m") |
| 300 | RED=$(echo -e "\e[1;31m") |
Zdenek Behan | 402fea0 | 2010-09-14 13:50:09 -0700 | [diff] [blame] | 301 | |
Zdenek Behan | 9afd0a3 | 2011-01-21 01:47:02 +0100 | [diff] [blame] | 302 | # Call autotest to prebuild all test cases. |
| 303 | # Parse output through a colorifying sed script |
| 304 | ( GRAPHICS_BACKEND="$graphics_backend" LOGNAME=${SUDO_USER} \ |
| 305 | client/bin/autotest_client --quiet \ |
| 306 | --client_test_setup=$(pythonify_test_list ${TESTS}) \ |
| 307 | || ! use buildcheck || die "Tests failed to build." |
| 308 | ) | sed -e "s/\(INFO:root:setup\)/${GREEN}* \1${NORMAL}/" \ |
| 309 | -e "s/\(ERROR:root:\[.*\]\)/${RED}\1${NORMAL}/" |
| 310 | else |
| 311 | einfo "No tests to prebuild, skipping" |
| 312 | fi |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 313 | |
| 314 | # Cleanup some temp files after compiling |
Zdenek Behan | 7c162bb | 2012-05-14 18:42:15 +0200 | [diff] [blame] | 315 | for mask in '*.[do]' '*.pyc' ${AUTOTEST_FILE_MASK}; do |
Zdenek Behan | b1f7c89 | 2010-09-22 12:25:38 -0700 | [diff] [blame] | 316 | einfo "Purging ${mask}" |
| 317 | find . -name "${mask}" -delete |
| 318 | done |
Zdenek Behan | 31315b3 | 2010-08-05 16:34:39 -0700 | [diff] [blame] | 319 | |
| 320 | popd 1> /dev/null |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 321 | } |
| 322 | |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 323 | autotest_src_install() { |
Zdenek Behan | eee7bc2 | 2010-08-20 18:33:13 -0700 | [diff] [blame] | 324 | are_we_used || return 0 |
| 325 | einfo "Installing tests" |
| 326 | |
Zdenek Behan | 448ddaa | 2010-08-24 11:18:50 -0700 | [diff] [blame] | 327 | # Install all test cases, after setup has been called on them. |
| 328 | # We install everything, because nothing else is copied into the |
| 329 | # testcase directories besides what this package provides. |
Zdenek Behan | 1ec164a | 2010-08-17 19:06:31 -0700 | [diff] [blame] | 330 | local instdirs=" |
| 331 | client/tests |
Alex Miller | 01855e4 | 2014-04-06 22:43:36 -0700 | [diff] [blame] | 332 | client/site_tests |
| 333 | server/tests |
| 334 | server/site_tests" |
Zdenek Behan | 1ec164a | 2010-08-17 19:06:31 -0700 | [diff] [blame] | 335 | |
| 336 | for dir in ${instdirs}; do |
Zdenek Behan | cd997a3 | 2010-08-20 12:55:44 -0700 | [diff] [blame] | 337 | [ -d "${AUTOTEST_WORKDIR}/${dir}" ] || continue |
Zdenek Behan | 1ec164a | 2010-08-17 19:06:31 -0700 | [diff] [blame] | 338 | |
Aviv Keshet | 4144c8d | 2013-07-22 10:52:53 -0700 | [diff] [blame] | 339 | insinto ${AUTOTEST_BASE}/$(dirname ${dir}) |
Zdenek Behan | 1ec164a | 2010-08-17 19:06:31 -0700 | [diff] [blame] | 340 | doins -r "${AUTOTEST_WORKDIR}/${dir}" |
| 341 | done |
| 342 | |
Zdenek Behan | 448ddaa | 2010-08-24 11:18:50 -0700 | [diff] [blame] | 343 | # Install the deps, configs, profilers. |
| 344 | # Difference from above is, we don't install the whole thing, just |
| 345 | # the stuff provided by this package, by looking at AUTOTEST_*_LIST. |
| 346 | instdirs=" |
| 347 | config |
| 348 | deps |
| 349 | profilers" |
| 350 | |
| 351 | for dir in ${instdirs}; do |
| 352 | [ -d "${AUTOTEST_WORKDIR}/client/${dir}" ] || continue |
| 353 | |
Aviv Keshet | 4144c8d | 2013-07-22 10:52:53 -0700 | [diff] [blame] | 354 | insinto ${AUTOTEST_BASE}/client/${dir} |
Zdenek Behan | 448ddaa | 2010-08-24 11:18:50 -0700 | [diff] [blame] | 355 | |
Aviv Keshet | 605cfb1 | 2014-02-12 14:52:23 -0800 | [diff] [blame] | 356 | # Capitalize the string dir (e.g. profilers -> PROFILERS) |
| 357 | # then pull out the value of e.g. AUTOTEST_PROFILERS_LIST |
| 358 | # into provided. |
Zdenek Behan | 448ddaa | 2010-08-24 11:18:50 -0700 | [diff] [blame] | 359 | eval provided=\${AUTOTEST_${dir^^*}_LIST} |
Aviv Keshet | 605cfb1 | 2014-02-12 14:52:23 -0800 | [diff] [blame] | 360 | |
| 361 | # If provided is *, we evaluate the wildcard outselves |
| 362 | # by running `ls` inside of the approriate subdirectory |
| 363 | # of the ebuild workdir. |
Zdenek Behan | 448ddaa | 2010-08-24 11:18:50 -0700 | [diff] [blame] | 364 | if [ "${provided}" = "*" ]; then |
| 365 | if eval pushd "${WORKDIR}/${P}/\${AUTOTEST_${dir^^*}}" &> /dev/null; then |
| 366 | provided=$(ls) |
| 367 | popd 1> /dev/null |
| 368 | else |
| 369 | provided="" |
| 370 | fi |
| 371 | fi |
| 372 | |
| 373 | for item in ${provided}; do |
Aviv Keshet | 605cfb1 | 2014-02-12 14:52:23 -0800 | [diff] [blame] | 374 | local item_path="${AUTOTEST_WORKDIR}/client/${dir}/${item}" |
| 375 | # Warn on files that do not exist, rather than failing. See |
| 376 | # crbug.com/342512 for context. |
| 377 | if [[ -e "${item_path}" ]]; then |
| 378 | doins -r "${item_path}" |
| 379 | else |
| 380 | ewarn "No file ${item_path}, skipping." |
| 381 | fi |
Zdenek Behan | 448ddaa | 2010-08-24 11:18:50 -0700 | [diff] [blame] | 382 | done |
| 383 | done |
| 384 | |
Zdenek Behan | 1ec164a | 2010-08-17 19:06:31 -0700 | [diff] [blame] | 385 | # TODO: Not all needs to be executable, but it's hard to pick selectively. |
| 386 | # The source repo should already contain stuff with the right permissions. |
Aviv Keshet | 4144c8d | 2013-07-22 10:52:53 -0700 | [diff] [blame] | 387 | chmod -R a+x "${D}"${AUTOTEST_BASE}/* |
Zdenek Behan | 12ad1c5 | 2010-08-03 16:34:37 -0700 | [diff] [blame] | 388 | } |
| 389 | |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 390 | autotest_pkg_postinst() { |
Mandeep Singh Baines | 060c2db | 2012-12-07 17:12:31 -0800 | [diff] [blame] | 391 | are_we_used || return 0 |
Aviv Keshet | 4144c8d | 2013-07-22 10:52:53 -0700 | [diff] [blame] | 392 | local root_autotest_dir="${ROOT}${AUTOTEST_BASE}" |
| 393 | local path_to_image="${D}${AUTOTEST_BASE}" |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 394 | # Should only happen when running emerge on a DUT. |
Aviv Keshet | 4144c8d | 2013-07-22 10:52:53 -0700 | [diff] [blame] | 395 | if [ ! -e "${root_autotest_dir}/utils/packager.py" ]; then |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 396 | einfo "Skipping packaging as no autotest installation detected." |
| 397 | return 0 |
| 398 | fi |
Chris Masone | 2151243 | 2010-11-15 16:18:57 -0800 | [diff] [blame] | 399 | |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 400 | # Gather the artifacts we want autotest to package. |
| 401 | local test_opt dep_opt prof_opt |
Chris Sosa | ccb6c8b | 2012-03-09 10:47:32 -0800 | [diff] [blame] | 402 | |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 403 | # Only client tests can be packaged. |
| 404 | local tests_to_package_dirs="client/tests client/site_tests" |
| 405 | local client_tests=$(\ |
| 406 | for dir in ${tests_to_package_dirs}; do |
| 407 | print_test_dirs "${path_to_image}/${dir}" yes |
| 408 | done | sort -u) |
| 409 | |
| 410 | if [ -n "${client_tests}" ] && [ "${client_tests}" != "myfaketest" ]; then |
Aviv Keshet | 28ecfa6 | 2013-09-03 17:42:16 -0700 | [diff] [blame] | 411 | test_opt="--test=$(pythonify_test_list ${client_tests})" |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 412 | fi |
| 413 | |
Aviv Keshet | e90ff5d | 2013-09-10 15:55:06 -0700 | [diff] [blame] | 414 | if [ -n "${AUTOTEST_DEPS_LIST}" ]; then |
| 415 | dep_opt="--dep=$(pythonify_test_list ${AUTOTEST_DEPS_LIST})" |
| 416 | fi |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 417 | |
Aviv Keshet | e90ff5d | 2013-09-10 15:55:06 -0700 | [diff] [blame] | 418 | # For *, we must generate the list of profilers. |
| 419 | if [ "${AUTOTEST_PROFILERS_LIST}" = "*" ]; then |
| 420 | AUTOTEST_PROFILERS_LIST=$(\ |
| 421 | print_test_dirs "${path_to_image}/client/profilers" yes | sort -u) |
| 422 | fi |
| 423 | |
| 424 | if [ -n "${AUTOTEST_PROFILERS_LIST}" ]; then |
| 425 | prof_opt="--profiler=$(pythonify_test_list ${AUTOTEST_PROFILERS_LIST})" |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 426 | fi |
| 427 | |
| 428 | if [ -n "${test_opt}" -o -n "${dep_opt}" -o -n "${prof_opt}" ]; then |
| 429 | einfo "Running packager with options ${test_opt} ${dep_opt} ${prof_opt}" |
Aviv Keshet | dfc4d92 | 2013-09-17 16:32:32 -0700 | [diff] [blame] | 430 | local logfile=${root_autotest_dir}/packages/${CATEGORY}_${PN}.log |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 431 | flock "${root_autotest_dir}/packages" \ |
Zdenek Behan | 7c162bb | 2012-05-14 18:42:15 +0200 | [diff] [blame] | 432 | -c "python -B ${root_autotest_dir}/utils/packager.py \ |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 433 | -r ${root_autotest_dir}/packages \ |
Aviv Keshet | 1616e69 | 2013-09-11 18:19:13 -0700 | [diff] [blame] | 434 | ${test_opt} ${dep_opt} ${prof_opt} upload && \ |
| 435 | echo ${CATEGORY}/${PN} > ${logfile} && \ |
| 436 | echo ${test_opt} ${dep_opt} ${prof_opt} >> ${logfile}" |
Chris Sosa | 6bde160 | 2012-03-15 23:19:57 -0700 | [diff] [blame] | 437 | else |
| 438 | einfo "Packager not run as nothing was found to package." |
| 439 | fi |
Chris Masone | 2151243 | 2010-11-15 16:18:57 -0800 | [diff] [blame] | 440 | } |
| 441 | |
Zdenek Behan | 361d814 | 2012-03-19 04:30:45 +0100 | [diff] [blame] | 442 | if [[ "${CROS_WORKON_PROJECT}" == "chromiumos/third_party/autotest" ]]; then |
| 443 | # Using main autotest repo. Automatically restricting checkout. |
| 444 | # Note that this does not happen if the inherit is done prior to setting |
| 445 | # CROS_WORKON_* variables. |
| 446 | autotest_restrict_workon_subdirs |
| 447 | fi |
| 448 | |
Chris Sosa | ccb6c8b | 2012-03-09 10:47:32 -0800 | [diff] [blame] | 449 | EXPORT_FUNCTIONS src_compile src_prepare src_install pkg_postinst |