summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/build_engine/expression/evaluator.cpp2
-rw-r--r--src/buildtool/build_engine/expression/evaluator.hpp17
-rw-r--r--src/buildtool/common/TARGETS3
-rw-r--r--src/buildtool/common/cli.hpp8
-rw-r--r--src/buildtool/main/main.cpp5
5 files changed, 32 insertions, 3 deletions
diff --git a/src/buildtool/build_engine/expression/evaluator.cpp b/src/buildtool/build_engine/expression/evaluator.cpp
index 9789c519..0097bd27 100644
--- a/src/buildtool/build_engine/expression/evaluator.cpp
+++ b/src/buildtool/build_engine/expression/evaluator.cpp
@@ -922,7 +922,7 @@ auto Evaluator::EvaluationError::WhileEvaluating(ExpressionPtr const& expr,
}
ss << expr->ToString() << std::endl;
ss << " environment " << std::endl;
- ss << env.Enumerate(" - ", kLineWidth) << std::endl;
+ ss << env.Enumerate(" - ", Config().expression_log_limit) << std::endl;
ss << ex.what();
return EvaluationError{ss.str(), true /* while_eval */};
}
diff --git a/src/buildtool/build_engine/expression/evaluator.hpp b/src/buildtool/build_engine/expression/evaluator.hpp
index b4cd5979..e709de43 100644
--- a/src/buildtool/build_engine/expression/evaluator.hpp
+++ b/src/buildtool/build_engine/expression/evaluator.hpp
@@ -10,7 +10,17 @@
class Configuration;
class Evaluator {
+ struct ConfigData {
+ std::size_t expression_log_limit{kDefaultExpressionLogLimit};
+ };
+
public:
+ /// \brief Set the limit for the size of logging a single expression
+ /// in an error message.
+ static void SetExpressionLogLimit(std::size_t width) {
+ Config().expression_log_limit = width;
+ }
+
class EvaluationError : public std::exception {
public:
explicit EvaluationError(std::string const& msg,
@@ -65,12 +75,17 @@ class Evaluator {
std::function<void(void)> const& note_user_context = []() {}) noexcept
-> ExpressionPtr;
+ constexpr static std::size_t kDefaultExpressionLogLimit = 320;
+
private:
- constexpr static std::size_t kLineWidth = 80;
[[nodiscard]] static auto Evaluate(ExpressionPtr const& expr,
Configuration const& env,
FunctionMapPtr const& functions)
-> ExpressionPtr;
+ [[nodiscard]] static auto Config() noexcept -> ConfigData& {
+ static ConfigData instance{};
+ return instance;
+ }
};
#endif // INCLUDED_SRC_BUILDTOOL_BUILD_ENGINE_EXPRESSION_EVALUATOR_HPP
diff --git a/src/buildtool/common/TARGETS b/src/buildtool/common/TARGETS
index 4f297a12..4cc2dcbf 100644
--- a/src/buildtool/common/TARGETS
+++ b/src/buildtool/common/TARGETS
@@ -3,7 +3,8 @@
, "name": ["cli"]
, "hdrs": ["cli.hpp"]
, "deps":
- [ ["src/buildtool/compatibility", "compatibility"]
+ [ ["src/buildtool/build_engine/expression", "expression"]
+ , ["src/buildtool/compatibility", "compatibility"]
, ["src/buildtool/logging", "log_level"]
, ["@", "cli11", "", "cli11"]
, ["@", "json", "", "json"]
diff --git a/src/buildtool/common/cli.hpp b/src/buildtool/common/cli.hpp
index adfa3445..b2bd4576 100644
--- a/src/buildtool/common/cli.hpp
+++ b/src/buildtool/common/cli.hpp
@@ -12,6 +12,7 @@
#include "fmt/core.h"
#include "gsl-lite/gsl-lite.hpp"
#include "nlohmann/json.hpp"
+#include "src/buildtool/build_engine/expression/evaluator.hpp"
#include "src/buildtool/compatibility/compatibility.hpp"
#include "src/buildtool/logging/log_level.hpp"
@@ -30,6 +31,7 @@ struct CommonArguments {
/// \brief Arguments required for analysing targets.
struct AnalysisArguments {
+ std::optional<std::size_t> expression_log_limit{};
std::string defines{};
std::filesystem::path config_file{};
std::optional<nlohmann::json> target{};
@@ -137,6 +139,12 @@ static inline auto SetupAnalysisArguments(
gsl::not_null<CLI::App*> const& app,
gsl::not_null<AnalysisArguments*> const& clargs,
bool with_graph = true) {
+ app->add_option("--expression-log-limit",
+ clargs->expression_log_limit,
+ fmt::format("Maximal size for logging a single expression "
+ "in error messages (Default {})",
+ Evaluator::kDefaultExpressionLogLimit))
+ ->type_name("NUM");
app->add_option(
"-D,--defines",
clargs->defines,
diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp
index d6d999ab..e1630e31 100644
--- a/src/buildtool/main/main.cpp
+++ b/src/buildtool/main/main.cpp
@@ -15,6 +15,7 @@
#include "src/buildtool/build_engine/base_maps/rule_map.hpp"
#include "src/buildtool/build_engine/base_maps/source_map.hpp"
#include "src/buildtool/build_engine/base_maps/targets_file_map.hpp"
+#include "src/buildtool/build_engine/expression/evaluator.hpp"
#include "src/buildtool/build_engine/expression/expression.hpp"
#include "src/buildtool/build_engine/target_map/target_cache.hpp"
#include "src/buildtool/build_engine/target_map/target_map.hpp"
@@ -1333,6 +1334,10 @@ auto main(int argc, char* argv[]) -> int {
}
SetupLogging(arguments.common);
+ if (arguments.analysis.expression_log_limit) {
+ Evaluator::SetExpressionLogLimit(
+ *arguments.analysis.expression_log_limit);
+ }
#ifndef BOOTSTRAP_BUILD_TOOL
SetupHashFunction();
SetupExecutionConfig(