#!/bin/bash

# This file is part of MEGAlib.
# Copyright (C) by Andreas Zoglauer.
#
# Please see the MEGAlib software license and documentation for more informations.

IsDebianClone=0
IsRedhatClone=0
IsOpenSuseClone=0


if [ -f /etc/os-release ]; then
  OS=`cat /etc/os-release | grep "^ID_LIKE\=" | awk -F= '{ print $2 }'`
  OS=${OS//\"/}

  # Hack for OS' without ID_LIKE
  if [[ ${OS} == "" ]]; then 
    OS=`cat /etc/os-release | grep "^ID\=" | awk -F= '{ print $2 }'`
    OS=${OS//\"/}
  fi

  if [[ ${OS} == debian ]]; then
    IsDebianClone=1
  elif [[ ${OS} == *suse* ]]; then
    IsOpenSuseClone=1
  elif [[ ${OS} == scientific* ]] || [[ ${OS} == *fedora* ]] ; then
    IsRedhatClone=1
  fi
fi

REQUIRED=""
TOBEINSTALLED=""

if [[ ${IsDebianClone} -eq 1 ]]; then
  
  # Check if this is Ubuntu:
  OS=`cat /etc/os-release | grep "^ID\=" | awk -F= '{ print $2 }'`
  OS=${OS//\"/}
  #echo "OS: ${OS}"

  VERSIONID=$(cat /etc/os-release | grep "^VERSION_ID\=" | awk -F= '{ print $2 }')
  VERSIONID=${VERSIONID//\"/}
  #echo "VERSION: ${VERSIONID}"

  if [[ ${OS} == ubuntu ]]; then
    # Check if this is Ubuntu 14.04:
    if [[ ${VERSIONID} == 14.04 ]]; then
      REQUIRED="git gawk dpkg-dev make g++ gcc gfortran gdb valgrind binutils libx11-dev libxpm-dev libxft-dev libxext-dev libssl-dev libpcre3-dev libglu1-mesa-dev libglew-dev libftgl-dev libmysqlclient-dev libfftw3-dev graphviz-dev libavahi-compat-libdnssd-dev libldap2-dev python3-dev libxml2-dev libkrb5-dev libgsl0-dev cmake libxmu-dev curl"
    elif [[ ${VERSIONID} == 16.04 ]]; then
      REQUIRED="git gawk dpkg-dev make g++ gcc gfortran gdb valgrind binutils libx11-dev libxpm-dev libxft-dev libxext-dev libssl-dev libpcre3-dev libglu1-mesa-dev libglew-dev libftgl-dev libmysqlclient-dev libfftw3-dev graphviz-dev libavahi-compat-libdnssd-dev libldap2-dev python3-dev python3-tk libxml2-dev libkrb5-dev libgsl-dev cmake libxmu-dev curl doxygen libblas-dev liblapack-dev expect dos2unix libncurses5-dev"
    elif [[ ${VERSIONID} == 18.04 ]] || [[ ${VERSIONID} == 18.10 ]] || [[ ${VERSIONID} == 19.04 ]] || [[ ${VERSIONID} == 19.10 ]]; then
      REQUIRED="git gawk dpkg-dev make g++ gcc gfortran gdb valgrind binutils libx11-dev libxpm-dev libxft-dev libxext-dev libssl-dev libpcre3-dev libglu1-mesa-dev libglew-dev libftgl-dev libmysqlclient-dev libfftw3-dev libgraphviz-dev libavahi-compat-libdnssd-dev libldap2-dev python python3-dev python3-tk python3-venv libxml2-dev libkrb5-dev libgsl-dev cmake libxmu-dev curl doxygen libblas-dev liblapack-dev expect dos2unix libncurses5-dev libboost-all-dev"
    elif [[ ${VERSIONID} == 20.04 ]]; then
      REQUIRED="git gawk dpkg-dev make g++ gcc gfortran gdb valgrind binutils libx11-dev libxpm-dev libxft-dev libxext-dev libssl-dev libpcre3-dev libglu1-mesa-dev libglew-dev libftgl-dev libmysqlclient-dev libfftw3-dev libgraphviz-dev libavahi-compat-libdnssd-dev libldap2-dev python3 python3-dev python3-tk python3-venv libxml2-dev libkrb5-dev libgsl-dev cmake libxmu-dev curl doxygen libblas-dev liblapack-dev expect dos2unix libncurses5-dev libboost-all-dev "
    else
      REQUIRED="git gawk dpkg-dev make g++ gcc gfortran gdb valgrind binutils libx11-dev libxpm-dev libxft-dev libxext-dev libssl-dev libpcre3-dev libglu1-mesa-dev libglew-dev libftgl-dev libmysqlclient-dev libfftw3-dev libgraphviz-dev libavahi-compat-libdnssd-dev libldap2-dev python3 python3-dev python3-tk python3-venv libxml2-dev libkrb5-dev libgsl-dev cmake libxmu-dev curl doxygen libblas-dev liblapack-dev expect dos2unix libncurses5-dev libboost-all-dev "
      
      echo "This script has not yet been adapted for your version of Ubuntu: ${VERSIONID}"
      echo "Feel free to write the MEGAlib maintainers an email to update this script and send them the content of the file: /etc/os-release"
      echo " "
      echo "In the mean time, try to install the following packages -- remove the ones which do not work form the list:"
      echo "sudo apt-get update; sudo apt-get install ${REQUIRED}"
      echo " "
      exit 0  
    fi
  elif [[ ${OS} == debian ]] || [[ ${OS} == raspbian ]]; then
    if [[ ${VERSIONID} == 10 ]]; then
      REQUIRED="git gawk dpkg-dev make g++ gcc gfortran gdb valgrind binutils libx11-dev libxpm-dev libxft-dev libxext-dev libssl-dev libpcre3-dev libglu1-mesa-dev libglew-dev libftgl-dev libmariadb-dev libfftw3-dev libgraphviz-dev libavahi-compat-libdnssd-dev libldap2-dev python python3-dev python3-tk python3-venv libxml2-dev libkrb5-dev libgsl-dev cmake libxmu-dev curl doxygen libblas-dev liblapack-dev expect dos2unix libncurses5-dev bc"
    else
      REQUIRED="git gawk dpkg-dev make g++ gcc gfortran gdb valgrind binutils libx11-dev libxpm-dev libxft-dev libxext-dev libssl-dev libpcre3-dev libglu1-mesa-dev libglew-dev libftgl-dev libmariadb-dev libfftw3-dev libgraphviz-dev libavahi-compat-libdnssd-dev libldap2-dev python python3-dev python3-tk python3-venv libxml2-dev libkrb5-dev libgsl-dev cmake libxmu-dev curl doxygen libblas-dev liblapack-dev expect dos2unix libncurses5-dev bc"
      
      echo "This script has not yet been adapted for your version of ${OS}: ${VERSIONID}"
      echo "Feel free to write the MEGAlib maintainers an email to update this script and send them the content of the file: /etc/os-release"
      echo " "
      echo "In the mean time, try to install the following packages -- remove the ones which do not work form the list:"
      echo "sudo apt-get update; sudo apt-get install ${REQUIRED}"
      echo " "
      exit 0  
    fi
  else
    REQUIRED="bc git gawk dpkg-dev make g++ gcc gdb valgrind binutils libx11-dev libxpm-dev libxft-dev libxext-dev libssl-dev libpcre3-dev libglu1-mesa-dev libglew-dev libftgl-dev libfftw3-dev libgraphviz-dev libavahi-compat-libdnssd-dev libldap2-dev python python3-dev python3-tk python3-venv libxml2-dev libkrb5-dev libgsl-dev cmake libxmu-dev curl doxygen libblas-dev liblapack-dev expect dos2unix libncurses5-dev libboost-all-dev "
 
    echo "This script has not yet been adapted for your version of Linux: Debian-derivative ${OS}"
    echo "Feel free to write the MEGAlib maintainers an email to update this script and send them the content of the file: /etc/os-release"
    echo " "
    echo "In the mean time, try to install the following packages -- remove the ones which do not work form the list:"
    echo "sudo apt-get update; sudo apt-get install ${REQUIRED}"
    echo " "
    exit 0      
  fi
  
  #echo "Required: ${REQUIRED}"
  if [[ "${REQUIRED}" == "" ]]; then exit 0; fi
    
  # Check if each of the packages exists:
  for PACKAGE in ${REQUIRED}; do 
    # Check if the file is installed
    STATUS=`dpkg-query -Wf'${db:Status-abbrev}' ${PACKAGE} 2>/dev/null | grep '^i'`
    #echo "${PACKAGE}: >${STATUS}<"
    if [[ "${STATUS}" == "" ]]; then
      # Check if it exists at all:
      echo "Not installed: ${PACKAGE}"
      TOBEINSTALLED="${TOBEINSTALLED} ${PACKAGE}"

      #STATUS=`apt-cache pkgnames ${PACKAGE} 2>/dev/null`
      #if [[ "${STATUS}" != "" ]]; then
      #  TOBEINSTALLED="${TOBEINSTALLED} ${PACKAGE}"
      #fi
    fi
  done
  
  if [[ "${TOBEINSTALLED}" != "" ]]; then
    echo " "
    echo "Do the following to install all required packages:"
    echo "sudo apt-get update; sudo apt-get install ${TOBEINSTALLED}"
    echo " "
    exit 1
  else 
    echo "All required packages seem to be already installed!"
    exit 0
  fi
fi



# OPENSUSE Clones

if [[ ${IsOpenSuseClone} -eq 1 ]]; then

  # Check if this is OpenSUSE:
  OS=`cat /etc/os-release | grep "^ID\=" | awk -F= '{ print $2 }'`
  OS=${OS//\"/}
  #echo "OS: ${OS}"
  if [[ ${OS} == opensuse ]]; then
    # Check the version:
    VERSIONID=$(cat /etc/os-release | grep "^VERSION_ID\=" | awk -F= '{ print $2 }')
    VERSIONID=${VERSIONID//\"/}
    VERSIONID=$(echo ${VERSIONID} | awk -F'.' '{ print $1 }')
    #echo "VERSION: ${VERSIONID}"
    if [[ ${VERSIONID} == 42 ]]; then
      REQUIRED="git-core bash cmake gcc-c++ gcc gcc-fortran binutils libX11-devel libXpm-devel xorg-x11-devel libXext-devel fftw3-devel python-devel gsl-devel graphviz-devel Mesa glew-devel ncurses-devel"
    else 
      REQUIRED="git-core bash cmake gcc-c++ gcc gcc-fortran binutils libX11-devel libXpm-devel xorg-x11-devel libXext-devel fftw3-devel python-devel gsl-devel graphviz-devel Mesa glew-devel ncurses-devel"

      echo "This script has not yet been adapted for your version of opensuse: ${VERSIONID}"
      echo "Feel free to write the MEGAlib maintainers an email to update this script and send them the content of the file: /etc/os-release"
      echo " "
      echo "In the mean time, try to install the following packages -- remove the ones which do not work form the list:"
      echo "sudo zypper install ${REQUIRED}"
      echo " "
      exit 0  
    fi
  elif [[ ${OS} == opensuse-leap ]]; then
    # Check the version:
    VERSIONID=$(cat /etc/os-release | grep "^VERSION_ID\=" | awk -F= '{ print $2 }')
    VERSIONID=${VERSIONID//\"/}
    VERSIONID=$(echo ${VERSIONID} | awk -F'.' '{ print $1 }')
    #echo "VERSION: ${VERSIONID}"
    if [[ ${VERSIONID} == 15 ]]; then
      REQUIRED="git-core bash cmake gcc-c++ gcc gcc-fortran binutils libX11-devel libXpm-devel xorg-x11-devel libXext-devel fftw3-devel python-devel gsl-devel graphviz-devel Mesa glew-devel ncurses-devel python3-devel"
    else 
      REQUIRED="git-core bash cmake gcc-c++ gcc gcc-fortran binutils libX11-devel libXpm-devel xorg-x11-devel libXext-devel fftw3-devel python-devel gsl-devel graphviz-devel Mesa glew-devel ncurses-devel python3-devel"

      echo "This script has not yet been adapted for your version of opensuse: ${VERSIONID}"
      echo "Feel free to write the MEGAlib maintainers an email to update this script and send them the content of the file: /etc/os-release"
      echo " "
      echo "In the mean time, try to install the following packages -- remove the ones which do not work form the list:"
      echo "sudo zypper install ${REQUIRED}"
      echo " "
      exit 0  
    fi
  else
    REQUIRED="git-core bash cmake gcc-c++ gcc binutils libX11-devel libXpm-devel xorg-x11-devel libXext-devel fftw3-devel python-devel gsl-devel graphviz-devel Mesa glew-devel python3-devel"

    echo "This script has not yet been adapted for your version of Linux: SUSE-derivative ${OS}"
    echo "Feel free to write the MEGAlib maintainers an email to update this script and send them the content of the file: /etc/os-release"
    echo " "
    echo "In the mean time, try to install the following packages -- remove the ones which do not work form the list:"
    echo "sudo zypper install ${REQUIRED}"
    echo " "
    exit 0   
  fi
  
  if [[ "${REQUIRED}" == "" ]]; then exit 0; fi

  # Check if each of the packages exists:
  for PACKAGE in ${REQUIRED}; do 
    # Check if the file is installed
    STATUS=$(rpm -q --queryformat "%{NAME}\n" ${PACKAGE})
    #echo "${PACKAGE}: >${STATUS}<"
    if [[ "${STATUS}" != "${PACKAGE}" ]]; then
      # Check if it exists at all:
      echo "Not installed: ${PACKAGE}"
      TOBEINSTALLED="${TOBEINSTALLED} ${PACKAGE}"
    fi
  done
  
  
  if [[ "${TOBEINSTALLED}" != "" ]]; then
    echo " "
    echo "Do the following to install all required packages:"
    echo "sudo zypper install ${TOBEINSTALLED}"
    echo " "
    exit 1
  else 
    echo "All required packages seem to be already installed!"
    exit 0
  fi
fi



# REDHAT Clones

if [[ ${IsRedhatClone} -eq 1 ]]; then

  # Check which OS we really have:
  OS=`cat /etc/os-release | grep "^ID\=" | awk -F= '{ print $2 }'`
  OS=${OS//\"/}
  #echo "OS: ${OS}"
  if [[ ${OS} == rhel ]]; then
    # Check the version
    VERSIONID=$(cat /etc/os-release | grep "^VERSION_ID\=" | awk -F= '{ print $2 }')
    VERSIONID=${VERSIONID//\"/}
    VERSIONID=$(echo ${VERSIONID} | awk -F'.' '{ print $1 }')
    #echo "VERSION: ${VERSIONID}"
    if [[ ${VERSIONID} == 7 ]]; then
      REQUIRED="git cmake gcc-c++ gcc binutils libX11-devel libXpm-devel libXft-devel libXext-devel libXt-devel gcc-gfortran openssl-devel pcre-devel mesa-libGL-devel mesa-libGLU-devel glew-devel mariadb-devel fftw-devel graphviz-devel avahi-compat-libdns_sd-devel python-devel libxml2-devel curl dos2unix ncurses-devel perl-devel"
    else 
      REQUIRED="git cmake gcc-c++ gcc binutils libX11-devel libXpm-devel libXft-devel libXext-devel libXt-devel gcc-gfortran openssl-devel pcre-devel mesa-libGL-devel mesa-libGLU-devel glew-devel mariadb-devel fftw-devel graphviz-devel avahi-compat-libdns_sd-devel python-devel libxml2-devel curl dos2unix ncurses-devel perl-devel"

      echo "This script has not yet been adapted for your version of SL ${VERSIONID}"
      echo "Feel free to write the MEGAlib maintainers an email to update this script and send them the content of the file: /etc/os-release"
      echo " "
      echo "In the mean time, try to install the following packages -- remove the ones which do not work form the list:"
      echo "sudo yum install ${REQUIRED}"
      echo " "
    fi
  elif [[ ${OS} == fedora ]]; then
    # Check the version
    VERSIONID=$(cat /etc/os-release | grep "^VERSION_ID\=" | awk -F= '{ print $2 }')
    VERSIONID=${VERSIONID//\"/}
    VERSIONID=$(echo ${VERSIONID} | awk -F'.' '{ print $1 }')
    #echo "VERSION: ${VERSIONID}"
    if (( ${VERSIONID} >= 28 )) && (( ${VERSIONID} <= 32 )) ; then
      REQUIRED="git make cmake gcc-c++ gcc binutils libX11-devel libXpm-devel libXft-devel libXext-devel libXt-devel gcc-gfortran openssl-devel pcre-devel mesa-libGL-devel mesa-libGLU-devel glew-devel mariadb-devel fftw-devel graphviz-devel avahi-compat-libdns_sd-devel python3-devel libxml2-devel curl dos2unix ncurses-devel perl-devel boost-devel readline-devel"
    else 
      REQUIRED="git make cmake gcc-c++ gcc binutils libX11-devel libXpm-devel libXft-devel libXext-devel libXt-devel gcc-gfortran openssl-devel pcre-devel mesa-libGL-devel mesa-libGLU-devel glew-devel mariadb-devel fftw-devel graphviz-devel avahi-compat-libdns_sd-devel python3-devel libxml2-devel curl dos2unix ncurses-devel perl-devel boost-devel readline-devel"

      echo "This script has not yet been adapted for your version of SL ${VERSIONID}"
      echo "Feel free to write the MEGAlib maintainers an email to update this script and send them the content of the file: /etc/os-release"
      echo " "
      echo "In the mean time, try to install the following packages -- remove the ones which do not work form the list:"
      echo "sudo yum install ${REQUIRED}"
      echo " "
    fi
  elif [[ ${OS} == centos ]]; then
    # Check the version
    VERSIONID=$(cat /etc/os-release | grep "^VERSION_ID\=" | awk -F= '{ print $2 }')
    VERSIONID=${VERSIONID//\"/}
    VERSIONID=$(echo ${VERSIONID} | awk -F'.' '{ print $1 }')
    #echo "VERSION: ${VERSIONID}"
    if [[ ${VERSIONID} == 7 ]]; then
      REQUIRED="git cmake gcc-c++ gcc binutils libX11-devel libXpm-devel libXft-devel libXext-devel libXt-devel gcc-gfortran openssl-devel pcre-devel mesa-libGL-devel mesa-libGLU-devel glew-devel mariadb-devel fftw-devel graphviz-devel avahi-compat-libdns_sd-devel python-devel libxml2-devel curl dos2unix ncurses-devel perl-devel"
    else 
      REQUIRED="git cmake gcc-c++ gcc binutils libX11-devel libXpm-devel libXft-devel libXext-devel libXt-devel gcc-gfortran openssl-devel pcre-devel mesa-libGL-devel mesa-libGLU-devel glew-devel mariadb-devel fftw-devel graphviz-devel avahi-compat-libdns_sd-devel python-devel libxml2-devel curl dos2unix ncurses-devel perl-devel"

      echo "This script has not yet been adapted for your version of SL ${VERSIONID}"
      echo "Feel free to write the MEGAlib maintainers an email to update this script and send them the content of the file: /etc/os-release"
      echo " "
      echo "In the mean time, try to install the following packages -- remove the ones which do not work form the list:"
      echo "sudo yum install ${REQUIRED}"
      echo " "
    fi
  else
    REQUIRED="git cmake gcc-c++ gcc binutils libX11-devel libXpm-devel libXft-devel libXext-devel gcc-gfortran openssl-devel pcre-devel mesa-libGL-devel mesa-libGLU-devel glew-devel mysql-devel fftw-devel graphviz-devel avahi-compat-libdns_sd-devel python-devel libxml2-devel curl"

    echo "This script has not yet been adapted for your version of Linux: Redhat-derivative ${OS}"
    echo "Feel free to write the MEGAlib maintainers an email to update this script and send them the content of the file: /etc/os-release"
    echo " "
    echo "In the mean time, try to install the following packages -- remove the ones which do not work form the list:"
    echo "sudo yum install ${REQUIRED}"
    echo " "
    exit 0   
  fi
  
  if [[ "${REQUIRED}" == "" ]]; then exit 0; fi

  # Check if each of the packages exists:
  for PACKAGE in ${REQUIRED}; do 
    # Check if the file is installed
    STATUS=$(yum list installed ${PACKAGE} >& /dev/null)
    if [[ $? == 1 ]]; then
      # Check if it exists at all:
      echo "Not installed: ${PACKAGE}"
      TOBEINSTALLED="${TOBEINSTALLED} ${PACKAGE}"
    fi
  done
  
  
  if [[ "${TOBEINSTALLED}" != "" ]]; then
    echo " "
    echo "Do the following to install all required packages:"
    echo "sudo yum install ${TOBEINSTALLED}"
    echo " "
    exit 1;
  else 
    echo "All required packages seem to be already installed!"
    exit 0
  fi

fi


exit 0
