#! /bin/bash

PKG=python
VERSION=3.7.4
BUILD=2
PYTHONVER=${VERSION%.*}

PREFIX=/pkg/$PKG-$VERSION-$BUILD
if [ -n "$TESTING" ]; then PREFIX=/dev/shm/$PKG-$VERSION-$BUILD ; fi

PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin

set -xe
umask 022

BUILD_TMPDIR=/dev/shm/$PKG-$VERSION-$BUILD.build.tmp
test -d $BUILD_TMPDIR && ( chmod -R u+rwx $BUILD_TMPDIR || true ; rm -rf $BUILD_TMPDIR )
mkdir -p $BUILD_TMPDIR/home
export TMPDIR=$BUILD_TMPDIR
export HOME=$BUILD_TMPDIR/home

exec </dev/null

mkdir -p $PREFIX
cat >$PREFIX/profile <<-EOF
	PATH=$PREFIX/bin:\$PATH
	PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig\${PKG_CONFIG_PATH:+:\$PKG_CONFIG_PATH}
	export PKG_CONFIG_PATH
	if [ -d $PREFIX/.compatlibs ]; then export LD_LIBRARY_PATH=$PREFIX/.compatlibs\${LD_LIBRARY_PATH:+:\$LD_LIBRARY_PATH} ; fi
EOF
. $PREFIX/profile

export MAKEFLAGS="-j $(nproc)"

BUILDDIR=$PREFIX/build

mkdir -p $BUILDDIR
cd $BUILDDIR

test -e Python-$VERSION.tar.xz || wget https://www.python.org/ftp/python/$VERSION/Python-$VERSION.tar.xz
test -d Python-$VERSION        || tar xvf Python-$VERSION.tar.xz
cd Python-$VERSION

LDFLAGS="-Wl,-rpath=$PREFIX/lib" \
./configure \
        --prefix=$PREFIX \
        --enable-shared

make -j $(nproc)
# make test || true # 'test_socket' seems to run for ever
make install

( # sip: tool to create Python bindings for C and C++ libraries.
  cd $PREFIX/build
  SIP_VERSION=4.19.18
  SIP_SRC=https://www.riverbankcomputing.com/static/Downloads/sip/$SIP_VERSION/sip-$SIP_VERSION.tar.gz
  test -e sip-$SIP_VERSION.tar.gz || wget $SIP_SRC
  test -d sip-$SIP_VERSION || tar -xf sip-$SIP_VERSION.tar.gz

  cd sip-$SIP_VERSION

  python3 configure.py \
      -b $PREFIX/bin \
      -d $PREFIX/lib/python$PYTHONVER/site-packages \
      -e $PREFIX/include/python${PYTHONVER}m \
      -v $PREFIX/share/sip \
      --sip-module=sip

  # well, right here share/sip is spoilage, but maybe some packages will use the decent sip later on ...
  mkdir -p $PREFIX/share/sip
  make -j $(nproc);
  make install
)


( # now for the private (sic!) version required by newer PyQt
  cd $PREFIX/build
  mkdir -p private_sip
  cd private_sip
  SIP_VERSION=4.19.18
  SIP_SRC=https://www.riverbankcomputing.com/static/Downloads/sip/$SIP_VERSION/sip-$SIP_VERSION.tar.gz
  test -e sip-$SIP_VERSION.tar.gz || wget $SIP_SRC
  test -d sip-$SIP_VERSION || tar -xf sip-$SIP_VERSION.tar.gz

  cd sip-$SIP_VERSION

  # note $PREFIX/share/sip/PyQt5 is mandatory
  python3 configure.py \
      -d $PREFIX/lib/python$PYTHONVER/site-packages \
      -v $PREFIX/share/sip/PyQt5 \
      --no-tools \
      --sip-module=PyQt5.sip

  mkdir -p $PREFIX/share/sip/PyQt5
  make -j $(nproc)
  # The resulting sip.so in site-packages/PyQt5 differs indeed a bit (grep for PyQt5)
  make install
)

(
  PYQT_VERSION=5.13.0
  PYQT_SRC=https://www.riverbankcomputing.com/static/Downloads/PyQt5/$PYQT_VERSION/PyQt5_gpl-$PYQT_VERSION.tar.gz

  cd $BUILDDIR
  test -e PyQt5_gpl-$PYQT_VERSION.tar.gz || wget $PYQT_SRC
  test -d PyQt5_gpl-$PYQT_VERSION || tar -xf PyQt5_gpl-$PYQT_VERSION.tar.gz

  cd PyQt5_gpl-$PYQT_VERSION

  # export QTDIR=/usr/local/qt5
  python3 configure.py \
    -b $PREFIX/bin \
    -d $PREFIX/lib/python$PYTHONVER/site-packages \
    -n $PREFIX/share/qsci \
    -q /usr/local/qt5/bin/qmake \
    -v $PREFIX/share/sip/PyQt5 \
    --sip-incdir=$PREFIX/include/python${PYTHONVER}m \
    --confirm-license \
    --no-qml-plugin \
    --no-designer-plugin \
    --no-dist-info \
    --verbose

  make -j $(nproc)

  # Did I miss something in the docs ???
  # w/o the *.so files inplace a clean 'make install' fails with file not found ...
  # -> FileNotFoundError: [Errno 2] No such file or directory:
  #         '/dev/shm/python-3.7.4-0/lib/python3.7/site-packages/PyQt5/QtCore.so'
  mkdir -p $PREFIX/lib/python$PYTHONVER/site-packages/PyQt5
  for F in `find | grep '\.so$' | grep -v '/lib'` ; do
    cp -vp $F $PREFIX/lib/python$PYTHONVER/site-packages/PyQt5/
  done
  make install
)

(
  QSCINTILLA_VERSION=2.11.2
  QSCINTILLA_SRC=https://www.riverbankcomputing.com/static/Downloads/QScintilla/$QSCINTILLA_VERSION/QScintilla_gpl-$QSCINTILLA_VERSION.tar.gz

  cd $BUILDDIR
  test -e QScintilla_gpl-$QSCINTILLA_VERSION.tar.gz || wget $QSCINTILLA_SRC
  test -d QScintilla_gpl-$QSCINTILLA_VERSION || tar -xf QScintilla_gpl-$QSCINTILLA_VERSION.tar.gz
  cd QScintilla_gpl-$QSCINTILLA_VERSION

  cd Python

  # apidir follows PyQt, not Qt (default is: QT_INSTALL_DATA/qsci)
  # creation of PEP 376 .dist-info fails in $PREFIX/share
  python3 configure.py \
    --pyqt=PyQt5 \
    --qmake=/usr/local/qt5/bin/qmake \
    --apidir=$PREFIX/share/qsci \
    --no-dist-info

  make -j $(nproc)

  # Call it a deja-vu, nerve ...
  # -> FileNotFoundError: [Errno 2] No such file or directory: '/dev/shm/python-3.7.4-0/lib/python3.7/site-packages/PyQt5/Qsci.so'
  mkdir -p $PREFIX/lib/python$PYTHONVER/site-packages/PyQt5
  for F in `find | grep '\.so$' | grep -v '/lib'` ; do
    cp -vp $F $PREFIX/lib/python$PYTHONVER/site-packages/PyQt5
  done
  make install
)

python3 -m ensurepip
pip3 install -I pip

pip3 install ipython[all]

pip3 install SciPy NumPy Matplotlib pandas SymPy nose statsmodels
# clean up some dirt that statsmodels placed also into $PREFIX
rm -vf $PREFIX/LICENSE.txt
rm -vf $PREFIX/setup.cfg

pip3 install Cython

pip3 install pysam
pip3 install seaborn
pip3 install scikit-learn
# pip3 install metaseq      # fails (Latest commit fa875d1 on Jan 10, 2017)
pip3 install Mako
pip3 install meson          # required in mariux

pip3 install cutadapt       # Helpdesk 01/24/18 16:19, Sabrina Krakau
pip3 install pygobject      # Helpdesk 03/26/18 14:19, Virginie Stanisla
pip3 install blink1         # Blink1-lib 07/04/18 12:00, Niclas Hofmann

pip3 install umi-tools
pip3 install sphinx
pip3 install recommonmark
pip3 install fastcluster
pip3 install pydot
pip3 install pygraphviz
pip3 install deeptools
pip3 install HTSeq
pip3 install keras
pip3 install MotifScan      # Alena 30.8.2018
pip3 install MAmotif
pip3 install hic2cool       # Helpdesk Robert Schoepflin 17.09.2018
# pip3 install hifive       # only python 2.7+
pip3 install snakemake
pip3 install virtualenv     # Donald
pip3 install odfpy          # Donald
pip3 install Dumper         # Thomas
pip3 install igraph
pip3 install louvain        # monocle3 prep for Helene
pip3 install selenium       # 19.7.19 Kreitler  -> https://webxray.org/
pip3 install cooltools      # Maria Valieva 17.7.2019
pip3 install gmpy           # From viper context (Helpdesk Laura Glaser 9.8.2019)

# pip3 install HiCExplorer  # Would be a nice to have, but it likes to downgrade too much, pick some cherries
pip3 install HiCMatrix
pip3 install pyGenomeTracks

pip3 install python-bioformats

pip3 install jupyterlab      # request Peter Arndt
pip3 install libxml2-python3 # required by several bee packages after swich to python3
pip3 install scour           # https://github.molgen.mpg.de/mariux64/pkg-scripts/issues/98
pip3 install jupyterlab-git  # https://github.molgen.mpg.de/mariux64/pkg-scripts/issues/96

exit