xref: /aosp_15_r20/external/webp/infra/common.sh (revision b2055c353e87c8814eb2b6b1b11112a1562253bd)
1# Copyright (c) 2021, Google Inc. All rights reserved.
2#
3# Redistribution and use in source and binary forms, with or without
4# modification, are permitted provided that the following conditions are
5# met:
6#
7#   * Redistributions of source code must retain the above copyright
8#     notice, this list of conditions and the following disclaimer.
9#
10#   * Redistributions in binary form must reproduce the above copyright
11#     notice, this list of conditions and the following disclaimer in
12#     the documentation and/or other materials provided with the
13#     distribution.
14#
15#   * Neither the name of Google nor the names of its contributors may
16#     be used to endorse or promote products derived from this software
17#     without specific prior written permission.
18#
19# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31log_err() {
32  echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $*" >&2
33}
34
35#######################################
36# Create build directory. Build directory will be deleted if it exists.
37# Arguments:
38#   None.
39# Returns:
40#   mkdir result.
41#######################################
42make_build_dir() {
43  if [[ "$#" -ne 1 ]]; then
44    return 1
45  fi
46
47  local build_dir
48  build_dir="$1"
49  rm -rf "${build_dir}"
50  mkdir -p "${build_dir}"
51}
52
53#######################################
54# Cleanup files from the build directory.
55# Globals:
56#   LIBWEBP_ROOT repository's root path.
57# Arguments:
58#   $1 build directory.
59#######################################
60cleanup() {
61  # $1 is not completely removed to allow for binary artifacts to be
62  # extracted.
63  find "${1:?"Build directory not defined"}" \
64    \( -name "*.[ao]" -o -name "*.l[ao]" \) -exec rm -f {} +
65}
66
67#######################################
68# Setup ccache for toolchain.
69# Globals:
70#   PATH
71# Arguments:
72#   None.
73#######################################
74setup_ccache() {
75  if [[ -x "$(command -v ccache)" ]]; then
76    export CCACHE_CPP2=yes
77    export PATH="/usr/lib/ccache:${PATH}"
78  fi
79}
80
81#######################################
82# Detects whether test block should be run in the current test shard.
83# Globals:
84#   TEST_TOTAL_SHARDS: Valid range: [1, N]. Defaults to 1.
85#   TEST_SHARD_INDEX: Valid range: [0, TEST_TOTAL_SHARDS). Defaults to 0.
86#   libwebp_test_id: current test number; incremented with each call.
87# Arguments:
88#   None
89# Returns:
90#   true if the shard is active
91#   false if the shard is inactive
92#######################################
93shard_should_run() {
94  TEST_TOTAL_SHARDS=${TEST_TOTAL_SHARDS:=1}
95  TEST_SHARD_INDEX=${TEST_SHARD_INDEX:=0}
96  libwebp_test_id=${libwebp_test_id:=-1}
97  : $((libwebp_test_id += 1))
98
99  if [[ "${TEST_SHARD_INDEX}" -lt 0 ||
100    "${TEST_SHARD_INDEX}" -ge "${TEST_TOTAL_SHARDS}" ]]; then
101    log_err "Invalid TEST_SHARD_INDEX (${TEST_SHARD_INDEX})!" \
102      "Expected [0, ${TEST_TOTAL_SHARDS})."
103  fi
104
105  [[ "$((libwebp_test_id % TEST_TOTAL_SHARDS))" -eq "${TEST_SHARD_INDEX}" ]]
106}
107