天天看點

The script for Installing UHD+GNUradio

#!/bin/bash
#
# Build script for UHD+GnuRadio on Fedora and Ubuntu
#
#
#
# Updates: https://github.com/guruofquality/grextras/wiki
# Updates: https://github.com/balint256/gr-baz.git
#
#
#
# Exit function--Id like to be able to upload stats to a website somewhere...
#
function doexit
{
	cat <<"!EOF!"

=======================================================================
If you have found this script useful and time-saving, consider a 
donation to help me keep build-gnuradio, simple_ra, SIDsuite,
meteor_detector, simple_fm_rcv, and multimode maintained and up to date.
A simple paypal transfer to [email protected] is all you need to do.
======================================================================
!EOF!

	echo -n "Send success/fail info to sbrac.org?"
	read ans
		case $ans in
			y|Y|YES|yes|Yes)
				wget http://www.sbrac.org/bgrstats.php?status="$1"?systype=${SYSTYPE}?sysinfo="`uname -a`" >/dev/null 2>&1
				echo Thanks
				;;
		esac
	exit
}
	
function help {
	cat <<!EOF!
	
Usage: build-gnuradio [--help|-h] [-v|--verbose] [-jN] [-ja] 
                      [-l|--logfile logfile ] [-u|--users ulist] [-m] funcs

-m             - Use HEAD of *master* branch, rather than *maint*.
-o             - Use v3.6.5.1

-v|--verbose   - turn on verbose logging to stdout

-jN            - have make use N concurrent jobs

-ja            - have make use N concurrent jobs with auto setting of N
                 (based on number of cpu cores on build system)
                 

-u|--users ul  - add comma-separated users to 'usrp' group in addition
                 to calling user ( $USER )
                 
                
-l|--logfile lf - log messages to 'lf'
-ut <tag>       - set tag for UHD checkout to <tag>
-ucf <ucflags>  - set UHD CMake flags to <ucflags>
-gt <tag>       - set tag for Gnu Radio checkout to <tag>
-gcf <gcflags>  - set Gnu Radio CMake flags to <gcflags>
-e|--extras     - add an item to "extras" to be built after Gnu Radio/UHD/gs-osmosdr
available funcs are:

all             - do all functions
prereqs         - install prerequisites
gitfetch        - use GIT to fetch Gnu Radio and UHD
uhd_build       - build only UHD
firmware        - fetch firmware/FPGA
gnuradio_build  - build only Gnu Radio
mod_groups      - modify the /etc/groups and add user to group 'usrp'
mod_udev        - add UDEV rule for USRP1
mod_sysctl      - modify SYSCTL for larger net buffers
!EOF!

}

if [ $USER = root -o $UID -eq 0 ]
then
	echo Please run this script as an ordinary user
	echo   it will acquire root privileges as it needs them via \"sudo\".
	exit
fi

VERBOSE=No
JFLAG=""
LOGDEV=/dev/null
USERSLIST=None
JOSHMODE=False
UTAG=None
GTAG=None
export LC_LANG=C
EXTRAS=""
MASTER_MODE=0
OLD_MODE=0
PULLED_LIST="gnuradio uhd rtl-sdr gr-osmosdr gr-iqbal hackrf gr-baz bladeRF libairspy"
which python3 >/dev/null 2>&1
if [ $? -eq 0 ]
then
			CMAKE_FLAG1=-DPythonLibs_FIND_VERSION:STRING="2.7"
			CMAKE_FLAG2=-DPythonInterp_FIND_VERSION:STRING="2.7"
fi
while : 
do
	case $1 in
		-ja)
			cnt=`grep 'processor.*:' /proc/cpuinfo|wc -l`
			cnt=`expr $cnt - 1`
			if [ $cnt -lt 1 ]
			then
				cnt=1
			fi
			JFLAG=-j$cnt
			shift
			;;
			
		-j[123456789])
			JFLAG=$1
			shift
			;;
			
		-v|--verbose)
			LOGDEV=/dev/stdout
			shift
			;;
			
		-l|--logfile)
			case $2 in
				/*)
					LOGDEV=$2
				;;
				*)
					LOGDEV=`pwd`/$2
				;;
			esac
			shift
			shift
			rm -f $LOGDEV
			echo $LOGDEV Starts at: `date` >>$LOGDEV 2>&1
			;;
			
		-u|--users)
			USERSLIST=$2
			shift
			shift
			;;
		
		-m|--master)
			MASTER_MODE=1
			shift
			;;

        -o|--old)
            OLD_MODE=1
            shift
            ;;
            
		-h|--help)
			help
			exit
			;;
			
		-ut)
			UTAG=$2
			shift
			shift
			;;
			
		-ucf)
			UCFLAGS=$2
			shift 2
			;;
		
			
		-gt)
			GTAG=$2
			shift
			shift
			;;
		-gcf)
			GCFLAGS=$2
			shift
			shift
			;;
			
			
		-e|--extras)
			EXTRAS=$EXTRAS" "$2
			shift 2
			;;
			
		-*)
			echo Unrecognized option: $1
			echo
			help
			exit
			break
			;;
		*)
			break
			;;
	esac
done

CWD=`pwd`
SUDOASKED=n
SYSTYPE=unknown
good_to_go=no
for file in /etc/fedora-release /etc/linuxmint/info /etc/lsb-release /etc/debian_version /etc/redhat-release
do
	if [ -f $file ]
	then
		good_to_go=yes
	fi
done
if [ $good_to_go = no ]
then
	echo Supported systems: Fedora, Ubuntu, Redhat, Debian, Mint, OpenSuse
	echo You appear to be running none of the above, exiting
	exit
fi

echo This script will install Gnu Radio from current GIT sources
echo You will require Internet access from the computer on which this
echo script runs.  You will also require SUDO access.  You will require
echo approximately 500MB of free disk space to perform the build.
echo " "
echo This script will, as a side-effect, remove any existing Gnu Radio
echo installation that was installed from your Linux distribution packages.
echo It must do this to prevent problems due to interference between
echo a linux-distribution-installed Gnu Radio/UHD and one installed from GIT source.
echo " "
echo The whole process may take up to two hours to complete, depending on the
echo capabilities of your system.
echo
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo NOTE: if you run into problems while running this script, you can re-run it with
echo the --verbose option to produce lots of diagnostic output to help debug problems.
echo This script has been written to anticipate some of the more common problems one might
echo encounter building ANY large, complex software package.  But it is not pefect, and
echo there are certainly some situations it could encounter that it cannot deal with
echo gracefully.  Altering the system configuration from something reasonably standard,
echo removing parts of the filesystem, moving system libraries around arbitrarily, etc,
echo it likely cannot cope with.  It is just a script.  It isn\'t intuitive or artificially
echo intelligent.  It tries to make life a little easier for you, but at the end of the day
echo if it runs into trouble, a certain amount of knowledge on your part about
echo system configuration and idiosyncrasies will inevitably be necessary.
echo
echo
echo -n Proceed?

read ans
case $ans in
	y|Y|YES|yes|Yes)
		PROCEED=y
	;;
	*)
		exit
esac

SPACE=`df $HOME| grep -v blocks|grep '%'`
SPACE=`echo $SPACE | awk '/./ {n=NF-2; printf ("%d\n", $n/1.0e3)}'`


if [ $SPACE -lt 500 ]
then
	echo "You don't appear to have enough free disk space on $HOME"
	echo to complete this build/install
	echo exiting
	doexit DISKSPACE
fi

total=0
for file in $PULLED_LIST
do
	found=0
	for instance in ${file}.20*
	do
		if [ -d $instance ]
		then
			found=1
			sz=`du -s $instance|awk '{print $1}'`
			total=`expr $total + $sz`
		fi
	done
done
total=`expr $total '*' 1024`
total=`expr $total / 1000000`
if [ $total -gt 100 ]
then
	echo Your old 'uhd.*' and 'gnuradio.*' etc directories are using roughly $total MB
	echo of disk space:
	for file in $PULLED_LIST
	do
		for instance in ${file}.20*
		do
			if [ -d $instance ]
			then
				ls -ld $instance
			fi
		done
	done
	echo " "
	echo -n Remove them'?'
	read ans
	
	case $ans in
		y|Y|YES|yes|Yes)
			for file in $PULLED_LIST
			do
				for instance in ${file}.20*
				do
					if [ -d $instance ]
					then
						echo removing ${instance}
						rm -rf ${instance}
					fi
				done
			done
			echo Done
			;;
	esac
fi
rm -rf *.20*.bgmoved

function my_echo {
	if [ $LOGDEV = /dev/stdout ]
	then
		echo $*
	else
		echo $*
		echo $* >>$LOGDEV 2>&1
	fi
}

function checkcmd {
	found=0
	which $1 >/dev/null 2>&1
	x=$?
	if [ $x -eq 0 ]
	then
		found=1
	fi
	for place in /bin /usr/bin /usr/local/bin /sbin /usr/sbin /usr/local/sbin /opt/bin /opt/local/bin
	do
		if [ -e $place/$1 ]
		then
			found=1
		fi
	done
	if [ $found -eq 0 ]
	then
		which $1 >/dev/null 2>&1
		if [ $? -eq 0 ]
		then
			found=1
		fi
	fi
	if [ $found -eq 0 ]
	then
		my_echo Failed to find just-installed command \'$1\' after pre-requisite installation.
		my_echo This very likely indicates that the pre-requisite installation failed
		my_echo to install one or more critical pre-requisites for Gnu Radio/UHD
		doexit PREREQFAIL-CMD-$1
	fi
}

function checklib {
	found=0
	my_echo -n Checking for library $1 ...
	for dir in /lib /usr/lib /usr/lib64 /lib64 /usr/lib/x86_64-linux-gnu /usr/lib/i386-linux-gnu \
	    /usr/lib/arm-linux-gnueabihf /usr/lib/arm-linux-gnueabi
	do
		for file in $dir/${1}*.so*
		do
			if [ -e "$file" ]
			then
				found=1
			fi
		done
	done
	if [ $found -le 0 ]
	then
		my_echo Failed to find libraries with prefix \'$1\' after pre-requisite installation.
		my_echo This very likely indicates that the pre-requisite installation failed
		my_echo to install one or more critical pre-requisites for Gnu Radio/UHD
		my_echo exiting build
		doexit PREREQFAIL-LIB-$1
	else
		my_echo Found library $1
	fi
}

function checkpkg {
	my_echo Checking for package $1
	if [ `apt-cache search $1 | wc -l` -eq 0 ]
	then
		my_echo Failed to find package \'$1\' in known package repositories
		my_echo SOME THINGS MAY NOT BUILD AS A RESULT
		# doexit PREREQFAIL-PKG-$1
	fi
}
		
function prereqs {
	sudocheck
	my_echo Installing prerequisites.
	my_echo "====>" THIS MAY TAKE QUITE SOME TIME "<====="
	#
	# It's a Fedora system
	#
	if [ -f /etc/fedora-release ]
	then
		SYSTYPE=Fedora
		case `cat /etc/fedora-release` in
		*12*|*13*|*14*|*15*|*16*|*17*|*18*)
			sudo yum -y erase 'gnuradio*' >>$LOGDEV 2>&1
			sudo yum -y erase 'libgruel-*' >>$LOGDEV 2>&1
			sudo yum -y erase 'libgruel*' >>$LOGDEV 2>&1
			sudo yum -y groupinstall "Engineering and Scientific" "Development Tools" \
					"Software Development Tools" "C Development Tools and Libraries" >>$LOGDEV 2>&1
			sudo yum -y install fftw-devel cppunit-devel wxPython-devel \
			  boost-devel alsa-lib-devel numpy gsl-devel python-devel pygsl \
			  python-cheetah python-mako python-lxml PyOpenGL qt-devel qt qt4 qt4-devel \
			  PyQt4-devel qwt-devel qwtplot3d-qt4-devel libusb-devel libusb \
			  libusb1 libusb1-devel cmake git wget python-docutils \
			  PyQwt PyQwt-devel qwt-devel gtk2-engines xmlrpc-c-"*" tkinter orc python-requests \
			  orc-devel python-sphinx SDL-devel swig libzmq >>$LOGDEV 2>&1
		;;
		
		*19*|*20*|*21*)
			sudo yum -y erase 'gnuradio*' >>$LOGDEV 2>&1
			sudo yum -y erase 'libgruel-*' >>$LOGDEV 2>&1
			sudo yum -y erase 'libgruel*' >>$LOGDEV 2>&1
			sudo yum -y groupinstall "Engineering and Scientific" "Development Tools" \
				"Software Development Tools" "C Development Tools and Libraries" >>$LOGDEV 2>&1
			sudo yum -y install fftw-devel cppunit-devel wxPython-devel \
			  boost-devel alsa-lib-devel numpy gsl-devel python-devel pygsl \
			  python-cheetah python-mako python-lxml PyOpenGL qt-devel qt qt4 qt4-devel \
			  PyQt4-devel qwt-devel qwtplot3d-qt4-devel \
			  libusbx-devel cmake git wget python-docutils cppzmq-devel \
			  PyQwt PyQwt-devel qwt-devel gtk2-engines xmlrpc-c-"*" tkinter orc \
			  orc-devel python-sphinx SDL-devel swig  zeromq2-devel python-zmq comedilib comedilib-devel thrift-devel \
			  python-thrift scipy >>$LOGDEV 2>&1
			  

		;;
		*22*|*23*)
			sudo dnf -y erase 'gnuradio*' >>$LOGDEV 2>&1
			sudo dnf -y erase 'libgruel-*' >>$LOGDEV 2>&1
			sudo dnf -y erase 'libgruel*' >>$LOGDEV 2>&1
			sudo dnf -y groupinstall "Engineering and Scientific" "Development Tools" \
				"Software Development Tools" "C Development Tools and Libraries" >>$LOGDEV 2>&1
			sudo dnf -y install fftw-devel cppunit-devel wxPython-devel boost-devel \
				alsa-lib-devel numpy gsl-devel python-devel pygsl python-cheetah python-mako \
				python-lxml PyOpenGL qt-devel PyQt4-devel qwt-devel qwtplot3d-qt4-devel \
				libusbx-devel cmake python-docutils PyQwt PyQwt-devel gtk2-engines xmlrpc-c-"*" \
				tkinter  orc-devel python-sphinx SDL-devel swig perl-ZMQ-LibZMQ2 perl-ZMQ-LibZMQ2 \
				zeromq zeromq-devel python-requests \
				gcc-c++ doxygen zeromq-ada-devel  cppzmq-devel \
				perl-ZeroMQ    amavisd-new-zeromq amavisd-new-snmp-zeromq    \
				php-zmq   python-zmq  czmq  uwsgi-logger-zeromq \
				comedilib comedilib-devel	pygtk2 ncurses-"*" thrift-devel python-thrift scipy >>$LOGDEV 2>&1
		;;
		*)
			my_echo Only Fedora release 12 - 23 are supported by this script
			doexit WRONGRELEASE
			;;
		esac
	
	#
	# It's a RedHat system
	elif [ -f /etc/redhat-release ]
	then
		SYSTYPE=Redhat
		case `cat /etc/redhat-release` in
		*elease*6*)
			sudo yum -y erase 'gnuradio*' >>$LOGDEV 2>&1
			sudo yum -y erase 'libgruel-*' >>$LOGDEV 2>&1
			sudo yum -y erase 'libgruel*' >>$LOGDEV 2>&1
			sudo yum -y groupinstall "Engineering and Scientific" "Development Tools" >>$LOGDEV 2>&1
			sudo yum -y install fftw-devel cppunit-devel wxPython-devel libusb-devel \
			  boost-devel alsa-lib-devel numpy gsl-devel python-devel pygsl \
			  python-cheetah python-mako python-lxml PyOpenGL qt-devel qt qt4 qt4-devel \
			  PyQt4-devel qwt-devel qwtplot3d-qt4-devel libusb libusb-devel \
			  libusb1 libusb1-devel cmake git wget python-docutils \
			  PyQwt PyQwt-devel qwt-devel gtk2-engines xmlrpc-c-"*" libzmq libzmq-dev \
			  ncurses-"*" tkinter orc python-requests >>$LOGDEV 2>&1
		;;
		*elease*7*)
			sudo yum -y erase 'gnuradio*' >>$LOGDEV 2>&1
			sudo yum -y erase 'libgruel-*' >>$LOGDEV 2>&1
			sudo yum -y erase 'libgruel*' >>$LOGDEV 2>&1
			

			sudo yum -y install fftw-devel    cppunit-devel	python-devel	libusb-devel 	\
				boost-devel	alsa-lib-devel    numpy    gsl-devel    python-cheetah    \
				python-mako    qt-devel    PyOpenGL    PyQt4-devel    libusb1-devel    \
				cmake    python-docutils    qt-devel gcc-c++ swig >>$LOGDEV 2>&1
			sudo yum install -y epel-release >>$LOGDEV 2>&1
			sudo yum -y update >>$LOGDEV 2>&1
			
			sudo yum -y install libsphinxclient-devel    php-pecl-sphinx    python-catkin-sphinx    \
				python-ipython-sphinx git \
				python-oslo-sphinx    python-sphinx-doc    python-sphinx-theme-openlmi    \
				python-sphinx_rtd_theme    python-sphinxcontrib-adadomain    \
				python-sphinxcontrib-cheeseshop    python-sphinxcontrib-httpdomain    \
				python-sphinxcontrib-issuetracker    python-sphinxcontrib-napoleon    sphinx-java    \
				sphinx-php      python-cornice-sphinx     python-sphinx    sphinx     libsphinxclient \
				qwt-devel qwt-doc qwtpolar qwtpolar-devel qwtpolar-doc qwt \
				cppzmq-devel     perl-ZMQ-Constants     perl-ZMQ-LibZMQ3     czmq    \
				python-txzmq    python-zmq python-zmq-tests cmake-gui	wxPython-devel \
				ncurses-"*"  >>$LOGDEV 2>&1
		;;
			
		*)
			my_echo Your Redhat system release must be release 6 or 7 to proceed
			doexit WRONGRELEASE
			;;
		esac

	#
	# It's a Mint system
	#
	elif [ -f /etc/linuxmint/info ]
	then
		SYSTYPE=Mint
		sudo apt-get -y purge 'gnuradio-*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'libgruel-*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'libgruel*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'libgruel0*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'libgnuradio*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'python-gnuradio*' >>$LOGDEV 2>&1
		case `grep RELEASE /etc/linuxmint/info` in
		*11*|*12*|*13*|*14*|*15*|*16*|*17*)
			PKGLIST="libfontconfig1-dev libxrender-dev libpulse-dev swig g++
			automake autoconf libtool python-dev libfftw3-dev
			libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77
			libsdl1.2-dev python-wxgtk2.8 git-core
			libqt4-dev python-numpy ccache python-opengl libgsl0-dev
			python-cheetah python-mako python-lxml doxygen qt4-dev-tools libusb-1.0-0-dev
			libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python-qwt5-qt4
			cmake git-core wget libxi-dev python-docutils gtk2-engines-pixbuf r-base-dev python-tk
			liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq libzmq-dev libzmq1 libzmq1-dev python-requests
			libncurses5 libncurses5-dev"
			;;
		*18*)
			PKGLIST="libfontconfig1-dev libxrender-dev libpulse-dev swig g++
			automake autoconf libtool python-dev libfftw3-dev
			libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77
			libsdl1.2-dev python-wxgtk3.0 git-core
			libqt4-dev python-numpy ccache python-opengl libgsl0-dev
			python-cheetah python-mako python-lxml doxygen qt4-dev-tools libusb-1.0-0-dev
			libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python-qwt5-qt4
			cmake git-core wget libxi-dev python-docutils gtk2-engines-pixbuf r-base-dev python-tk
			liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq libzmq-dev  python-requests
			libncurses5 libncurses5-dev"
			;;
			
		*)
			my_echo Your Mint release must be at least Linux Mint 11 to proceed
			doexit WRONGRELEASE
			;;
		esac
		for pkg in $PKGLIST; do checkpkg $pkg; done
		for pkg in $PKGLIST
		do
			sudo apt-get -y --ignore-missing install $pkg >>$LOGDEV 2>&1
		done

	#
	# It's a Ubuntu system
	# 
	elif [ -f /etc/lsb-release -a ! -f /etc/SuSE-release ]
	then
		SYSTYPE=Ubuntu
		sudo apt-get -y purge 'gnuradio-*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'libgruel-*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'libgruel*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'libgruel0*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'libgnuradio*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'python-gnuradio*' >>$LOGDEV 2>&1
		case `grep DISTRIB_RELEASE /etc/lsb-release` in
		*15.*|*16.*)
			PKGLIST="libqwt6 libfontconfig1-dev libxrender-dev libpulse-dev swig g++
			automake autoconf libtool python-dev libfftw3-dev
			libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77
			libsdl1.2-dev python-wxgtk2.8 git-core
			libqt4-dev python-numpy ccache python-opengl libgsl0-dev
			python-cheetah python-mako python-lxml doxygen qt4-default qt4-dev-tools libusb-1.0-0-dev
			libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python-qwt5-qt4
			cmake git-core wget libxi-dev python-docutils gtk2-engines-pixbuf r-base-dev python-tk
			liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq libzmq-dev libzmq1 libzmq1-dev python-requests
			python-sphinx comedi-dev python-zmq libncurses5 libncurses5-dev python-wxgtk3.0"
			CMAKE_FLAG1=-DPythonLibs_FIND_VERSION:STRING="2.7"
			CMAKE_FLAG2=-DPythonInterp_FIND_VERSION:STRING="2.7"
			;;
					
		*13.*|*14.*)
			PKGLIST="libfontconfig1-dev libxrender-dev libpulse-dev swig g++
			automake autoconf libtool python-dev libfftw3-dev
			libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77
			libsdl1.2-dev python-wxgtk2.8 git-core
			libqt4-dev python-numpy ccache python-opengl libgsl0-dev
			python-cheetah python-mako python-lxml doxygen qt4-default qt4-dev-tools libusb-1.0-0-dev
			libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python-qwt5-qt4
			cmake git-core wget libxi-dev python-docutils gtk2-engines-pixbuf r-base-dev python-tk
			liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq1 libzmq1-dev libzmq libzmq-dev python-requests
			libncurses5 libncurses5-dev"
			CMAKE_FLAG1=-DPythonLibs_FIND_VERSION:STRING="2.7"
			CMAKE_FLAG2=-DPythonInterp_FIND_VERSION:STRING="2.7"
			;;
			
		*11.*|*12.10*)
			PKGLIST="libfontconfig1-dev libxrender-dev libpulse-dev swig g++
			automake autoconf libtool python-dev libfftw3-dev
			libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77
			libsdl1.2-dev python-wxgtk2.8 git-core
			libqt4-dev python-numpy ccache python-opengl libgsl0-dev
			python-cheetah python-mako python-lxml doxygen qt4-dev-tools libusb-1.0-0-dev
			libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python-qwt5-qt4
			cmake git-core wget libxi-dev python-docutils gtk2-engines-pixbuf r-base-dev python-tk
			liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq libzmq-dev python-requests"
			CMAKE_FLAG1=-DPythonLibs_FIND_VERSION:STRING="2.7"
			CMAKE_FLAG2=-DPythonInterp_FIND_VERSION:STRING="2.7"
			;;
		
		*12.04*)
			PKGLIST="libfontconfig1-dev libxrender-dev libpulse-dev swig g++
			automake autoconf libtool python-dev libfftw3-dev
			libcppunit-dev libboost1.48-all-dev libusb-dev libusb-1.0-0-dev fort77
			libsdl1.2-dev python-wxgtk2.8 git-core
			libqt4-dev python-numpy ccache python-opengl libgsl0-dev
			python-cheetah python-mako python-lxml doxygen qt4-dev-tools libusb-1.0-0-dev
			libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python-qwt5-qt4
			cmake git-core wget libxi-dev python-docutils gtk2-engines-pixbuf r-base-dev python-tk
			liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq libzmq-dev python-requests"
			;;
			
		*)
			my_echo Your Ubuntu release not supported--cannot proceed
			doexit WRONGRELEASE
			;;
		esac
		for pkg in $PKGLIST; do checkpkg $pkg; done
		my_echo Done checking packages
		for pkg in $PKGLIST
		do
			sudo apt-get -y --ignore-missing install $pkg >>$LOGDEV 2>&1
		done
		
	#
	# It's a Debian system
	#
	elif [ -f /etc/debian_version ]
	then
		SYSTYPE=Debian
		sudo apt-get -y purge 'gnuradio-*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'libgruel-*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'libgruel*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'libgruel0*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'libgnuradio*' >>$LOGDEV 2>&1
		sudo apt-get -y purge 'python-gnuradio*' >>$LOGDEV 2>&1
		case `cat /etc/debian_version` in
		*6.0*|*wheezy*|*sid*|*7.1*|*7.0*|*7.2*|*7.3*|*7.4*|*7.5*|*7.6*|*7.7*)
			PKGLIST="libfontconfig1-dev libxrender-dev libpulse-dev swig g++
			automake autoconf libtool python-dev libfftw3-dev
			libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77
			libsdl1.2-dev python-wxgtk2.8 git-core
			libqt4-dev python-numpy ccache python-opengl libgsl0-dev
			python-cheetah python-mako python-lxml doxygen qt4-dev-tools libusb-1.0-0-dev
			libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python-qwt5-qt4
			cmake git-core wget libxi-dev python-docutils gtk2-engines-pixbuf r-base-dev python-tk
			liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libportaudio2 portaudio19-dev
			ca-certificates libzmq libzmq-dev python-requests libncurses5 libncurses5-dev"
			;;
		*8.3*)
			PKGLIST="libfontconfig1-dev libxrender-dev libpulse-dev swig g++
			automake autoconf libtool python-dev libfftw3-dev
			libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77
			libsdl1.2-dev python-wxgtk3.0 git-core
			libqt4-dev python-numpy ccache python-opengl libgsl0-dev
			python-cheetah python-mako python-lxml doxygen qt4-dev-tools libusb-1.0-0-dev
			libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python-qwt5-qt4
			cmake git-core wget libxi-dev python-docutils gtk2-engines-pixbuf r-base-dev python-tk
			liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libportaudio2 portaudio19-dev
			ca-certificates libzmq1 libzmq-dev python-requests libncurses5 libncurses5-dev"
			;;
			
		*)
			my_echo Unsupported Debian version `cat /etc/debian_version`
			doexit WRONGRELEASE
			;;
		esac
		for pkg in $PKGLIST; do checkpkg $pkg; done
		sudo apt-get -y --ignore-missing install $PKGLIST >>$LOGDEV 2>&1
	elif [ -f /etc/SuSE-release ]
	then
		SYSTYPE=OpenSuSE
		if grep -q 12.1 /etc/SuSE-release
		then
			cool=1
		else
			my_echo Only OpenSuSE 12.1 is supported by this script
			doexit WRONGRELEASE
		fi
		sudo zypper install cmake cppunit-devel doxygen fftw3-devel \
		git gsl-devel libjack-devel libqt4-devel libqwtplot3d-devel \
		libSDL-devel libusb-1_0-devel orc portaudio portaudio-devel \
		python-cheetah python-mako python-devel python-lxml python-wxGTK python-wxWidgets-devel \
		qwt-devel wxWidgets-devel boost-devel xmlto texlive-latex libzmq libzmq-dev  python-requests >>$LOGDEV 2>&1
		
	else
		my_echo This script supports only Ubuntu,Mint,Fedora, Debian and OpenSuse systems
		my_echo Your Fedora system must be at least Fedora 12
		my_echo Your Ubuntu system must be at least Ubuntu 9.04
		my_echo Your Mint system must be at least Mint 11
		my_echo Your Debian system must be release 6
		doexit WRONGSYSTEM
	fi
	PATH=$PATH
	export PATH

	checkcmd git
	checkcmd cmake
	
	if [ $SYSTYPE = Fedora ]
	then
		checklib libusb-0 0
		checklib libusb-1 0
	else
		checklib libusb 2
	fi
	
	checklib libboost 5
	checklib libcppunit 0
	checklib libfftw 5
	checklib libgsl 0
	
	my_echo Done
}


function gitfetch {
	date=`date +%Y%m%d%H%M%S`
	V=3.7/maint
	if [ $MASTER_MODE -eq 1 ]
	then
		V=Master/HEAD
	fi
	if [ $OLD_MODE -eq 1 ]
	then
		V=3.6.5.1
	fi
	echo This script will fetch Gnu Radio version $V from the repositories, along with compatible
	echo  extras.
	echo -n Is this OK?
	read ans
	
	case $ans in
		Y|y|YES|yes|Yes)
			;;
		*)
			exit
			;;
	esac
		

	my_echo "Fetching various packages (Gnu Radio, UHD, gr-osmosdr, gr-iqbal, etc)"
	my_echo "  via the Internet"
	my_echo "=======> THIS MAY TAKE QUITE SOME TIME <========="

	cd $CWD
	for dir in ${PULLED_LIST}
	do
		if [ -d $dir ]
		then
			mv $dir ${dir}.$date
		fi
	done
	
	#
	# GIT the gnu radio source tree
	#
	my_echo -n Fetching Gnu Radio via GIT...
	if [ $JOSHMODE = False ]
	then
		if [ $MASTER_MODE -eq 0 ]
		then
			RECURSE="--recursive"
		else
			RECURSE="--recursive"
		fi
		git clone --progress $RECURSE http://git.gnuradio.org/git/gnuradio.git >>$LOGDEV 2>&1
		if [ ! -d gnuradio/gnuradio-core -a ! -d gnuradio/gnuradio-runtime ]
		then
			my_echo "Could not find gnuradio/gnuradio-{core,runtime} after GIT checkout"
			my_echo GIT checkout of Gnu Radio failed!
			doexit FETCH-GR-FAIL
		fi
		if [ $OLD_MODE -eq 1 ]
		then
			cd gnuradio
			git checkout v3.6.5.1  >>$LOGDEV 2>&1
			cd $CWD
		elif [ $MASTER_MODE -eq 0 ]
		then
			cd gnuradio
			git checkout maint >>$LOGDEV 2>&1
			cd $CWD
		fi
		
		if [ $GTAG != None ]
		then
			cd gnuradio
			git checkout $GTAG >/dev/null 2>&1
			git name-rev HEAD >tmp$$ 2>&1
			if grep -q "$GTAG" tmp$$
			then
				whee=yes
				rm -f tmp$$
			else
				my_echo Could not fetch Gnu Radio tagged $GTAG from GIT
				rm -f tmp$$
				doexit FETCH-GR-FAIL-$GTAG
			fi
			cd ..
		fi
	else
		echo Josh mode no longer supported
		doexit FETCH-GR-JOSH-FAIL
	fi
	my_echo Done

	#
	# GIT the UHD source tree
	#
	rm -rf uhd
	my_echo -n Fetching UHD via GIT...
	git clone --progress  https://github.com/EttusResearch/uhd >>$LOGDEV 2>&1

	if [ ! -d uhd/host ]
	then
		my_echo GIT checkout of UHD FAILED
		rm -f tmp$$
		doexit FETCH-UHD-FAIL
	fi
	if [ $UTAG != None ]
	then
		cd uhd
		git checkout $UTAG >/dev/null 2>&1
		git status >tmp$$ 2>&1
		if grep -q "$UTAG" tmp$$
		then
			whee=yes
			rm -f tmp$$
		else
			my_echo Could not fetch UHD tagged $UTAG from GIT
			rm -f tmp$$
		fi
		cd ..
	fi
	
	#
	# GIT the RTL-SDR source tree
	#
	rm -rf rtl-sdr
	rm -rf gr-osmosdr
	rm  -rf gr-baz
	rm -rf hackrf
	rm -rf bladeRF
	rm -rf airspy
	my_echo Fetching rtl-sdr "(rtl-sdr, gr-osmosdr, gr-iqbal, hackrf, bladeRF and airspy)" via GIT
	git clone --progress git://github.com/patchvonbraun/rtl-sdr >>$LOGDEV 2>&1
	git clone --progress git://git.osmocom.org/gr-osmosdr >>$LOGDEV 2>&1
	git clone --progress git://git.osmocom.org/gr-iqbal.git >>$LOGDEV 2>&1
	git clone https://github.com/Nuand/bladeRF.git >>$LOGDEV 2>&1
	if [ -d gr-iqbal ]
	then
		cd gr-iqbal
		if [ $OLD_MODE -eq 1 ]
		then
			git checkout gr3.6
		fi
		git submodule init  >>$LOGDEV 2>&1
		git submodule update >>$LOGDEV 2>&1
		cd ..
	fi
	git clone --progress https://github.com/mossmann/hackrf.git >>$LOGDEV 2>&1
	(cd $CWD; rm -rf airpsy; mkdir airspy; cd airspy; git clone https://github.com/airspy/host) >>$LOGDEV 2>&1
	my_echo Done
}

function uhd_build {
	#
	# UHD build
	#
	sudocheck
	if [ ! -d uhd ]
	then
		my_echo you do not appear to have the \'uhd\' directory
		my_echo you should probably use $0 gitfetch to fetch the appropriate
		my_echo files using GIT
		doexit BUILD-UHD-NOT-THERE
	fi
	if [ $UTAG != None ]
	then
		cd uhd
		git checkout $UTAG >/dev/null 2>&1
		cd ..
	fi
	my_echo Building UHD...
	my_echo "=============> THIS WILL TAKE SOME TIME <============="
	my_echo
	cd uhd/host
	rm -rf build
	if [ ! -d build ]
	then
		mkdir build
	fi
	cd build
	make clean >/dev/null 2>&1
	cmake $CMAKE_FLAG1 $CMAKE_FLAG2 $CMF1 $CMF2  $UCFLAGS ../ >>$LOGDEV 2>&1
	make clean >>$LOGDEV 2>&1
	make $JFLAG >>$LOGDEV 2>&1
	if [ $? -ne 0  ]
	then
		my_echo UHD build apparently failed
		my_echo Exiting UHD build
		doexit UHD-BUILD-FAIL1
	fi
    sudo rm -f /usr/local/lib*/libuhd*
	sudo make $JFLAG install >>$LOGDEV 2>&1
	which uhd_find_devices >/dev/null 2>&1
	x=$?
	if [ $x -ne 0 -a ! -f /usr/local/bin/uhd_find_devices -a ! -f /opt/local/bin/uhd_find_devices ]
	then
		my_echo UHD build/install apparently failed since I cannot find /usr/local/bin/uhd_find_devices
		my_echo after doing make and make install
		my_echo Exiting UHD build
		doexit UHD-BUILD-FAIL2
	fi
	sudo ldconfig >>$LOGDEV 2>&1
	my_echo Done building/installing UHD
}

function rtl_build {
	#
	# RTL build
	#
	sudocheck
	cd $CWD
	if [ ! -d rtl-sdr ]
	then
		my_echo you do not appear to have the \'rtl-sdr\' directory
		my_echo you should probably use $0 gitfetch to fetch the appropriate
		my_echo files using GIT
		doexit BUILD-RTL-NOT-THERE
	fi
	
	my_echo -n Building rtl-sdr...
	cd rtl-sdr
	cmake $CMAKE_FLAG1 $CMAKE_FLAG2 $CMF1 $CMF2 . >>$LOGDEV 2>&1
	make clean >>$LOGDEV 2>&1
	make $JFLAG >>$LOGDEV 2>&1

	if [ $? -ne 0  ]
	then
		my_echo rtl-sdr build apparently failed
		my_echo Exiting rtl-sdr build
		doexit RTL-BUILD-FAIL1
	fi
	sudo make $JFLAG install >>$LOGDEV 2>&1
	my_echo Done building rtl-sdr
	
	cd $CWD
	if [ -d hackrf ]
	then
		my_echo -n Building hackrf...
		cd hackrf
		cmake $CMAKE_FLAG1 $CMAKE_FLAG2 $CMF1 $CMF2 -DINSTALL_UDEV_RULES=ON host/ >>$LOGDEV 2>&1
		make clean >>$LOGDEV 2>&1
		make >>$LOGDEV 2>&1
		if [ $? -ne 0 ]
		then
			my_echo hackrf build failed
			my_echo Exiting hackrf build
		else
			sudo make install >>$LOGDEV 2>&1
		fi
		my_echo Done building hackrf
		cd $CWD
	fi
	cd $CWD
	if [ -d gr-iqbal ]
	then
		my_echo -n Building gr-iqbal...
		cd gr-iqbal
		mkdir -p build
		cd build
		cmake .. $CMAKE_FLAG1 $CMAKE_FLAG2 $CMF1 $CMF2 >>$LOGDEV 2>&1
		make clean >>$LOGDEV 2>&1
		make >>$LOGDEV 2>&1
		if [ $? -ne 0 ]
		then
			my_echo gr-iqbal build apparently failed
			my_echo Exiting gr-iqbal build
		else
			sudo make install  >>$LOGDEV 2>&1
			cd $CWD
			my_echo Done building gr-iqbal
		fi
	fi
	if [ -d bladeRF  ]
	then
		my_echo -n Building bladeRF...
		cd bladeRF
		cd host
		cmake . $CMAKE_FLAG1 $CMAKE_FLAG2 $CMF1 $CMF2 >>$LOGDEV 2>&1
		make clean >>$LOGDEV 2>&1
		make >>$LOGDEV 2>&1
		if [ $? -ne 0 ]
		then
			my_echo bladeRF build apparently failed
			my_echo Exiting bladeRF build
		else
			sudo make install >>$LOGDEV 2>&1
			cd $CWD
			my_echo Done building bladeRF
		fi
	fi
	
	if [ -d airspy/host ]
	then
		cd airspy/host
		mkdir build
		cd build
		cmake .. $CMAKE_FLAG1 $CMAKE_FLAG2 $CMF1 $CMF2 >>$LOGDEV 2>&1
		make clean >>$LOGDEV 2>&1
		make >>$LOGDEV 2>&1
		if [ $? -ne 0 ]
		then
			my_echo airspy build apparently failed
			my_echo Exiting airspy build
		else
			sudo make install >>$LOGDEV 2>&1
			my_echo Done building airspy
		fi
		cd $CWD
	fi
	

	cd $CWD
	if [ ! -d gr-osmosdr ]
	then
		my_echo you do not appear to have the \'gr-osmosdr\' directory
		my_echo you should probably use $0 gitfetch to fetch the appropriate
		my_echo files using GIT
		doexit RTL-BUILD-FAIL2
	fi
	cd gr-osmosdr
	if [ $OLD_MODE -eq 1 ]
	then
		git checkout gr3.6 >/dev/null 2>&1
	fi
	my_echo -n Building gr-osmosdr...
	cmake . $CMAKE_FLAG1 $CMAKE_FLAG2 $CMF1 $CMF2 >>$LOGDEV  2>&1
	make clean >>$LOGDEV 2>&1
	make $JFLAG >>$LOGDEV 2>&1
	
	if [ $? -ne 0 ]
	then
		my_echo gr-osmosdr build apparently failed
		my_echo Exit rtl-sdr/gr-osmosdr build
		doexit OSMOSDR-BUILD-FAIL
	fi
	sudo make $JFLAG install >>$LOGDEV 2>&1
	my_echo Done building gr-osmosdr
	sudo ldconfig >>$LOGDEV 2>&1
	
	cd $CWD
	my_echo Done building/installing rtl-sdr/gr-osmosdr
}

function firmware {
	sudocheck
	FOUND_DOWNLOADER=False
	dirlist="/usr/local/share /usr/local/lib /usr/local/lib64"
	prog=uhd_images_downloader
	
	PATH=$PATH:/usr/local/bin
	q=`which $prog 2>/dev/null`
	
	if [ @[email protected] != @@ ]
	then
		sudo -E $q
	else
		
		for dir in $dirlist
		do
			if [ -f $dir/uhd/utils/$prog ]
			then
				FOUND_DOWNLOADER=True
				DOWNLOADER=$dir/uhd/utils/$prog
			fi
		done
		
		if [ $FOUND_DOWNLOADER = True ]
		then
			sudo -E $DOWNLOADER
		else
			my_echo Could not find images downloader: $prog in any of $dirlist
			doexit UHD-FIRMWARE-FAIL
		fi
		my_echo Done downloading firmware to /usr/local/share/uhd/images
	fi
}

function gnuradio_build {
	sudocheck
	
	if [ $JOSHMODE = False ]
	then
		if [ ! -d gnuradio ]
		then
			my_echo you do not appear to have the \'gnuradio\' directory
			my_echo you should probably use $0 gitfetch to fetch the appropriate
			my_echo files using GIT
			doexit GNURADIO-BUILD-NOT-THERE
		fi
		if [ $GTAG != None ]
		then
			cd gnuradio
			git checkout $GTAG >/dev/null 2>&1
			cd ..
		fi
	else
		echo Josh mode no longer supported
	fi
		
	#
	# LD stuff
	#
	echo /usr/local/lib >tmp$$
	echo /usr/local/lib64 >>tmp$$

	if grep -q /usr/local/lib /etc/ld.so.conf.d/*
	then
		my_echo /usr/local/lib already in ld.so.conf.d
	else
		sudo cp tmp$$ /etc/ld.so.conf.d/local.conf
	fi
	rm -f tmp$$
	my_echo Doing ldconfig...
	sudo ldconfig >/dev/null 2>&1

	PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
	
	if [ -d /usr/local/lib64/pkgconfig ]
	then
		PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
	fi
	
	export PKG_CONFIG_PATH
	
	#
	# Build Gnuradio
	#
	if [ $JOSHMODE = False ]
	then
		cd gnuradio
	else
		echo Josh mode no longer supported
		doexit JOSH-MODE-NO
	fi

	my_echo Building Gnu Radio...
	my_echo "=========> THIS WILL TAKE QUITE A WHILE <============="
	my_echo " "
	my_echo ...Doing cmake
	if [ -d build ]
	then
		my_echo ...build directory already here
	else
		mkdir build
	fi
	cd build
	make clean >/dev/null 2>&1
	my_echo ...Cmaking
	cmake -DENABLE_BAD_BOOST=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo $CMAKE_FLAG1 $CMAKE_FLAG2 $CMF1 $CMF2 $GCFLAGS ../ >>$LOGDEV 2>&1
	my_echo ...Building
	make $JFLAG clean >>$LOGDEV 2>&1
	make $JFLAG >>$LOGDEV 2>&1
	if [ $? -ne 0 ]
	then
		my_echo make failed
		my_echo Exiting Gnu Radio build/install
		doexit GNURADIO-BUILD-FAIL
	fi
	my_echo ...Installing
	sudo rm -rf /usr/local/include/gnuradio/
	sudo rm -f /usr/local/lib*/libgnuradio*
	sudo make $JFLAG install >>$LOGDEV 2>&1
	sudo ldconfig >>$LOGDEV 2>&1
	my_echo Done building and installing Gnu Radio
	my_echo -n GRC freedesktop icons install ...
	if [ -f /usr/local/libexec/gnuradio/grc_setup_freedesktop ]
	then
		sudo chmod 755 /usr/local/libexec/gnuradio/grc_setup_freedesktop
		sudo /usr/local/libexec/gnuradio/grc_setup_freedesktop install >>$LOGDEV 2>&1
	fi
	my_echo Done
}

function do_an_extra {
	if [ -e $1 ]
	then
		my_echo Building extra module $1
		cd $1
		if [  -f CMakeLists.txt ]
		then
			mkdir -p build >>$LOGDEV 2>&1
			cd build
			cmake .. $CMAKE_FLAGS1 $CMAKE_FLAGS2 $CMF1 $CMF2 >>$LOGDEV 2>&1
			make >>$LOGDEV 2>&1
			sudo make install >>$LOGDEV 2>&1
			sudo ldconfig
		elif [ - bootstrap ]
		then
			chmod 755 bootstrap
			./bootstrap  >>$LOGDEV 2>&1
			PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig
			./configure >>$LOGDEV 2>&1
			make >>$LOGDEV 2>&1
			sudo make install >>$LOGDEV 2>&1
			sudo ldconfig
		else
			my_echo Couldnt determine how to make module $1 neither bootstrap nor CmakeLists.txt present
		fi
	else
		my_echo Couldnt build module $1 directory not there
	fi
}

function extras {
	sudocheck
	date=`date +%Y%m%d%H%M%S`
	if [ ! "@[email protected]" = "@@" ]
	then
		for module in $EXTRAS
		do
			cd $CWD
		    base=`basename $module .git`
			case $module in
			git:*|*.git|*github*)
				mv $base $base.$date.bgmoved >>$LOGDEV 2>&1 
				my_echo Doing GIT checkout for extra module $base
				git clone $module  >>$LOGDEV 2>&1
				do_an_extra $base
				;;
			htt*:*svn*)
				mv $base $base.$date >>$LOGDEV 2>&1
				my_echo Doing SVN checkout for extra module $base
				svn co $module >>$LOGDEV 2>&1
				if [ -e $base/trunk ]
				then
					do_an_extra $base/trunk
				else
					do_an_extra $base
				fi
				;;
			*)
				my_echo Ignoring malformed extra module $module
				;;
			esac
			
		done
	fi
	cd $CWD
}

function mod_groups {
	sudocheck
	#
	# Post install stuff
	#
	# USRP rules for UDEV and USRP group
	#
	#
	# Check for USRP group, and update if necessary
	if grep -q usrp /etc/group
	then
		my_echo Group \'usrp\' already in /etc/group
	else
		sudo /usr/sbin/groupadd usrp
	fi

	#
	# Check that our calling user is in the USRP group, update if necessary
	#
	if grep -q usrp.*${USER} /etc/group
	then
		my_echo User $USER already in group \'usrp\'
	else
		sudo /usr/sbin/usermod -a -G usrp $USER
cat <<"!EOF!"
********************************************************************************
This script has just modified /etc/group to place your userid '('$USER')' into group 'usrp'
In order for this change to take effect, you will need to log-out and log back
in again.  You will not be able to access your USRP1 device until you do this.

If you wish to allow others on your system to use the USRP1 device, you will need to use:

  sudo usermod -a -G usrp userid
  
For each userid you wish to allow access to the usrp

********************************************************************************

Further 
!EOF!
	fi
	if [ "$USERSLIST" = None ]
	then
		foo=bar
	else
		ul=`echo $USERSLIST|sed -e 's/,/ /g'`
		for u in $ul
		do
			sudo /usr/sbin/usermod -a -G usrp $u
			my_echo Added $u to group usrp
		done
	fi
}

function mod_udev {
	sudocheck
	#
	# Check for UHD UDEV rules file, update if exists
	#
	if [ -f $CWD/uhd/host/utils/uhd-usrp.rules ]
	then
		sudo cp $CWD/uhd/host/utils/uhd-usrp.rules /etc/udev/rules.d/10-usrp.rules
		sudo chown root /etc/udev/rules.d/10-usrp.rules
		sudo chgrp root /etc/udev/rules.d/10-usrp.rules
	fi

	#
	# Check for rtl-sdr UDEV rules file, update if exists
	#
	rm -f tmp$$
	if [ -f $CWD/rtl-sdr/rtl-sdr.rules ]
	then
		sudo cp $CWD/rtl-sdr/rtl-sdr.rules /etc/udev/rules.d/15-rtl-sdr.rules
		sudo chown root /etc/udev/rules.d/15-rtl-sdr.rules
		sudo chgrp root /etc/udev/rules.d/15-rtl-sdr.rules
	fi
	sudo killall -HUP udevd
	sudo udevadm control --reload-rules
}

function mod_sysctl {
	sudocheck
	#
	# Modify sysctl.conf as necessary
	#
	cat >tmp$$ <<!EOF!
# Updates for Gnu Radio
net.core.rmem_max = 1000000
net.core.wmem_max = 1000000
kernel.shmmax = 2147483648
!EOF!


	if grep -q 'Updates for Gnu Radio' /etc/sysctl.conf
	then
		my_echo Required updates to /etc/sysctl.conf already in place
	else
		my_echo Applying updates to /etc/sysctl.conf
		cat /etc/sysctl.conf tmp$$ >tmp2$$
		chmod 644 tmp2$$
		sudo mv tmp2$$ /etc/sysctl.conf
	fi

	sudo sysctl -w net.core.rmem_max=1000000 >/dev/null 2>&1
	sudo sysctl -w net.core.wmem_max=1000000 >/dev/null 2>&1
	sudo sysctl -w kernel.shmmax=2147483648  >/dev/null 2>&1
	 
	rm -f tmp$$
	rm -f tmp2$$
	
	if grep -q usrp /etc/security/limits.conf
	then
		my_echo usrp group already has real-time scheduling privilege
	else
		cat >tmp$$ <<!EOF!
@usrp  - rtprio 50
!EOF!
		cat /etc/security/limits.conf tmp$$ >tmp2$$
		sudo cp tmp2$$ /etc/security/limits.conf
		sudo chmod 644 /etc/security/limits.conf
		rm -f tmp$$ tmp2$$
		my_echo Group \'usrp\' now has real-time scheduling privileges
		my_echo You will need to log-out and back in again for this to
		my_echo take effect
	fi
}

function all {
	my_echo Starting all functions at: `date`
	cd $CWD
	prereqs
	touch -d "15 minutes ago" touch$$
	if [ -d uhd -a -d gnuradio ]
	then
		if [ uhd -ot touch$$ -o gnuradio -ot touch$$ ]
		then
			gitfetch
		else
			my_echo Skipping git fetch, since \'uhd\' and \'gnuradio\' are new enough
		fi
	else
		gitfetch
	fi
	rm -f touch$$
	for fcn in uhd_build firmware gnuradio_build rtl_build mod_groups mod_udev mod_sysctl pythonpath extras
	do
		my_echo Starting function $fcn at: `date`
		cd $CWD
		$fcn
		my_echo Done function $fcn at: `date`
	done
	my_echo Done all functions at: `date`
}

function pythonpath {
	for PYVER in 2.6 2.7
	do
		for type in "" 64
		do
			if [ -d /usr/local/lib${type}/python${PYVER}/site-packages/gnuradio ]
			then
				PYTHONPATH=/usr/local/lib${type}/python${PYVER}/site-packages
			fi
			if [ -d /usr/local/lib${type}/python${PYVER}/dist-packages/gnuradio ]
			then
				PYTHONPATH=/usr/local/lib${type}/python${PYVER}/dist-packages
			fi
		done
	done
	echo
	echo
	echo "************************************************************"
	echo You should probably set your PYTHONPATH to:
	echo " "
	echo "    " $PYTHONPATH
	echo " "
	echo Using:
	echo " "
	echo export PYTHONPATH=$PYTHONPATH
	echo " "
	echo in your .bashrc or equivalent file prior to attempting to run
	echo any Gnu Radio applications or Gnu Radio Companion.
	echo "*************************************************************"
}

function sudocheck {
	#
	# Check SUDO privileges
	#
	if [ $SUDOASKED = n ]
	then
		echo SUDO privileges are required 
		echo -n Do you have SUDO privileges'?'
		read ans
		case $ans in
			y|Y|YES|yes|Yes)
				echo Continuing with script
				SUDOASKED=y
				sudo grep timestamp_timeout /etc/sudoers >tmp$$
				timeout=`cat tmp$$|awk '/./ {print $4}'`
				rm -f tmp$$
				if [ "@@" = "@[email protected]" ]
				then
					sudo cp /etc/sudoers tmp$$
					sudo chown $USER tmp$$
					sudo chmod 644 tmp$$
					echo "Defaults  timestamp_timeout = 90" >>tmp$$
					sudo cp tmp$$ /etc/sudoers
					sudo chown root /etc/sudoers
					sudo chmod 440 /etc/sudoers
				elif [ "$timeout" -lt 90 ]
				then
					echo You need to have a timestamp_timeout in /etc/sudoers of 90 or more
					echo Please ensure that your timestamp_timeout is 90 or more
					exit
				fi
				;;
			*)
				echo Exiting.  Please ensure that you have SUDO privileges on this system!
				exit
				;;
		esac
	fi
}

PATH=$PATH
export PATH
case $# in
	0)
		all
		my_echo All Done
		doexit SUCCESS
esac

for arg in $*
do
	cd $CWD
	$arg
done
my_echo All Done
doexit SUCCESS
      
OAI