blob: 1aa5556204aeb1e0ffeca62759573f3be9f6ffce [file] [log] [blame]
# Copyright (C) PyZMQ Developers
# Distributed under the terms of the Modified BSD License.
# This bundling code is largely adapted from pyzmq-static's 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
return subprocess.Popen(['pkg-config'] + args,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
except OSError as e:
if e.errno == errno.ENOENT:
log.warn("command not found: pkg-config")
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),
if p:
out,err = p.communicate()
if p.returncode:"Did not find %s via pkg-config: %s" % (package, err))
return False"Using %s version %s (found via pkg-config)" %
_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 = ""
return out.splitlines()[0]