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