#! /bin/sh # # This script automates running Coverity on RTEMS and submitting # the results. # # + Instructions: http://scan.coverity.com/self-build/ # + Results: http://scan2.coverity.com:9104/ # # You have to have an account to view the results # # NOTE: # + You have to be joel to run and submit official results. # + build.raw is very important if something goes wrong # # # TODO: # + parse arguments for some of the hard-coded items. # + better instructions on setup. Where to download, etc. # RTEMS_BIN=/opt/rtems-4.11/bin COVERITY=${HOME}/prevent-linux-2.4.6 RTEMS_TARGET=sparc-rtems4.11 RTEMS_BSP=sis #RTEMS_TARGET=i386-rtems4.11 #RTEMS_BSP=pc386 do_mail="yes" # # Checks the status returned by executables and exits if it is non-zero. # check_fatal() { if [ $1 -ne 0 ] ; then shift echo "ERROR: $*" >&2 exit 1 fi } type ${RTEMS_TARGET}-gcc check_fatal $? "gcc not in path" test -d ${COVERITY} check_fatal $? "Coverity path not right" test -d ${COVERITY}/bin check_fatal $? "${COVERITY}/bin does not exist" test ${LOGNAME} = "joel" check_fatal $? "For now, Coverity must be run by joel" # Prepend Coverity to our PATH export PATH=${COVERITY}/bin:$PATH # Configure Coverity for this target compiler rm -rf ${COVERITY}/config/coverity_config.xml rm -rf ${COVERITY}/config/gcc-config-? ${COVERITY}/config/g++-config-? cov-configure -co ${RTEMS_BIN}/${RTEMS_TARGET}-gcc check_fatal $? "could not coverity configure GCC" cov-configure -co ${RTEMS_BIN}/${RTEMS_TARGET}-g++ check_fatal $? "could not coverity configure g++" # Clean build directory and start over rm -rf b-coverity-${RTEMS_TARGET} check_fatal $? "Could not remove build directory" mkdir -p b-coverity-${RTEMS_TARGET}/b-${RTEMS_TARGET} check_fatal $? "Could not make build directory" cd b-coverity-${RTEMS_TARGET}/b-${RTEMS_TARGET} check_fatal $? "Could not cd to build directory" # Configure RTEMS $r/configure --target=${RTEMS_TARGET} --enable-multilib \ --disable-networking --disable-itron --disable-tests \ --enable-rtemsbsp=${RTEMS_BSP} >c.log 2>&1 check_fatal $? "could not configure RTEMS" # Build RTEMS cov-build -e emit -o output make -C ${RTEMS_TARGET}/cpukit >b.log 2>&1 check_fatal $? "could not make RTEMS" # Did we have problems loading the Coverity dynamic library? grep -i "ERROR: ld.so:.*" b.log >/dev/null if [ $? -ne 1 ] ; then check_fatal 1 "Looks like you have dynamic library issues with Coverity." fi # Did Coverity report something bad? grep -i cata output/build.raw >/dev/null if [ $? -ne 1 ] ; then check_fatal 1 "Catastrophic failures reported by coverity." fi # Did Coverity report that it had no results? grep -i "No files were emitted" output/build.raw >/dev/null if [ $? -ne 1 ] ; then check_fatal 1 "No output from Coverity. Something went wrong." fi # Construct the README that is needed in project.tgz cat <README Joel Sherrill joel.sherrill@gmail.com RTEMS EOF # Now create the tar file that Coverity wants tar czvf project.tgz README emit output check_fatal $? "could not make project.tgz" # If running inside OAR and RTEMS lab, then you will be able to # copy the results file to the ftp site and submit it to Coverity. if [ ${do_mail} = "yes" ] ; then if [ -d /home/ftp/private/coverity ] ; then echo "Placing project.tgz on RTEMS ftp site." cp project.tgz /home/ftp/private/coverity/ echo "Emailing analysis request to Coverity." do_mail_coverity else # There are unfortunately some by hand steps cat <