19c263d07SPeter Maydell#!/bin/sh -e 29c263d07SPeter Maydell 39c263d07SPeter Maydell# Upload a created tarball to Coverity Scan, as per 49c263d07SPeter Maydell# https://scan.coverity.com/projects/qemu/builds/new 59c263d07SPeter Maydell 69c263d07SPeter Maydell# This work is licensed under the terms of the GNU GPL version 2, 79c263d07SPeter Maydell# or (at your option) any later version. 89c263d07SPeter Maydell# See the COPYING file in the top-level directory. 99c263d07SPeter Maydell# 109c263d07SPeter Maydell# Copyright (c) 2017-2020 Linaro Limited 119c263d07SPeter Maydell# Written by Peter Maydell 129c263d07SPeter Maydell 139c263d07SPeter Maydell# Note that this script will automatically download and 149c263d07SPeter Maydell# run the (closed-source) coverity build tools, so don't 159c263d07SPeter Maydell# use it if you don't trust them! 169c263d07SPeter Maydell 179c263d07SPeter Maydell# This script assumes that you're running it from a QEMU source 189c263d07SPeter Maydell# tree, and that tree is a fresh clean one, because we do an in-tree 199c263d07SPeter Maydell# build. (This is necessary so that the filenames that the Coverity 209c263d07SPeter Maydell# Scan server sees are relative paths that match up with the component 219c263d07SPeter Maydell# regular expressions it uses; an out-of-tree build won't work for this.) 229c263d07SPeter Maydell# The host machine should have as many of QEMU's dependencies 239c263d07SPeter Maydell# installed as possible, for maximum coverity coverage. 249c263d07SPeter Maydell 259c263d07SPeter Maydell# To do an upload you need to be a maintainer in the Coverity online 269c263d07SPeter Maydell# service, and you will need to know the "Coverity token", which is a 279c263d07SPeter Maydell# secret 8 digit hex string. You can find that from the web UI in the 289c263d07SPeter Maydell# project settings, if you have maintainer access there. 299c263d07SPeter Maydell 309c263d07SPeter Maydell# Command line options: 319c263d07SPeter Maydell# --dry-run : run the tools, but don't actually do the upload 3272659059SPaolo Bonzini# --docker : create and work inside a container 3372659059SPaolo Bonzini# --docker-engine : specify the container engine to use (docker/podman/auto); 3472659059SPaolo Bonzini# implies --docker 359c263d07SPeter Maydell# --update-tools-only : update the cached copy of the tools, but don't run them 36b99b0079SPaolo Bonzini# --no-update-tools : do not update the cached copy of the tools 379c263d07SPeter Maydell# --tokenfile : file to read Coverity token from 389c263d07SPeter Maydell# --version ver : specify version being analyzed (default: ask git) 399c263d07SPeter Maydell# --description desc : specify description of this version (default: ask git) 409c263d07SPeter Maydell# --srcdir : QEMU source tree to analyze (default: current working dir) 419c263d07SPeter Maydell# --results-tarball : path to copy the results tarball to (default: don't 429c263d07SPeter Maydell# copy it anywhere, just upload it) 439edfa358SPeter Maydell# --src-tarball : tarball to untar into src dir (default: none); this 449edfa358SPeter Maydell# is intended mainly for internal use by the Docker support 459c263d07SPeter Maydell# 469c263d07SPeter Maydell# User-specifiable environment variables: 476ed4075cSPaolo Bonzini# COVERITY_TOKEN -- Coverity token (default: looks at your 486ed4075cSPaolo Bonzini# coverity.token config) 499c263d07SPeter Maydell# COVERITY_EMAIL -- the email address to use for uploads (default: 506ed4075cSPaolo Bonzini# looks at your git coverity.email or user.email config) 519c263d07SPeter Maydell# COVERITY_BUILD_CMD -- make command (default: 'make -jN' where N is 529c263d07SPeter Maydell# number of CPUs as determined by 'nproc') 539c263d07SPeter Maydell# COVERITY_TOOL_BASE -- set to directory to put coverity tools 549c263d07SPeter Maydell# (default: /tmp/coverity-tools) 559c263d07SPeter Maydell# 569c263d07SPeter Maydell# You must specify the token, either by environment variable or by 579c263d07SPeter Maydell# putting it in a file and using --tokenfile. Everything else has 589c263d07SPeter Maydell# a reasonable default if this is run from a git tree. 599c263d07SPeter Maydell 609c263d07SPeter Maydellcheck_upload_permissions() { 619c263d07SPeter Maydell # Check whether we can do an upload to the server; will exit the script 629c263d07SPeter Maydell # with status 1 if the check failed (usually a bad token); 639c263d07SPeter Maydell # will exit the script with status 0 if the check indicated that we 649c263d07SPeter Maydell # can't upload yet (ie we are at quota) 656ed4075cSPaolo Bonzini # Assumes that COVERITY_TOKEN, PROJNAME and DRYRUN have been initialized. 669c263d07SPeter Maydell 679c263d07SPeter Maydell echo "Checking upload permissions..." 689c263d07SPeter Maydell 696ed4075cSPaolo Bonzini if ! up_perm="$(wget https://scan.coverity.com/api/upload_permitted --post-data "token=$COVERITY_TOKEN&project=$PROJNAME" -q -O -)"; then 709c263d07SPeter Maydell echo "Coverity Scan API access denied: bad token?" 719c263d07SPeter Maydell exit 1 729c263d07SPeter Maydell fi 739c263d07SPeter Maydell 749c263d07SPeter Maydell # Really up_perm is a JSON response with either 759c263d07SPeter Maydell # {upload_permitted:true} or {next_upload_permitted_at:<date>} 769c263d07SPeter Maydell # We do some hacky string parsing instead of properly parsing it. 779c263d07SPeter Maydell case "$up_perm" in 789c263d07SPeter Maydell *upload_permitted*true*) 799c263d07SPeter Maydell echo "Coverity Scan: upload permitted" 809c263d07SPeter Maydell ;; 819c263d07SPeter Maydell *next_upload_permitted_at*) 829c263d07SPeter Maydell if [ "$DRYRUN" = yes ]; then 839c263d07SPeter Maydell echo "Coverity Scan: upload quota reached, continuing dry run" 849c263d07SPeter Maydell else 859c263d07SPeter Maydell echo "Coverity Scan: upload quota reached; stopping here" 869c263d07SPeter Maydell # Exit success as this isn't a build error. 879c263d07SPeter Maydell exit 0 889c263d07SPeter Maydell fi 899c263d07SPeter Maydell ;; 909c263d07SPeter Maydell *) 919c263d07SPeter Maydell echo "Coverity Scan upload check: unexpected result $up_perm" 929c263d07SPeter Maydell exit 1 939c263d07SPeter Maydell ;; 949c263d07SPeter Maydell esac 959c263d07SPeter Maydell} 969c263d07SPeter Maydell 979c263d07SPeter Maydell 989c263d07SPeter Maydellupdate_coverity_tools () { 999c263d07SPeter Maydell # Check for whether we need to download the Coverity tools 1009c263d07SPeter Maydell # (either because we don't have a copy, or because it's out of date) 1016ed4075cSPaolo Bonzini # Assumes that COVERITY_TOOL_BASE, COVERITY_TOKEN and PROJNAME are set. 1029c263d07SPeter Maydell 1039c263d07SPeter Maydell mkdir -p "$COVERITY_TOOL_BASE" 1049c263d07SPeter Maydell cd "$COVERITY_TOOL_BASE" 1059c263d07SPeter Maydell 1069c263d07SPeter Maydell echo "Checking for new version of coverity build tools..." 1076ed4075cSPaolo Bonzini wget https://scan.coverity.com/download/linux64 --post-data "token=$COVERITY_TOKEN&project=$PROJNAME&md5=1" -O coverity_tool.md5.new 1089c263d07SPeter Maydell 1099c263d07SPeter Maydell if ! cmp -s coverity_tool.md5 coverity_tool.md5.new; then 1109c263d07SPeter Maydell # out of date md5 or no md5: download new build tool 1119c263d07SPeter Maydell # blow away the old build tool 1129c263d07SPeter Maydell echo "Downloading coverity build tools..." 1139c263d07SPeter Maydell rm -rf coverity_tool coverity_tool.tgz 1146ed4075cSPaolo Bonzini wget https://scan.coverity.com/download/linux64 --post-data "token=$COVERITY_TOKEN&project=$PROJNAME" -O coverity_tool.tgz 1159c263d07SPeter Maydell if ! (cat coverity_tool.md5.new; echo " coverity_tool.tgz") | md5sum -c --status; then 1169c263d07SPeter Maydell echo "Downloaded tarball didn't match md5sum!" 1179c263d07SPeter Maydell exit 1 1189c263d07SPeter Maydell fi 119*2e90470eSPaolo Bonzini 120*2e90470eSPaolo Bonzini if [ "$DOCKER" != yes ]; then 1219c263d07SPeter Maydell # extract the new one, keeping it corralled in a 'coverity_tool' directory 1229c263d07SPeter Maydell echo "Unpacking coverity build tools..." 1239c263d07SPeter Maydell mkdir -p coverity_tool 1249c263d07SPeter Maydell cd coverity_tool 1259c263d07SPeter Maydell tar xf ../coverity_tool.tgz 1269c263d07SPeter Maydell cd .. 1279c263d07SPeter Maydell mv coverity_tool.md5.new coverity_tool.md5 1289c263d07SPeter Maydell fi 129*2e90470eSPaolo Bonzini fi 1309c263d07SPeter Maydell rm -f coverity_tool.md5.new 1319c263d07SPeter Maydell} 1329c263d07SPeter Maydell 1339c263d07SPeter Maydell 1349c263d07SPeter Maydell# Check user-provided environment variables and arguments 1359c263d07SPeter MaydellDRYRUN=no 136b99b0079SPaolo BonziniUPDATE=yes 1379edfa358SPeter MaydellDOCKER=no 1389c263d07SPeter Maydell 1399c263d07SPeter Maydellwhile [ "$#" -ge 1 ]; do 1409c263d07SPeter Maydell case "$1" in 1419c263d07SPeter Maydell --dry-run) 1429c263d07SPeter Maydell shift 1439c263d07SPeter Maydell DRYRUN=yes 1449c263d07SPeter Maydell ;; 145b99b0079SPaolo Bonzini --no-update-tools) 146b99b0079SPaolo Bonzini shift 147b99b0079SPaolo Bonzini UPDATE=no 148b99b0079SPaolo Bonzini ;; 1499c263d07SPeter Maydell --update-tools-only) 1509c263d07SPeter Maydell shift 151b99b0079SPaolo Bonzini UPDATE=only 1529c263d07SPeter Maydell ;; 1539c263d07SPeter Maydell --version) 1549c263d07SPeter Maydell shift 1559c263d07SPeter Maydell if [ $# -eq 0 ]; then 1569c263d07SPeter Maydell echo "--version needs an argument" 1579c263d07SPeter Maydell exit 1 1589c263d07SPeter Maydell fi 1599c263d07SPeter Maydell VERSION="$1" 1609c263d07SPeter Maydell shift 1619c263d07SPeter Maydell ;; 1629c263d07SPeter Maydell --description) 1639c263d07SPeter Maydell shift 1649c263d07SPeter Maydell if [ $# -eq 0 ]; then 1659c263d07SPeter Maydell echo "--description needs an argument" 1669c263d07SPeter Maydell exit 1 1679c263d07SPeter Maydell fi 1689c263d07SPeter Maydell DESCRIPTION="$1" 1699c263d07SPeter Maydell shift 1709c263d07SPeter Maydell ;; 1719c263d07SPeter Maydell --tokenfile) 1729c263d07SPeter Maydell shift 1739c263d07SPeter Maydell if [ $# -eq 0 ]; then 1749c263d07SPeter Maydell echo "--tokenfile needs an argument" 1759c263d07SPeter Maydell exit 1 1769c263d07SPeter Maydell fi 1779c263d07SPeter Maydell COVERITY_TOKEN="$(cat "$1")" 1789c263d07SPeter Maydell shift 1799c263d07SPeter Maydell ;; 1809c263d07SPeter Maydell --srcdir) 1819c263d07SPeter Maydell shift 1829c263d07SPeter Maydell if [ $# -eq 0 ]; then 1839c263d07SPeter Maydell echo "--srcdir needs an argument" 1849c263d07SPeter Maydell exit 1 1859c263d07SPeter Maydell fi 1869c263d07SPeter Maydell SRCDIR="$1" 1879c263d07SPeter Maydell shift 1889c263d07SPeter Maydell ;; 1899c263d07SPeter Maydell --results-tarball) 1909c263d07SPeter Maydell shift 1919c263d07SPeter Maydell if [ $# -eq 0 ]; then 1929c263d07SPeter Maydell echo "--results-tarball needs an argument" 1939c263d07SPeter Maydell exit 1 1949c263d07SPeter Maydell fi 1959c263d07SPeter Maydell RESULTSTARBALL="$1" 1969c263d07SPeter Maydell shift 1979c263d07SPeter Maydell ;; 1989edfa358SPeter Maydell --src-tarball) 1999edfa358SPeter Maydell shift 2009edfa358SPeter Maydell if [ $# -eq 0 ]; then 2019edfa358SPeter Maydell echo "--src-tarball needs an argument" 2029edfa358SPeter Maydell exit 1 2039edfa358SPeter Maydell fi 2049edfa358SPeter Maydell SRCTARBALL="$1" 2059edfa358SPeter Maydell shift 2069edfa358SPeter Maydell ;; 2079edfa358SPeter Maydell --docker) 2089edfa358SPeter Maydell DOCKER=yes 20972659059SPaolo Bonzini DOCKER_ENGINE=auto 21072659059SPaolo Bonzini shift 21172659059SPaolo Bonzini ;; 21272659059SPaolo Bonzini --docker-engine) 21372659059SPaolo Bonzini shift 21472659059SPaolo Bonzini if [ $# -eq 0 ]; then 21572659059SPaolo Bonzini echo "--docker-engine needs an argument" 21672659059SPaolo Bonzini exit 1 21772659059SPaolo Bonzini fi 21872659059SPaolo Bonzini DOCKER=yes 21972659059SPaolo Bonzini DOCKER_ENGINE="$1" 2209edfa358SPeter Maydell shift 2219edfa358SPeter Maydell ;; 2229c263d07SPeter Maydell *) 2239c263d07SPeter Maydell echo "Unexpected argument '$1'" 2249c263d07SPeter Maydell exit 1 2259c263d07SPeter Maydell ;; 2269c263d07SPeter Maydell esac 2279c263d07SPeter Maydelldone 2289c263d07SPeter Maydell 2299c263d07SPeter Maydellif [ -z "$COVERITY_TOKEN" ]; then 2306ed4075cSPaolo Bonzini COVERITY_TOKEN="$(git config coverity.token)" 2316ed4075cSPaolo Bonzinifi 2326ed4075cSPaolo Bonziniif [ -z "$COVERITY_TOKEN" ]; then 2339c263d07SPeter Maydell echo "COVERITY_TOKEN environment variable not set" 2349c263d07SPeter Maydell exit 1 2359c263d07SPeter Maydellfi 2369c263d07SPeter Maydell 2379c263d07SPeter Maydellif [ -z "$COVERITY_BUILD_CMD" ]; then 2389c263d07SPeter Maydell NPROC=$(nproc) 2399c263d07SPeter Maydell COVERITY_BUILD_CMD="make -j$NPROC" 2409c263d07SPeter Maydell echo "COVERITY_BUILD_CMD: using default '$COVERITY_BUILD_CMD'" 2419c263d07SPeter Maydellfi 2429c263d07SPeter Maydell 2439c263d07SPeter Maydellif [ -z "$COVERITY_TOOL_BASE" ]; then 2449c263d07SPeter Maydell echo "COVERITY_TOOL_BASE: using default /tmp/coverity-tools" 2459c263d07SPeter Maydell COVERITY_TOOL_BASE=/tmp/coverity-tools 2469c263d07SPeter Maydellfi 2479c263d07SPeter Maydell 2489c263d07SPeter Maydellif [ -z "$SRCDIR" ]; then 2499c263d07SPeter Maydell SRCDIR="$PWD" 2509c263d07SPeter Maydellfi 2519c263d07SPeter Maydell 2529c263d07SPeter MaydellPROJNAME=QEMU 2539c263d07SPeter MaydellTARBALL=cov-int.tar.xz 2549c263d07SPeter Maydell 255b99b0079SPaolo Bonziniif [ "$UPDATE" = only ] && [ "$DOCKER" = yes ]; then 2569edfa358SPeter Maydell echo "Combining --docker and --update-only is not supported" 2579edfa358SPeter Maydell exit 1 2589edfa358SPeter Maydellfi 2599c263d07SPeter Maydell 260b99b0079SPaolo Bonziniif [ "$UPDATE" = only ]; then 2619c263d07SPeter Maydell # Just do the tools update; we don't need to check whether 2629c263d07SPeter Maydell # we are in a source tree or have upload rights for this, 2639c263d07SPeter Maydell # so do it before some of the command line and source tree checks. 2649c263d07SPeter Maydell update_coverity_tools 2659c263d07SPeter Maydell exit 0 2669c263d07SPeter Maydellfi 2679c263d07SPeter Maydell 2689edfa358SPeter Maydellif [ ! -e "$SRCDIR" ]; then 2699edfa358SPeter Maydell mkdir "$SRCDIR" 2709edfa358SPeter Maydellfi 2719edfa358SPeter Maydell 2729c263d07SPeter Maydellcd "$SRCDIR" 2739c263d07SPeter Maydell 2749edfa358SPeter Maydellif [ ! -z "$SRCTARBALL" ]; then 2759edfa358SPeter Maydell echo "Untarring source tarball into $SRCDIR..." 2769edfa358SPeter Maydell tar xvf "$SRCTARBALL" 2779edfa358SPeter Maydellfi 2789edfa358SPeter Maydell 2799c263d07SPeter Maydellecho "Checking this is a QEMU source tree..." 2809c263d07SPeter Maydellif ! [ -e "$SRCDIR/VERSION" ]; then 2819c263d07SPeter Maydell echo "Not in a QEMU source tree?" 2829c263d07SPeter Maydell exit 1 2839c263d07SPeter Maydellfi 2849c263d07SPeter Maydell 2859c263d07SPeter Maydell# Fill in defaults used by the non-update-only process 2869c263d07SPeter Maydellif [ -z "$VERSION" ]; then 2879c263d07SPeter Maydell VERSION="$(git describe --always HEAD)" 2889c263d07SPeter Maydellfi 2899c263d07SPeter Maydell 2909c263d07SPeter Maydellif [ -z "$DESCRIPTION" ]; then 2919c263d07SPeter Maydell DESCRIPTION="$(git rev-parse HEAD)" 2929c263d07SPeter Maydellfi 2939c263d07SPeter Maydell 2949c263d07SPeter Maydellif [ -z "$COVERITY_EMAIL" ]; then 2956ed4075cSPaolo Bonzini COVERITY_EMAIL="$(git config coverity.email)" 2966ed4075cSPaolo Bonzinifi 2976ed4075cSPaolo Bonziniif [ -z "$COVERITY_EMAIL" ]; then 2989c263d07SPeter Maydell COVERITY_EMAIL="$(git config user.email)" 2999c263d07SPeter Maydellfi 3009c263d07SPeter Maydell 301*2e90470eSPaolo Bonzini# Otherwise, continue with the full build and upload process. 302*2e90470eSPaolo Bonzini 303*2e90470eSPaolo Bonzinicheck_upload_permissions 304*2e90470eSPaolo Bonzini 305*2e90470eSPaolo Bonziniif [ "$UPDATE" != no ]; then 306*2e90470eSPaolo Bonzini update_coverity_tools 307*2e90470eSPaolo Bonzinifi 308*2e90470eSPaolo Bonzini 3099edfa358SPeter Maydell# Run ourselves inside docker if that's what the user wants 3109edfa358SPeter Maydellif [ "$DOCKER" = yes ]; then 3119edfa358SPeter Maydell # Put the Coverity token into a temporary file that only 3129edfa358SPeter Maydell # we have read access to, and then pass it to docker build 31372659059SPaolo Bonzini # using a volume. A volume is enough for the token not to 31472659059SPaolo Bonzini # leak into the Docker image. 3159edfa358SPeter Maydell umask 077 3169edfa358SPeter Maydell SECRETDIR=$(mktemp -d) 3179edfa358SPeter Maydell if [ -z "$SECRETDIR" ]; then 3189edfa358SPeter Maydell echo "Failed to create temporary directory" 3199edfa358SPeter Maydell exit 1 3209edfa358SPeter Maydell fi 3219edfa358SPeter Maydell trap 'rm -rf "$SECRETDIR"' INT TERM EXIT 3229edfa358SPeter Maydell echo "Created temporary directory $SECRETDIR" 3239edfa358SPeter Maydell SECRET="$SECRETDIR/token" 3249edfa358SPeter Maydell echo "$COVERITY_TOKEN" > "$SECRET" 325b99b0079SPaolo Bonzini if [ "$UPDATE" != no ]; then 326b99b0079SPaolo Bonzini # build docker container including the coverity-scan tools 3279edfa358SPeter Maydell echo "Building docker container..." 328*2e90470eSPaolo Bonzini # TODO: This re-unpacks the tools every time, rather than caching 329*2e90470eSPaolo Bonzini # and reusing the image produced by the COPY of the .tgz file. 3309edfa358SPeter Maydell # Not sure why. 33172659059SPaolo Bonzini tests/docker/docker.py --engine ${DOCKER_ENGINE} build \ 33272659059SPaolo Bonzini -t coverity-scanner -f scripts/coverity-scan/coverity-scan.docker \ 333*2e90470eSPaolo Bonzini --extra-files scripts/coverity-scan/run-coverity-scan \ 334*2e90470eSPaolo Bonzini "$COVERITY_TOOL_BASE"/coverity_tool.tgz 335b99b0079SPaolo Bonzini fi 3369edfa358SPeter Maydell echo "Archiving sources to be analyzed..." 3379edfa358SPeter Maydell ./scripts/archive-source.sh "$SECRETDIR/qemu-sources.tgz" 3383077453cSPaolo Bonzini ARGS="--no-update-tools" 3399edfa358SPeter Maydell if [ "$DRYRUN" = yes ]; then 3403077453cSPaolo Bonzini ARGS="$ARGS --dry-run" 3419edfa358SPeter Maydell fi 3429edfa358SPeter Maydell echo "Running scanner..." 3439edfa358SPeter Maydell # If we need to capture the output tarball, get the inner run to 3449edfa358SPeter Maydell # save it to the secrets directory so we can copy it out before the 3459edfa358SPeter Maydell # directory is cleaned up. 3469edfa358SPeter Maydell if [ ! -z "$RESULTSTARBALL" ]; then 3473077453cSPaolo Bonzini ARGS="$ARGS --results-tarball /work/cov-int.tar.xz" 3489edfa358SPeter Maydell fi 3499edfa358SPeter Maydell # Arrange for this docker run to get access to the sources with -v. 3509edfa358SPeter Maydell # We pass through all the configuration from the outer script to the inner. 3519edfa358SPeter Maydell export COVERITY_EMAIL COVERITY_BUILD_CMD 35272659059SPaolo Bonzini tests/docker/docker.py run -it --env COVERITY_EMAIL --env COVERITY_BUILD_CMD \ 3539edfa358SPeter Maydell -v "$SECRETDIR:/work" coverity-scanner \ 3549edfa358SPeter Maydell ./run-coverity-scan --version "$VERSION" \ 3553077453cSPaolo Bonzini --description "$DESCRIPTION" $ARGS --tokenfile /work/token \ 3563077453cSPaolo Bonzini --srcdir /qemu --src-tarball /work/qemu-sources.tgz 3579edfa358SPeter Maydell if [ ! -z "$RESULTSTARBALL" ]; then 3589edfa358SPeter Maydell echo "Copying results tarball to $RESULTSTARBALL..." 3599edfa358SPeter Maydell cp "$SECRETDIR/cov-int.tar.xz" "$RESULTSTARBALL" 3609edfa358SPeter Maydell fi 3619edfa358SPeter Maydell echo "Docker work complete." 3629edfa358SPeter Maydell exit 0 3639edfa358SPeter Maydellfi 3649edfa358SPeter Maydell 3659c263d07SPeter MaydellTOOLBIN="$(cd "$COVERITY_TOOL_BASE" && echo $PWD/coverity_tool/cov-analysis-*/bin)" 3669c263d07SPeter Maydell 3679c263d07SPeter Maydellif ! test -x "$TOOLBIN/cov-build"; then 3689c263d07SPeter Maydell echo "Couldn't find cov-build in the coverity build-tool directory??" 3699c263d07SPeter Maydell exit 1 3709c263d07SPeter Maydellfi 3719c263d07SPeter Maydell 3729c263d07SPeter Maydellexport PATH="$TOOLBIN:$PATH" 3739c263d07SPeter Maydell 3749c263d07SPeter Maydellcd "$SRCDIR" 3759c263d07SPeter Maydell 3769c263d07SPeter Maydellecho "Doing make distclean..." 3779c263d07SPeter Maydellmake distclean 3789c263d07SPeter Maydell 3799c263d07SPeter Maydellecho "Configuring..." 3809c263d07SPeter Maydell# We configure with a fixed set of enables here to ensure that we don't 3819c263d07SPeter Maydell# accidentally reduce the scope of the analysis by doing the build on 3829c263d07SPeter Maydell# the system that's missing a dependency that we need to build part of 3839c263d07SPeter Maydell# the codebase. 3849c263d07SPeter Maydell./configure --disable-modules --enable-sdl --enable-gtk \ 3859c263d07SPeter Maydell --enable-opengl --enable-vte --enable-gnutls \ 3869c263d07SPeter Maydell --enable-nettle --enable-curses --enable-curl \ 3879c263d07SPeter Maydell --audio-drv-list=oss,alsa,sdl,pa --enable-virtfs \ 3889c263d07SPeter Maydell --enable-vnc --enable-vnc-sasl --enable-vnc-jpeg --enable-vnc-png \ 3899c263d07SPeter Maydell --enable-xen --enable-brlapi \ 3909c263d07SPeter Maydell --enable-linux-aio --enable-attr \ 3919c263d07SPeter Maydell --enable-cap-ng --enable-trace-backends=log --enable-spice --enable-rbd \ 3929c263d07SPeter Maydell --enable-xfsctl --enable-libusb --enable-usb-redir \ 3939c263d07SPeter Maydell --enable-libiscsi --enable-libnfs --enable-seccomp \ 3949c263d07SPeter Maydell --enable-tpm --enable-libssh --enable-lzo --enable-snappy --enable-bzip2 \ 3959c263d07SPeter Maydell --enable-numa --enable-rdma --enable-smartcard --enable-virglrenderer \ 3969c263d07SPeter Maydell --enable-mpath --enable-libxml2 --enable-glusterfs \ 3979c263d07SPeter Maydell --enable-virtfs --enable-zstd 3989c263d07SPeter Maydell 3999c263d07SPeter Maydellecho "Making libqemustub.a..." 4009c263d07SPeter Maydellmake libqemustub.a 4019c263d07SPeter Maydell 4029c263d07SPeter Maydellecho "Running cov-build..." 4039c263d07SPeter Maydellrm -rf cov-int 4049c263d07SPeter Maydellmkdir cov-int 4059c263d07SPeter Maydellcov-build --dir cov-int $COVERITY_BUILD_CMD 4069c263d07SPeter Maydell 4079c263d07SPeter Maydellecho "Creating results tarball..." 4089c263d07SPeter Maydelltar cvf - cov-int | xz > "$TARBALL" 4099c263d07SPeter Maydell 4109c263d07SPeter Maydellif [ ! -z "$RESULTSTARBALL" ]; then 4119c263d07SPeter Maydell echo "Copying results tarball to $RESULTSTARBALL..." 4129c263d07SPeter Maydell cp "$TARBALL" "$RESULTSTARBALL" 4139c263d07SPeter Maydellfi 4149c263d07SPeter Maydell 4159c263d07SPeter Maydellecho "Uploading results tarball..." 4169c263d07SPeter Maydell 4179c263d07SPeter Maydellif [ "$DRYRUN" = yes ]; then 4189c263d07SPeter Maydell echo "Dry run only, not uploading $TARBALL" 4199c263d07SPeter Maydell exit 0 4209c263d07SPeter Maydellfi 4219c263d07SPeter Maydell 4226ed4075cSPaolo Bonzinicurl --form token="$COVERITY_TOKEN" --form email="$COVERITY_EMAIL" \ 4239c263d07SPeter Maydell --form file=@"$TARBALL" --form version="$VERSION" \ 4249c263d07SPeter Maydell --form description="$DESCRIPTION" \ 4259c263d07SPeter Maydell https://scan.coverity.com/builds?project="$PROJNAME" 4269c263d07SPeter Maydell 4279c263d07SPeter Maydellecho "Done." 428