go-libwebp

Experimental translation from libwebp to Go source.
Log | Files | Refs | README | LICENSE

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