run_static_analysis.sh (3126B)
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 32 set -xe 33 34 LIBWEBP_ROOT="$(realpath "$(dirname "$0")/..")" 35 readonly LIBWEBP_ROOT 36 readonly WORKSPACE=${WORKSPACE:-"$(mktemp -d -t webp.scanbuild.XXX)"} 37 38 # shellcheck source=infra/common.sh 39 source "${LIBWEBP_ROOT}/infra/common.sh" 40 41 usage() { 42 cat << EOF 43 Usage: $(basename "$0") MODE 44 Options: 45 MODE supported scan modes: (shallow|deep) 46 Environment variables: 47 WORKSPACE directory where the build is done. 48 EOF 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 ####################################### 61 scan_build() { 62 scan-build -o "${OUTPUT_DIR}" --use-analyzer="$(command -v clang)" \ 63 -analyzer-config mode="${MODE}" "$*" 64 } 65 66 MODE=${1:?"MODE is not specified.$( 67 echo 68 usage 69 )"} 70 71 readonly OUTPUT_DIR="${WORKSPACE}/output-${MODE}" 72 readonly BUILD_DIR="${WORKSPACE}/build" 73 74 make_build_dir "${OUTPUT_DIR}" 75 make_build_dir "${BUILD_DIR}" 76 77 cd "${LIBWEBP_ROOT}" 78 ./autogen.sh 79 80 cd "${BUILD_DIR}" 81 grep -m 1 -q 'enable-asserts' "${LIBWEBP_ROOT}/configure.ac" \ 82 && args='--enable-asserts' 83 scan_build "${LIBWEBP_ROOT}/configure" --enable-everything "${args}" 84 scan_build make -j4 85 86 index="$(find "${OUTPUT_DIR}" -name index.html)" 87 if [[ -f "${index}" ]]; then 88 mv "$(dirname "${index}")/"* "${OUTPUT_DIR}" 89 else 90 # make a empty report to wipe out any old bug reports. 91 cat << EOT > "${OUTPUT_DIR}/index.html" 92 <html> 93 <body> 94 No bugs reported. 95 </body> 96 </html> 97 EOT 98 fi