From 6f9d330de6e144f29e9673e8e9aa74aaa8342660 Mon Sep 17 00:00:00 2001
From: Jan Moren <jan.moren@gmail.com>
Date: Fri, 29 Jan 2016 12:48:47 +0900
Subject: [PATCH] Add a check for mpi4py version during Cythin compilation.

Version 2 of mpi4py has changed the name of a submodule from mpi_c to
libmpi. We need to check which one to use at compile time.
---
 pymusic/Makefile.am  | 10 +++++++---
 pymusic/pybuffer.pxd |  6 +++++-
 pymusic/pymusic.pxd  |  6 +++++-
 pymusic/tests.py     | 10 ++++++++++
 4 files changed, 27 insertions(+), 5 deletions(-)
 create mode 100644 pymusic/tests.py

diff --git a/pymusic/Makefile.am b/pymusic/Makefile.am
index c65e6e6..1d383d9 100644
--- a/pymusic/Makefile.am
+++ b/pymusic/Makefile.am
@@ -1,14 +1,18 @@
 
-EXTRA_DIST = setup.py.in pymusic.pyx pymusic.pxd music_c.h pybuffer.pyx pybuffer.pxd
+EXTRA_DIST = setup.py.in tests.py pymusic.pyx pymusic.pxd music_c.h pybuffer.pyx pybuffer.pxd 
 
 BUILT_SOURCES = pymusic.cpp pybuffer.cpp
 
-pybuffer.cpp: pybuffer.pyx pybuffer.pxd
+
+pyconfig.pxi: tests.py
+	cd $(top_srcdir)/pymusic; $(PYTHON) tests.py
+
+pybuffer.cpp: pyconfig.pxi pybuffer.pyx pybuffer.pxd 
 	cd $(top_srcdir)/pymusic; $(PYTHON) -c \
 	"from Cython.Build import cythonize; \
 	cythonize('pybuffer.pyx', verbose=1)"
 
-pymusic.cpp: pymusic.pyx pymusic.pxd
+pymusic.cpp: pyconfig.pxi pymusic.pyx pymusic.pxd 
 	cd $(top_srcdir)/pymusic; $(PYTHON) -c \
 	"from Cython.Build import cythonize; \
 	cythonize('pymusic.pyx', verbose=1)"
diff --git a/pymusic/pybuffer.pxd b/pymusic/pybuffer.pxd
index 94aa5c6..7ad5b0b 100644
--- a/pymusic/pybuffer.pxd
+++ b/pymusic/pybuffer.pxd
@@ -3,8 +3,12 @@
 cdef extern from "mpi_compat.h":
     pass
 
+include "pyconfig.pxi" 
 cimport mpi4py.MPI as MPI
-from mpi4py.mpi_c cimport *
+IF MPI4V2:
+    from mpi4py.libmpi cimport *
+ELSE:
+    from mpi4py.mpi_c cimport *
 
 cdef extern from "music/pymusic_c.h":
     object PyUnicodeString_FromString(const char*)
diff --git a/pymusic/pymusic.pxd b/pymusic/pymusic.pxd
index bf8261e..92aa5c6 100644
--- a/pymusic/pymusic.pxd
+++ b/pymusic/pymusic.pxd
@@ -3,8 +3,12 @@
 cdef extern from "mpi_compat.h":
     pass
 
+include "pyconfig.pxi" 
 cimport mpi4py.MPI as MPI
-from mpi4py.mpi_c cimport *
+IF MPI4V2:
+    from mpi4py.libmpi cimport *
+ELSE:
+    from mpi4py.mpi_c cimport *
 
 from libcpp cimport bool as cbool
 from libcpp.string cimport string
diff --git a/pymusic/tests.py b/pymusic/tests.py
new file mode 100644
index 0000000..50c7407
--- /dev/null
+++ b/pymusic/tests.py
@@ -0,0 +1,10 @@
+# compile time python tests
+
+# Test mpi4py version
+import mpi4py
+from distutils.version import LooseVersion
+is_v2 = LooseVersion(mpi4py.__version__) > LooseVersion("1.3.1")
+
+# Write configuration file 
+with open("pyconfig.pxi", "w") as f: 
+	f.write("DEF MPI4V2 = {0}".format(is_v2))
-- 
GitLab