#!/bin/bash # Copyright (c) 2021, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # # * Neither the name of Google nor the names of its contributors may # be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. set -xe LIBWEBP_ROOT="$(realpath "$(dirname "$0")/..")" readonly LIBWEBP_ROOT readonly WORKSPACE=${WORKSPACE:-"$(mktemp -d -t webp.scanbuild.XXX)"} # shellcheck source=infra/common.sh source "${LIBWEBP_ROOT}/infra/common.sh" usage() { cat << EOF Usage: $(basename "$0") MODE Options: MODE supported scan modes: (shallow|deep) Environment variables: WORKSPACE directory where the build is done. EOF } ####################################### # Wrap clang-tools scan-build. # Globals: # OUTPUT_DIR target directory where scan-build report is generated. # MODE scan-build mode # Arguments: # $* scan-build additional args. # Returns: # scan-build retcode ####################################### scan_build() { scan-build -o "${OUTPUT_DIR}" --use-analyzer="$(command -v clang)" \ -analyzer-config mode="${MODE}" "$*" } MODE=${1:?"MODE is not specified.$( echo usage )"} readonly OUTPUT_DIR="${WORKSPACE}/output-${MODE}" readonly BUILD_DIR="${WORKSPACE}/build" make_build_dir "${OUTPUT_DIR}" make_build_dir "${BUILD_DIR}" cd "${LIBWEBP_ROOT}" ./autogen.sh cd "${BUILD_DIR}" grep -m 1 -q 'enable-asserts' "${LIBWEBP_ROOT}/configure.ac" \ && args='--enable-asserts' scan_build "${LIBWEBP_ROOT}/configure" --enable-everything "${args}" scan_build make -j4 index="$(find "${OUTPUT_DIR}" -name index.html)" if [[ -f "${index}" ]]; then mv "$(dirname "${index}")/"* "${OUTPUT_DIR}" else # make a empty report to wipe out any old bug reports. cat << EOT > "${OUTPUT_DIR}/index.html" No bugs reported. EOT fi