mirror of https://github.com/asterisk/asterisk
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
4.3 KiB
164 lines
4.3 KiB
#! /bin/bash
|
|
|
|
### flex just outputs a single line:
|
|
|
|
## flex version 2.5.4
|
|
|
|
|
|
### but bison is a bit more wordy
|
|
|
|
## bison (GNU Bison) 1.875c
|
|
## Written by Robert Corbett and Richard Stallman.
|
|
##
|
|
## Copyright (C) 2003 Free Software Foundation, Inc.
|
|
## This is free software; see the source for copying conditions. There is NO
|
|
## warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
### based on this, the version number of the program:
|
|
### a. in the first line of output
|
|
### b. is the last "word" of that line
|
|
|
|
program=$1
|
|
comparefunc=$2
|
|
argver=$3
|
|
|
|
progver1=`$program --version | head -1`
|
|
|
|
[[ $progver1 =~ '([^ ]+$)' ]]
|
|
|
|
progver=$BASH_REMATCH
|
|
|
|
progver2=$progver
|
|
numprogverlist=0
|
|
|
|
while [[ $progver2 =~ '^([^.]+)\.(.*)' ]]; do
|
|
progver2=${BASH_REMATCH[2]}
|
|
progverlist[$numprogverlist]=${BASH_REMATCH[1]}
|
|
progverlist[$(( ${numprogverlist}+1 ))]=${BASH_REMATCH[2]}
|
|
|
|
## echo ${BASH_REMATCH[0]}
|
|
## echo ${BASH_REMATCH[1]}
|
|
## echo ${BASH_REMATCH[2]}
|
|
(( numprogverlist=$(( $numprogverlist+1 )) ))
|
|
|
|
done
|
|
(( numprogverlist=$(( $numprogverlist+1 )) ))
|
|
|
|
## echo number of elements = $numprogverlist
|
|
## echo element 0 = ${progverlist[0]}
|
|
## echo element 1 = ${progverlist[1]}
|
|
## echo element 2 = ${progverlist[2]}
|
|
|
|
argver2=$argver
|
|
numargverlist=0
|
|
|
|
while [[ $argver2 =~ '^([^.]+)\.(.*)' ]]; do
|
|
argver2=${BASH_REMATCH[2]}
|
|
argverlist[$numargverlist]=${BASH_REMATCH[1]}
|
|
argverlist[$(( ${numargverlist}+1 ))]=${BASH_REMATCH[2]}
|
|
|
|
## echo ${BASH_REMATCH[0]}
|
|
## echo ${BASH_REMATCH[1]}
|
|
## echo ${BASH_REMATCH[2]}
|
|
(( numargverlist=$(( $numargverlist+1 )) ))
|
|
|
|
done
|
|
(( numargverlist=$(( $numargverlist+1 )) ))
|
|
|
|
## echo number of argver elements = $numargverlist
|
|
## echo element 0 = ${argverlist[0]}
|
|
## echo element 1 = ${argverlist[1]}
|
|
## echo element 2 = ${argverlist[2]}
|
|
|
|
if (( $numprogverlist < $numargverlist )); then
|
|
for (( i=$numprogverlist ; $i < $numargverlist ; i=$i + 1 )) ; do
|
|
## echo setting progverlist "[" $i "]" to 0
|
|
(( progverlist[$i]='0' ))
|
|
(( numprogverlist=${numprogverlist}+1 ))
|
|
done
|
|
elif (( $numargverlist < $numprogverlist )); then
|
|
for (( i=$numargverlist ; $i < $numprogverlist ; i=$i + 1 )) ; do
|
|
## echo setting argverlist "[" $i "]" to 0
|
|
(( argverlist[$i]='0' ))
|
|
(( numargverlist=${numargverlist}+1 ))
|
|
done
|
|
fi
|
|
|
|
## echo numarg=$numargverlist numprog=$numprogverlist
|
|
## echo arg0: ${argverlist[0]}
|
|
## echo arg1: ${argverlist[1]}
|
|
## echo arg2: ${argverlist[2]}
|
|
## echo prog0: ${progverlist[0]}
|
|
## echo prog1: ${progverlist[1]}
|
|
## echo prog2: ${progverlist[2]}
|
|
|
|
## the main comparison loop
|
|
|
|
for (( i=0 ; $i < $numargverlist ; i=$i + 1 )) ; do
|
|
## echo i= $i
|
|
|
|
if [[ ${progverlist[$i]} =~ '^[0-9]+$' && ${argverlist[$i]} =~ '^[0-9]+$' ]] ; then ## nothing but numbers
|
|
if (( ${progverlist[$i]} != ${argverlist[$i]} )); then
|
|
if [[ ${progverlist[$i]} -lt ${argverlist[$i]} ]]; then
|
|
if [[ $comparefunc == "=" ]]; then
|
|
echo "false"
|
|
exit 0;
|
|
elif [[ $comparefunc == "<" || $comparefunc == "<=" ]]; then
|
|
echo "true"
|
|
exit 0;
|
|
elif [[ $comparefunc == ">" || $comparefunc == ">=" ]]; then
|
|
echo "false"
|
|
exit 0;
|
|
fi
|
|
elif [[ ${progverlist[$i]} -gt ${argverlist[$i]} ]]; then
|
|
if [[ $comparefunc == "=" ]]; then
|
|
echo "false"
|
|
exit 0;
|
|
elif [[ $comparefunc == "<" || $comparefunc == "<=" ]]; then
|
|
echo "false"
|
|
exit 0;
|
|
elif [[ $comparefunc == ">" || $comparefunc == ">=" ]]; then
|
|
echo "true"
|
|
exit 0;
|
|
fi
|
|
fi
|
|
fi
|
|
else ## something besides just numbers
|
|
if [[ ${progverlist[$i]} != ${argverlist[$i]} ]]; then
|
|
if [[ ${progverlist[$i]} < ${argverlist[$i]} ]]; then
|
|
if [[ $comparefunc == "=" ]]; then
|
|
echo "false"
|
|
exit 0;
|
|
elif [[ $comparefunc == "<" || $comparefunc == "<=" ]]; then
|
|
echo "true"
|
|
exit 0;
|
|
elif [[ $comparefunc == ">" || $comparefunc == ">=" ]]; then
|
|
echo "false"
|
|
exit 0;
|
|
fi
|
|
elif [[ ${progverlist[$i]} > ${argverlist[$i]} ]]; then
|
|
if [[ $comparefunc == "=" ]]; then
|
|
echo "false"
|
|
exit 0;
|
|
elif [[ $comparefunc == "<" || $comparefunc == "<=" ]]; then
|
|
echo "false"
|
|
exit 0;
|
|
elif [[ $comparefunc == ">" || $comparefunc == ">=" ]]; then
|
|
echo "true"
|
|
exit 0;
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [[ $comparefunc == "=" ]]; then
|
|
echo "true"
|
|
elif [[ $comparefunc == "<=" || $comparefunc == ">=" ]]; then
|
|
echo "true"
|
|
else
|
|
echo "false"
|
|
fi
|
|
|
|
exit 0;
|