|
|
#!/bin/bash
|
|
|
#
|
|
|
# Simple installation shell script for Python packages.
|
|
|
#
|
|
|
# Usage:
|
|
|
# pkginstall PAKPREFIX [PYPACKAGE]
|
|
|
#
|
|
|
# PAKPREFIX: prefix of the package as distributed in the tarball.
|
|
|
#
|
|
|
# PYPACKAGE: name of the Python package as it will end up installed. If not
|
|
|
# given, it defaults to PAKPREFIX.
|
|
|
#
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Process command-line args
|
|
|
#
|
|
|
PAKPREFIX=$1
|
|
|
PYPACKAGE=${2:-$PAKPREFIX}
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Configure main variables
|
|
|
#
|
|
|
# Defaults for variables that the .cfg file may override.
|
|
|
PYTHON_DEFAULT=python
|
|
|
PREFIX_DEFAULT=$HOME/usr/local
|
|
|
|
|
|
# Read config file which may declare user values for these variables.
|
|
|
source ./pkginstall.cfg
|
|
|
|
|
|
# Set the variables we'll actually use, either from the config file or from our
|
|
|
# defaults.
|
|
|
PYTHON=${PYTHON-${PYTHON_DEFAULT}}
|
|
|
PREFIX=${PREFIX-${PREFIX_DEFAULT}}
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# 'Main' code begins
|
|
|
#
|
|
|
|
|
|
# Find the actual python executable path
|
|
|
PYTHONX=$(which $PYTHON)
|
|
|
if [[ ! -x $PYTHONX ]]; then
|
|
|
echo "ERROR: no python executable found at given path: $PYTHON"
|
|
|
echo "Aborting."
|
|
|
exit 1
|
|
|
fi
|
|
|
|
|
|
# Python version information. PYTHONV holds a versioned string used to build
|
|
|
# the site-packages path for the actual Python version we'll use.
|
|
|
PYVER=$($PYTHONX -ESV 2>&1)
|
|
|
PYVER_MINOR=${PYVER#Python }
|
|
|
PYVER_MAJOR=${PYVER_MINOR:0:3}
|
|
|
PYTHONV=python${PYVER_MAJOR}
|
|
|
|
|
|
# Set prefixes and other variables for the installation path.
|
|
|
SITEPKG=${PREFIX}/lib/${PYTHONV}/site-packages
|
|
|
SITEPKG64=${PREFIX}/lib64/${PYTHONV}/site-packages
|
|
|
|
|
|
# User diagnostics of current config
|
|
|
echo "Configuration:"
|
|
|
echo " PYTHON : $PYTHON"
|
|
|
echo " PYTHONX : $PYTHONX"
|
|
|
echo " PREFIX : $PREFIX"
|
|
|
echo " SITEPKG : $SITEPKG"
|
|
|
echo " SITEPKG64: $SITEPKG64"
|
|
|
|
|
|
# Find tarball
|
|
|
tarball=$(ls *$PAKPREFIX*.tar.*)
|
|
|
|
|
|
if [[ -z $tarball ]]; then
|
|
|
echo "ERROR: tarball not found for $PYPACKAGE"
|
|
|
exit 1
|
|
|
fi
|
|
|
|
|
|
# Figure out the name of the directory and compression format to use to unpack
|
|
|
pakdir=$(echo $tarball | awk -F '.tar.' '{print $1}')
|
|
|
tarfmt=$(echo $tarball | awk -F '.tar.' '{print $2}')
|
|
|
|
|
|
if [[ $tarfmt == "gz" ]]; then
|
|
|
tarflag="z"
|
|
|
else
|
|
|
tarflag="j"
|
|
|
fi
|
|
|
|
|
|
# Unpack the tarball if needed
|
|
|
if [[ ! -d $pakdir ]]; then
|
|
|
echo "Unpacking tarball: $tarball"
|
|
|
tar -x -${tarflag} -f $tarball
|
|
|
|
|
|
if [[ ! -d $pakdir ]]; then
|
|
|
echo "Tarball $tarball unpacked to unexpected path, aborting"
|
|
|
exit 1
|
|
|
fi
|
|
|
fi
|
|
|
|
|
|
# Remove existing ${PYPACKAGE} to make sure the build doesn't pick up spurious
|
|
|
# things. We don't touch the bin/ dir or anything else because it's hard to
|
|
|
# know what goes there in advance. But this should prevent most serious
|
|
|
# problems.
|
|
|
rm -rf $SITEPKG/${PYPACKAGE}
|
|
|
rm -rf $SITEPKG/${PYPACKAGE}*.egg
|
|
|
rm -rf $SITEPKG/${PYPACKAGE}*.egg-info
|
|
|
|
|
|
rm -rf $SITEPKG64/${PYPACKAGE}
|
|
|
rm -rf $SITEPKG64/${PYPACKAGE}*.egg
|
|
|
rm -rf $SITEPKG64/${PYPACKAGE}*.egg-info
|
|
|
|
|
|
# Make/install phase
|
|
|
|
|
|
# Set python search path correctly
|
|
|
export PYTHONPATH=$SITEPKG:$SITEPKG64:$PYTHONPATH
|
|
|
|
|
|
# Ensure install dirs exist
|
|
|
mkdir -p $SITEPKG
|
|
|
mkdir -p $SITEPKG64
|
|
|
|
|
|
cd ${pakdir}
|
|
|
rm -rf build dist
|
|
|
$PYTHONX setup.py clean
|
|
|
time $PYTHONX setup.py install --prefix=$PREFIX
|
|
|
|