14fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang#!/bin/sh 24fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang## 34fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang## Copyright (c) 2014 The WebM project authors. All Rights Reserved. 44fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang## 54fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang## Use of this source code is governed by a BSD-style license 64fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang## that can be found in the LICENSE file in the root of the source 74fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang## tree. An additional intellectual property rights grant can be found 84fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang## in the file PATENTS. All contributing project authors may 94fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang## be found in the AUTHORS file in the root of the source tree. 104fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang## 114fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang## This file contains shell code shared by test scripts for libvpx tools. 12ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 13ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Use $VPX_TEST_TOOLS_COMMON_SH as a pseudo include guard. 14ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianif [ -z "${VPX_TEST_TOOLS_COMMON_SH}" ]; then 15ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianVPX_TEST_TOOLS_COMMON_SH=included 16ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 174fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangset -e 18ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniandevnull='> /dev/null 2>&1' 19ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianVPX_TEST_PREFIX="" 20ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 21ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianelog() { 22ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian echo "$@" 1>&2 23ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} 24ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 25ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvlog() { 26ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian if [ "${VPX_TEST_VERBOSE_OUTPUT}" = "yes" ]; then 27ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian echo "$@" 28ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian fi 29ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian} 304fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 314fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Sets $VPX_TOOL_TEST to the name specified by positional parameter one. 324fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangtest_begin() { 334fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang VPX_TOOL_TEST="${1}" 344fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 354fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 364fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Clears the VPX_TOOL_TEST variable after confirming that $VPX_TOOL_TEST matches 374fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# positional parameter one. 384fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangtest_end() { 394fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if [ "$1" != "${VPX_TOOL_TEST}" ]; then 404fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo "FAIL completed test mismatch!." 414fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo " completed test: ${1}" 424fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo " active test: ${VPX_TOOL_TEST}." 434fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang return 1 444fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 454fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang VPX_TOOL_TEST='<unset>' 464fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 474fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 484fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Echoes the target configuration being tested. 494fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangtest_configuration_target() { 504fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang vpx_config_mk="${LIBVPX_CONFIG_PATH}/config.mk" 514fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # Find the TOOLCHAIN line, split it using ':=' as the field separator, and 524fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # print the last field to get the value. Then pipe the value to tr to consume 534fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # any leading/trailing spaces while allowing tr to echo the output to stdout. 544fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang awk -F ':=' '/TOOLCHAIN/ { print $NF }' "${vpx_config_mk}" | tr -d ' ' 554fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 564fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 574fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Trap function used for failure reports and tool output directory removal. 584fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# When the contents of $VPX_TOOL_TEST do not match the string '<unset>', reports 594fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# failure of test stored in $VPX_TOOL_TEST. 604fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangcleanup() { 614fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if [ -n "${VPX_TOOL_TEST}" ] && [ "${VPX_TOOL_TEST}" != '<unset>' ]; then 624fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo "FAIL: $VPX_TOOL_TEST" 634fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 644fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if [ -n "${VPX_TEST_OUTPUT_DIR}" ] && [ -d "${VPX_TEST_OUTPUT_DIR}" ]; then 654fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang rm -rf "${VPX_TEST_OUTPUT_DIR}" 664fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 674fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 684fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 694fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Echoes the git hash portion of the VERSION_STRING variable defined in 704fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# $LIBVPX_CONFIG_PATH/config.mk to stdout, or the version number string when 714fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# no git hash is contained in VERSION_STRING. 724fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangconfig_hash() { 734fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang vpx_config_mk="${LIBVPX_CONFIG_PATH}/config.mk" 744fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # Find VERSION_STRING line, split it with "-g" and print the last field to 754fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # output the git hash to stdout. 764fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang vpx_version=$(awk -F -g '/VERSION_STRING/ {print $NF}' "${vpx_config_mk}") 774fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # Handle two situations here: 784fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # 1. The default case: $vpx_version is a git hash, so echo it unchanged. 794fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # 2. When being run a non-dev tree, the -g portion is not present in the 804fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # version string: It's only the version number. 814fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # In this case $vpx_version is something like 'VERSION_STRING=v1.3.0', so 824fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # we echo only what is after the '='. 834fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo "${vpx_version##*=}" 844fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 854fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 864fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Echoes the short form of the current git hash. 874fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangcurrent_hash() { 884fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if git --version > /dev/null 2>&1; then 894fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang (cd "$(dirname "${0}")" 904fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang git rev-parse --short HEAD) 914fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang else 924fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # Return the config hash if git is unavailable: Fail silently, git hashes 934fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # are used only for warnings. 944fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang config_hash 954fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 964fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 974fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 984fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Echoes warnings to stdout when git hash in vpx_config.h does not match the 994fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# current git hash. 1004fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangcheck_git_hashes() { 1014fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang hash_at_configure_time=$(config_hash) 1024fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang hash_now=$(current_hash) 1034fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 1044fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if [ "${hash_at_configure_time}" != "${hash_now}" ]; then 1054fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo "Warning: git hash has changed since last configure." 1064fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 1074fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 1084fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 1094fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# This script requires that the LIBVPX_BIN_PATH, LIBVPX_CONFIG_PATH, and 1104fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# LIBVPX_TEST_DATA_PATH variables are in the environment: Confirm that 1114fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# the variables are set and that they all evaluate to directory paths. 1124fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangverify_vpx_test_environment() { 1134fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if [ ! -d "${LIBVPX_BIN_PATH}" ]; then 1144fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo "The LIBVPX_BIN_PATH environment variable must be set." 1154fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang return 1 1164fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 1174fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if [ ! -d "${LIBVPX_CONFIG_PATH}" ]; then 1184fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo "The LIBVPX_CONFIG_PATH environment variable must be set." 1194fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang return 1 1204fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 1214fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if [ ! -d "${LIBVPX_TEST_DATA_PATH}" ]; then 1224fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo "The LIBVPX_TEST_DATA_PATH environment variable must be set." 1234fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang return 1 1244fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 1254fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 1264fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 1274fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Greps vpx_config.h in LIBVPX_CONFIG_PATH for positional parameter one, which 1284fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# should be a LIBVPX preprocessor flag. Echoes yes to stdout when the feature 1294fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# is available. 1304fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangvpx_config_option_enabled() { 1314fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang vpx_config_option="${1}" 1324fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang vpx_config_file="${LIBVPX_CONFIG_PATH}/vpx_config.h" 1334fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang config_line=$(grep "${vpx_config_option}" "${vpx_config_file}") 1344fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if echo "${config_line}" | egrep -q '1$'; then 1354fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo yes 1364fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 1374fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 1384fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 1394fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Echoes yes when output of test_configuration_target() contains win32 or win64. 1404fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangis_windows_target() { 1414fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if test_configuration_target \ 1424fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang | grep -q -e win32 -e win64 > /dev/null 2>&1; then 1434fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo yes 1444fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 1454fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 1464fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 1474fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Echoes yes to stdout when the file named by positional parameter one exists 1484fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# in LIBVPX_BIN_PATH, and is executable. 1494fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangvpx_tool_available() { 150ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local tool_name="$1" 151ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local tool="${LIBVPX_BIN_PATH}/${tool_name}${VPX_TEST_EXE_SUFFIX}" 152ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian [ -x "${tool}" ] && echo yes 1534fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 1544fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 1554fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Echoes yes to stdout when vpx_config_option_enabled() reports yes for 1564fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# CONFIG_VP8_DECODER. 1574fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangvp8_decode_available() { 1584fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang [ "$(vpx_config_option_enabled CONFIG_VP8_DECODER)" = "yes" ] && echo yes 1594fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 1604fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 1614fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Echoes yes to stdout when vpx_config_option_enabled() reports yes for 1624fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# CONFIG_VP8_ENCODER. 1634fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangvp8_encode_available() { 1644fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang [ "$(vpx_config_option_enabled CONFIG_VP8_ENCODER)" = "yes" ] && echo yes 1654fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 1664fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 1674fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Echoes yes to stdout when vpx_config_option_enabled() reports yes for 1684fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# CONFIG_VP9_DECODER. 1694fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangvp9_decode_available() { 1704fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang [ "$(vpx_config_option_enabled CONFIG_VP9_DECODER)" = "yes" ] && echo yes 1714fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 1724fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 1734fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Echoes yes to stdout when vpx_config_option_enabled() reports yes for 1744fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# CONFIG_VP9_ENCODER. 1754fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangvp9_encode_available() { 1764fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang [ "$(vpx_config_option_enabled CONFIG_VP9_ENCODER)" = "yes" ] && echo yes 1774fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 1784fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 1794fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Echoes yes to stdout when vpx_config_option_enabled() reports yes for 1804fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# CONFIG_WEBM_IO. 1814fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangwebm_io_available() { 1824fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang [ "$(vpx_config_option_enabled CONFIG_WEBM_IO)" = "yes" ] && echo yes 1834fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 1844fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 1854fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Filters strings from positional parameter one using the filter specified by 1864fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# positional parameter two. Filter behavior depends on the presence of a third 1874fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# positional parameter. When parameter three is present, strings that match the 1884fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# filter are excluded. When omitted, strings matching the filter are included. 1894fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# The filtered string is echoed to stdout. 1904fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangfilter_strings() { 1914fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang strings=${1} 1924fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang filter=${2} 1934fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang exclude=${3} 1944fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 1954fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if [ -n "${exclude}" ]; then 1964fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # When positional parameter three exists the caller wants to remove strings. 1974fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # Tell grep to invert matches using the -v argument. 1984fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang exclude='-v' 1994fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang else 2004fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang unset exclude 2014fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 2024fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 2034fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if [ -n "${filter}" ]; then 2044fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang for s in ${strings}; do 2054fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if echo "${s}" | egrep -q ${exclude} "${filter}" > /dev/null 2>&1; then 2064fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang filtered_strings="${filtered_strings} ${s}" 2074fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 2084fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang done 2094fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang else 2104fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang filtered_strings="${strings}" 2114fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 2124fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo "${filtered_strings}" 2134fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 2144fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 2154fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Runs user test functions passed via positional parameters one and two. 2164fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Functions in positional parameter one are treated as environment verification 2174fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# functions and are run unconditionally. Functions in positional parameter two 2184fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# are run according to the rules specified in vpx_test_usage(). 2194fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangrun_tests() { 220ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local env_tests="verify_vpx_test_environment $1" 221ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local tests_to_filter="$2" 222ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local test_name="${VPX_TEST_NAME}" 223ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 224ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian if [ -z "${test_name}" ]; then 225ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian test_name="$(basename "${0%.*}")" 226ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian fi 2274fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 2284fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if [ "${VPX_TEST_RUN_DISABLED_TESTS}" != "yes" ]; then 2294fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # Filter out DISABLED tests. 2304fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang tests_to_filter=$(filter_strings "${tests_to_filter}" ^DISABLED exclude) 2314fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 2324fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 2334fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if [ -n "${VPX_TEST_FILTER}" ]; then 2344fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # Remove tests not matching the user's filter. 2354fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang tests_to_filter=$(filter_strings "${tests_to_filter}" ${VPX_TEST_FILTER}) 2364fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 2374fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 238ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local tests_to_run="${env_tests} ${tests_to_filter}" 2394fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 2404fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang check_git_hashes 2414fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 2424fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang # Run tests. 2434fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang for test in ${tests_to_run}; do 2444fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang test_begin "${test}" 245ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian vlog " RUN ${test}" 2464fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang "${test}" 247ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian vlog " PASS ${test}" 2484fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang test_end "${test}" 2494fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang done 2504fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 251ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian local tested_config="$(test_configuration_target) @ $(current_hash)" 252ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian echo "${test_name}: Done, all tests pass for ${tested_config}." 2534fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 2544fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 2554fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangvpx_test_usage() { 2564fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangcat << EOF 2574fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang Usage: ${0##*/} [arguments] 2584fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --bin-path <path to libvpx binaries directory> 2594fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --config-path <path to libvpx config directory> 2604fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --filter <filter>: User test filter. Only tests matching filter are run. 2614fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --run-disabled-tests: Run disabled tests. 2624fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --help: Display this message and exit. 2634fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --test-data-path <path to libvpx test data directory> 264ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --show-program-output: Shows output from all programs being tested. 265ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --prefix: Allows for a user specified prefix to be inserted before all test 266ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian programs. Grants the ability, for example, to run test programs 267ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian within valgrind. 2684fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --verbose: Verbose output. 2694fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 2704fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang When the --bin-path option is not specified the script attempts to use 2714fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang \$LIBVPX_BIN_PATH and then the current directory. 2724fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 2734fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang When the --config-path option is not specified the script attempts to use 2744fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang \$LIBVPX_CONFIG_PATH and then the current directory. 2754fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 2764fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang When the -test-data-path option is not specified the script attempts to use 2774fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang \$LIBVPX_TEST_DATA_PATH and then the current directory. 2784fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangEOF 2794fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 2804fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 2814fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Returns non-zero (failure) when required environment variables are empty 2824fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# strings. 2834fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangvpx_test_check_environment() { 2844fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang if [ -z "${LIBVPX_BIN_PATH}" ] || \ 2854fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang [ -z "${LIBVPX_CONFIG_PATH}" ] || \ 2864fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang [ -z "${LIBVPX_TEST_DATA_PATH}" ]; then 2874fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang return 1 2884fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang fi 2894fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang} 2904fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 2914fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Parse the command line. 2924fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangwhile [ -n "$1" ]; do 2934fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang case "$1" in 2944fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --bin-path) 2954fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang LIBVPX_BIN_PATH="$2" 2964fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang shift 2974fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang ;; 2984fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --config-path) 2994fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang LIBVPX_CONFIG_PATH="$2" 3004fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang shift 3014fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang ;; 3024fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --filter) 3034fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang VPX_TEST_FILTER="$2" 3044fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang shift 3054fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang ;; 3064fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --run-disabled-tests) 3074fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang VPX_TEST_RUN_DISABLED_TESTS=yes 3084fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang ;; 3094fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --help) 3104fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang vpx_test_usage 3114fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang exit 3124fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang ;; 3134fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --test-data-path) 3144fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang LIBVPX_TEST_DATA_PATH="$2" 3154fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang shift 3164fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang ;; 317ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --prefix) 318ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VPX_TEST_PREFIX="$2" 319ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian shift 320ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 3214fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang --verbose) 3224fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang VPX_TEST_VERBOSE_OUTPUT=yes 3234fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang ;; 324ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian --show-program-output) 325ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian devnull= 326ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian ;; 3274fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang *) 3284fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang vpx_test_usage 3294fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang exit 1 3304fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang ;; 3314fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang esac 3324fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang shift 3334fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangdone 3344fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 3354fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Handle running the tests from a build directory without arguments when running 3364fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# the tests on *nix/macosx. 3374fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangLIBVPX_BIN_PATH="${LIBVPX_BIN_PATH:-.}" 3384fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangLIBVPX_CONFIG_PATH="${LIBVPX_CONFIG_PATH:-.}" 3394fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangLIBVPX_TEST_DATA_PATH="${LIBVPX_TEST_DATA_PATH:-.}" 3404fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 3414fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang# Create a temporary directory for output files, and a trap to clean it up. 3424fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangif [ -n "${TMPDIR}" ]; then 3434fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang VPX_TEST_TEMP_ROOT="${TMPDIR}" 3444fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangelif [ -n "${TEMPDIR}" ]; then 3454fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang VPX_TEST_TEMP_ROOT="${TEMPDIR}" 3464fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangelse 3474fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang VPX_TEST_TEMP_ROOT=/tmp 3484fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangfi 3494fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 3504fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangVPX_TEST_RAND=$(awk 'BEGIN { srand(); printf "%d\n",(rand() * 32768)}') 3514fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangVPX_TEST_OUTPUT_DIR="${VPX_TEST_TEMP_ROOT}/vpx_test_${VPX_TEST_RAND}" 3524fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 3534fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangif ! mkdir -p "${VPX_TEST_OUTPUT_DIR}" || \ 3544fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang [ ! -d "${VPX_TEST_OUTPUT_DIR}" ]; then 3554fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo "${0##*/}: Cannot create output directory, giving up." 3564fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang echo "${0##*/}: VPX_TEST_OUTPUT_DIR=${VPX_TEST_OUTPUT_DIR}" 3574fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang exit 1 3584fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangfi 3594fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 360ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianif [ "$(is_windows_target)" = "yes" ]; then 361ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VPX_TEST_EXE_SUFFIX=".exe" 362ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianfi 363ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 364ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Variables shared by tests. 365ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianVP8_IVF_FILE="${LIBVPX_TEST_DATA_PATH}/vp80-00-comprehensive-001.ivf" 366ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianVP9_IVF_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-09-subpixel-00.ivf" 367ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 368ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianVP9_WEBM_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-00-quantizer-00.webm" 369ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 370ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianYUV_RAW_INPUT="${LIBVPX_TEST_DATA_PATH}/hantro_collage_w352h288.yuv" 371ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianYUV_RAW_INPUT_WIDTH=352 372ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianYUV_RAW_INPUT_HEIGHT=288 373ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 374ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian# Setup a trap function to clean up after tests complete. 3754fb68e5dd4e93c7599dc905d861de11ac39c5585hkuangtrap cleanup EXIT 3764fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang 377ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvlog "$(basename "${0%.*}") test configuration: 3784fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang LIBVPX_BIN_PATH=${LIBVPX_BIN_PATH} 3794fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang LIBVPX_CONFIG_PATH=${LIBVPX_CONFIG_PATH} 3804fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang LIBVPX_TEST_DATA_PATH=${LIBVPX_TEST_DATA_PATH} 381ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VP8_IVF_FILE=${VP8_IVF_FILE} 382ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VP9_IVF_FILE=${VP9_IVF_FILE} 383ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VP9_WEBM_FILE=${VP9_WEBM_FILE} 384ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VPX_TEST_EXE_SUFFIX=${VPX_TEST_EXE_SUFFIX} 3854fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang VPX_TEST_FILTER=${VPX_TEST_FILTER} 386ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VPX_TEST_OUTPUT_DIR=${VPX_TEST_OUTPUT_DIR} 387ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VPX_TEST_PREFIX=${VPX_TEST_PREFIX} 388ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VPX_TEST_RAND=${VPX_TEST_RAND} 3894fb68e5dd4e93c7599dc905d861de11ac39c5585hkuang VPX_TEST_RUN_DISABLED_TESTS=${VPX_TEST_RUN_DISABLED_TESTS} 390ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VPX_TEST_SHOW_PROGRAM_OUTPUT=${VPX_TEST_SHOW_PROGRAM_OUTPUT} 391ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VPX_TEST_TEMP_ROOT=${VPX_TEST_TEMP_ROOT} 392ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian VPX_TEST_VERBOSE_OUTPUT=${VPX_TEST_VERBOSE_OUTPUT} 393ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian YUV_RAW_INPUT=${YUV_RAW_INPUT} 394ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian YUV_RAW_INPUT_WIDTH=${YUV_RAW_INPUT_WIDTH} 395ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian YUV_RAW_INPUT_HEIGHT=${YUV_RAW_INPUT_HEIGHT}" 396ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian 397ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianfi # End $VPX_TEST_TOOLS_COMMON_SH pseudo include guard. 398