xref: /aosp_15_r20/external/webp/infra/run_static_analysis.sh (revision b2055c353e87c8814eb2b6b1b11112a1562253bd)
1*b2055c35SXin Li#!/bin/bash
2*b2055c35SXin Li# Copyright (c) 2021, Google Inc. All rights reserved.
3*b2055c35SXin Li#
4*b2055c35SXin Li# Redistribution and use in source and binary forms, with or without
5*b2055c35SXin Li# modification, are permitted provided that the following conditions are
6*b2055c35SXin Li# met:
7*b2055c35SXin Li#
8*b2055c35SXin Li#   * Redistributions of source code must retain the above copyright
9*b2055c35SXin Li#     notice, this list of conditions and the following disclaimer.
10*b2055c35SXin Li#
11*b2055c35SXin Li#   * Redistributions in binary form must reproduce the above copyright
12*b2055c35SXin Li#     notice, this list of conditions and the following disclaimer in
13*b2055c35SXin Li#     the documentation and/or other materials provided with the
14*b2055c35SXin Li#     distribution.
15*b2055c35SXin Li#
16*b2055c35SXin Li#   * Neither the name of Google nor the names of its contributors may
17*b2055c35SXin Li#     be used to endorse or promote products derived from this software
18*b2055c35SXin Li#     without specific prior written permission.
19*b2055c35SXin Li#
20*b2055c35SXin Li# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21*b2055c35SXin Li# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22*b2055c35SXin Li# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23*b2055c35SXin Li# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24*b2055c35SXin Li# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25*b2055c35SXin Li# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26*b2055c35SXin Li# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27*b2055c35SXin Li# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28*b2055c35SXin Li# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29*b2055c35SXin Li# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30*b2055c35SXin Li# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31*b2055c35SXin Li
32*b2055c35SXin Liset -xe
33*b2055c35SXin Li
34*b2055c35SXin LiLIBWEBP_ROOT="$(realpath "$(dirname "$0")/..")"
35*b2055c35SXin Lireadonly LIBWEBP_ROOT
36*b2055c35SXin Lireadonly WORKSPACE=${WORKSPACE:-"$(mktemp -d -t webp.scanbuild.XXX)"}
37*b2055c35SXin Li
38*b2055c35SXin Li# shellcheck source=infra/common.sh
39*b2055c35SXin Lisource "${LIBWEBP_ROOT}/infra/common.sh"
40*b2055c35SXin Li
41*b2055c35SXin Liusage() {
42*b2055c35SXin Li  cat << EOF
43*b2055c35SXin LiUsage: $(basename "$0") MODE
44*b2055c35SXin LiOptions:
45*b2055c35SXin LiMODE supported scan modes: (shallow|deep)
46*b2055c35SXin LiEnvironment variables:
47*b2055c35SXin LiWORKSPACE directory where the build is done.
48*b2055c35SXin LiEOF
49*b2055c35SXin Li}
50*b2055c35SXin Li
51*b2055c35SXin Li#######################################
52*b2055c35SXin Li# Wrap clang-tools scan-build.
53*b2055c35SXin Li# Globals:
54*b2055c35SXin Li#   OUTPUT_DIR target directory where scan-build report is generated.
55*b2055c35SXin Li#   MODE scan-build mode
56*b2055c35SXin Li# Arguments:
57*b2055c35SXin Li#   $* scan-build additional args.
58*b2055c35SXin Li# Returns:
59*b2055c35SXin Li#   scan-build retcode
60*b2055c35SXin Li#######################################
61*b2055c35SXin Liscan_build() {
62*b2055c35SXin Li  scan-build -o "${OUTPUT_DIR}" --use-analyzer="$(command -v clang)" \
63*b2055c35SXin Li    -analyzer-config mode="${MODE}" "$*"
64*b2055c35SXin Li}
65*b2055c35SXin Li
66*b2055c35SXin LiMODE=${1:?"MODE is not specified.$(
67*b2055c35SXin Li  echo
68*b2055c35SXin Li  usage
69*b2055c35SXin Li)"}
70*b2055c35SXin Li
71*b2055c35SXin Lireadonly OUTPUT_DIR="${WORKSPACE}/output-${MODE}"
72*b2055c35SXin Lireadonly BUILD_DIR="${WORKSPACE}/build"
73*b2055c35SXin Li
74*b2055c35SXin Limake_build_dir "${OUTPUT_DIR}"
75*b2055c35SXin Limake_build_dir "${BUILD_DIR}"
76*b2055c35SXin Li
77*b2055c35SXin Licd "${LIBWEBP_ROOT}"
78*b2055c35SXin Li./autogen.sh
79*b2055c35SXin Li
80*b2055c35SXin Licd "${BUILD_DIR}"
81*b2055c35SXin Ligrep -m 1 -q 'enable-asserts' "${LIBWEBP_ROOT}/configure.ac" \
82*b2055c35SXin Li    && args='--enable-asserts'
83*b2055c35SXin Liscan_build "${LIBWEBP_ROOT}/configure" --enable-everything "${args}"
84*b2055c35SXin Liscan_build make -j4
85*b2055c35SXin Li
86*b2055c35SXin Liindex="$(find "${OUTPUT_DIR}" -name index.html)"
87*b2055c35SXin Liif [[ -f "${index}" ]]; then
88*b2055c35SXin Li  mv "$(dirname "${index}")/"* "${OUTPUT_DIR}"
89*b2055c35SXin Lielse
90*b2055c35SXin Li  # make a empty report to wipe out any old bug reports.
91*b2055c35SXin Li  cat << EOT > "${OUTPUT_DIR}/index.html"
92*b2055c35SXin Li<html>
93*b2055c35SXin Li<body>
94*b2055c35SXin LiNo bugs reported.
95*b2055c35SXin Li</body>
96*b2055c35SXin Li</html>
97*b2055c35SXin LiEOT
98*b2055c35SXin Lifi
99