diff options
-rw-r--r-- | libbuild2/parser.cxx | 23 | ||||
-rw-r--r-- | tests/name/pattern.testscript | 12 |
2 files changed, 30 insertions, 5 deletions
diff --git a/libbuild2/parser.cxx b/libbuild2/parser.cxx index 53f808c..64652d7 100644 --- a/libbuild2/parser.cxx +++ b/libbuild2/parser.cxx @@ -7569,7 +7569,9 @@ namespace build2 // and look for some wildcards since the pattern can be the result of an // expansion (or, worse, concatenation). Thus pattern_mode::detect: we // are going to ask parse_names() to detect for us if the first name is - // a pattern. And if it is, to refrain from adding pair/dir/type. + // a pattern. And if it is, to refrain from adding pair/dir/type (note: + // for the pattern inclusions and exclusions the name's type member will + // be set to "+" and "-", respectively). // optional<const target_type*> pat_tt ( parse_names ( @@ -8313,11 +8315,22 @@ namespace build2 fail (loc) << "invalid path '" << e.path << "'"; } + // Note that for a pattern inclusion group (see above) we make sure + // that the resulting patterns are simple names, passing NULL as the + // directory path (see the parse_names_trailer::parse() lambda + // implementation for details). + // count = parse_names_trailer ( - t, tt, ns, pmode, what, separators, pairn, *pp1, dp1, tp1, cross); - - // If empty group or empty name, then this is not a pattern inclusion - // group (see above). + t, tt, + ns, + pmode, + what, + separators, pairn, + *pp1, (!pinc ? dp1 : nullptr), tp1, + cross); + + // If empty group or empty name, then this is not a pattern + // inclusion group. // if (pinc) { diff --git a/tests/name/pattern.testscript b/tests/name/pattern.testscript index c1a4ce4..046645b 100644 --- a/tests/name/pattern.testscript +++ b/tests/name/pattern.testscript @@ -153,6 +153,9 @@ EOI mkdir bar; $* <'print {f*/ +{b*/}}' >/'bar/' : include-group + mkdir -p foo/bar; + $* <'print foo/{+{b*/}}' >/'foo/bar/' : include-group-first + touch foo.txt fox.txt; $* <'print {*.txt -f*.txt +*x.txt}' >'fox.txt' : include-exclude-order @@ -309,6 +312,15 @@ EOI print {+{$pats}} EOI + : pattern-via-expansion-list-subdir + : + mkdir baz; + touch baz/foo.txt baz/bar.hxx; + $* <<EOI >'baz/bar.hxx baz/foo.txt' + pats = '*.hxx' '*.txt' + print baz/{+{$pats}} + EOI + : pattern-via-expansion-type : touch foo.txt; |