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 |