Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 1 | pmbaty | 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 | |||
| 12 | FINALDIR="$1" |
||
| 13 | |||
| 14 | CHECKERDIR="/usr/local/checker-279" |
||
| 15 | if [ ! -d "$CHECKERDIR" ]; then |
||
| 16 | echo "$CHECKERDIR not found. Trying /usr/share/clang ..." 1>&2 |
||
| 17 | CHECKERDIR="/usr/share/clang/scan-build" |
||
| 18 | fi |
||
| 19 | |||
| 20 | if [ ! -d "$CHECKERDIR" ]; then |
||
| 21 | echo "$CHECKERDIR not found. Giving up." 1>&2 |
||
| 22 | exit 1 |
||
| 23 | fi |
||
| 24 | |||
| 25 | if [ -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" |
||
| 45 | fi |
||
| 46 | |||
| 47 | echo "\$MAKE is '$MAKE'" |
||
| 48 | MAKECMD="$MAKE" |
||
| 49 | unset MAKE # prevent warnings about jobserver mode. |
||
| 50 | |||
| 51 | set -x |
||
| 52 | set -e |
||
| 53 | |||
| 54 | cd `dirname "$0"` |
||
| 55 | cd .. |
||
| 56 | |||
| 57 | rm -rf checker-buildbot analysis |
||
| 58 | if [ ! -z "$FINALDIR" ]; then |
||
| 59 | rm -rf "$FINALDIR" |
||
| 60 | fi |
||
| 61 | |||
| 62 | mkdir checker-buildbot |
||
| 63 | cd checker-buildbot |
||
| 64 | |||
| 65 | # We turn off deprecated declarations, because we don't care about these warnings during static analysis. |
||
| 66 | # The -Wno-liblto is new since our checker-279 upgrade, I think; checker otherwise warns "libLTO.dylib relative to clang installed dir not found" |
||
| 67 | |||
| 68 | # You might want to do this for CMake-backed builds instead... |
||
| 69 | PATH="$CHECKERDIR/bin:$PATH" scan-build -o analysis cmake -Wno-dev -DPHYSFS_BUILD_SHARED=False -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS="-Wno-deprecated-declarations" -DCMAKE_EXE_LINKER_FLAGS="-Wno-liblto" .. |
||
| 70 | |||
| 71 | # ...or run configure without the scan-build wrapper... |
||
| 72 | #CC="$CHECKERDIR/libexec/ccc-analyzer" CFLAGS="-O0 -Wno-deprecated-declarations" LDFLAGS="-Wno-liblto" ../configure --enable-assertions=enabled |
||
| 73 | |||
| 74 | rm -rf analysis |
||
| 75 | PATH="$CHECKERDIR/bin:$PATH" scan-build -o analysis $MAKECMD |
||
| 76 | |||
| 77 | if [ `ls -A analysis |wc -l` == 0 ] ; then |
||
| 78 | mkdir analysis/zarro |
||
| 79 | echo '<html><head><title>Zarro boogs</title></head><body>Static analysis: no issues to report.</body></html>' >analysis/zarro/index.html |
||
| 80 | fi |
||
| 81 | |||
| 82 | mv analysis/* ../analysis |
||
| 83 | rmdir analysis # Make sure this is empty. |
||
| 84 | cd .. |
||
| 85 | chmod -R a+r analysis |
||
| 86 | chmod -R go-w analysis |
||
| 87 | find analysis -type d -exec chmod a+x {} \; |
||
| 88 | if [ -x /usr/bin/xattr ]; then find analysis -exec /usr/bin/xattr -d com.apple.quarantine {} \; 2>/dev/null ; fi |
||
| 89 | |||
| 90 | if [ ! -z "$FINALDIR" ]; then |
||
| 91 | mv analysis "$FINALDIR" |
||
| 92 | else |
||
| 93 | FINALDIR=analysis |
||
| 94 | fi |
||
| 95 | |||
| 96 | rm -rf checker-buildbot |
||
| 97 | |||
| 98 | echo "Done. Final output is in '$FINALDIR' ..." |
||
| 99 | |||
| 100 | # end of checker-buildbot.sh ... |
||
| 101 |