diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2023-08-22 09:43:20 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2023-08-22 09:43:20 +0200 |
commit | 18e079b37794dc97b6c51045476bf43296b56dd3 (patch) | |
tree | b81682b523ab87827bbfa7c9080a9b20dcbbda65 /libbuild2/cc | |
parent | 1741b21e27945da8c55069fa7cd66e55757be053 (diff) |
Add abstract c_inc{} and cxx_inc{} target types
These abstract base target types are meant for deriving additional target
types (for example, Qt moc{}) that can be #include'd in C and C++ translation
units, respectively. In particular, only such targets will be considered to
reverse-lookup extensions to target types (see dyndep_rule::map_extension()
for background).
Diffstat (limited to 'libbuild2/cc')
-rw-r--r-- | libbuild2/cc/target.cxx | 13 | ||||
-rw-r--r-- | libbuild2/cc/target.hxx | 19 |
2 files changed, 32 insertions, 0 deletions
diff --git a/libbuild2/cc/target.cxx b/libbuild2/cc/target.cxx index 6c5d7c8..6a518dd 100644 --- a/libbuild2/cc/target.cxx +++ b/libbuild2/cc/target.cxx @@ -80,6 +80,19 @@ namespace build2 target_type::flag::none }; + const target_type c_inc::static_type + { + "c_inc", + &cc::static_type, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + &target_search, + target_type::flag::none + }; + extern const char pc_ext[] = "pc"; // VC14 rejects constexpr. const target_type pc::static_type { diff --git a/libbuild2/cc/target.hxx b/libbuild2/cc/target.hxx index a078422..01f2d6e 100644 --- a/libbuild2/cc/target.hxx +++ b/libbuild2/cc/target.hxx @@ -100,6 +100,25 @@ namespace build2 static const target_type static_type; }; + // This is an abstract base target for deriving additional targets that + // can be #include'd in C translation units (the same rationale for having + // it here as for c{} above). In particular, only such targets will be + // considered to reverse-lookup extensions to target types (see + // dyndep_rule::map_extension() for background). + // + class LIBBUILD2_CC_SYMEXPORT c_inc: public cc + { + public: + c_inc (context& c, dir_path d, dir_path o, string n) + : cc (c, move (d), move (o), move (n)) + { + dynamic_type = &static_type; + } + + public: + static const target_type static_type; + }; + // pkg-config file targets. // class LIBBUILD2_CC_SYMEXPORT pc: public file // .pc (common) |