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