From 3d8f2b3779ae32a16627a0f09f1798224cdaf68f Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 31 Aug 2016 10:48:51 +0200 Subject: Improve mixed source (e.g., C and C++) building support --- build2/cc/target | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'build2/cc/target') 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; -- cgit v1.1