Skip to content
Snippets Groups Projects
hudson-sflphone-script.sh 3.58 KiB
Newer Older
#!/bin/bash
#
# Script used by Hudson continious integration server to build SFLphone
#
# Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>

XML_RESULTS="cppunitresults.xml"
TEST=0
BUILD=
CODE_ANALYSIS=0
DOXYGEN=0
CONFIGDIR=~/.config
SFLCONFDIR=${CONFIGDIR}/sflphone

function run_code_analysis {
	# Check if cppcheck is installed on the system
	if [ `which cppcheck &>/dev/null ; echo $?` -ne 1 ] ; then
		pushd src
		cppcheck . --enable=all --xml --inline-suppr 2> cppcheck-report.xml
		popd
function gen_doxygen {
	# Check if doxygen is installed on the system
	if [ `which doxygen &>/dev/null ; echo $?` -ne 1 ] ; then
		pushd doc/doxygen
		doxygen core-doc.cfg.in

function launch_unit_test_daemon {
        # Run the unit tests for the daemon
        pushd daemon/test
        # Remove the previous XML test file
        rm -rf $XML_RESULTS
        ./run_tests.sh || exit 1
        popd
}


function launch_functional_test_daemon {
        # Run the python functional tests for the daemon

        # make sure no other instance are currently running
        killall sflphoned
        killall sipp

        # make sure the configuration directory created
        CONFDIR=~/.config
        SFLCONFDIR=${CONFDIR}/sflphone

        eval `dbus-launch --auto-syntax`

        if [ ! -d ${CONFDIR} ]; then
            mkdir ${CONFDIR}
        fi

        if [ ! -d ${SFLCONFDIR} ]; then
            mkdir ${SFLCONFDIR}
        fi

        # make sure the most recent version of the configuration
        # is installed
        pushd tools/pysflphone
            cp -f sflphoned.functest.yml ${SFLCONFDIR}
        popd

        # launch sflphone daemon, wait some time for
        # dbus registration to complete
        pushd daemon
            ./src/sflphoned &
            sleep 3
        popd

        # launch the test script
        pushd tools/pysflphone
            nosetests --with-xunit test_sflphone_dbus_interface.py
        popd
}


function build_daemon {
	# Compile the daemon
	pushd daemon
	# Run static analysis code tool
	if [ $CODE_ANALYSIS == 1 ]; then
		run_code_analysis
	fi
	make distclean
	./autogen.sh
	# Compile pjproject first
	pushd libs/pjproject
	./autogen.sh
	./configure
	make && make dep
	popd
	./configure --prefix=/usr
	make clean
	make -j
	# Generate documentation
	make doc
	if [ $DOXYGEN == 1 ]; then
		gen_doxygen
	fi
	make check
	popd
}

function build_gnome {
	# Compile the plugins
	pushd plugins
	make distclean
	./autogen.sh
	./configure --prefix=/usr
	make -j
	popd

	# Compile the client
	pushd gnome
	make distclean
	./autogen.sh
	./configure --prefix=/usr
	make clean
	make -j 1
	make check
	popd
if [ "$#" -eq 0 ]; then   # Script needs at least one command-line argument.
	echo "Usage $0 -b select which one to build: daemon or gnome
				  -t enable unit tests after build"
	exit $E_OPTERR

git clean -f -d -x

while getopts ":b: t a d" opt; do
	case $opt in
		b)
			echo "-b was triggered. Parameter: $OPTARG" >&2
			BUILD=$OPTARG
			;;
		t)
			echo "-t was triggered. Tests will be run" >&2
			TEST=1
			;;
		a)
			echo "-a was triggered. Static code analysis will be run" >&2
			CODE_ANALYSIS=1
			;;
		d)
			echo "-d was triggered. Doxygen documentation will be generated" >&2
			DOXYGEN=1
			;;
		\?)
			echo "Invalid option: -$OPTARG" >&2
			exit 1
			;;
		:)
			echo "Option -$OPTARG requires an argument." >&2
			exit 1
			;;
		esac
done

# Call appropriate build function, with parameters if needed
if [ $TEST == 1 ]; then
    # launch_unit_test_daemon
    launch_functional_test_daemon
fi

# SUCCESS
exit 0