From aaf2525e9e8ed356feba437e56df737428a52f55 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 17 May 2017 15:13:58 +0200 Subject: Add ability to disable use of preprocessed output in compilation This can be done from a buildfile for a scope (including project root scope) and per target via cc.reprocess: cc.reprocess = true obj{hello}: cc.reprocess = false As as well externally via config.cc.reprocess: b config.cc.reprocess=true [configure] --- build2/c/init.cxx | 21 +++++++++++---------- build2/cc/common.hxx | 5 +++-- build2/cc/compile.cxx | 11 +++++++---- build2/cc/init.cxx | 8 ++++++++ build2/cxx/init.cxx | 1 + 5 files changed, 30 insertions(+), 16 deletions(-) (limited to 'build2') diff --git a/build2/c/init.cxx b/build2/c/init.cxx index 4256e3e..a54060c 100644 --- a/build2/c/init.cxx +++ b/build2/c/init.cxx @@ -143,23 +143,24 @@ namespace build2 v.insert ("c.loptions"), v.insert ("c.libs"), - v.insert ("cc.poptions"), - v.insert ("cc.coptions"), - v.insert ("cc.loptions"), - v.insert ("cc.libs"), + v["cc.poptions"], + v["cc.coptions"], + v["cc.loptions"], + v["cc.libs"], v.insert ("c.export.poptions"), v.insert ("c.export.coptions"), v.insert ("c.export.loptions"), v.insert> ("c.export.libs"), - v.insert ("cc.export.poptions"), - v.insert ("cc.export.coptions"), - v.insert ("cc.export.loptions"), - v.insert ("cc.export.libs"), + v["cc.export.poptions"], + v["cc.export.coptions"], + v["cc.export.loptions"], + v["cc.export.libs"], - v.insert ("cc.type"), - v.insert ("cc.system"), + v["cc.type"], + v["cc.system"], + v["cc.reprocess"], v.insert ("c.std", variable_visibility::project), diff --git a/build2/cc/common.hxx b/build2/cc/common.hxx index c22140c..3abb086 100644 --- a/build2/cc/common.hxx +++ b/build2/cc/common.hxx @@ -63,8 +63,9 @@ namespace build2 const variable& c_export_loptions; const variable& c_export_libs; - const variable& c_type; // cc.type - const variable& c_system; // cc.system + const variable& c_type; // cc.type + const variable& c_system; // cc.system + const variable& c_reprocess; // cc.reprocess const variable& x_std; diff --git a/build2/cc/compile.cxx b/build2/cc/compile.cxx index 32b5f6e..1eb4c9b 100644 --- a/build2/cc/compile.cxx +++ b/build2/cc/compile.cxx @@ -567,11 +567,14 @@ namespace build2 pair p (inject (act, t, lo, src, dd, u)); dd.close (); - // If the preprocessed output is suitable for compilation, pass it - // along. + // If the preprocessed output is suitable for compilation and is not + // disabled, pass it along. // - if (p.second) - md.psrc = move (p.first); + if (!p.first.path ().empty () && p.second) + { + if (!cast_false (t[c_reprocess])) + md.psrc = move (p.first); + } md.mt = u ? timestamp_nonexistent : mt; } diff --git a/build2/cc/init.cxx b/build2/cc/init.cxx index 8d20573..a5fcf83 100644 --- a/build2/cc/init.cxx +++ b/build2/cc/init.cxx @@ -78,6 +78,11 @@ namespace build2 // v.insert ("cc.system"); + // Ability to disable using preprocessed output for compilation. + // + v.insert ("config.cc.reprocess", true); + v.insert ("cc.reprocess"); + return true; } @@ -166,6 +171,9 @@ namespace build2 rs.assign ("cc.libs") += cast_null ( config::optional (rs, "config.cc.libs")); + if (lookup l = config::omitted (rs, "config.cc.reprocess").first) + rs.assign ("cc.reprocess") = *l; + // Load the bin.config module. // if (!cast_false (rs["bin.config.loaded"])) diff --git a/build2/cxx/init.cxx b/build2/cxx/init.cxx index 70360bc..395a9f8 100644 --- a/build2/cxx/init.cxx +++ b/build2/cxx/init.cxx @@ -223,6 +223,7 @@ namespace build2 v["cc.type"], v["cc.system"], + v["cc.reprocess"], v.insert ("cxx.std", variable_visibility::project), -- cgit v1.1