Run scan-build during CI

This bumps the travis-ci container image to Trusty so that we have a version of
clang that includes proper support for C++14.
This commit is contained in:
Phil Turnbull 2017-06-14 13:28:03 -04:00
parent cfca764d48
commit 97cdd8b738
4 changed files with 48 additions and 4 deletions

View file

@ -1,4 +1,5 @@
sudo: false
dist: trusty
language: cpp
compiler:
- gcc
@ -9,10 +10,11 @@ addons:
- ubuntu-toolchain-r-test
packages:
- g++-5
- clang
install:
- export CXX="g++-5"
- script/configure
- scan-build script/configure
script:
- script/ci

View file

@ -2,6 +2,9 @@
set -e
. script/lib.sh
script/fetch-fixtures
script/check-mallocs
script/test
scan_build make
script/test -b

26
script/lib.sh Executable file
View file

@ -0,0 +1,26 @@
#!/usr/bin/env bash
function scan_build {
extra_args=()
# AFAICT, in the trusty travis container the scan-build tool is from the 3.4
# installation. Therefore, by default it will use clang-3.4 when analysing code
# which doesn't support the '-std=c++14' (it is available via '-std=c++1y').
# Use the system-wide installed clang instead which is 3.5 and does support
# '-std=c++14'.
extra_args+=("--use-analyzer=$(which clang)")
# scan-build will try to guess which CXX should be used to compile the actual
# code, which is usually g++ but we need g++5 in the CI. Explicitly pass
# $CC/$CXX to scan-build if they are set in the environment.
if [[ ! -z "$CC" ]]; then
extra_args+=("--use-cc=$CC")
fi
if [[ ! -z "$CXX" ]]; then
extra_args+=("--use-c++=$CXX")
fi
scan-build "${extra_args[@]}" --status-bugs "$@"
}

View file

@ -2,6 +2,8 @@
set -e
. script/lib.sh
function usage {
cat <<-EOF
USAGE
@ -12,6 +14,8 @@ OPTIONS
-h print this message
-b run make under scan-build static analyzer
-d run tests in a debugger (either lldb or gdb)
-g run tests with valgrind's memcheck tool
@ -26,6 +30,7 @@ OPTIONS
-z pipe tests' stderr to \`dot(1)\` to render an SVG log
EOF
}
@ -37,8 +42,9 @@ args=()
target=tests
export BUILDTYPE=Test
cmd="out/${BUILDTYPE}/${target}"
run_scan_build=
while getopts "df:s:gGhpvS" option; do
while getopts "bdf:s:gGhpvS" option; do
case ${option} in
h)
usage
@ -69,6 +75,9 @@ while getopts "df:s:gGhpvS" option; do
S)
mode=SVG
;;
b)
run_scan_build=true
;;
esac
done
@ -78,7 +87,11 @@ else
args+=("--reporter=singleline")
fi
make $target
if [[ ! -z "$run_scan_build" ]]; then
scan_build make $target
else
make $target
fi
args=${args:-""}
if [[ -n $profile ]]; then