From 3074c5e1409ad49c0793db6384ecbc6ac4ed33a9 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 11 Dec 2020 07:07:36 +0200 Subject: Add search_locked() versions of search() functions --- libbuild2/search.cxx | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'libbuild2/search.cxx') diff --git a/libbuild2/search.cxx b/libbuild2/search.cxx index 2b10e0b..b341c85 100644 --- a/libbuild2/search.cxx +++ b/libbuild2/search.cxx @@ -243,4 +243,44 @@ namespace build2 << " for prerequisite " << pk;}); return t; } + + pair + create_new_target_locked (context& ctx, const prerequisite_key& pk) + { + tracer trace ("create_new_target_locked"); + + const target_key& tk (pk.tk); + + // We default to the target in this directory scope. + // + dir_path d; + if (tk.dir->absolute ()) + d = *tk.dir; // Already normalized. + else + { + d = pk.scope->out_path (); + + if (!tk.dir->empty ()) + { + d /= *tk.dir; + d.normalize (); + } + } + + // Find or insert. + // + // @@ OUT: same story as in search_existing_target() re out. + // + auto r (ctx.targets.insert_locked (*tk.type, + move (d), + *tk.out, + *tk.name, + tk.ext, + target_decl::prereq_new, + trace)); + + l5 ([&]{trace << (r.second ? "new" : "existing") << " target " << r.first + << " for prerequisite " << pk;}); + return r; + } } -- cgit v1.1