Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
executable file 765 lines (602 sloc) 23.1 KB
#!/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=python
VERSION=3.13.2
BUILD=0
PYTHONVER=${VERSION%.*}
CUDADIR=/pkg/cuda-12.1.0-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
. $CUDADIR/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
# -------------------------------------- Use git to track package evolution
test -d .git && rm -rf .git
git init -b root -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 Python & support libraries
(
# orig: https://www.python.org/ftp/python/3.13.2/Python-3.13.2.tgz
BEEHIVE=https://beehive.molgen.mpg.de/6192ce4725d9c9fc0e8a1cd38410b417/Python-3.13.2.tgz
test -e Python-$VERSION.tgz || wget -nv $BEEHIVE
test -d Python-$VERSION || tar -xf Python-$VERSION.tgz
cd Python-$VERSION
# These may come handy if the Python build needs exclusive stuff from $PREFIX
# INCLUDEDIR=$PREFIX/include \
# LIBDIR=$PREFIX/lib \
LDFLAGS="-Wl,-rpath=$PREFIX/lib" \
./configure \
--prefix=$PREFIX \
--enable-shared
make -j $NPROC
make install
# it might come to happen that something down the line may just call 'python', defuse ...
test -e $PREFIX/bin/python || ln -s python3 $PREFIX/bin/python
python -m ensurepip
pip3 install --prefix=$PREFIX -I pip
( # fix 'please update' noise from pip
cd $PREFIX/lib/python*/site-packages
sed -ne '/^#Epatch:pip/ s/^#Epatch:\S* // p' $ME | patch -p1 --verbose
)
# libblosc2 installs in $PREFIX/lib64, I hate to do this ...
ln -s lib $PREFIX/lib64
)
install setuptools
piplist; track START
# build various pythonbindings 'by hand', because pip installs do not deliver
# header files and the like.
# BTW: builds need meson
install meson
(
DBUS_PYTHON_VERSION=1.3.2
# PyPi
# https://files.pythonhosted.org/packages/c1/d3/6be85a9c772d6ebba0cc3ab37390dd6620006dcced758667e0217fb13307/dbus-python-1.3.2.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/33be8a4a766e1c7c9a377b8f934ce21a/dbus-python-1.3.2.tar.gz
test -e dbus-python-$DBUS_PYTHON_VERSION.tar.gz || wget -nv $BEEHIVE
test -d dbus-python-$DBUS_PYTHON_VERSION || tar -xf dbus-python-$DBUS_PYTHON_VERSION.tar.gz
cd dbus-python-$DBUS_PYTHON_VERSION
./configure --prefix=$PREFIX
make -j $NPROC
make install
)
(
PYCAIRO_VERSION=1.27.0
# https://files.pythonhosted.org/packages/07/4a/42b26390181a7517718600fa7d98b951da20be982a50cd4afb3d46c2e603/pycairo-1.27.0.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/12097575a1bb683cab7dc425d9769a68/pycairo-1.27.0.tar.gz
test -e pycairo-$PYCAIRO_VERSION.tar.gz || wget -nv $BEEHIVE
test -d pycairo-$PYCAIRO_VERSION || tar -xf pycairo-$PYCAIRO_VERSION.tar.gz
cd pycairo-$PYCAIRO_VERSION
mkdir -p meson-build
cd meson-build
meson setup \
--prefix=$PREFIX \
--buildtype=release \
-Dpython=$PREFIX/bin/python \
-Dtests=false \
..
ninja -j $NPROC
ninja install
)
(
PYGOBJECT3_VERSION=3.50.0
# https://files.pythonhosted.org/packages/2b/58/d34e67a79631177e3c08e7d02b5165147f590171f2cae6769502af5f7f7e/pygobject-3.50.0.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/a6904c6f523b9f7ca2dec63d8c24de92/pygobject-3.50.0.tar.gz
test -e pygobject-$PYGOBJECT3_VERSION.tar.gz || wget -nv $BEEHIVE
test -d pygobject-$PYGOBJECT3_VERSION || tar -xf pygobject-$PYGOBJECT3_VERSION.tar.gz
cd pygobject-$PYGOBJECT3_VERSION
mkdir -p meson-build
cd meson-build
meson setup \
--prefix=$PREFIX \
--buildtype=release \
-Dpython=$PREFIX/bin/python \
-Dtests=false \
..
ninja -j $NPROC
ninja install
)
piplist; track various pythonbindings
# build support to use QT from python -- see www.riverbankcomputing.com
( # sip: tool to create Python bindings for C and C++ libraries.
SIP_VERSION=6.9.1
# orig: https://files.pythonhosted.org/packages/e2/83/b23f610ef99fa23aa3c8dcd2ff8536c37b943654405ff4f45f3230327a40/sip-6.9.1.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/a6f939e7c1e4d1c3feb39ed56e7b2297/sip-6.9.1.tar.gz
test -e sip-$SIP_VERSION.tar.gz || wget -nv $BEEHIVE
test -d sip-$SIP_VERSION || tar -xf sip-$SIP_VERSION.tar.gz
cd sip-$SIP_VERSION
pip install .
)
# QT bindings need some python modules to build
install PyQt5-sip
install PyQt-builder
(
PYQT_VERSION=5.15.11
# orig: https://files.pythonhosted.org/packages/0e/07/c9ed0bd428df6f87183fca565a79fee19fa7c88c7f00a7f011ab4379e77a/PyQt5-5.15.11.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/51ff7c7ccec76a5de36db3ff88140eaf/PyQt5-5.15.11.tar.gz
test -e PyQt5-$PYQT_VERSION.tar.gz || wget -nv $BEEHIVE
test -d PyQt5-$PYQT_VERSION || tar -xf PyQt5-$PYQT_VERSION.tar.gz
cd PyQt5-$PYQT_VERSION
sip-build \
--confirm-license \
--quiet \
--api-dir $PREFIX/share/qsci/api/python \
--dbus $PREFIX/include/dbus-1.0 \
--no-designer-plugin \
--no-qml-plugin \
--jobs $NPROC
cd build
make -j $NPROC
make install
# Remove unused py2 version of uic modules
rm -r $PREFIX/lib/python*/site-packages/PyQt5/uic/port_v2
)
(
QSCINTILLA_VERSION=2.14.1
# orig: https://www.riverbankcomputing.com/static/Downloads/QScintilla/2.14.1/QScintilla_src-2.14.1.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/9c9e3803e4371ebbb218682e8596af5d/QScintilla_src-2.14.1.tar.gz
test -e QScintilla_src-$QSCINTILLA_VERSION.tar.gz || wget -nv $BEEHIVE
test -d QScintilla_src-$QSCINTILLA_VERSION || tar -xf QScintilla_src-$QSCINTILLA_VERSION.tar.gz
cd QScintilla_src-$QSCINTILLA_VERSION
cd Python
cp -vp pyproject-qt5.toml pyproject.toml
sip-build \
--quiet \
--qsci-features-dir ../src/features \
--qsci-include-dir ../src \
--qsci-library-dir ../src \
--api-dir $PREFIX/share/qsci/api/python \
--jobs $NPROC
cd build
make -j $NPROC
make install
)
(
set -x
PYQTWEBENGINE_VERSION=5.15.7
# see: https://pypi.org/project/PyQtWebEngine/#files
# orig: https://files.pythonhosted.org/packages/18/e8/19a00646866e950307f8cd73841575cdb92800ae14837d5821bcbb91392c/PyQtWebEngine-5.15.7.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/a3394e93d8b5077e8355f57d79c2ed58/PyQtWebEngine-5.15.7.tar.gz
test -e PyQtWebEngine-${PYQTWEBENGINE_VERSION}.tar.gz || wget -nv $BEEHIVE
test -d PyQtWebEngine-${PYQTWEBENGINE_VERSION} || tar -xf PyQtWebEngine-${PYQTWEBENGINE_VERSION}.tar.gz
cd PyQtWebEngine-${PYQTWEBENGINE_VERSION}
sip-build \
--quiet \
--api-dir ${PREFIX}/share/qsci/api/python \
--jobs $NPROC
cd build
make -j $NPROC
make install
)
piplist; track qt-support-riverbankcomputing
# -------------------------------------------------------- Install packages
install Cython
# libxml2-python from pypi isn't up to date, cause lxml seems to be the favored binding
# do this early, not that some dependency tries it on its own.
# (btw. libxslt-python isn't ported to python3)
(
LIBXML2_VERSION=2.9.12
# orig: http://xmlsoft.org/sources/libxml2-${PKGVERSION}.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/f433a39be087a9f0b197eb2307ad9f75/libxml2-2.9.12.tar.gz
test -e libxml2-$LIBXML2_VERSION.tar.gz || wget -nv $BEEHIVE
test -d libxml2-$LIBXML2_VERSION || tar -xf libxml2-$LIBXML2_VERSION.tar.gz libxml2-$LIBXML2_VERSION/python
cd libxml2-$LIBXML2_VERSION/python
pip install .
)
piplist; track legacy-libxml2
# Install the most 'sensitive' packages first
# install 'numpy<2'
# install numba==0.60.0
# skip this here
# install numpy==2.1.3
# install numba
install numpy
install wheel
# python-javabridge, problems with python 3.11 and recent cython, thus
# regenerate C bindings from *pxd, *pyx -- so must use github, and wheel
(
# use the fork from cellprofiler, as used in pypi
rm -rf python-javabridge
git clone https://github.com/CellProfiler/python-javabridge
cd python-javabridge
git checkout v4.0.3
sed -ne '/^#Epatch:javabridge/ s/^#Epatch:\S* // p' $ME | patch -p1 --verbose
export JAVA_HOME=/pkg/openjdk-17.0.2.8-0
PATH=/pkg/openjdk-17.0.2.8-0/bin:$PATH
pip install .
)
PACKAGES=$(sed -e s/#.*$// <<- __PKGLIST__
igraph
keras
ipython[all]
snakemake # December 2023 brought snakemake 8, it seems to be working again
Pillow
protobuf
onnx
Sphinx
jedi
black[d] # onnx wants it, but does not install it ...
flask
SciPy
pandas
SymPy # torch does not like 1.13.3, so may need to use 1.13.1
nose
statsmodels
pysam
seaborn
scikit-learn
Mako
cutadapt # Helpdesk 01/24/18 16:19, S. K.
pygobject # Helpdesk 03/26/18 14:19, V. S.
blink1 # Blink1-lib 07/04/18 12:00, N. H.
hvplot # ont/nextflow pipelines
pyarrow # ont/nextflow pipelines
umi-tools
recommonmark
fastcluster
pydot
pygraphviz
deeptools
HTSeq
keras_preprocessing
MotifScan # A.B. 30.8.2018
MAmotif
hic2cool # Helpdesk R. S. 17.09.2018
virtualenv # Donald
odfpy # Donald
Dumper # Thomas
louvain # monocle3 prep for H. K.
selenium # 19.7.19 T.K. -> https://webxray.org/
plotly
pyOpenCL
docopt
distro
ply
threadpoolctl
HiCMatrix # 17.1 -> https://github.com/deeptools/HiCMatrix/issues/47
pybedtools
gffutils
jupyter
jupyterlab
jupyterlab-git # request P. A.
igv_jupyterlab # M. L. HD 01-04-2020
igv-notebook
scour # https://github.molgen.mpg.de/mariux64/pkg-scripts/issues/98
multiqc
pybind11
svgwrite
pyomo
bioservices
SharedArray
pyabc # dependency for stochkit, HD 20.07.20 G. N.
petab
tadtool # HD 26.01.21 M. R.
pyperf # Paul sep-20
umap # HD, used by M. L.
# MACS3 numpy downgrader!
biopython # HD 2021-07-23 alphafold related -- cool that we have missed 'biopython' so far, GRIN
flatbuffers
contextlib2
ml_collections
python-bioformats
# additions/fixups since 3.9
# spyder # downgrader for ipython 8.34.0 vs. 9.0.2
# spyder-kernels
papermill # turns jupyter notebooks into scripts [sic!] used by P.A. [who else, *grin*]
opencv-python
scikit-image
git-cola
cffi-glpk # uses /usr/lib/libglpk.so.40, see if I can get it linked statically - kreitler
czifile
triangle==20230923
# napari[pyqt5]==0.5.5 # always check ...
# napari-czifile2
# napari-plugin-manager==0.1.3
bx-python
leidenalg
# scanpy downgrader for scikit-learn # this is a MESS, you might always get broken/ugly plots ...
asciidoc
html2text
# additions/fixups since 3.10
aicspylibczi
filetype
gmpy2
# shap # uses numba !!!
UpSetPlot
hypothesis
# nf-core / epi2me related
dominate
libsass
sigfig
whatshap
Truvari
nanopack
# nlp related
spacy
paramiko
scp
psutil
# pylibCZIrw - this brings cmake ...
# appease some warnings from the load test
siphash24
dask[dataframe]
__PKGLIST__
)
for PKG in $PACKAGES; do
install $PKG
done
# skip torch for this test build
# # py-torch bundled with a recent CUDA-Toolkit from meta,
# # and then the packages that would eventually interfere with torch
#
# install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# install xformers
install xgboost
install pyopengl
# ----------------------------------------------------- Post install fixups
mkdir -vp $PREFIX/share/jupyter/lab/settings # try to defeat a silly error in jupyter labextension install
# pyopengl: Tk binding creates an error, so remove it (Expects Tk Togl installation...)
rm -rf ${PREFIX}/lib/python$PYTHONVER/site-packages/OpenGL/Tk
# --------------------------------------------------- Install misc packages
# these mostly bigger packages require either wheel, other treatments,
# or java.
# build CrossMap from git, https://github.com/liguowang/CrossMap/issues/67
(
git clone https://github.com/liguowang/CrossMap
cd CrossMap
git rm src/__init__.py
git commit -a -m 'remove badly placed src/__init__.py'
# pip install . --prefix=$PREFIX
pip install .
)
piplist; track CrossMap
# GYP is a Meta-Build system: a build system that generates other build systems. https://gyp.gsrc.io/
(
set -x
GYP_VERSION=20230301_c6d8b9f7
# orig: https://mirror.netcologne.de/slackware/slackware64-current/source/d/gyp/
BEEHIVE=https://beehive.molgen.mpg.de/ba0357be23ca55555714261afccc7aab/gyp-20230301_c6d8b9f7.tar.xz
test -e gyp-${GYP_VERSION}.tar.xz || wget -nv $BEEHIVE
test -d gyp-${GYP_VERSION} || tar -xf gyp-${GYP_VERSION}.tar.xz
cd gyp-${GYP_VERSION}
sed -ne '/^#Epatch:gyp/ s/^#Epatch:\S* // p' $ME | patch -p1 --verbose
pip install .
)
piplist; track gyp
(
BOOSTVERSION=1.87.0
BOOSTVERSION_USCORED=${BOOSTVERSION//./_}
PKGCFLAGS="-O2 -fPIC"
# orig: https://archives.boost.io/release/1.87.0/source/boost_1_87_0.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/f435e8ae57edb203a1165cdb99cfb2a3/boost_1_87_0.tar.gz
test -e boost_$BOOSTVERSION_USCORED.tar.gz || wget -nv $BEEHIVE
test -d boost_$BOOSTVERSION_USCORED || tar -xf boost_$BOOSTVERSION_USCORED.tar.gz
cd boost_$BOOSTVERSION_USCORED
./bootstrap.sh \
--with-toolset=gcc \
--with-icu \
--with-python=$PREFIX/bin/python3 \
--with-libraries=python,thread,filesystem,stacktrace || exit 1
./b2 \
$B2FLAGS \
-j $NPROC \
--prefix=$PREFIX \
--enable-shared \
--without-mpi \
install
)
piplist; track boost
(
PYCUDAVERS=2025.1
PYTHON_LIBNAME=boost_python${PYTHONVER/./}
# orig: https://files.pythonhosted.org/packages/15/31/12640e87fcc6fc42468dfbeb38f9c0fd7b0a25bf9e6d9e0a7609f915dd18/pycuda-2025.1.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/27a054314adbb589e85efee2fa3b15be/pycuda-2025.1.tar.gz
test -e pycuda-${PYCUDAVERS}.tar.gz || wget -nv $BEEHIVE
test -d pycuda-${PYCUDAVERS} || tar -xf pycuda-${PYCUDAVERS}.tar.gz
cd pycuda-${PYCUDAVERS}
test -e siteconf.py && rm siteconf.py
python configure.py \
--cuda-enable-gl \
--cuda-root=$CUDADIR \
--no-use-shipped-boost \
--boost-python-libname=$PYTHON_LIBNAME \
--boost-inc-dir=$PREFIX/include \
--boost-lib-dir=$PREFIX/lib \
--cudadrv-lib-dir='${CUDA_ROOT}/lib,${CUDA_ROOT}/lib/stubs' \
--cudart-lib-dir='${CUDA_ROOT}/lib,${CUDA_ROOT}/lib/stubs' \
--curand-lib-dir='${CUDA_ROOT}/lib,${CUDA_ROOT}/lib/stubs' \
--ldflags=-L$PREFIX/lib
pip install . --prefix=$PREFIX
)
piplist; track pycuda
(
# install from git to get .so files in case
# pip install git+https://github.com/open2c/pairtools.git@v1.1.2 --prefix=$PREFIX # :xxx:tk: numpy 1.26.4
# pip install git+https://github.com/brentp/bwa-meth.git@v0.2.7 --prefix=$PREFIX
# versions > 1.5 will not work with pip install github
pip install git+https://github.com/stacked-git/stgit.git@v1.5 --prefix=$PREFIX
)
piplist; track pairtools_xxx bwa-meth_xxx stgit
# tidy up a bit
if [ -d $PREFIX/man/man1 ]; then
mv -v $PREFIX/man/man1/* $PREFIX/share/man/man1 || true
rm -rf $PREFIX/man
fi
# ------------------------------------------------------------ Sanity check
echo "# --------- *** SANITY CHECKS *** ---------"
# I guess it makes sense that files can be read by all users ...
echo "# 1) 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
# a cheap one :)
echo "# 2) Running pip check"
pip check
# load all packages, see warnings and spot installation errors
echo "# 3) Module load test."
export NUMEXPR_MAX_THREADS=1
python -c 'help("modules")'
echo "# Note: reached end of load test"
echo "For Deeper checks:"
echo "cd ${BUILDDIR} ; git log --patch | grep ^[\+\-][^\+\-]"
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 )
#Epatch:gyp --- a/pylib/gyp/generator/cmake.py
#Epatch:gyp +++ b/pylib/gyp/generator/cmake.py
#Epatch:gyp @@ -41,7 +41,7 @@
#Epatch:gyp try:
#Epatch:gyp # maketrans moved to str in python3.
#Epatch:gyp + _maketrans = str.maketrans
#Epatch:gyp +except NameError:
#Epatch:gyp _maketrans = string.maketrans
#Epatch:gyp -except NameError:
#Epatch:gyp - _maketrans = str.maketrans
#Epatch:gyp generator_default_variables = {
#Epatch:gyp 'EXECUTABLE_PREFIX': '',
#Epatch:gyp @@ -283,2 +283,2 @@
#Epatch:gyp if int(action.get('process_outputs_as_sources', False)):
#Epatch:gyp - extra_sources.extend(zip(cmake_outputs, outputs))
#Epatch:gyp + extra_sources.extend(list(zip(cmake_outputs, outputs)))
#Epatch:gyp @@ -988,6 +988,6 @@
#Epatch:gyp # XCode settings
#Epatch:gyp xcode_settings = config.get('xcode_settings', {})
#Epatch:gyp - for xcode_setting, xcode_value in xcode_settings.viewitems():
#Epatch:gyp + for xcode_setting, xcode_value in xcode_settings.items():
#Epatch:gyp SetTargetProperty(output, cmake_target_name,
#Epatch:gyp "XCODE_ATTRIBUTE_%s" % xcode_setting, xcode_value,
#Epatch:gyp '' if isinstance(xcode_value, str) else ' ')
#Epatch:gyp diff --git a/pylib/gyp/input.py b/pylib/gyp/input.py
#Epatch:gyp index 4c12891..2bea334 100644
#Epatch:gyp --- a/pylib/gyp/input.py
#Epatch:gyp +++ b/pylib/gyp/input.py
#Epatch:gyp @@ -1183,7 +1183,7 @@
#Epatch:gyp if variable_name in variables:
#Epatch:gyp # If the variable is already set, don't set it.
#Epatch:gyp continue
#Epatch:gyp - if the_dict_key is 'variables' and variable_name in the_dict:
#Epatch:gyp + if the_dict_key == 'variables' and variable_name in the_dict:
#Epatch:gyp # If the variable is set without a % in the_dict, and the_dict is a
#Epatch:gyp # variables dict (making |variables| a varaibles sub-dict of a
#Epatch:gyp # variables dict), use the_dict's definition.
#Epatch:javabridge diff --git a/_javabridge_nomac.pyx b/_javabridge_nomac.pyx
#Epatch:javabridge index 9f28939..c437db0 100644
#Epatch:javabridge --- a/_javabridge_nomac.pyx
#Epatch:javabridge +++ b/_javabridge_nomac.pyx
#Epatch:javabridge @@ -16,30 +16,30 @@ cdef extern from "jni.h":
#Epatch:javabridge jint (*AttachCurrentThreadAsDaemon)(JavaVM *vm, void *penv, void *args) nogil
#Epatch:javabridge jint JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args) nogil
#Epatch:javabridge
#Epatch:javabridge -cdef int MacStartVM(JavaVM **pvm, JavaVMInitArgs *pVMArgs, char *class_name) nogil:
#Epatch:javabridge +cdef extern int MacStartVM(JavaVM **pvm, JavaVMInitArgs *pVMArgs, char *class_name) nogil:
#Epatch:javabridge return -1
#Epatch:javabridge
#Epatch:javabridge -cdef void StopVM(JavaVM *vm) nogil:
#Epatch:javabridge +cdef extern void StopVM(JavaVM *vm) nogil:
#Epatch:javabridge vm[0].DestroyJavaVM(vm)
#Epatch:javabridge
#Epatch:javabridge -cdef void MacRunLoopInit() nogil:
#Epatch:javabridge +cdef extern void MacRunLoopInit() nogil:
#Epatch:javabridge pass
#Epatch:javabridge
#Epatch:javabridge -cdef void MacRunLoopRun() nogil:
#Epatch:javabridge +cdef extern void MacRunLoopRun() nogil:
#Epatch:javabridge pass
#Epatch:javabridge
#Epatch:javabridge -cdef void MacRunLoopStop() nogil:
#Epatch:javabridge +cdef extern void MacRunLoopStop() nogil:
#Epatch:javabridge pass
#Epatch:javabridge
#Epatch:javabridge -cdef void MacRunLoopReset() nogil:
#Epatch:javabridge +cdef extern void MacRunLoopReset() nogil:
#Epatch:javabridge pass
#Epatch:javabridge
#Epatch:javabridge -cdef int MacIsMainThread() nogil:
#Epatch:javabridge +cdef extern int MacIsMainThread() nogil:
#Epatch:javabridge return 0
#Epatch:javabridge
#Epatch:javabridge -cdef void MacRunLoopRunInMode(double timeout) nogil:
#Epatch:javabridge +cdef extern void MacRunLoopRunInMode(double timeout) nogil:
#Epatch:javabridge pass
#Epatch:javabridge
#Epatch:javabridge -cdef int CreateJavaVM(JavaVM **pvm, void **pEnv, void *args) nogil:
#Epatch:javabridge +cdef extern int CreateJavaVM(JavaVM **pvm, void **pEnv, void *args) nogil:
#Epatch:javabridge return JNI_CreateJavaVM(pvm, pEnv, args)
#Epatch:javabridge
#Epatch:javabridge diff --git a/_javabridge_mac.pyx b/_javabridge_mac.pyx
#Epatch:javabridge index 2e3c524..daed790 100644
#Epatch:javabridge --- a/_javabridge_mac.pyx
#Epatch:javabridge +++ b/_javabridge_mac.pyx
#Epatch:javabridge @@ -31,11 +31,11 @@ cdef extern from "mac_javabridge_utils.h":
#Epatch:javabridge int MacIsMainThread() nogil
#Epatch:javabridge void MacRunLoopRunInMode(double) nogil
#Epatch:javabridge
#Epatch:javabridge -cdef void StopVM(JavaVM *vm):
#Epatch:javabridge +cdef extern void StopVM(JavaVM *vm):
#Epatch:javabridge MacStopVM()
#Epatch:javabridge
#Epatch:javabridge #
#Epatch:javabridge # Unused stub in Mac
#Epatch:javabridge #
#Epatch:javabridge -cdef int CreateJavaVM(JavaVM **pvm, void **pEnv, void *args):
#Epatch:javabridge +cdef extern int CreateJavaVM(JavaVM **pvm, void **pEnv, void *args):
#Epatch:javabridge return -1
# -------------------------------------------------------- This is the end.