From daa35c9e4b592f055b42e482fe1398527cfdf90b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 6 Jun 2019 18:00:10 +0200 Subject: Fix cc link rule matching ambiguity wrt to C/C++ sources Considering a C header as C++ source was definitely a bad idea. --- build2/cc/link-rule.cxx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'build2/cc/link-rule.cxx') diff --git a/build2/cc/link-rule.cxx b/build2/cc/link-rule.cxx index 372d077..3b58ab7 100644 --- a/build2/cc/link-rule.cxx +++ b/build2/cc/link-rule.cxx @@ -87,12 +87,14 @@ namespace build2 if (p.is_a (x_src) || (x_mod != nullptr && p.is_a (*x_mod)) || - (lt.library () && x_header (p))) // Header-only library. + // Header-only X library (or library with C source and X header). + (lt.library () && x_header (p, false /* c_hdr */))) { seen_x = seen_x || true; } else if (p.is_a () || - (lt.library () && p.is_a ())) // Header-only library. + // Header-only C library. + (lt.library () && p.is_a ())) { seen_c = seen_c || true; } @@ -132,7 +134,7 @@ namespace build2 // then we shouldn't try to handle that (it may need to be compiled, // etc). But we assume everyone can handle a C header. // - else if (p.is_a () && !(x_header (p) || p.is_a ())) + else if (p.is_a () && !(x_header (p, true /* c_hdr */))) { l4 ([&]{trace << "non-" << x_lang << " prerequisite " << p << " for target " << t;}); -- cgit v1.1