From c3b10ee7c9320ed6cf5daec6310b0296812ea86a Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Tue, 15 Nov 2022 17:13:38 +0100 Subject: Make "config" accept a computed target ... and thus allowing the "business logic" in the configuration target (e.g., setting defaults and derived options) to be shared by many targets. --- src/buildtool/build_engine/target_map/built_in_rules.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/buildtool/build_engine/target_map/built_in_rules.cpp b/src/buildtool/build_engine/target_map/built_in_rules.cpp index a34dfb03..763385e2 100644 --- a/src/buildtool/build_engine/target_map/built_in_rules.cpp +++ b/src/buildtool/build_engine/target_map/built_in_rules.cpp @@ -953,7 +953,16 @@ void ConfigureRule( } auto param_config = key.config.Prune(*param_vars); - auto configured_target_name = desc->ReadExpression("target"); + auto configured_target_name_exp = desc->ReadExpression("target"); + if (not configured_target_name_exp) { + return; + } + auto configured_target_name = configured_target_name_exp.Evaluate( + param_config, {}, [logger](std::string const& msg) { + (*logger)( + fmt::format("Evaluating 'target' failed with error:\n{}", msg), + true); + }); if (not configured_target_name) { return; } -- cgit v1.2.3