diff options
author | Dan Klein <danklei@cisco.com> | 2015-08-24 13:22:48 +0300 |
---|---|---|
committer | Dan Klein <danklei@cisco.com> | 2015-08-24 13:22:48 +0300 |
commit | dab741a80699f86e86c91718872a052cca9bbb25 (patch) | |
tree | 1959c4a2cea440170a5113dcb067796cb20ffb64 /external_libs/python/pyzmq-14.7.0/buildutils/patch.py | |
parent | d3f26ece7d4383df0b22fe9c3cb3e695381ec737 (diff) |
Fixed dependencies of Control Plane to use external_lib sources
Diffstat (limited to 'external_libs/python/pyzmq-14.7.0/buildutils/patch.py')
-rw-r--r-- | external_libs/python/pyzmq-14.7.0/buildutils/patch.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/external_libs/python/pyzmq-14.7.0/buildutils/patch.py b/external_libs/python/pyzmq-14.7.0/buildutils/patch.py new file mode 100644 index 00000000..925b67b7 --- /dev/null +++ b/external_libs/python/pyzmq-14.7.0/buildutils/patch.py @@ -0,0 +1,61 @@ +"""utils for patching libraries""" + +# Copyright (c) PyZMQ Developers. +# Distributed under the terms of the Modified BSD License. + + +import re +import sys +import os +import logging + +from .misc import get_output_error + +pjoin = os.path.join + +# LIB_PAT from delocate +LIB_PAT = re.compile(r"\s*(.*) \(compatibility version (\d+\.\d+\.\d+), " + r"current version (\d+\.\d+\.\d+)\)") + +def _get_libs(fname): + rc, so, se = get_output_error(['otool', '-L', fname]) + if rc: + logging.error("otool -L %s failed: %r" % (fname, se)) + return + for line in so.splitlines()[1:]: + m = LIB_PAT.match(line) + if m: + yield m.group(1) + +def _find_library(lib, path): + """Find a library""" + for d in path[::-1]: + real_lib = os.path.join(d, lib) + if os.path.exists(real_lib): + return real_lib + +def _install_name_change(fname, lib, real_lib): + rc, so, se = get_output_error(['install_name_tool', '-change', lib, real_lib, fname]) + if rc: + logging.error("Couldn't update load path: %s", se) + +def patch_lib_paths(fname, library_dirs): + """Load any weakly-defined libraries from their real location + + (only on OS X) + + - Find libraries with `otool -L` + - Update with `install_name_tool -change` + """ + if sys.platform != 'darwin': + return + + libs = _get_libs(fname) + for lib in libs: + if not lib.startswith(('@', '/')): + real_lib = _find_library(lib, library_dirs) + if real_lib: + _install_name_change(fname, lib, real_lib) + + +__all__ = ['patch_lib_paths']
\ No newline at end of file |