checker-buildbot.sh (2404B)
1#!/bin/bash 2 3# This is a script used by some Buildbot buildslaves to push the project 4# through Clang's static analyzer and prepare the output to be uploaded 5# back to the buildmaster. You might find it useful too. 6 7# Install Clang (you already have it on Mac OS X, apt-get install clang 8# on Ubuntu, etc), 9# or download checker at http://clang-analyzer.llvm.org/ and unpack it in 10# /usr/local ... update CHECKERDIR as appropriate. 11 12FINALDIR="$1" 13 14CHECKERDIR="/usr/local/checker-276" 15if [ ! -d "$CHECKERDIR" ]; then 16 echo "$CHECKERDIR not found. Trying /usr/share/clang ..." 1>&2 17 CHECKERDIR="/usr/share/clang/scan-build" 18fi 19 20if [ ! -d "$CHECKERDIR" ]; then 21 echo "$CHECKERDIR not found. Giving up." 1>&2 22 exit 1 23fi 24 25if [ -z "$MAKE" ]; then 26 OSTYPE=`uname -s` 27 if [ "$OSTYPE" == "Linux" ]; then 28 NCPU=`cat /proc/cpuinfo |grep vendor_id |wc -l` 29 let NCPU=$NCPU+1 30 elif [ "$OSTYPE" = "Darwin" ]; then 31 NCPU=`sysctl -n hw.ncpu` 32 elif [ "$OSTYPE" = "SunOS" ]; then 33 NCPU=`/usr/sbin/psrinfo |wc -l |sed -e 's/^ *//g;s/ *$//g'` 34 else 35 NCPU=1 36 fi 37 38 if [ -z "$NCPU" ]; then 39 NCPU=1 40 elif [ "$NCPU" = "0" ]; then 41 NCPU=1 42 fi 43 44 MAKE="make -j$NCPU" 45fi 46 47echo "\$MAKE is '$MAKE'" 48 49set -x 50set -e 51 52cd `dirname "$0"` 53cd .. 54 55rm -rf checker-buildbot analysis 56if [ ! -z "$FINALDIR" ]; then 57 rm -rf "$FINALDIR" 58fi 59 60mkdir checker-buildbot 61cd checker-buildbot 62 63# You might want to do this for CMake-backed builds instead... 64PATH="$CHECKERDIR:$PATH" scan-build -o analysis cmake -DCMAKE_BUILD_TYPE=Debug .. 65 66# ...or run configure without the scan-build wrapper... 67#CC="$CHECKERDIR/libexec/ccc-analyzer" CFLAGS="-O0" ../configure 68 69# ...but this works for our buildbots just fine (EXCEPT ON LATEST MAC OS X). 70#CFLAGS="-O0" PATH="$CHECKERDIR:$PATH" scan-build -o analysis ../configure 71 72rm -rf analysis 73PATH="$CHECKERDIR:$PATH" scan-build -o analysis $MAKE 74mv analysis/* ../analysis 75rmdir analysis # Make sure this is empty. 76cd .. 77chmod -R a+r analysis 78chmod -R go-w analysis 79find analysis -type d -exec chmod a+x {} \; 80if [ -x /usr/bin/xattr ]; then find analysis -exec /usr/bin/xattr -d com.apple.quarantine {} \; 2>/dev/null ; fi 81 82if [ ! -z "$FINALDIR" ]; then 83 mv analysis "$FINALDIR" 84else 85 FINALDIR=analysis 86fi 87 88rm -rf checker-buildbot 89 90echo "Done. Final output is in '$FINALDIR' ..." 91 92# end of checker-buildbot.sh ... 93