#!/bin/bash
# $Id: install_gis_sles10.sh 179 2007-04-19 22:35:15Z mark $

ARCH=`uname -i`
RPM_MIRROR="ftp://mirrors.kernel.org/opensuse/distribution/SL-10.0-OSS/inst-source/suse/${ARCH}"

rpms[1]="gd"
rpms[2]="gd-devel"
rpms[3]="libjpeg"
rpms[4]="libjpeg-devel"
rpms[5]="freetype2"
rpms[6]="freetype2-devel"
rpms[7]="libpng"
rpms[8]="libpng-devel"
rpms[9]="curl"
rpms[10]="curl-devel"
rpms[11]="zlib"
rpms[12]="zlib-devel"
rpms[13]="postgresql"
rpms[14]="postgresql-server"
rpms[15]="postgresql-devel"
rpms[16]="postgresql-libs"
rpms[17]="postgresql-contrib"
rpms[18]="postgresql-pl"
rpms[19]="php5"
rpms[20]="php5-devel"
rpms[21]="php5-zlib"
rpms[22]="apache2-mod_php5"

rpm_url[1]="gd-2.0.32-7.${ARCH}.rpm"
rpm_url[2]="gd-devel-2.0.32-7.${ARCH}.rpm"
rpm_url[3]="libjpeg-6.2.0-739.${ARCH}.rpm"
rpm_url[4]="libjpeg-devel-6.2.0-739.${ARCH}.rpm"
rpm_url[5]="freetype2-2.1.10-4.${ARCH}.rpm"
rpm_url[6]="freetype2-devel-2.1.10-4.${ARCH}.rpm"
rpm_url[7]="libpng-1.2.8-5.${ARCH}.rpm"
rpm_url[8]="libpng-devel-1.2.8-5.${ARCH}.rpm"
rpm_url[9]="curl-7.14.0-2.${ARCH}.rpm"
rpm_url[10]="curl-devel-7.14.0-2.${ARCH}.rpm"
rpm_url[11]="zlib-1.2.3-3.${ARCH}.rpm"
rpm_url[12]="zlib-devel-1.2.3-3.${ARCH}.rpm"

GEOS_VERSION="3.0.0rc2"
GDAL_VERSION="1.3.2"
PROJ4_VERSION="4.4.9"
PROJ4_DATUMGRID_VERSION="1.3"
MAPSERVER_VERSION="4.10.0"
POSTGIS_VERSION="1.1.6"
PGSQL_DIR="/var/lib/pgsql"
WORKDIR=/tmp/mapserver
mkdir -p $WORKDIR
SELF=`echo $0 | sed -r 's/^(.*\/)?([^\/]+)$/\2/g'`

verify() {
    if [ $1 -ne 0 ]; then
        echo ${SELF}: Error completing $2.  Cannot continue.
        exit 1
    fi
}

preinstall() {
    cd $WORKDIR
    FAIL=0
    for ((i = 1; i < 23; i++)); do
        RPM=${rpms[$i]}
        echo ${SELF}: Verifying existance of $RPM
        if [ `rpm -qa | grep -c -e $RPM` -eq 0 ]; then
            echo ${SELF}: $RPM not installed.  Downloading from $RPM_MIRROR
            RPM=${rpm_url[$i]}
            wget -O $RPM $RPM_MIRROR/$RPM
            echo ${SELF}: Installing $RPM
            sudo rpm -ivh $RPM
            verify $? '${RPM} RPM installation'
        fi
    done
}

geos() {
    cd $WORKDIR
    echo ${SELF}: Downloading GEOS geometry library
    wget -O geos-${GEOS_VERSION}.tar.bz2 http://geos.refractions.net/geos-${GEOS_VERSION}.tar.bz2
    # Compile and install GEOS
    echo ${SELF}: Compiling and installing GEOS
    tar xjvf geos-${GEOS_VERSION}.tar.bz2; cd geos-${GEOS_VERSION}
    ./configure --prefix=/usr/local
    verify $? 'GEOS configure'
    make
    verify $? 'GEOS make'
    sudo make install
    cd $WORKDIR
}

gdal() {
    cd $WORKDIR
    echo ${SELF}: Downloading GDAL/OGR
    wget -O gdal-${GDAL_VERSION}.tar.gz ftp://ftp.remotesensing.org/gdal/gdal-${GDAL_VERSION}.tar.gz
    echo ${SELF}: Compiling and installing GDAL/OGR
    tar xzvf gdal-${GDAL_VERSION}.tar.gz; cd gdal-${GDAL_VERSION}
    ./configure --prefix=/usr/local --with-pg=`which pg_config` --with-geos=yes --with-perl --with-php \
        --with-static-proj4=/usr/local --with-threads
    verify $? 'GDAL/OGR configure'
    make
    verify $? 'GDAL/OGR make'
    sudo make install
    cd $WORKDIR
}

postgis() {
    cd $WORKDIR
    echo ${SELF}: Downloading PostGIS
    wget -O postgis-${POSTGIS_VERSION}.tar.gz http://postgis.refractions.net/download/postgis-${POSTGIS_VERSION}.tar.gz
    echo ${SELF}: Compiling and installing PostGIS
    tar xzvf postgis-${POSTGIS_VERSION}.tar.gz; cd postgis-${POSTGIS_VERSION}
    ./configure --with-pgsql=`which pg_config` --prefix=${PGSQL_DIR}
    verify $? 'PostGIS configure'
    make
    verify $? 'PostGIS make'
    sudo make install
    cd $WORKDIR
}

proj4() {
    cd $WORKDIR
    echo ${SELF}: Downloading PROJ.4 cartographic projection library
    wget -O proj-${PROJ4_VERSION}.tar.gz ftp://ftp.remotesensing.org/proj/proj-${PROJ4_VERSION}.tar.gz

    echo ${SELF}: Downloading PROJ.4 NAD27/NAD83 datum grid
    wget -O proj-datumgrid-${PROJ4_DATUMGRID_VERSION}.zip ftp://ftp.remotesensing.org/proj/proj-datumgrid-${PROJ4_DATUMGRID_VERSION}.zip

    # Compile and install PROJ.4
    echo ${SELF}: Compiling and installing PROJ.4
    tar xzvf proj-${PROJ4_VERSION}.tar.gz; cd proj-${PROJ4_VERSION}/nad/
    cp ../../proj-datumgrid-${PROJ4_DATUMGRID_VERSION}.zip .
    unzip proj-datumgrid-${PROJ4_DATUMGRID_VERSION}.zip
    rm proj-datumgrid-${PROJ4_DATUMGRID_VERSION}.zip
    cd ..
    ./configure
    verify $? 'PROJ4 configure'
    make
    verify $? 'PROJ4 make'
    sudo make install
    sudo cp src/projects.h /usr/local/lib/
    sudo cp src/proj_api.h /usr/local/lib/
    cd $WORKDIR
}

mapserver() {
    cd $WORKDIR
    wget -O mapserver-${MAPSERVER_VERSION}.tar.gz http://cvs.gis.umn.edu/dist/mapserver-${MAPSERVER_VERSION}.tar.gz
    tar xzvf mapserver-${MAPSERVER_VERSION}.tar.gz; cd mapserver-${MAPSERVER_VERSION}
    ./configure \
     --with-wfs \
     --with-wcs \
     --with-wfsclient \
     --with-wmsclient \
     --with-proj=/usr/local/lib \
     --with-gdal=`which gdal-config` \
     --with-ogr=`which gdal-config` \
     --with-php=/usr/include/php5 \
     --with-httpd=/usr/sbin/httpd2 \
     --with-geos=`which geos-config` \
     --with-threads=-lpthread \
     --with-curl-config=`which curl-config` \
     --with-postgis=`which pg_config` \
     --prefix=/usr/local
    verify $? 'MapServer configure'
    export LD_RUN_PATH=/usr/lib64:/usr/lib:/usr/local/lib
    make
    verify $? 'MapServer make'
    sudo cp mapserv /srv/www/cgi-bin/
    sudo cp mapscript/php3/php_mapscript.so `rpm -qil php5 | grep extensions`
    sudo /sbin/ldconfig
    sudo /etc/init.d/apache2 restart
    cd $WORKDIR
}

example() {
    cd $WORKDIR
    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
    sudo mkdir -p /srv/www/htdocs/data
    sudo mkdir -p /srv/www/htdocs/tmp
    cat usa1.map | sed 's/var\/www\/html/srv\/www\/htdocs/g' > usa1.map.new
    sudo mv usa1.map.new /srv/www/htdocs/usa1.map
    sudo mv usa1.phtml /srv/www/htdocs/usa1.php
    wget -O statesp020.tar.gz http://edcftp.cr.usgs.gov/pub/data/nationalatlas/statesp020.tar.gz
    tar xzvf statesp020.tar.gz
    sudo mv *.shp *.shx *.dbf /srv/www/htdocs/data/
    sudo chown -R wwwrun.www /srv/www/htdocs/*
    mozilla http://localhost/usa1.php
}

preinstall
geos
proj4
gdal
postgis
mapserver
example


