aboutsummaryrefslogtreecommitdiff
path: root/build2/cc/target
diff options
context:
space:
mode:
Diffstat (limited to 'build2/cc/target')
-rw-r--r--build2/cc/target19
1 files changed, 17 insertions, 2 deletions
diff --git a/build2/cc/target b/build2/cc/target
index 2d8125b..465ea61 100644
--- a/build2/cc/target
+++ b/build2/cc/target
@@ -14,6 +14,21 @@ namespace build2
{
namespace cc
{
+ // This is an abstract base target for all c-common source files. We use
+ // this arrangement in rule matching to detect "unknown" (to this rule)
+ // source files that it cannot handle but should not ignore either. For
+ // example, a C link rule that sees a C++ source file.
+ //
+ class cc: public file
+ {
+ public:
+ using file::file;
+
+ public:
+ static const target_type static_type;
+ virtual const target_type& dynamic_type () const = 0;
+ };
+
// There is hardly a c-family compilation without a C header inclusion.
// As a result, this target type is registered for any c-family module.
//
@@ -33,10 +48,10 @@ namespace build2
// also without relaxing things too much (i.e., the user still won't be
// able to refer to c{} without loading the c module).
//
- class c: public file
+ class c: public cc
{
public:
- using file::file;
+ using cc::cc;
public:
static const target_type static_type;