#! /bin/bash

# COOKIE=$(mcookie|cut -c-8); grep -v V_GREP_ME $0 > /dev/shm/runme-$COOKIE.sh ; sleep 0.3; exec bash /dev/shm/runme-$COOKIE.sh
# TESTING=1

PKG=pymol-open-source
VERSION=3.1.0
BUILD=0

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

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

set -eu
umask 022

BUILD_TMPDIR=/scratch/local2/$PKG-$VERSION-$BUILD.$USER.build.tmp

test -d $BUILD_TMPDIR && ( chmod -R u+rwx $BUILD_TMPDIR || true ; rm -rf $BUILD_TMPDIR )
export TMPDIR=$BUILD_TMPDIR
export HOME=$BUILD_TMPDIR/home

exec </dev/null

mkdir -p $PREFIX
cat >$PREFIX/profile <<-EOF
	# pymol is build with current system python-3.12.8-0, if it is phased out, source it ...
	PYFP='3.12.8.*Jan  6 2025, 13:15:47'
	python -VV | grep -q "\$PYFP" || . /pkg/python-3.12.8-0/profile

	PATH=$PREFIX/bin:\$PATH
	export LD_LIBRARY_PATH=$PREFIX/lib\${LD_LIBRARY_PATH:+:\$LD_LIBRARY_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

NPROC=$(( $(nproc) * 4 / 5 + 1 ))
export MAKEFLAGS="-j $NPROC"

BUILDDIR=$PREFIX/build

mkdir -p $BUILDDIR
cd $BUILDDIR

if /bin/true ; then

(

  # orig: https://github.com/msgpack/msgpack-c/archive/refs/tags/cpp-6.1.1.tar.gz
  BEEHIVE=https://beehive.molgen.mpg.de/a0398798d8b9733bd5cd87a6d2f0b05f/msgpack-c-cpp-6.1.1.tar.gz
  test -e msgpack-c-cpp-6.1.1.tar.gz || wget -nv $BEEHIVE
  test -d msgpack-c-cpp-6.1.1 || tar -xf msgpack-c-cpp-6.1.1.tar.gz
  cd msgpack-c-cpp-6.1.1

  mkdir -p build
  cd build

  cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=$PREFIX \
    -DCMAKE_VERBOSE_MAKEFILE=ON \
    ..

  make -j $NPROC
  make install
)

(

  # orig: https://github.com/rcsb/mmtf-cpp/archive/refs/tags/v1.1.0.tar.gz
  BEEHIVE=https://beehive.molgen.mpg.de/ec961ff406a1636b4c5a25de7d9bd47b/mmtf-cpp-1.1.0.tar.gz

  test -e mmtf-cpp-1.1.0.tar.gz || wget -nv $BEEHIVE
  test -d mmtf-cpp-1.1.0 || tar -xf mmtf-cpp-1.1.0.tar.gz
  cd mmtf-cpp-1.1.0

  mkdir -p build
  cd build

  cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=$PREFIX \
    -DCMAKE_VERBOSE_MAKEFILE=ON \
    -DCMAKE_PREFIX_PATH=$PREFIX \
    ..

  make -j $NPROC
  make install
)

(

  # orig: https://github.com/g-truc/glm/archive/refs/tags/1.0.1.tar.gz
  BEEHIVE=https://beehive.molgen.mpg.de/f824ac50e16310a95279032f82cbd341/glm-1.0.1.tar.gz
  test -e glm-1.0.1.tar.gz || wget -nv $BEEHIVE
  test -d glm-1.0.1 || tar -xf glm-1.0.1.tar.gz
  cd glm-1.0.1

  mkdir -p build
  cd build

  cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=$PREFIX \
    -DCMAKE_VERBOSE_MAKEFILE=ON \
    -DCMAKE_PREFIX_PATH=$PREFIX \
    -DGLM_TEST_ENABLE=OFF \
    ..

  make -j $NPROC
  mkdir -p $PREFIX/include
  cp -ax ../glm $PREFIX/include
)

fi

(
  # orig: https://github.com/schrodinger/pymol-open-source/archive/refs/tags/v3.1.0.tar.gz
  BEEHIVE=https://beehive.molgen.mpg.de/459f483231e1d521824b0e74df5ba640/pymol-open-source-3.1.0.tar.gz
  test -e pymol-open-source-3.1.0.tar.gz || wget -nv $BEEHIVE
  test -d pymol-open-source-3.1.0 || tar -xf pymol-open-source-3.1.0.tar.gz
  cd pymol-open-source-3.1.0

  # patch setup.py, great, everthing else but a hack is a waste of time ...
  # needed -lcurl -lhdf5_hl -lhdf5_cpp -lhdf5, hdf 5 is static, curl was forgotten ?
  # old:   extra_link_args = ext_link_args,
  # new:   extra_link_args = ['-lcurl', '-lhdf5_hl', '-lhdf5_cpp', '-lhdf5'] + ext_link_args,
  sed -i -e '/\s\s*extra_link_args/ s/= /= \["-lcurl", "-lhdf5_hl", "-lhdf5_cpp", "-lhdf5"\] + /' setup.py

  export PREFIX_PATH=$PREFIX
  export CXXFLAGS='-I/usr/include -I/usr/include/freetype2 -I/usr/include/libxml2'

  python setup.py build --use-msgpackc c++11
  python setup.py install --prefix=$PREFIX

  # autsch ...
  sed -i -e  "s|/pkg/python-3.12.8-0/lib|$PREFIX/lib|"  $PREFIX/bin/pymol

)