From c76736eb1dde2fe5a8ae344dca2b018c79bdc218 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 30 Aug 2018 10:03:30 +0200 Subject: Handle missing export directive in export stub If none were executed, then we assume the requested target is not exported. --- build2/file.cxx | 13 +++++++++++-- build2/parser.cxx | 3 +++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/build2/file.cxx b/build2/file.cxx index 728de64..05527f3 100644 --- a/build2/file.cxx +++ b/build2/file.cxx @@ -1370,7 +1370,7 @@ namespace build2 value& v (ts.assign (var_import_target)); if (!target.empty ()) // Otherwise leave NULL. - v = move (target); + v = target; // Can't move (need for diagnostics below). } // Load the export stub. Note that it is loaded in the context @@ -1391,7 +1391,16 @@ namespace build2 // name? // parser p; - return p.parse_export_stub (ifs, es, iroot, ts); + names v (p.parse_export_stub (ifs, es, iroot, ts)); + + // If there were no export directive executed in an export stub, assume + // the target is not exported. + // + if (v.empty () && !target.empty ()) + fail (loc) << "target " << target << " is not exported by project " + << proj; + + return v; } catch (const io_error& e) { diff --git a/build2/parser.cxx b/build2/parser.cxx index 6d025a6..1dd49b6 100644 --- a/build2/parser.cxx +++ b/build2/parser.cxx @@ -1509,6 +1509,9 @@ namespace build2 export_value_ = move (rhs).as (); + if (export_value_.empty ()) + fail (l) << "empty value in export"; + if (tt == type::newline) next (t, tt); else if (tt != type::eos) -- cgit v1.1