for possible use in conda-build
This notebook is CC-0 (public domain)
import os
import re
import sys
macos_abi_pat = re.compile("lib[^\.]+\.([\d\.]+)\.dylib$", re.IGNORECASE)
linux_abi_pat = re.compile("lib[^\.]+\.so\.([\d\.]+)$", re.IGNORECASE)
abi_pat = macos_abi_pat if sys.platform == 'darwin' else linux_abi_pat
SHLIB_EXT = '.dylib' if sys.platform == 'darwin' else '.so'
def detect_abi_version(libname):
"""Return the ABI version of a library
given 'libzmq' return '5' as its ABI version
because $PREFIX/lib/libzmq.dylib is a symlink to libzmq.5.dylib
or $PREFIX/lib/libzmq.so is a symlink to libzmq.so.5
"""
lib = os.path.join(sys.prefix, 'lib', libname + SHLIB_EXT)
if not os.path.exists(lib):
raise OSError("%s does not exist" % lib)
if not os.path.islink(lib):
print("%s is not a symlink, no ABI info found" % lib)
# libfoo.dylib is not a symlink, no ABI version to find
return
target = os.readlink(lib)
target_libname = os.path.basename(target)
match = abi_pat.match(target_libname)
if not match:
print("No ABI found in %s" % target_libname)
return
return match.group(1)
detect_abi_version("libzmq")
'5'
detect_abi_version("libsodium")
'23'
detect_abi_version("libicui18n")
'58.2'
detect_abi_version("libpython3.6m")
/Users/minrk/conda/lib/libpython3.6m.dylib is not a symlink, no ABI info found