summaryrefslogtreecommitdiff
path: root/zmq/backend/cffi/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'zmq/backend/cffi/__init__.py')
-rw-r--r--zmq/backend/cffi/__init__.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/zmq/backend/cffi/__init__.py b/zmq/backend/cffi/__init__.py
new file mode 100644
index 0000000..da98024
--- /dev/null
+++ b/zmq/backend/cffi/__init__.py
@@ -0,0 +1,56 @@
+"""CFFI backend (for PyPY)"""
+
+# Copyright (C) PyZMQ Developers
+# Distributed under the terms of the Modified BSD License.
+
+import imp
+import os.path
+import sys
+
+import cffi.vengine_cpy
+import cffi.vengine_gen
+_ma_triplet = None
+
+def vengine_gen_find_module(self, module_name, path, so_suffixes):
+ global _ma_triplet
+ if _ma_triplet is None:
+ try:
+ import subprocess as sp
+ p = sp.Popen(["gcc", "-print-multiarch"], stdout=sp.PIPE)
+ _ma_triplet = str(p.communicate()[0].decode().strip())
+ except:
+ import warnings
+ warnings.warn('failed to detect multiarch paths, please install gcc')
+
+ for so_suffix in so_suffixes + ['.%s-%s.so' % (imp.get_tag(), _ma_triplet)]:
+ basename = module_name + so_suffix
+ if path is None:
+ path = sys.path
+ # import from non root package would try __pycache__ which is
+ # cleaned by pypy installation
+ path.insert(0, "/usr/lib/pypy/dist-packages/zmq/backend/cffi")
+ for dirname in path:
+ filename = os.path.join(dirname, basename)
+ if os.path.isfile(filename):
+ return filename
+
+
+cffi.vengine_gen.VGenericEngine.find_module = vengine_gen_find_module
+
+from zmq.backend.cffi import (constants, error, message, context, socket,
+ _poll, devices, utils)
+
+__all__ = []
+for submod in (constants, error, message, context, socket,
+ _poll, devices, utils):
+ __all__.extend(submod.__all__)
+
+from .constants import *
+from .error import *
+from .message import *
+from .context import *
+from .socket import *
+from .devices import *
+from ._poll import *
+from ._cffi import zmq_version_info, ffi
+from .utils import *