diff options
| -rwxr-xr-x | scripts/check-dependencies.sh | 215 | 
1 files changed, 21 insertions, 194 deletions
| diff --git a/scripts/check-dependencies.sh b/scripts/check-dependencies.sh index c85ba09..e9721fd 100755 --- a/scripts/check-dependencies.sh +++ b/scripts/check-dependencies.sh @@ -5,24 +5,27 @@  #  check-dependencies.sh                # check version of all dependencies  #  check-dependencies.sh debug          # debug this script  # -# design -#  Detection is done through stages and fallbacks in case of failure. +# output +#   a table displaying the minimum version from README, the found version, +#   and whether it is OK or not.  # -#    1st stage, search by parsing header files and/or binary output -#    2nd stage, search with pkg-config -#    3rd stage, search by parsing output of package systems like dpkg or yum +# design +#   stage 1. search by parsing header files and/or binary output (_sysver) +#   stage 2. search with pkg-config  # -#  Goal is portability and lack of complicated regex. -#  Code style is 'pretend its python'. functions return strings under -#  the $function_name_result variable. tmp variables are -#  funcname_abbreviated_tmp. Local vars are not used for portability. +#  Code style is portability and simplicity. Plain sed, awk, grep, sh. +#  Functions return strings under $function_name_result variable. +#  tmp variables are named funcname_abbreviated_tmp. +#  Local vars are not used.  #  # todo -#  if /usr/ and /usr/local/ on linux both hit, throw an error -#  fallback- pkgconfig --exists, then --modversion -#  fallback2 - pkg manager -#  - print location found, how found??? +#  testing of non-bash shells +#  if /usr/ and /usr/local/ on linux both hit, throw a warning +#  print location found, how found??? +#  look at pkgconfig --exists & --modversion +#  deal with deps like GLEW that don't have proper version strings?  # +  DEBUG=  debug() @@ -228,162 +231,6 @@ python_sysver()    python_sysver_result=`$1/bin/python --version 2>&1 | awk '{print $2}'`  } -set_default_package_map() -{ -  glew=glew -  boost=boost -  eigen=eigen3 -  imagemagick=imagemagick -  make=make -  python=python -  opencsg=opencsg -  cgal=cgal -  bison=bison -  gmp=gmp -  mpfr=mpfr -  bash=bash -  flex=flex -  gcc=gcc -  cmake=cmake -  curl=curl -  git=git -  qt4=qt4 -} - - -apt_pkg_search() -{ - -  if [ ! "`command -v dpkg`" ]; then -    # can't handle systems that use apt-get for RPMs (alt linux) -    debug command dpkg not found. cannot search packages. -    return -  fi - -  debug apt_pkg_search $* -  apt_pkg_search_result= -  pkgname=$1 -  dps_ver= - -  # translate pkgname to apt packagename -  set_default_package_map -  for pn in cgal boost mpfr opencsg qt4; do eval $pn="lib"$pn"-dev" ; done - -  # handle multiple version names of same package (ubuntu, debian, etc) -  if [ $pkgname = glew ]; then -    glewtest=`apt-cache search libglew-dev` -    if [ "`echo $glewtest | grep glew1.6-dev`" ]; then glew=libglew1.6-dev; -    elif [ "`echo $glewtest | grep glew1.5-dev`" ]; then glew=libglew1.5-dev; -    elif [ "`echo $glewtest | grep glew-dev`" ]; then glew=libglew-dev; fi -  elif [ $pkgname = gmp ]; then -    if [ "`apt-cache search libgmp3-dev`" ]; then gmp=libgmp3-dev ;fi -    if [ "`apt-cache search libgmp-dev`" ]; then gmp=libgmp-dev ;fi -  fi - -  debpkgname=`eval echo "$"$pkgname` - -  if [ ! $debpkgname ]; then -    debug "unknown package" $pkgname; return; -  fi - -  debug $pkgname ".deb name:" $debpkgname - -  # examples of apt version strings -  # cgal 4.0-4   gmp 2:5.0.5+dfsg  bison 1:2.5.dfsg-2.1 cmake 2.8.9~rc1 - -  if [ $pkgname = eigen ]; then -    aps_null=`dpkg --status libeigen3-dev 2>&1` -    if [ $? = 0 ]; then -      debpkgname=libeigen3-dev -    else -      debpkgname=libeigen2-dev -    fi -  fi - -  debug "test dpkg on $debpkgname" -  testdpkg=`dpkg --status $debpkgname 2>&1` -  if [ "$testdpkg" ]; then -    #debug test dpkg: $testdpkg -    if [ "`echo $testdpkg | grep -i version`" ]; then -      dps_ver=`dpkg --status $debpkgname | grep -i ^version: | awk ' { print $2 }'` -      debug version line from dpkg: $dps_ver -      dps_ver=`echo $dps_ver | tail -1 | sed s/"[-~].*"// | sed s/".*:"// | sed s/".dfsg*"//` -      debug version: $dps_ver -    else -      debug couldnt find version string after dpkg --status $debpkgname -    fi -  else -    debug testdpkg failed on $debpkgname -  fi - -  # Available to be system -  #dps_ver= -  #debug "test apt-cache on $debpkgname" -  # apt-cache show is flaky on older apt. dont run unless search is OK -  #test_aptcache=`apt-cache search $debpkgname` -  #if [ "$test_aptcache" ]; then -  #  test_aptcache=`apt-cache show $debpkgname` -  #  if [ ! "`echo $test_aptcache | grep -i no.packages`" ]; then -  #    ver=`apt-cache show $debpkgname | grep ^Version: | awk ' { print $2 }'` -  #    ver=`echo $ver | tail -1 | sed s/"[-~].*"// | sed s/".*:"// | sed s/".dfsg*"//` -  #    if [ $ver ] ; then vera=$ver ; fi -  #  fi -  #fi - -  apt_pkg_search_result="$dps_ver" -} - -set_fedora_package_map() -{ -  cgal=CGAL-devel -  eigen=eigen2-devel -  qt4=qt-devel -  imagemagick=ImageMagick -  for pn in  boost gmp mpfr glew; do eval $pn=$pn"-devel" ; done -} - -yum_pkg_search() -{ -  yum_pkg_search_result= -  pkgname=$1 - -  set_default_package_map -  set_fedora_package_map -  fedora_pkgname=`eval echo "$"$pkgname` - -  debug $pkgname". fedora name:" $fedora_pkgname -  if [ ! $fedora_pkgname ]; then -    debug "unknown package" $pkgname; return; -  fi - -  test_yum=`yum info $fedora_pkgname 2>&1` -  if [ "$test_yum" ]; then -    debug test_yum: $test_yum -    ydvver=`yum info $fedora_pkgname 2>&1 | grep ^Version | awk '{print $3}' ` -    if [ $ydvver ]; then ydvver=$ydvver ; fi -  else -    debug test_yum failed on $pkgname -  fi -  yum_pkg_search_result="$ydvver" -} - - -pkg_search() -{ -  debug pkg_search $* -  pkg_search_result= - -  if [ "`command -v apt-get`" ]; then -    apt_pkg_search $* -    pkg_search_result=$apt_pkg_search_result -  elif [ "`command -v yum`" ]; then -    yum_pkg_search $* -    pkg_search_result=$yum_pkg_search_result -  else -    debug unknown system type. cannot search packages. -  fi -} -  pkg_config_search()  {    debug pkg_config_search $* @@ -400,9 +247,6 @@ pkg_config_search()    fi  } - - -  get_minversion_from_readme()  {    if [ -e README.md ]; then READFILE=README.md; fi @@ -433,7 +277,6 @@ get_minversion_from_readme()    get_minversion_from_readme_result=$grv_tmp  } -  find_min_version()  {    find_min_version_result= @@ -454,13 +297,12 @@ find_min_version()  vers_to_int()  { -  # change x.y.z.p into x0y0z0p for purposes of comparison with -lt or -gt -  # it will work as long as the resulting int is less than 2.147 billion -  # and y z and p are less than 99 +  # change x.y.z.p into an integer that can be compared using -lt or -gt    # 1.2.3.4 into 1020304    # 1.11.0.12 into 1110012    # 2011.2.3 into 20110020300 -  # the resulting integer can be simply compared using -lt or -gt +  # it will work as long as the resulting int is less than 2.147 billion +  # and y z and p are less than 99    vers_to_int_result=    if [ ! $1 ] ; then return ; fi    vtoi_ver=$1 @@ -562,9 +404,6 @@ pretty_print()    pp_compared=  } - - -  find_installed_version()  {    debug find_installed_version $* @@ -592,13 +431,6 @@ find_installed_version()      fi    fi -  # use the package system to search -  if [ ! $fsv_tmp ]; then -    debug plain + pkg_config search both failed... trying package search -    pkg_search $dep -    fsv_tmp=$pkg_search_result -  fi -    if [ $fsv_tmp ]; then      find_installed_version_result=$fsv_tmp    else @@ -606,12 +438,11 @@ find_installed_version()    fi  } -  check_old_local()  {    warnon=    if [ "`uname | grep -i linux`" ]; then -    header_list="opencsg.h CGAL boost GL/glew.h" +    header_list="opencsg.h CGAL boost GL/glew.h gmp.h mpfr.h eigen2 eigen3"      liblist="libboost libopencsg libCGAL libglew"      for i in $header_list $liblist; do        if [ -e /usr/local/include/$i ]; then @@ -629,7 +460,6 @@ check_old_local()    fi  } -  check_misc()  {    if [ "`uname -a|grep -i netbsd`" ]; then @@ -637,7 +467,6 @@ check_misc()    fi  } -  checkargs()  {    for i in $*; do @@ -650,9 +479,7 @@ main()    deps="qt4 cgal gmp mpfr boost opencsg glew eigen gcc"    deps="$deps bison flex make"    #deps="$deps curl git" # not technically necessary for build -  #deps="$deps python cmake" # only needed for tests -  #deps="$deps imagemagick" # needs work, only needed for tests -  #deps="eigen glew opencsg" # debugging +  #deps="$deps python cmake imagemagick" # only needed for tests    pretty_print title    for dep in $deps; do      debug "processing $dep" | 
