From 4a74374e20d275722067e773d7ea99fc85ca2a0b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 30 May 2017 14:11:50 +0200 Subject: Diagnose lack of module support in extract_modules() --- build2/c/init.cxx | 2 ++ build2/cc/common.hxx | 4 ++++ build2/cc/compile.cxx | 17 ++++++++++++----- build2/cxx/init.cxx | 2 ++ 4 files changed, 20 insertions(+), 5 deletions(-) (limited to 'build2') diff --git a/build2/c/init.cxx b/build2/c/init.cxx index 30c324a..b4b2bca 100644 --- a/build2/c/init.cxx +++ b/build2/c/init.cxx @@ -262,6 +262,8 @@ namespace build2 cm.tstd, + false, // No C modules for now. + cast_null (rs["pkgconfig.path"]), cast (rs[cm.x_sys_lib_dirs]), cast (rs[cm.x_sys_inc_dirs]), diff --git a/build2/cc/common.hxx b/build2/cc/common.hxx index fa6ec5a..155d670 100644 --- a/build2/cc/common.hxx +++ b/build2/cc/common.hxx @@ -114,6 +114,8 @@ namespace build2 const strings& tstd; // Translated x_std value (options). + bool modules; // x.feaures.modules + const process_path* pkgconfig; // pkgconfig.path (can be NULL). const dir_paths& sys_lib_dirs; // x.sys_lib_dirs const dir_paths& sys_inc_dirs; // x.sys_inc_dirs @@ -154,6 +156,7 @@ namespace build2 const process_path& path, const target_triplet& tg, const strings& std, + bool mod, const process_path* pkgc, const dir_paths& sld, const dir_paths& sid, @@ -168,6 +171,7 @@ namespace build2 cid (id), cvar (var), cmaj (mj), cmin (mi), cpath (path), ctg (tg), tsys (ctg.system), tclass (ctg.class_), tstd (std), + modules (mod), pkgconfig (pkgc), sys_lib_dirs (sld), sys_inc_dirs (sid), x_src (src), x_hdr (hdr), x_inc (inc) {} }; diff --git a/build2/cc/compile.cxx b/build2/cc/compile.cxx index ce96e00..c7fc3ea 100644 --- a/build2/cc/compile.cxx +++ b/build2/cc/compile.cxx @@ -610,9 +610,8 @@ namespace build2 dd.close (); - // If C++ modules support is enabled then we need to extract the - // module dependency information in addition to header dependencies - // above. + // Extract the module dependency information in addition to header + // dependencies above. // if (u) // @@ TMP (depdb validation similar to extract_headers()). { @@ -2207,8 +2206,16 @@ namespace build2 throw failed (); } - if (!tu.module_name.empty () || !tu.module_imports.empty ()) - fail << "module support not yet implemented"; + //@@ TODO: if bmi{}, make sure module_name is not empty. + + if (tu.module_name.empty () && tu.module_imports.empty ()) + return; + + // Modules are used by this translation unit. Make sure module support + // is enabled. + // + if (!modules) + fail << "modules support not enabled or unavailable"; } // Filter cl.exe noise (msvc.cxx). diff --git a/build2/cxx/init.cxx b/build2/cxx/init.cxx index f6162ab..fde12e3 100644 --- a/build2/cxx/init.cxx +++ b/build2/cxx/init.cxx @@ -433,6 +433,8 @@ namespace build2 cm.tstd, + cast (rs["cxx.features.modules"]), + cast_null (rs["pkgconfig.path"]), cast (rs[cm.x_sys_lib_dirs]), cast (rs[cm.x_sys_inc_dirs]), -- cgit v1.1