def bundle_libsodium_extension(self, libzmq): bundledir = "bundled" ext_modules = self.distribution.ext_modules if ext_modules and any(m.name == 'zmq.libsodium' for m in ext_modules): # I've already been run return if not os.path.exists(bundledir): os.makedirs(bundledir) line() info("Using bundled libsodium") # fetch sources for libsodium fetch_libsodium(bundledir) # stage headers stage_libsodium_headers(pjoin(bundledir, 'libsodium')) # construct the Extension libsodium_src = pjoin(bundledir, 'libsodium', 'src', 'libsodium') exclude = pjoin(libsodium_src, 'crypto_stream', 'salsa20', 'amd64_xmm6') # or ref? exclude = pjoin(libsodium_src, 'crypto_scalarmult', 'curve25519', 'donna_c64') # or ref? libsodium_sources = [pjoin('buildutils', 'initlibsodium.c')] for dir, subdirs, files in os.walk(libsodium_src): if dir.startswith(exclude): continue for f in files: if f.endswith('.c'): libsodium_sources.append(pjoin(dir, f)) libsodium = Extension( 'zmq.libsodium', sources=libsodium_sources, include_dirs=[ pjoin(libsodium_src, 'include'), pjoin(libsodium_src, 'include', 'sodium'), ], ) # register the Extension self.distribution.ext_modules.insert(0, libsodium) if sys.byteorder == 'little': libsodium.define_macros.append(("NATIVE_LITTLE_ENDIAN", 1)) else: libsodium.define_macros.append(("NATIVE_BIG_ENDIAN", 1)) # tell libzmq about libsodium libzmq.define_macros.append(("HAVE_LIBSODIUM", 1)) libzmq.include_dirs.extend(libsodium.include_dirs)
def bundle_libsodium_extension(self, libzmq): bundledir = "bundled" if "PyPy" in sys.version: fatal("Can't bundle libsodium as an Extension in PyPy (yet!)") ext_modules = self.distribution.ext_modules if ext_modules and any(m.name == 'zmq.libsodium' for m in ext_modules): # I've already been run return if not os.path.exists(bundledir): os.makedirs(bundledir) line() info("Using bundled libsodium") # fetch sources for libsodium fetch_libsodium(bundledir) # stage headers stage_libsodium_headers(pjoin(bundledir, 'libsodium')) # construct the Extension libsodium_src = pjoin(bundledir, 'libsodium', 'src', 'libsodium') exclude = pjoin(libsodium_src, 'crypto_stream', 'salsa20', 'amd64_xmm6') # or ref? exclude = pjoin(libsodium_src, 'crypto_scalarmult', 'curve25519', 'donna_c64') # or ref? libsodium_sources = [pjoin('buildutils', 'initlibsodium.c')] for dir,subdirs,files in os.walk(libsodium_src): if dir.startswith(exclude): continue for f in files: if f.endswith('.c'): libsodium_sources.append(pjoin(dir, f)) libsodium = Extension( 'zmq.libsodium', sources = libsodium_sources, include_dirs = [ pjoin(libsodium_src, 'include'), pjoin(libsodium_src, 'include', 'sodium'), ], ) # register the Extension self.distribution.ext_modules.insert(0, libsodium) if sys.byteorder == 'little': libsodium.define_macros.append(("NATIVE_LITTLE_ENDIAN", 1)) else: libsodium.define_macros.append(("NATIVE_BIG_ENDIAN", 1)) # tell libzmq about libsodium libzmq.define_macros.append(("HAVE_LIBSODIUM", 1)) libzmq.include_dirs.extend(libsodium.include_dirs)
def run(self): # fetch sources for libzmq extension: bundledir = "bundled" if os.path.exists(bundledir): info("Scrubbing directory: %s" % bundledir) shutil.rmtree(bundledir) if not os.path.exists(bundledir): os.makedirs(bundledir) fetch_libsodium(bundledir) fetch_libzmq(bundledir) for tarball in glob(pjoin(bundledir, '*.tar.gz')): os.remove(tarball)
def bundle_libsodium_extension(self, libzmq): bundledir = "bundled" ext_modules = self.distribution.ext_modules if ext_modules and any(m.name == 'zmq.libsodium' for m in ext_modules): # I've already been run return if not os.path.exists(bundledir): os.makedirs(bundledir) line() info("Using bundled libsodium") # fetch sources for libsodium fetch_libsodium(bundledir) # stage headers stage_libsodium_headers(pjoin(bundledir, 'libsodium')) # construct the Extension libsodium_src = pjoin(bundledir, 'libsodium', 'src', 'libsodium') exclude = pjoin(libsodium_src, 'crypto_stream', 'salsa20', 'amd64_xmm6') # or ref? exclude = pjoin(libsodium_src, 'crypto_scalarmult', 'curve25519', 'donna_c64') # or ref? libsodium_sources = [pjoin('buildutils', 'initlibsodium.c')] for dir,subdirs,files in os.walk(libsodium_src): if dir.startswith(exclude): continue for f in files: if f.endswith('.c'): libsodium_sources.append(pjoin(dir, f)) libsodium = Extension( 'zmq.libsodium', sources = libsodium_sources, include_dirs = [ pjoin(libsodium_src, 'include'), pjoin(libsodium_src, 'include', 'sodium'), ], ) # There are a few extra things we need to do to build libsodium on # Windows: # 1) tell libsodium to export its symbols; # 2) prevent libsodium from defining C99 `static inline` functions # which aren't parsed correctly by VS2008 nor VS2010; # 3) provide an implementation of <stdint.h> which is not provided in # VS2008's "standard" library; # 4) link against Microsoft's s crypto API. if sys.platform.startswith('win'): libsodium.define_macros.append(('SODIUM_DLL_EXPORT', 1)) libsodium.define_macros.append(('inline', '')) if sys.version_info < (3, 3): libsodium.include_dirs.append(pjoin('buildutils', 'include_win32')) libsodium.libraries.append('advapi32') # register the Extension self.distribution.ext_modules.insert(0, libsodium) if sys.byteorder == 'little': libsodium.define_macros.append(("NATIVE_LITTLE_ENDIAN", 1)) else: libsodium.define_macros.append(("NATIVE_BIG_ENDIAN", 1)) # tell libzmq about libsodium libzmq.define_macros.append(("HAVE_LIBSODIUM", 1)) libzmq.include_dirs.extend(libsodium.include_dirs)
def bundle_libsodium_extension(self, libzmq): bundledir = "bundled" ext_modules = self.distribution.ext_modules if ext_modules and any(m.name == 'zmq.libsodium' for m in ext_modules): # I've already been run return if not os.path.exists(bundledir): os.makedirs(bundledir) line() info("Using bundled libsodium") # fetch sources for libsodium fetch_libsodium(bundledir) # stage headers stage_libsodium_headers(pjoin(bundledir, 'libsodium')) # construct the Extension libsodium_src = pjoin(bundledir, 'libsodium', 'src', 'libsodium') exclude = pjoin(libsodium_src, 'crypto_stream', 'salsa20', 'amd64_xmm6') # or ref? exclude = pjoin(libsodium_src, 'crypto_scalarmult', 'curve25519', 'donna_c64') # or ref? libsodium_sources = [pjoin('buildutils', 'initlibsodium.c')] for dir, subdirs, files in os.walk(libsodium_src): if dir.startswith(exclude): continue for f in files: if f.endswith('.c'): libsodium_sources.append(pjoin(dir, f)) libsodium = Extension( 'zmq.libsodium', sources=libsodium_sources, include_dirs=[ pjoin(libsodium_src, 'include'), pjoin(libsodium_src, 'include', 'sodium'), ], ) # There are a few extra things we need to do to build libsodium on # Windows: # 1) tell libsodium to export its symbols; # 2) prevent libsodium from defining C99 `static inline` functions # which aren't parsed correctly by VS2008 nor VS2010; # 3) provide an implementation of <stdint.h> which is not provided in # VS2008's "standard" library; # 4) link against Microsoft's s crypto API. if sys.platform.startswith('win'): libsodium.define_macros.append(('SODIUM_DLL_EXPORT', 1)) libsodium.define_macros.append(('inline', '')) if sys.version_info < (3, 3): libsodium.include_dirs.append( pjoin('buildutils', 'include_win32')) libsodium.libraries.append('advapi32') # register the Extension self.distribution.ext_modules.insert(0, libsodium) if sys.byteorder == 'little': libsodium.define_macros.append(("NATIVE_LITTLE_ENDIAN", 1)) else: libsodium.define_macros.append(("NATIVE_BIG_ENDIAN", 1)) # tell libzmq about libsodium libzmq.define_macros.append(("HAVE_LIBSODIUM", 1)) libzmq.include_dirs.extend(libsodium.include_dirs)