diff mbox

script: smatchify.sh: build fwts and check with smatch

Message ID 1358328907-18376-1-git-send-email-colin.king@canonical.com
State Accepted
Headers show

Commit Message

Colin Ian King Jan. 16, 2013, 9:35 a.m. UTC
From: Colin Ian King <colin.king@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@canonical.com>
---
 smatchify.sh | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 119 insertions(+)
 create mode 100755 smatchify.sh

Comments

Keng-Yu Lin Jan. 29, 2013, 7:51 a.m. UTC | #1
On Wed, Jan 16, 2013 at 5:35 PM, Colin King <colin.king@canonical.com> wrote:
> From: Colin Ian King <colin.king@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@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
>
Acked-by: Keng-Yu Lin <kengyu@canonical.com>
Ivan Hu Feb. 1, 2013, 2:24 a.m. UTC | #2
On 01/16/2013 05:35 PM, Colin King wrote:
> From: Colin Ian King <colin.king@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@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
>
Acked-by: Ivan Hu <ivan.hu@canonical.com>
Alex Hung Feb. 4, 2013, 12:01 a.m. UTC | #3
On 01/16/2013 01:35 AM, Colin King wrote:
> From: Colin Ian King <colin.king@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@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
>
Acked-by: Alex Hung <alex.hung@canonical.com>
diff mbox

Patch

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