mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-11-03 20:38:59 +00:00 
			
		
		
		
	- Added Pre-amble (Options / Flags / Usage Example / GNU License) - Extended Configurability - Made Executable ASTERISK-24917 Change-Id: I70405fe54e4be7dbfbcb62e291690069b88617a8
		
			
				
	
	
		
			137 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
#
 | 
						|
# clang-scan-build: configure and compile asterisk using the llvm static analyzer
 | 
						|
 | 
						|
# Options/Flags:
 | 
						|
# -c|--compiler	: either [clang|gcc]
 | 
						|
# --cflags	: cflags you would like to add to the default set
 | 
						|
# --configure	: configure flags you would like to use instead off the default set
 | 
						|
# --make	: make flags you would like to use instead off the default set
 | 
						|
# --scanbuild	: scanbuild flags you would like to use instead of the default set
 | 
						|
# --outputdir	: directory where scan-build should create the html files
 | 
						|
# -h|--help	: this help
 | 
						|
 | 
						|
# Usage:
 | 
						|
# contrib/scripts/clang-scan-build
 | 
						|
# This script will use clang if available and no compiler has been specified
 | 
						|
#
 | 
						|
# Example usage:
 | 
						|
#
 | 
						|
#   contrib/scripts/clang-scan-build
 | 
						|
#   contrib/scripts/clang-scan-build -c gcc
 | 
						|
#   contrib/scripts/clang-scan-build --compiler clang --configure "--enable-dev-mode" --outputdir="/tmp/scan-build_output"
 | 
						|
#   contrib/scripts/clang-scan-build --make "-j2"
 | 
						|
#
 | 
						|
# scan-build will generate html files during the make process, which will be stored in the specified outputdir or ./scan-build_output" by default
 | 
						|
 | 
						|
# Copyright (C) 2015 Diederik de Groot <dddegroot@users.sf.net>
 | 
						|
#
 | 
						|
# 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307
 | 
						|
# USA
 | 
						|
 | 
						|
COMPILER=clang
 | 
						|
SCANBUILD="`which scan-build`"
 | 
						|
CFLAGS=""
 | 
						|
CONFIGURE_FLAGS="--enable-coverage --disable-xmldoc"
 | 
						|
MAKE_FLAGS=""
 | 
						|
SCANBUILD_FLAGS="-maxloop 10 -disable-checker deadcode.DeadStores -enable-checker alpha.core.BoolAssignment -enable-checker alpha.core.CallAndMessageUnInitRefArg -enable-checker alpha.core.CastSize -enable-checker alpha.core.CastToStruct -enable-checker alpha.core.IdenticalExpr -enable-checker alpha.core.PointerArithm -enable-checker alpha.core.PointerSub -enable-checker alpha.core.SizeofPtr -enable-checker alpha.core.TestAfterDivZero -enable-checker alpha.security.ArrayBound -enable-checker alpha.security.ArrayBoundV2 -enable-checker alpha.security.MallocOverflow -enable-checker alpha.security.ReturnPtrRange -enable-checker alpha.security.taint.TaintPropagation -enable-checker alpha.unix.MallocWithAnnotations -enable-checker alpha.unix.PthreadLock -enable-checker alpha.unix.SimpleStream -enable-checker alpha.unix.Stream -enable-checker alpha.unix.cstring.BufferOverlap -enable-checker alpha.unix.cstring.NotNullTerminated -enable-checker alpha.unix.cstring.OutOfBounds"
 | 
						|
OUTPUTDIR="scan-build_output"
 | 
						|
 | 
						|
function print_usage {
 | 
						|
cat << EOF
 | 
						|
$0 Usage:
 | 
						|
 | 
						|
Options/Flags:
 | 
						|
-c|--compiler	: either [clang|gcc]
 | 
						|
--cflags	: cflags you would like to add to the default set:
 | 
						|
		  "${CFLAGS}"
 | 
						|
 | 
						|
--configure	: configure flags you would like to use instead off the default set:
 | 
						|
		  "${CONFIGURE_FLAGS}"
 | 
						|
 | 
						|
--make		: make flags you would like to use instead off the default set:
 | 
						|
		  "${MAKE_FLAGS}"
 | 
						|
 | 
						|
--scanbuild	: scanbuild flags you would like to use instead of the default set:
 | 
						|
		  "${SCANBUILD_FLAGS}"
 | 
						|
 | 
						|
--outputdir	: directory where scan-build should create the html files. default:
 | 
						|
		  "`pwd`/${OUTPUTDIR}"
 | 
						|
 | 
						|
-h|--help	: this help
 | 
						|
EOF
 | 
						|
}
 | 
						|
 | 
						|
for i in "$@"
 | 
						|
do
 | 
						|
	case $i in
 | 
						|
		-c=*|--compiler=*)
 | 
						|
			COMPILER="${i#*=}"
 | 
						|
			shift
 | 
						|
		;;
 | 
						|
		--cflags=*)
 | 
						|
			CFLAGS="${i#*=}"
 | 
						|
			shift
 | 
						|
		;;
 | 
						|
		--configure=*)
 | 
						|
			CONFIGURE_FLAGS="${i#*=}"
 | 
						|
			shift
 | 
						|
		;;
 | 
						|
		--make=*)
 | 
						|
			MAKE_FLAGS="${i#*=}"
 | 
						|
			shift
 | 
						|
		;;
 | 
						|
		--scanbuild=*)
 | 
						|
			SCANBUILD_FLAGS="${i#*=}"
 | 
						|
			shift
 | 
						|
		;;
 | 
						|
		--outputdir=*)
 | 
						|
			OUTPUTDIR="${i#*=}"
 | 
						|
			shift
 | 
						|
		;;
 | 
						|
		-h|--help)
 | 
						|
			print_usage
 | 
						|
			exit
 | 
						|
		;;
 | 
						|
	esac
 | 
						|
done
 | 
						|
 | 
						|
if [ "${COMPILER}" == "clang" ] && [ ! -z "`which clang`" ]; then
 | 
						|
	CCC_CC="`which`clang"
 | 
						|
	CCC_CXX="`which clang++`"
 | 
						|
	CFLAGS="-fblocks ${CFLAGS}"
 | 
						|
elif [ "${COMPILER}" == "gcc" ] && [ ! -z "`which gcc`" ]; then
 | 
						|
	CCC_CC="`which gcc`"
 | 
						|
	CCC_CXX="`which g++`"
 | 
						|
	CFLAGS="${CFLAGS}"
 | 
						|
else
 | 
						|
	echo "Unknown compiler: $2, needs to be either clang or gcc"
 | 
						|
	exit
 | 
						|
fi
 | 
						|
 | 
						|
if [ ! -f config.status ]; then
 | 
						|
	echo "Running ./configure ${CONFIGURE_FLAGS} ..."
 | 
						|
	${SCANBUILD} ${SCANBUILD_FLAGS} -o ${OUTPUTDIR} ./configure ${CONFIGURE_FLAGS}
 | 
						|
	if [ $? != 0 ]; then
 | 
						|
		echo "Configure error occurred, see output / config.log"
 | 
						|
		exit
 | 
						|
	fi
 | 
						|
	make clean
 | 
						|
fi
 | 
						|
if [ -f config.status ]; then
 | 
						|
	echo "Running scan-build make ${MAKE_FLAGS} ..."
 | 
						|
	${SCANBUILD} ${SCANBUILD_FLAGS} -o ${OUTPUTDIR} make ${MAKE_FLAGS}
 | 
						|
fi
 |