#!/bin/bash

# $Id: install_gis-openSUSE-11.x.sh 214 2010-07-20 15:01:57Z mark $

REPO_DIR="/etc/zypp/repos.d"
BASE="http://download.opensuse.org"
RPMS="gd gd-devel curl libcurl4 zlib zlib-devel postgresql postgresql-devel \
  postgresql-libs postgresql-server postgresql-contrib postgresql-plperl \
  postgresql-plpython postgresql-pltcl php5 php5-devel php5-zlib php5-pgsql \
  apache2 apache2-mod_php5 netcdf libnetcdf4 libnetcdf-devel libgeos0 geotiff \
  libgeos-devel libgdal1 libgdal-devel gdal libproj0 libproj-devel proj4 \
  libshp1 libshp-devel shapelib grass grass-devel grass-docs \
  mapserver mapserver-java mapserver-perl php-mapserver qgis qgis-devel \
  postgis postgis-utils GMT GMT-devel GMT-coastlines GMT-doc GMT-examples"

getVersion() {
    set -e
    SUSE_RELEASE=`head -1 /etc/SuSE-release`
    if echo "${SUSE_RELEASE}" | grep -qE '^openSUSE 11\.[1-9] \('; then
        SUSE_VERSION=`echo "${SUSE_RELEASE}" | cut -d " " -f2`
    else
        echo "Only openSUSE 11.1, 11.2, and 11.3 are currently supported"
        exit 1
    fi
}

addRepo() {
    FOUND=0
    for REPO in `grep -Rli "$1" "$REPO_DIR"`; do
        if [ `grep -c "type=$3" $REPO` -gt 0 ]; then
            FOUND=1
        fi
    done
    if [ $FOUND = 0 ]; then
        echo 
        yes | zypper ar -t "$3" -f "$BASE/$1" "$2"
    fi
}

installRPMS() {
    zypper ref && zypper in -l $RPMS
    if [ $1 != 0 ]; then
        echo Error completing install.  Cannot continue.
        exit 1
    fi
}

checkPHPVersion() {
    PHP_RELEASE=`$(which php) -v | head -1`
    if echo "${PHP_RELEASE}" | grep -qE '^PHP [1-9]?[5-9]\.[3-9]'; then
        sed -i "s/^dl(.*//g" /srv/www/htdocs/usa1.php
        INI=`rpm -ql apache2-mod_php5 | grep php.ini`
        if [ `cat $INI | grep -c php_mapscript` = 0 ]; then
            NUM=0
            TOTAL=`cat $INI | wc -l`
            while read LINE; do
                NUM=$((NUM+1))
                if echo "${LINE}" | grep -qE '^\[PHP\]'; then
                    if [ "$NUM" != -1 ]; then
                        head -$NUM $INI > .tmp
                        echo "extension=php_mapscript.so" >> .tmp
                        tail -$((TOTAL-NUM)) >> .tmp
                        mv .tmp $INI
                        NUM=-1
                    fi
                fi
            done < $INI
        fi
    fi
}

example() {
    wget -O MSrecipes.tar.gz http://www.mobilegeographics.com/mapserver/MSrecipes.tar.gz
    mkdir -p MSrecipes; cp MSrecipes.tar.gz MSrecipes; cd MSrecipes
    tar xzvf MSrecipes.tar.gz
    mkdir -p /srv/www/htdocs/data
    mkdir -p /srv/www/htdocs/tmp
    cat usa1.map | sed 's/var\/www\/html/srv\/www\/htdocs/g' > usa1.map.new
    cp usa1.map.new /srv/www/htdocs/usa1.map
    cp usa1.map.new /srv/www/htdocs/usa1.txt
    cp usa1.phtml /srv/www/htdocs/usa1.php

    checkPHPVersion

    wget -O statesp020.tar.gz http://edcftp.cr.usgs.gov/pub/data/nationalatlas/statesp020.tar.gz
    tar xzvf statesp020.tar.gz
    mv *.shp *.shx *.dbf /srv/www/htdocs/data/
    chown -R wwwrun.www /srv/www/htdocs/*
    rcapache2 restart
    firefox http://localhost/usa1.php
}

checkRoot() {
    if [ "$(whoami)" != "root" ]; then
        echo "You must be root to install the GIS system"
        exit 1
    fi
}

getRPMList() {
    if [ "$SUSE_VERSION" = "11.1" ]; then
        RPMS="$RPMS libjpeg libjpeg-devel freetype2 freetype2-devel libpng3 \
          libpng-devel"
    elif [ "$SUSE_VERSION" = "11.2" ]; then
        RPMS="$RPMS libjpeg libjpeg-devel freetype2 freetype2-devel libpng12-0 \
          libpng-devel"
    elif [ "$SUSE_VERSION" = "11.3" ]; then
        RPMS="$RPMS libjpeg6 libjpeg8 libjpeg-devel freetype freetype2-devel \
          libpng12-0 libpng14-14 libpng14-14-compat-devel libpng14-14-devel \
          libpng-devel"
    fi
}

checkRoot
getVersion
addRepo "distribution/$SUSE_VERSION/repo/oss" "openSUSE-11.3-Oss" "yast2"
addRepo "repositories/Application:/Geo/openSUSE_$SUSE_VERSION" "Application_Geo" "rpm-md"
getRPMList
installRPMS
example


