[PATCH] script: smatchify.sh: build fwts and check with smatch

Colin King colin.king at canonical.com
Wed Jan 16 09:35:07 UTC 2013


From: Colin Ian King <colin.king at canonical.com>

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 <colin.king at canonical.com>
---
 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
-- 
1.8.0




More information about the fwts-devel mailing list