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 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]