From 1955e842a43e202c4ab2b92c815490a0508f0d58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20Ol=C3=A1h?= Date: Sat, 4 Nov 2023 12:22:16 +0100 Subject: [PATCH] Introduce 'env_override' paremeter. --- foreign_cc/configure.bzl | 1 + foreign_cc/make.bzl | 1 + foreign_cc/private/configure_script.bzl | 3 ++- foreign_cc/private/framework.bzl | 7 +++++++ foreign_cc/private/make_env_vars.bzl | 10 +++++++--- foreign_cc/private/make_script.bzl | 3 ++- 6 files changed, 20 insertions(+), 5 deletions(-) diff --git a/foreign_cc/configure.bzl b/foreign_cc/configure.bzl index ddfc379af..38eec7dd0 100644 --- a/foreign_cc/configure.bzl +++ b/foreign_cc/configure.bzl @@ -98,6 +98,7 @@ def _create_configure_script(configureParameters): deps = ctx.attr.deps, inputs = inputs, env_vars = user_env, + env_vars_override = ctx.attr.env_override, configure_in_place = ctx.attr.configure_in_place, prefix_flag = ctx.attr.prefix_flag, autoconf = ctx.attr.autoconf, diff --git a/foreign_cc/make.bzl b/foreign_cc/make.bzl index fcdd8a5cf..c7c686238 100644 --- a/foreign_cc/make.bzl +++ b/foreign_cc/make.bzl @@ -74,6 +74,7 @@ def _create_make_script(configureParameters): deps = ctx.attr.deps, inputs = inputs, env_vars = user_env, + env_vars_override = ctx.attr.env_override, make_commands = make_commands, ) diff --git a/foreign_cc/private/configure_script.bzl b/foreign_cc/private/configure_script.bzl index 06c516ea5..de4f47005 100644 --- a/foreign_cc/private/configure_script.bzl +++ b/foreign_cc/private/configure_script.bzl @@ -14,6 +14,7 @@ def create_configure_script( deps, inputs, env_vars, + env_vars_override, configure_in_place, prefix_flag, autoconf, @@ -70,7 +71,7 @@ def create_configure_script( script.append("##mkdirs## $$BUILD_TMPDIR$$/$$INSTALL_PREFIX$$") script.append("{env_vars} {prefix}\"{configure}\" {prefix_flag}$$BUILD_TMPDIR$$/$$INSTALL_PREFIX$$ {user_options}".format( - env_vars = get_make_env_vars(workspace_name, tools, flags, env_vars, deps, inputs), + env_vars = get_make_env_vars(workspace_name, tools, flags, env_vars, env_vars_override, deps, inputs), prefix = configure_prefix, configure = configure_path, prefix_flag = prefix_flag, diff --git a/foreign_cc/private/framework.bzl b/foreign_cc/private/framework.bzl index 9c263c083..56f1ae384 100644 --- a/foreign_cc/private/framework.bzl +++ b/foreign_cc/private/framework.bzl @@ -108,6 +108,13 @@ CC_EXTERNAL_RULE_ATTRIBUTES = { "Variables containing `PATH` (e.g. `PATH`, `LD_LIBRARY_PATH`, `CPATH`) entries will be prepended to the existing variable." ), ), + "env_override": attr.string_list( + doc = ( + "List of keys from the 'env' attribute that should override any values set by the underlying C toolchain." + ), + mandatory = False, + default = [], + ), "includes": attr.string_list( doc = ( "Optional list of include dirs to be passed to the dependencies of this library. " + diff --git a/foreign_cc/private/make_env_vars.bzl b/foreign_cc/private/make_env_vars.bzl index b5177c745..4d819a298 100644 --- a/foreign_cc/private/make_env_vars.bzl +++ b/foreign_cc/private/make_env_vars.bzl @@ -9,9 +9,10 @@ def get_make_env_vars( tools, flags, user_vars, + user_vars_override, deps, inputs): - vars = _get_make_variables(workspace_name, tools, flags, user_vars) + vars = _get_make_variables(workspace_name, tools, flags, user_vars, user_vars_override) deps_flags = _define_deps_flags(deps, inputs) # For cross-compilation. @@ -94,7 +95,7 @@ _MAKE_TOOLS = { # missing: cxx_linker_executable } -def _get_make_variables(workspace_name, tools, flags, user_env_vars): +def _get_make_variables(workspace_name, tools, flags, user_env_vars, user_vars_override): vars = {} for flag in _MAKE_FLAGS: @@ -106,7 +107,10 @@ def _get_make_variables(workspace_name, tools, flags, user_env_vars): for user_var in user_env_vars: toolchain_val = vars.get(user_var) if toolchain_val: - vars[user_var] = toolchain_val + [user_env_vars[user_var]] + if user_var in user_vars_override: + vars[user_var] = [user_env_vars[user_var]] + else: + vars[user_var] = toolchain_val + [user_env_vars[user_var]] tools_dict = {} for tool in _MAKE_TOOLS: diff --git a/foreign_cc/private/make_script.bzl b/foreign_cc/private/make_script.bzl index d86ff6087..039b0cf71 100644 --- a/foreign_cc/private/make_script.bzl +++ b/foreign_cc/private/make_script.bzl @@ -9,6 +9,7 @@ def create_make_script( flags, root, env_vars, + env_vars_override, deps, inputs, make_commands): @@ -19,7 +20,7 @@ def create_make_script( script.append("##symlink_contents_to_dir## $$EXT_BUILD_ROOT$$/{} $$BUILD_TMPDIR$$ False".format(root)) script.append("##enable_tracing##") - configure_vars = get_make_env_vars(workspace_name, tools, flags, env_vars, deps, inputs) + configure_vars = get_make_env_vars(workspace_name, tools, flags, env_vars, env_vars_override, deps, inputs) script.extend(["{env_vars} {command}".format( env_vars = configure_vars, command = command,