waf-tools/pkgconfig.py
author Nicola Baldo <nbaldo@cttc.es>
Fri, 11 Jun 2010 19:25:18 +0200
changeset 6348 43e956769ceb
parent 5447 bfa1fc626775
child 7487 82cd20da9650
permissions -rw-r--r--
added Copy method for SimpleRefCountBase

# -*- mode: python; encoding: utf-8 -*-
# Gustavo Carneiro (gjamc) 2008

import Options
import Configure
import pproc as subprocess
import config_c

def detect(conf):
	pkg_config = conf.find_program('pkg-config', var='PKG_CONFIG')
	if not pkg_config: return

@Configure.conf
def pkg_check_modules(conf, uselib_name, expression, mandatory=True):
	pkg_config = conf.env['PKG_CONFIG']
	if not pkg_config:
		if mandatory:
			conf.fatal("pkg-config is not available")
		else:
			return False

	argv = [pkg_config, '--cflags', '--libs', expression]
	cmd = subprocess.Popen(argv, stdout=subprocess.PIPE)
	out, dummy = cmd.communicate()
	retval = cmd.wait()

	msg_checking = ("pkg-config flags for %s" % (uselib_name,))
	if Options.options.verbose:
		if retval == 0:
			conf.check_message_custom(msg_checking,
						  ('(%s)' % expression), out)
		else:
			conf.check_message(msg_checking, ('(%s)' % expression), False)
	else:
		conf.check_message(msg_checking, '', (retval == 0), '')
	conf.log.write('%r: %r (exit code %i)\n' % (argv, out, retval))

	if retval == 0:

		config_c.parse_flags(out, uselib_name, conf.env)
		conf.env[uselib_name] = True
		return True

	else:

		conf.env[uselib_name] = False
		if mandatory:
			raise Configure.ConfigurationError('pkg-config check failed')
		else:
			return False

@Configure.conf
def pkg_check_module_variable(conf, module, variable):
	pkg_config = conf.env['PKG_CONFIG']
	if not pkg_config:
		conf.fatal("pkg-config is not available")

	argv = [pkg_config, '--variable', variable, module]
	cmd = subprocess.Popen(argv, stdout=subprocess.PIPE)
	out, dummy = cmd.communicate()
	retval = cmd.wait()
	out = out.rstrip() # strip the trailing newline

	msg_checking = ("pkg-config variable %r in %s" % (variable, module,))
	conf.check_message_custom(msg_checking, '', out)
	conf.log.write('%r: %r (exit code %i)\n' % (argv, out, retval))

	if retval == 0:
		return out
	else:
		raise Configure.ConfigurationError('pkg-config check failed')