aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/make-parser.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2021-12-06 11:16:22 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2021-12-06 11:16:22 +0200
commit9d860f46631c1567c62336fcb25cf7b8090855a4 (patch)
tree4df23a20e36671246718fc55af6fa5074d791467 /libbuild2/make-parser.hxx
parent2006284bfbda3416eb8348078fd98fa518d25c47 (diff)
Recognize absolute Windows paths in make parser
Diffstat (limited to 'libbuild2/make-parser.hxx')
-rw-r--r--libbuild2/make-parser.hxx20
1 files changed, 9 insertions, 11 deletions
diff --git a/libbuild2/make-parser.hxx b/libbuild2/make-parser.hxx
index 2ff7be2..f6da7a1 100644
--- a/libbuild2/make-parser.hxx
+++ b/libbuild2/make-parser.hxx
@@ -17,6 +17,11 @@ namespace build2
// parse one line at a time. This allows the caller to bail out early (for
// example, on encountering a non-existent generated file).
//
+ // Note that most tools (MinGW GCC, Qt moc, etc) do not escape `:` in
+ // absolute Windows paths. To handle such cases the parser recognizes `:`
+ // that is a part of the driver letter component and does not treat it as
+ // the target/prerequisite separator.
+ //
class LIBBUILD2_SYMEXPORT make_parser
{
public:
@@ -30,8 +35,6 @@ namespace build2
// which should normally be just skipped). Issue diagnostics and throw
// failed if the declaration or path is invalid.
//
- // If strict is false, then allow unescaped `:` in prerequisites.
- //
// Note that the (pos != line.size) should be in the do-while rather than
// in a while loop. In other words, except for the leading blank lines,
// the parser needs to see the blank line to correctly identify the end of
@@ -43,7 +46,7 @@ namespace build2
enum class type {target, prereq};
pair<type, path>
- next (const string& line, size_t& pos, const location&, bool strict);
+ next (const string& line, size_t& pos, const location&);
// Lower-level stateless API.
//
@@ -54,11 +57,6 @@ namespace build2
// position to point to the start of the following target/prerequisite,
// `:`, or line.size() if there is nothing left on this line.
//
- // Note that some broken tools (notably MinGW GCC) do not escape `:`
- // properly. To tolerate such cases the caller may specify that what's
- // being parsed is the prerequisite list in which case unescaped `:` will
- // be treated literally.
- //
// Note also that this function may return an empty string (with
// end=false) for a valid if unlikely dependency declaration, for example
// (using | to represent backslash):
@@ -67,8 +65,8 @@ namespace build2
// |
// bar
//
- // It would also return an empty string (with end=true) if passed and
- // empty or whitespace-only line.
+ // It would also return an empty string (with end=true) if passed an empty
+ // or whitespace-only line.
//
// Note also that in the make language line continuations introduce a
// whitespace rather than just being remove. For example, the following
@@ -78,7 +76,7 @@ namespace build2
// baz
//
static pair<string, bool>
- next (const string& line, size_t& pos, optional<bool> prereq = nullopt);
+ next (const string& line, size_t& pos, type);
};
}