Skip to content
Snippets Groups Projects
pre_req 9.81 KiB
Newer Older
Pietro Incardona's avatar
Pietro Incardona committed
#! /bin/bash

function pre_req()
{
Pietro Incardona's avatar
Pietro Incardona committed
source script/discover_package_manager
incardon's avatar
incardon committed
source script/discover_os
source script/solve_autoconf
source script/solve_gpp
source script/solve_cmake
source script/solve_git
source script/solve_wget
source script/solve_automake
source script/solve_brew
source script/solve_libtool
incardon's avatar
incardon committed
discover_os
Pietro Incardona's avatar
Pietro Incardona committed
discover_package_manager $platform
Incardona Pietro's avatar
Incardona Pietro committed
pcman=$discover_package_manager_ret
Incardona Pietro's avatar
Incardona Pietro committed
if [ x"$platform" = x"osx" -a x"$pcman" = x""  ]; then
  echo -e "\033[30;43;5;1m WARNING \033[0m No package manager has been found on this system"
  solve_brew $platform
Incardona Pietro's avatar
Incardona Pietro committed

  discover_package_manager $platform
  pcman=$discover_package_manager_ret
  if [ x"$pcman" != x"brew" ]; then
    echo -e "brew \033[91;5;1m FAILED \033[0m"
  fi
incardon's avatar
incardon committed
command -v cmake >/dev/null 2>&1
if [ $? -ne 0 ]; then
  echo >&2
incardon's avatar
incardon committed
  echo -e "cmake\033[91;5;1m FAILED \033[0m"
  echo "OpenFPM require cmake but it's not installed, searching a solution... "
  solve_cmake $platform
incardon's avatar
incardon committed
  command -v cmake >/dev/null 2>&1
  if [ $? -ne 0 ]; then
incardon's avatar
incardon committed
    echo -e "cmake\033[91;5;1m FAILED \033[0m"
incardon's avatar
incardon committed
    echo -e "cmake\033[92;1m SUCCESS \033[0m"
incardon's avatar
incardon committed
  echo -e "cmake\033[92;1m SUCCESS \033[0m"
Pietro Incardona's avatar
Pietro Incardona committed
command -v wget >/dev/null 2>&1
if [ $? -ne 0 ]; then
  echo >&2
  echo -e "wget\033[91;5;1m FAILED \033[0m"
  echo "OpenFPM require wget but it's not installed, searching a solution... "
  solve_wget $platform
Pietro Incardona's avatar
Pietro Incardona committed
  command -v wget >/dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo -e "wget\033[91;5;1m FAILED \033[0m"
    exit 1
  else
    echo -e "wget\033[92;1m SUCCESS \033[0m"
  fi
else
  echo -e "wget \033[92;1m SUCCESS \033[0m"
fi

Pietro Incardona's avatar
Pietro Incardona committed
command -v git >/dev/null 2>&1
if [ $? -ne 0 ]; then 
  echo >&2
  echo -e "git\033[91;5;1m FAILED \033[0m"
  echo "OpenFPM require git but it's not installed, searching a solution... "
  solve_git $platform
Pietro Incardona's avatar
Pietro Incardona committed
  command -v git >/dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo -e "git\033[91;5;1m FAILED \033[0m"
    exit 1
  else
    echo -e "git\033[92;1m SUCCESS \033[0m"
  fi
else
  echo -e "git \033[92;1m SUCCESS \033[0m"
fi

command -v autoconf >/dev/null 2>&1
if [ $? -ne 0 ]; then
  echo >&2
  echo -e "autoconf\033[91;5;1m FAILED \033[0m"
  echo "OpenFPM require autoconf but it's not installed, searching a solution..."
  solve_autoconf $platform
Pietro Incardona's avatar
Pietro Incardona committed
  command -v autoheader >/dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo -e "autoconf\033[91;5;1m FAILED \033[0m"
    exit 1
  else
    echo -e "autoconf\033[92;1m SUCCESS \033[0m"
  fi
else
  echo -e "autoconf\033[92;1m SUCCESS \033[0m"
fi

command -v automake >/dev/null 2>&1
if [ $? -ne 0 ]; then
  echo >&2
  echo -e "automake\033[91;5;1m FAILED \033[0m"
  echo "OpenFPM require automake but it's not installed, searching a solution..."
  solve_automake $platform
Pietro Incardona's avatar
Pietro Incardona committed
  command -v automake >/dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo "automake\033[91;5;1m FAILED \033[0m"
    exit 1
  else
    echo -e "automake\033[92;1m SUCCESS \033[0m"
  fi
else
  echo -e "automake\033[92;1m SUCCESS \033[0m"
fi

Incardona Pietro's avatar
Incardona Pietro committed

command -v libtoolize  >/dev/null 2>&1
opt1=$?
command -v glibtoolize  >/dev/null 2>&1
opt2=$?
Pietro Incardona's avatar
Pietro Incardona committed
if [ $opt1 -ne 0 -a $opt2 -ne 0 ]; then
Pietro Incardona's avatar
Pietro Incardona committed
  echo >&2
  echo -e "libtool\033[91;5;1m FAILED \033[0m"
  echo "OpenFPM require libtool but it's not installed, searching a solution..."
  solve_libtool $platform
Incardona Pietro's avatar
Incardona Pietro committed
  command -v libtoolize  >/dev/null 2>&1
  opt1=$?
  command -v glibtoolize  >/dev/null 2>&1
  opt2=$?
Pietro Incardona's avatar
Pietro Incardona committed
  if [ $opt1 -ne 0 -a $opt2 -ne 0 ]; then
Pietro Incardona's avatar
Pietro Incardona committed
    echo -e "libtool\033[91;5;1m FAILED \033[0m"
    exit 1
  else
    echo -e "libtool\033[92;1m SUCCESS \033[0m"
  fi
else
  echo -e "libtool\033[92;1m SUCCESS \033[0m"
fi

#### Detecting g++

if [ x"$platform" == x"osx" ]; then
  ## we try to detect osx version
Pietro Incardona's avatar
Pietro Incardona committed
  major=$(g++ --version | grep LLVM | sed 's/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)svn.*/\1/g')
  middle=$(g++ --version | grep LLVM | sed 's/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)svn.*/\2/g')
  minor=$(g++ --version | grep LLVM | sed 's/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)svn.*/\3/g')

  echo "$major" | egrep -q '^[0-9]+$'
  is_maj_num=$?
  echo "$minor" | egrep -q '^[0-9]+$'
  is_min_num=$?
  echo "$middle" | egrep -q '^[0-9]+$'
  is_mid_num=$?

  command -v g++-4.9  >/dev/null 2>&1
  opt1=$?

  # Major middle and minor should contain only numbers, if they dont, and smaller than 2 character otherwise the detection was garbage
  if [ $is_maj_num -ne 0 -o $is_min_num -ne 0 -o $is_mid_num -ne 0 ]; then
    if [ $opt1 -eq 1 ]; then
      ## the detection is garbage, gcc49 id not present, now we check the system

      major=$(sw_vers | grep ProductVersion | sed 's/.*\([0-9][0-9]\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1/g')
      middle=$(sw_vers | grep ProductVersion | sed 's/.*\([0-9][0-9]\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\2/g')
      minor=$(sw_vers | grep ProductVersion | sed 's/.*\([0-9][0-9]\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\3/g')

      if [ $major -gt 10 ]; then
        echo -e "\033[30;43;5;1m------------------------------- WARNING --------------------------------\033[0m"
        echo "g++ seem to be present, but we failed to detect the version. Your system $major.$middle.$minor seem to be recent enough, so we will continue the installation"
        sleep 10
      elif [ $major -lt 10 ]; then
        echo -e "\033[30;43;5;1m------------------------------- WARNING --------------------------------\033[0m"
        echo "g++ seem to be present, but we failed to detect the version. Your system $major.$middle.$minor is older than 10.10.X, so is probably going to fail with the actual compiler"
        echo "One possible solution is to try to install gcc 4.9"
        solve_gpp $platform
      elif [ $middle -gt 10 ]; then
        echo -e "\033[30;43;5;1m------------------------------- WARNING --------------------------------\033[0m"
        echo "g++ seem to be present, but we failed to detect the version. Your system $major.$middle.$minor seem to be recent enough, so we will continue the installation"
        sleep 10       
      elif [ $middle -lt 10 ]; then
        echo -e "\033[30;43;5;1m------------------------------- WARNING --------------------------------\033[0m"
        echo "g++ seem to be present, but we failed to detect the version. Your system $major.$middle.$minor is older than 10.10.X, so is probably going to fail with the actual compiler"
        echo "One possible solution is to try to install gcc 4.9"
        solve_gpp $platform
      else
        echo -e "\033[30;43;5;1m------------------------------- WARNING --------------------------------\033[0m"
        echo "g++ seem to be present, but we failed to detect the version. Your system $major.$middle.$minor seem to be recent enough, so we will continue the installation"
        sleep 10
      fi
    fi
Pietro Incardona's avatar
Pietro Incardona committed
  else
    ## the detection is good check the compiler

    if [ $major -gt 3 ]; then
      echo -e "clang++ $major.$middle.$minor \033[92;1m SUCCESS \033[0m"
    elif [ $major -lt 3 ]; then
      echo -e "clang++ $major.$middle.$minor \033[91;5;1m FAILED \033[0m your clang $major.middle;$minor is too old, 3.6.0 or higher is required"
      solve_gpp $platform
    elif [ $middle -gt 6  ]; then
      echo -e "clang++ $major.$middle.$minor \033[92;1m SUCCESS \033[0m"
    elif [ $middle -lt 6 ]; then
      echo -e "clang++\033[91;5;1m FAILED \033[0m your clang is out of date, update to 3.6.0 or higher is required"
      solve_gpp $platform
    else
      echo -e "clang++ version $major.$middle.$minor \033[92;1m SUCCESS \033[0m"
    fi
Pietro Incardona's avatar
Pietro Incardona committed
  fi
else
  command -v g++ >/dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo >&2
    echo -e "Configure\033[91;5;1m FAILED \033[0m"
    echo "OpenFPM require g++ but it's not installed, searching a solution..."
    solve_gpp $platform
    command -v g++ >/dev/null 2>&1
    if [ $? -ne 0 ]; then
      echo -e "g++\033[91;5;1m FAILED \033[0m"
      exit 1
    else
      echo -e "g++\033[92;1m SUCCESS \033[0m"
    fi
  else
    major=$(g++ --version | grep g++ | sed 's/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1/g')
    middle=$(g++ --version | grep g++ | sed 's/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\2/g')
    minor=$(g++ --version | grep g++ | sed 's/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\3/g')
    if [ $major -gt 4 ]; then
      echo -e "g++ $major.$middle.$minor \033[92;1m SUCCESS \033[0m"
    elif [ $major -lt 4 ]; then
      echo -e "g++ $major.$middle.$minor  \033[91;5;1m FAILED \033[0m your g++ version is too old"
    elif [ $middle -gt 8  ]; then
      echo -e "g++ $major.$middle.$minor \033[92;1m SUCCESS \033[0m"
    elif [ $middle -lt 8 ]; then
      echo -e "g++ $major.$middle.$minor \033[91;5;1m FAILED \033[0m your g++ version is too old"
    elif [ $minor -gt 1  ]; then
      echo -e "g++ $major.$middle.$minor \033[92;1m SUCCESS \033[0m"
    else
      echo -e "g++ $major.$middle.$minor \033[92;1m FAILED \033[0m your g++ version is too old"
    fi
  fi
command -v mpirun >/dev/null 2>&1
if [ $? -ne 0 ]; then
  echo -e "No MPI"
else
  major=$(mpirun --version | grep mpirun | sed 's/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1/g')
  middle=$(mpirun --version | grep mpirun | sed 's/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\2/g')
  minor=$(mpirun --version | grep mpirun | sed 's/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\3/g')
  if [ $major -gt 1 ]; then
    echo -e "mpirun $major.$middle.$minor \033[92;1m SUCCESS \033[0m"
  elif [ $major -lt 1 ]; then
    echo -e "mpirun $major.$middle.$minor \033[91;5;1m FAILED \033[0m is too old, 1.8.1 at least required"
  elif [ $middle -gt 8  ]; then
    echo -e "mpirun $major.$middle.$minor \033[92;1m SUCCESS \033[0m"
  elif [ $middle -lt 8 ]; then
    echo -e "mpirun $major.$middle.$minor \033[91;5;1m FAILED \033[0m is too old, 1.8.1 at least required"
  elif [ $minor -gt 0  ]; then
    echo -e "mpirun $major.$middle.$minor \033[92;1m SUCCESS \033[0m"
  else
    echo -e "mpirun $major.$middle.$minor \033[92;1m FAILED \033[0m is too old, 1.8.1 at least required"
  fi 
fi