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