mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-11-04 05:15:22 +00:00 
			
		
		
		
	
		
			
	
	
		
			137 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			137 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#!/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
							 |