diff --git a/ostd/build/make.hh b/ostd/build/make.hh index bf6fc8e..b06e7ac 100644 --- a/ostd/build/make.hh +++ b/ostd/build/make.hh @@ -76,7 +76,7 @@ struct make_rule { void(string_range, iterator_range) >; using depend_func = std::function< - void(decltype(appender>()) &) + void(string_range, decltype(appender>()) &) >; make_rule() = delete; @@ -133,11 +133,13 @@ struct make_rule { return p_cond(target); } - void depends(std::function body) const { + void depends( + string_range tgt, std::function body + ) const { auto app = appender>(); for (auto &f: p_deps) { app.clear(); - f(app); + f(tgt, app); for (auto &s: app.get()) { body(s); } @@ -167,7 +169,7 @@ private: template void add_depend(R &&v) { if constexpr (std::is_constructible_v) { - p_deps.push_back([s = std::string{v}](auto &app) { + p_deps.push_back([s = std::string{v}](auto, auto &app) { app.put(std::move(s)); }); } else if constexpr(std::is_constructible_v) { diff --git a/src/build_make.cc b/src/build_make.cc index c9c2aed..258b2a5 100644 --- a/src/build_make.cc +++ b/src/build_make.cc @@ -185,7 +185,7 @@ void make::find_rules(string_range target, std::vector &rlist) { rlist.emplace_back(); rule_inst &sr = rlist.back(); sr.rule = &rule; - rule.depends([&sr, &tgt](string_range d) { + rule.depends(target, [&sr, &tgt](string_range d) { sr.deps.push_back(tgt.replace(d)); }); if (!rule.has_body()) {