From patchwork Wed Jan 16 09:35:07 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: script: smatchify.sh: build fwts and check with smatch Date: Tue, 15 Jan 2013 23:35:07 -0000 From: Colin King X-Patchwork-Id: 212462 Message-Id: <1358328907-18376-1-git-send-email-colin.king@canonical.com> To: fwts-devel@lists.ubuntu.com From: Colin Ian King Add a bash script to automatically fetch and build the latest version of smatch and then build fwts with this to find any coding errors. This may find some false positives, but smatch is very useful at finding some more subtle bugs so I think the false positives are worth the pain. Signed-off-by: Colin Ian King Acked-by: Keng-Yu Lin Acked-by: Ivan Hu Acked-by: Alex Hung --- smatchify.sh | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100755 smatchify.sh diff --git a/smatchify.sh b/smatchify.sh new file mode 100755 index 0000000..c6efe59 --- /dev/null +++ b/smatchify.sh @@ -0,0 +1,119 @@ +#!/bin/bash +# +# Copyright (C) 2012-2013 Canonical +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +SMATCH_DIR=smatch +SMATCH_REPO=git://repo.or.cz/smatch +DEPENDENCIES="libxml2-dev llvm-dev libsqlite3-dev" + +INCLUDES="-I/usr/lib/gcc/i686-linux-gnu/ -I/usr/include/x86_64-linux-gnu" + +HERE=$(pwd) + +# +# Install any packages we depend on to build smatch +# +smatch_install_dependencies() +{ + install="" + + echo "Checking for dependencies for smatch.." + + for d in ${DEPENDENCIES} + do + if [ "$(dpkg -l | grep $d)" == "" ]; then + install="$install $d" + fi + done + if [ "$install" != "" ]; then + echo "Need to install:$install" + sudo apt-get install $install + if [ $? -ne 0 ]; then + echo "Installation of packages failed" + exit 1 + fi + fi +} + +# +# Get an upto date version of smatch +# +smatch_get() +{ + if [ -d ${SMATCH_DIR} ]; then + echo "Getting latest version of smatch.." + cd ${SMATCH_DIR} + git checkout -f master >& /dev/null + git fetch origin >& /dev/null + git fetch origin master >& /dev/null + git reset --hard FETCH_HEAD >& /dev/null + cd ${HERE} + else + echo "Getting smatch.." + git clone ${SMATCH_REPO} ${SMATCH_DIR} + fi +} + +# +# Build smatch +# +smatch_build() +{ + cd ${SMATCH_DIR} + echo "Smatch: make clean.." + make clean >& /dev/null + echo "Smatch: make.." + make > /dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "Build of smatch succeeded" + else + echo "Build of smatchfailed" + exit 1 + fi + cd ${HERE} +} + +# +# Build fwts using smatch +# +smatch_fwts() +{ + echo "Building fwts.." + autoreconf -ivf > /dev/null + ./configure > /dev/null + make clean + + make CHECK="${HERE}/${SMATCH_DIR}/smatch --full-path" \ + CC="${HERE}/${SMATCH_DIR}/cgcc $INCLUDES" | tee smatch.log +} + +# +# Check for errors +# +smatch_errors() +{ + errors=$(grep "error: " smatch.log | wc -l) + echo " " + echo "Smatch found $errors errors, see smatch.log for more details." +} + +smatch_install_dependencies +smatch_get +smatch_build +smatch_fwts +smatch_errors