From 1f8ebcd232ac1111c5dfe83148fcb7153778b6d5 Mon Sep 17 00:00:00 2001
From: thomas <kreitler@molgen.mpg.de>
Date: Thu, 4 Jan 2024 15:19:00 +0100
Subject: [PATCH] pypy: add version 3.10-v7.3.13

"A fast, compliant alternative implementation of Python"

More info: https://www.pypy.org/index.html

For pure python code the JIT-compiler can yield impressive
speed gains, if you already have code that uses c-bindings
the code runs slower, so YMMV.

Rationale, some ONT workflows make use of it, and having
pypy at hand makes comparisons/benchmarks on bare metal
variants easier.
---
 pypy-3.10-v7.3.13-0.build.sh | 198 +++++++++++++++++++++++++++++++++++
 1 file changed, 198 insertions(+)
 create mode 100755 pypy-3.10-v7.3.13-0.build.sh

diff --git a/pypy-3.10-v7.3.13-0.build.sh b/pypy-3.10-v7.3.13-0.build.sh
new file mode 100755
index 0000000..b85bce4
--- /dev/null
+++ b/pypy-3.10-v7.3.13-0.build.sh
@@ -0,0 +1,198 @@
+#!/bin/bash
+
+
+# ------------------------------------------------------------------- Debug
+
+ 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
+
+# ---------------------------------------------------------------- Preamble
+
+PKG=pypy
+VERSION=3.10-v7.3.13
+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 -e
+umask 022
+
+BUILD_TMPDIR=/scratch/local2/$PKG-$VERSION-$BUILD.$USER.build.tmp
+
+# keep pip's download cache when testing
+test -z "$TESTING" && test -d $BUILD_TMPDIR && ( chmod -R u+rwx $BUILD_TMPDIR || true ; rm -rf $BUILD_TMPDIR )
+mkdir -p $BUILD_TMPDIR/home/.cache/pip
+mkdir -p $BUILD_TMPDIR/home/.local
+# copy script to an accessible location
+cp $0 $BUILD_TMPDIR; ME="$BUILD_TMPDIR/$(basename $0)"
+export TMPDIR=$BUILD_TMPDIR
+export HOME=$BUILD_TMPDIR/home
+
+exec </dev/null
+
+mkdir -p $PREFIX
+cat >$PREFIX/profile <<-EOF
+	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
+
+
+# -------------------------------------- Use git to track package evolution
+
+test -d .git && rm -rf .git
+git init -q; echo -e '[user]\n name = none\n email = of_your_business...' >> .git/config
+echo '*' > .gitignore
+
+function piplist() {
+  pip list | awk '{ printf("%-36s %s\n", $1,$2) }' | grep -v '\----' > GameOfVersions
+}
+
+function track() {
+  if [ -d .git ]; then
+    if git add -f GameOfVersions; then
+      git commit -q -n -m "Package: '$*'" || /bin/true
+    fi
+  fi
+}
+
+function install() {
+  echo "# ::INST:: # '${@+$@}'"
+  # no-color is nice, but doesn't work when dependencies are installed, so (mis-)use a pipe
+  pip install --no-color --compile --cache-dir=$HOME/.cache/pip --prefix=$PREFIX "${@+$@}" | cat
+  piplist
+  track $*
+}
+
+
+# -------------------------------------------------------------- Build PyPy
+
+(
+
+  # orig: https://downloads.python.org/pypy/pypy3.10-v7.3.14-src.tar.bz2
+  BEEHIVE=https://beehive.molgen.mpg.de/5e4d55b173d67e5d287add014b36b918/pypy3.10-v7.3.13-src.tar.bz2
+  test -e pypy$VERSION-src.tar.bz2 || wget -nv $BEEHIVE
+  test -d pypy$VERSION-src || tar -xf pypy$VERSION-src.tar.bz2
+  cd pypy$VERSION-src
+
+  # mind, the doc for building is here: pypy3.10-v7.3.13-src/pypy/doc/build.rst
+
+  sed -i -e '/^RUNINTERP/ s/python.*/python2/' Makefile
+  make 2>&1 | cat  # avoid the fractal painter :/
+
+  python2 pypy/tool/release/package.py --archive-name=pypy-$VERSION-x86_64
+  # Results in: Ready in /scratch/local2/pypy-3.10-v7.3.13-0.kreitler.build.tmp/usession-release-pypy3.10-v7.3.13-1/build
+
+  (
+    cd $PREFIX
+    TAR=$(ls -rt $TMPDIR/usession-release-pypy*[0-9]/build/pypy-3.10-v7.3.13-x86_64.tar.bz2 | tail -1)
+    tar -xf $TAR --strip-components=1
+  )
+
+  # it might come to happen that something down the line may just call 'python', defuse ...
+  test -e $PREFIX/bin/python || ln -s pypy $PREFIX/bin/python
+
+  python -m ensurepip
+  pip3 install --upgrade --prefix=$PREFIX -I pip
+  ( # fix 'please update' noise from pip
+    cd $PREFIX/lib/pypy*/site-packages
+    sed -ne '/^#Epatch:pip/ s/^#Epatch:\S* // p' $ME | patch -p1 --verbose
+  )
+
+)
+
+install setuptools
+piplist; track START
+
+# -------------------------------------------------------- Install packages
+
+PACKAGES=$(sed -e s/#.*$// <<- __PKGLIST__
+	numpy
+	keras
+	seaborn
+	pytest==6.2.5
+	pytest-asyncio==0.19.0 # to get rid of a deprecation warning in 0.20.3, -> 0.19.0
+	Pillow
+	SciPy
+	pandas
+	SymPy
+	nose
+	statsmodels
+	pysam
+	seaborn
+	scikit-learn
+	hvplot
+	pyarrow
+	fastcluster
+	snakemake
+	virtualenv
+	Dumper
+	plotly
+	svgwrite
+	biopython
+	filetype
+	pyperformance # this is _not_ the pypy optimized suite, by intention ...
+	__PKGLIST__
+)
+
+for PKG in $PACKAGES; do
+  install $PKG
+done
+
+# ------------------------------------------------------------ Sanity check
+
+# load all packages, see warnings and spot installation errors
+echo "# START load test."
+python -c 'help("modules")' > /dev/null
+echo "# END load test (passed)."
+
+echo "# running pip check"
+pip check
+
+# I guess it makes sense that files can be read by all users ...
+echo "# check for unreadable files"
+cd $PREFIX
+for D in bin etc include lib share; do
+  find $D \! -perm -004 -exec chmod -c a+r {} +
+done
+
+echo "For Deeper checks:"
+echo "cd ${BUILDDIR} ;  git log --patch "
+
+
+exit
+
+
+# -------------------------------------------------------- Included patches
+
+#Epatch:pip # Operation 'Forever young', disable version-check per default.
+#Epatch:pip # The option needs to be kept, because some tools make use of
+#Epatch:pip # it and would cause pip to fail.
+#Epatch:pip --- a/pip/_internal/cli/cmdoptions.py  2022-08-09 17:29:15.853442948 +0200
+#Epatch:pip +++ b/pip/_internal/cli/cmdoptions.py  2022-08-10 10:31:35.124945154 +0200
+#Epatch:pip @@ -892,7 +892,6 @@
+#Epatch:pip      dest="disable_pip_version_check",
+#Epatch:pip      action="store_true",
+#Epatch:pip -    default=False,
+#Epatch:pip -    help="Don't periodically check PyPI to determine whether a new version "
+#Epatch:pip -    "of pip is available for download. Implied with --no-index.",
+#Epatch:pip +    default=True,
+#Epatch:pip +    help="Ignore this option, the version check IS disabled.",
+#Epatch:pip  )
+
+# -------------------------------------------------------- This is the end.
+