#! /bin/sh
#+
#
# .. program:: project_profile.sh
#
# ===================
# project_profile.sh
# ===================
#
# SYNOPSIS
# ========
#
# On line usage:
#
# .. code-block:: sh
#
#  ./project_profile.sh -d directory -i indir -o outdir -t tempdir
#
# In :file:`${HOME}/.profile`, add the following line:
#
# .. code-block:: sh
#
#    . project_profile.sh -d directory  -i indir -o outdir -t tempdir
#
# DESCRIPTION
# ===========
#
# .. option:: -d <directory>
# .. option:: -i <indir>
# .. option:: -o <outdir>
# .. option:: -t <tempdir>
# .. option:: -jv <jabref version>
# .. option:: -j <jabref dir>
#
# define SUPERBIB environment
#
# ${PROJECT} is the base directory of tools.
#
# ${PROJECT_LOG} is the directory where log files will be written.
#
# ${PROJECT_ID} is the directory where input files must be.
#
# ${PROJECT_OD}  is the directory where output files will be written.
#
# MANPATH++
#
# :envvar:`${xmlcmd}` is set to either xml or xmlstarlet if one of these
# is available.
#
# EXAMPLES
# ========
#
# For fplod, on cratos.locean-ipsl.upmc.fr:
#
# .. code-block:: bash
#
#    cd /usr/home/fplod/src/superbib/superbib_ws/
#    SUPERBIB=${HOME}/superbib_ws/
#    export SUPERBIB
#    . ${SUPERBIB}/project_profile.sh \
#    -d ${SUPERBIB} \
#    -i /usr/temp/${LOGNAME}/superbib_d/ \
#    -o /usr/temp/${LOGNAME}/superbib_d/ \
#    -t /usr/temp/${LOGNAME}/log/ \
#    -jv 2.6 \
#    -j /usr/home/incas/francoise/jabref-2.6_cratos/
#    -b ++
#
# TODO
# ====
#
# ++ option bavarde
#
# ++ machine dependant
#
# ++ pas de MANPATH défini par défaut sur zeus
#
# réintégration de bibliolocean dans trunk ou projet bibliolocean à part
#
# doc sur jabref dir bibtool
#
# EVOLUTIONS
# ==========
#
# $Id$
#
# $URL$
#
# - fplod 20131010T113730Z callisto.locean-ipsl.upmc.fr (Linux)
#
#   * dynamic xmlstarlet vs xml
#
# - fplod 20130418T110932Z cratos.locean-ipsl.upmc.fr (Linux)
#
#   * add PYTHONPATH (seems to be need be sphinx-apidoc + sphinx-build)
#
# - fplod 20120629T120311Z cratos (Linux)
#
#   * path with branches/bibliolocean/src
#
# - fplod 20120405T085555Z cratos (Linux)
#
#   * rename and replace SUPERBIB by PROJECT
#
# - fplod 20100426T094821Z aedon.locean-ipsl.upmc.fr (Darwin)
#
#   * improve PATH and MANPATH modification
#
# - fplod 20100423T144248Z aedon.locean-ipsl.upmc.fr (Darwin)
#
#   * add error handling on mkdir
#
# - fplod 2008-10-31T11:17:24Z aedon.locean-ipsl.upmc.fr (Darwin)
#
#   * creation ++ pas encore en service
#
#-
system=$(uname)
case "${system}" in
    AIX|IRIX64)
        echo " www : no specific posix checking"
    ;;
    *)
        set -o posix
    ;;
esac
unset system
#
set -u
#
# as this script might be launch in .profile, command is forced.
command=project_profile.sh
#
usage=" Usage : ${command} -d directory -i indir -o outdir -t tempdir -jv jabrefversion -j jabrefdir -b bibtooldir"
#
pb=0
#
minargcount=14
maxargcount=14
narg=${#}
#
if [ ${narg} -lt ${minargcount} ]
then
    echo "eee : not enough arguments (${narg} vs ${minargcount})"
    echo "${usage}"
    # nb : no exit because this file should be launched by login process
    pb=1
fi
unset minargcount
#
if [ ${narg} -gt ${maxargcount} ]
then
    echo "eee : too many arguments (${narg} vs ${maxargcount})"
    echo "${usage}"
    # nb : no exit because this file should be launched by login process
    pb=1
fi
unset maxargcount
unset narg
#
if [ ${pb} -eq 0 ]
then
    while [ ${#} -gt 0 ]
    do
        case ${1} in
            -d)
                # directory for application chosen by user
                # (see svn checkout command used)
                directory=${2}
                shift
            ;;
            -i)
                # directory for inputs chosen by user
                indir=${2}
                shift
            ;;
            -o)
                # directory for outputs chosen by user
                outdir=${2}
                shift
            ;;
            -t)
                # directory for temporary outputs chosen by user
                tempdir=${2}
                shift
            ;;
            -jv)
                jabrefversion=${2}
                shift
            ;;
            -j)
                jabrefdir=${2}
                shift
            ;;
            -b)
                bibtooldir=${2}
                shift
            ;;
            *)
                # other choice
                echo "eee : unknown option ${1}"
                echo "${usage}"
                # nb : no exit because this file should be launched by
                # login process
            ;;
        esac
        # next flag
        shift
    done
    unset usage
fi
#
if [ ${pb} -eq 0 ]
then
    # check for ${directory}
    if [ ! -d ${directory} ]
    then
        echo " eee : ${directory} not found"
        # nb : no exit because this file should be launched by login process
    fi
    #
    # check for permission on directory
    if [ ! -x ${directory} ]
    then
        echo " eee : ${directory} not reachable"
        # nb : no exit because this file should be launched by login process
    fi
    #
    PROJECT=${directory}
    export PROJECT
    #
    # add PROJECT tools to PATH
    # if not already done
    suppath=$(echo ${PROJECT} | tr -s "/")
    echo ${PATH} | grep -q "${suppath}:"
    test_path=${?}
    if [ ${test_path} -ne 0 ]
    then
        PATH=${suppath}:${PATH}
        export PATH
    else
        # option bavarde oui/non pas encore implantée ++
        echo "${command} : iii : ${suppath} already in \${PATH}"
    fi
    unset test_path
    unset suppath
    #
    suppath=$(echo ${PROJECT}/../branches/bibliolocean/src | tr -s "/")
    echo ${PATH} | grep -q "${suppath}:"
    test_path=${?}
    if [ ${test_path} -ne 0 ]
    then
        PATH=${suppath}:${PATH}
        export PATH
    else
        # option bavarde oui/non pas encore implantée ++
        echo "${command} : iii : ${suppath} already in \${PATH}"
    fi
    unset test_path
    #
    # add PROJECT tools to PYTHONPATH
    # if not already done
    suppath=$(echo ${PROJECT}/aeres/scripts/ | tr -s "/")
    echo ${PYTHONPATH} | grep -q "${suppath}:"
    test_path=${?}
    if [ ${test_path} -ne 0 ]
    then
        PYTHONPATH=${suppath}:${PYTHONPATH}
        export PYTHONPATH
    else
        # option bavarde oui/non pas encore implantée ++
        echo "${command} : iii : ${suppath} already in \${PYTHONPATH}"
    fi
    unset test_path
    unset suppath
    #
    # add PROJECT tools to PYTHONPATH
    # if not already done
    suppath=$(echo ${PROJECT}/| tr -s "/")
    echo ${PYTHONPATH} | grep -q "${suppath}:"
    test_path=${?}
    if [ ${test_path} -ne 0 ]
    then
        PYTHONPATH=${suppath}:${PYTHONPATH}
        export PYTHONPATH
    else
        # option bavarde oui/non pas encore implantée ++
        echo "${command} : iii : ${suppath} already in \${PYTHONPATH}"
    fi
    unset test_path
    unset suppath
    #
    # add PROJECT manuals to MANPATH
    # if not already done
    suppath=$(echo ${PROJECT}/doc/manuals/man | tr -s "/")
    echo ${MANPATH} | grep -q "${suppath}:"
    test_manpath=${?}
    if [ ${test_manpath} -ne 0 ]
    then
        MANPATH=${suppath}:${MANPATH}
        export MANPATH
    else
        # option bavarde oui/non pas encore implantée ++
        echo "${command} : iii : ${suppath} already in \${MANPATH}"
    fi
    unset test_manpath
    unset suppath
    #
    PROJECT_LOG=${tempdir}
    export PROJECT_LOG
    unset tempdir
    if [ ! -d ${PROJECT_LOG} ]
    then
        mkdir -p ${PROJECT_LOG}
        status=${?}
        if [ ${status} -ne 0 ]
        then
            echo "${command} : eee : can not create \${PROJECT_LOG}"
            # nb : no exit because this file should be launched by login process
        else
            echo "${command} : iii : creation of \${PROJECT_LOG}"
        fi
        unset status
    fi
    # check for permission on PROJECT_LOG
    if [ ! -x ${PROJECT_LOG} ]
    then
        echo " eee : ${PROJECT_LOG} not reachable"
        # nb : no exit because this file should be launched by login process
    fi
    #
    # check for permission on PROJECT_LOG
    if [ ! -w ${PROJECT_LOG} ]
    then
        echo " eee : ${PROJECT_LOG} not writable"
        # nb : no exit because this file shouldreachable be launched
        # by login process
    fi
    #
    EDITOR=vi
    export EDITOR
    #
    # io directories
    PROJECT_ID=${indir}
    export PROJECT_ID
    unset indir
    if [ ! -d ${PROJECT_ID} ]
    then
        mkdir -p ${PROJECT_ID}
        echo "${command} : iii : creation of \${PROJECT_ID}"
    fi
    # check for permission on PROJECT_ID
    if [ ! -x ${PROJECT_ID} ]
    then
        echo " eee : ${PROJECT_ID} not reachable"
        # nb : no exit because this file should be launched by login process
    fi
    #
    PROJECT_OD=${outdir}
    export PROJECT_OD
    unset outdir
    if [ ! -d ${PROJECT_OD} ]
    then
        mkdir -p ${PROJECT_OD}
        echo "${command} : iii : creation of \${PROJECT_OD}"
    fi
    # check for permission on PROJECT_OD
    if [ ! -x ${PROJECT_OD} ]
    then
        echo " eee : ${PROJECT_OD} not reachable"
        # nb : no exit because this file should be launched by login process
    fi
    if [ ! -w ${PROJECT_OD} ]
    then
        echo " eee : ${PROJECT_OD} not writable"
        # nb : no exit because this file should be launched by login process
    fi
    #
    JABREF_DIR=${jabrefdir}
    export JABREF_DIR
    unset jabref_dir
    JABREF_VERSION=${jabrefversion}
    export JABREF_VERSION
    unset jabrefversion
    #
    BIBTOOL_DIR=${bibtooldir}
    export BIBTOOL_DIR
    unset bibtooldir
    PATH=${BIBTOOL_DIR}:${PATH}
    export PATH
    #
    # test if which xml is available xml or xmlstarlet
    tool=xml
    type ${tool} 1> /dev/null 2>&1
    status=${?}
    if [ ${status} -ne 0 ]
    then
        #echo "${command} : www : tool ${tool} not found"
        tool=xmlstarlet
        type ${tool} 1> /dev/null 2>&1
        status=${?}
        if [ ${status} -ne 0 ]
        then
            echo "${command} : eee : tool ${tool} not found"
        else
            xmlcmd=xmlstarlet
        fi
    else
        xmlcmd=xml
    fi
    export xmlcmd
    #
    unset status
    unset tool
fi
unset pb
# end
unset command
# nb : no exit because this file should be launched by login process
