#!/bin/sh

PYVER=@PYVER@
PYTHON_ROOT="/Library/Frameworks/Python.framework/Versions/@PYVER@"


# Run from the installer, do some trickery to fetch the information
# we need.
theShell="`finger $USER | grep Shell: | head  -1 | awk '{ print $NF }'`"

# Make sure the directory ${PYTHON_ROOT}/bin is on the users PATH.
BSH="`basename "${theShell}"`"
case "${BSH}" in
bash|ksh|sh|*csh|zsh|fish)
    true
    ;;
*)
    exit 0
    ;;
esac

case "${BSH}" in
*csh)
    if [ -f "${HOME}/.tcshrc" ]; then
        RC="${HOME}/.tcshrc"
    else
        RC="${HOME}/.cshrc"
    fi

    # Drop privileges while writing files.
    su -m ${USER} <<EOFC
    # Create backup copy before patching
    if [ -f "${RC}" ]; then
        cp -fp "${RC}" "${RC}.pysave"
    fi
    echo "" >> "${RC}"
    echo "# Setting PATH for Python ${PYVER}" >> "${RC}"
    echo "# The original version is saved in .cshrc.pysave" >> "${RC}"
    echo "set path=(${PYTHON_ROOT}/bin "'\$path'")" >> "${RC}"
EOFC

    if [ `id -ur` = 0 ]; then
        chown -h "${USER}" "${RC}"
    fi
    exit 0
    ;;
bash)
    if [ -e "${HOME}/.bash_profile" ]; then
        PR="${HOME}/.bash_profile"
    elif [ -e "${HOME}/.bash_login" ]; then
        PR="${HOME}/.bash_login"
    elif [ -e "${HOME}/.profile" ]; then
        PR="${HOME}/.profile"
    else
        PR="${HOME}/.bash_profile"
    fi
    ;;
fish)
    CONFIG_DIR="${HOME}/.config/fish/conf.d/"
    RC="${CONFIG_DIR}/python-${PYVER}.fish"

    # Drop privileges while writing files.
    su -m ${USER} <<EOFF
    mkdir -p "$CONFIG_DIR"
    if [ -f "${RC}" ]; then
        cp -fp "${RC}" "${RC}.pysave"
    fi
    echo "# Setting PATH for Python ${PYVER}" > "${RC}"
    if [ -f "${RC}.pysave" ]; then
        echo "# The original version is saved in ${RC}.pysave" >> "${RC}"
    fi
    echo "fish_add_path -g \"${PYTHON_ROOT}/bin\"" >> "${RC}"
EOFF

    if [ `id -ur` = 0 ]; then
        chown -h "${USER}" "${RC}"
    fi
    exit 0
    ;;
zsh)
    PR="${HOME}/.zprofile"
    ;;
*sh)
    PR="${HOME}/.profile"
    ;;
esac

# Drop privileges while writing files.
su -m ${USER} <<EOFS
# Create backup copy before patching
if [ -f "${PR}" ]; then
    cp -fp "${PR}" "${PR}.pysave"
fi
echo "" >> "${PR}"
echo "# Setting PATH for Python ${PYVER}" >> "${PR}"
echo "# The original version is saved in `basename ${PR}`.pysave" >> "${PR}"
echo 'PATH="'"${PYTHON_ROOT}/bin"':\${PATH}"' >> "${PR}"
echo 'export PATH' >> "${PR}"
EOFS

if [ `id -ur` = 0 ]; then
    chown -h "${USER}" "${PR}"
fi
exit 0
