From 210767169191e19c70f9c7b63528b0d629ddbcfa Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Wed, 5 May 2021 18:33:15 +0200 Subject: build: add check_preprocessor This can be used to do things like query the values of preprocessor defines like version macros, among other potential uses. --- waftools/checks/generic.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'waftools') diff --git a/waftools/checks/generic.py b/waftools/checks/generic.py index 4e27f5114a..114f4522b7 100644 --- a/waftools/checks/generic.py +++ b/waftools/checks/generic.py @@ -9,7 +9,7 @@ __all__ = [ "check_pkg_config_cflags", "check_cc", "check_statement", "check_libs", "check_headers", "compose_checks", "any_check", "check_true", "any_version", "load_fragment", "check_stub", "check_ctx_vars", "check_program", - "check_pkg_config_datadir", "check_macos_sdk"] + "check_pkg_config_datadir", "check_macos_sdk", "check_preprocessor"] any_version = None @@ -47,6 +47,23 @@ def check_libs(libs, function): return False return fn +def check_preprocessor(header, expression, **kw_ext): + def fn(ctx, dependency_identifier, **kw): + headers = header + if not isinstance(headers, list): + headers = [header] + hs = "\n".join(["#include <{0}>".format(h) for h in headers]) + fragment = ("{0}\n" + "#if !({1})\n#error\n#endif\n" + "int main(int argc, char **argv)\n" + "{{ return 0; }}").format(hs, expression) + opts = __merge_options__(dependency_identifier, + {'fragment':fragment}, + __define_options__(dependency_identifier), + kw_ext, kw) + return ctx.check_cc(**_filter_cc_arguments(ctx, opts)) + return fn + def check_statement(header, statement, **kw_ext): def fn(ctx, dependency_identifier, **kw): headers = header -- cgit v1.2.3