# ----------------------------------------------------------------------------- # Copyright (C) PyZMQ Developers # Distributed under the terms of the Modified BSD License. # # This bundling code is largely adapted from pyzmq-static's get.sh by # Brandon Craig-Rhodes, which is itself BSD licensed. # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- # These functions were largely adapted from pyzmq's code # PyZMQ Developers, which is itself Modified BSD licensed. # ----------------------------------------------------------------------------- import errno import os import subprocess import sys from . import log def _call_pkg_config(args): """Spawn a subprocess running pkg-config with the given args. :param args: list of strings to pass to pkg-config's command line. Refer to pkg-config's documentation for more detail. Return the Popen object, or None if the command failed """ try: return subprocess.Popen(['pkg-config'] + args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) except OSError as e: if e.errno == errno.ENOENT: log.warn("command not found: pkg-config") else: log.warn("Running pkg-config failed - %s." % e) return None def pkg_config_version_installed(package, version=None, atleast=None): """Check if version of a package is is installed This function returns True/False depending on whether the package is found and is the correct version. :param version: The exact version of the package required :param atleast: True if installed package is at least this version """ if version is None and atleast is None: log.fatal('package version string required') elif version and atleast: log.fatal('Specify either version or atleast, not both') check = 'exact' if version else 'atleast' p = _call_pkg_config(['--%s-version=%s' % (check, version or atleast), package]) if p: out, err = p.communicate() if p.returncode: log.info("Did not find %s via pkg-config: %s" % (package, err)) return False log.info("Using %s version %s (found via pkg-config)" % (package, _call_pkg_config(['--modversion', package]).communicate()[0].splitlines()[0])) return True return False def pkg_config_get_var(package, name): """Retrieve the value of the named package variable as a string """ p = _call_pkg_config(['--variable=%s' % name, package]) if not p: log.warn("pkg-config: var %s get failed, package %s", name, package) return "" out, err = p.communicate() if p.returncode: out = "" log.warn(err) return out.splitlines()[0]