From 89c28ac002f9e4b05db84012af5a5a6512f9b465 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 17 Oct 2019 12:09:35 +0200 Subject: Remove pkg-config cache mechanism and support simple package specs This allows shorter syntax like autowaf.check_pkg(conf, 'foo-2.0 >= 2.3.4'). --- extras/autowaf.py | 72 +++++++++++++++++++++++++------------------------------ 1 file changed, 32 insertions(+), 40 deletions(-) (limited to 'extras') diff --git a/extras/autowaf.py b/extras/autowaf.py index e81f5d7..dae28a3 100644 --- a/extras/autowaf.py +++ b/extras/autowaf.py @@ -171,50 +171,42 @@ def define(conf, var_name, value): conf.define(var_name, value) conf.env[var_name] = value -def check_pkg(conf, name, **args): +def check_pkg(conf, spec, **kwargs): "Check for a package iff it hasn't been checked for yet" - if (args['uselib_store'].lower() in conf.env['AUTOWAF_LOCAL_LIBS'] or - args['uselib_store'].lower() in conf.env['AUTOWAF_LOCAL_HEADERS']): + + if (kwargs['uselib_store'].lower() in conf.env['AUTOWAF_LOCAL_LIBS'] or + kwargs['uselib_store'].lower() in conf.env['AUTOWAF_LOCAL_HEADERS']): return - class CheckType: - OPTIONAL = 1 - MANDATORY = 2 - - var_name = 'CHECKED_' + nameify(args['uselib_store']) - check = var_name not in conf.env - mandatory = 'mandatory' not in args or args['mandatory'] - if not check and 'atleast_version' in args: - # Re-check if version is newer than previous check - checked_version = conf.env['VERSION_' + name] - if checked_version and checked_version < args['atleast_version']: - check = True - if not check and mandatory and conf.env[var_name] == CheckType.OPTIONAL: - # Re-check if previous check was optional but this one is mandatory - check = True - if check: - found = None - pkg_var_name = 'PKG_' + name.replace('-', '_') - pkg_name = name - if conf.env.PARDEBUG: - args['mandatory'] = False # Smash mandatory arg - found = conf.check_cfg(package=pkg_name + 'D', - args="--cflags --libs", **args) - if found: - pkg_name += 'D' - if mandatory: - args['mandatory'] = True # Unsmash mandatory arg - if not found: - found = conf.check_cfg(package=pkg_name, args="--cflags --libs", - **args) - if found: - conf.env[pkg_var_name] = pkg_name - if 'atleast_version' in args: - conf.env['VERSION_' + name] = args['atleast_version'] - if mandatory: - conf.env[var_name] = CheckType.MANDATORY + import re + match = re.match('([^ ]*) >= [0-9\.]*', spec) + args = [] + if match: + name = match.group(1) + args = [spec] + elif spec.find(' ') == -1: + name = spec else: - conf.env[var_name] = CheckType.OPTIONAL + Logs.error("Invalid package spec: %s" % spec) + + found = None + pkg_var_name = 'PKG_' + name.replace('-', '_') + pkg_name = name + args += kwargs.get('args', []) + + if conf.env.PARDEBUG: + kwargs['mandatory'] = False # Smash mandatory arg + found = conf.check_cfg(package=pkg_name + 'D', + args=args + ['--cflags', '--libs']) + if found: + pkg_name += 'D' + + args['mandatory'] = mandatory # Unsmash mandatory arg + + if not found: + found = conf.check_cfg(package=spec, + args=args + ['--cflags', '--libs'], + **kwargs) if not conf.env.MSVC_COMPILER and 'system' in args and args['system']: conf.system_include_paths.update( -- cgit v1.2.1