summaryrefslogtreecommitdiff
path: root/androidmk
diff options
context:
space:
mode:
author Sasha Smundak <asmundak@google.com> 2020-11-17 22:58:55 -0800
committer Sasha Smundak <asmundak@google.com> 2020-11-17 23:18:14 -0800
commit9c35d8bfded90e4c3e0b211e73871f3ededf569c (patch)
treed5b4facf681ca1e3bab9a64a5f9bbe83bdaab525 /androidmk
parent9240f955cb790464173dbe282add6d7a92bf1e58 (diff)
Parse else ifxxx statement
More recent versions of make provide "else ifdef/ifndef/ifeq/ifneq" directive: ifdef FOO ... else ifdef BAR ... endif Fix the parser to handle it. It returns the same Directive as the respective ifxxx counterpart, only that the Name is set to "elifdef/elifndef/elifeq/elifneq". Test: treehugger Change-Id: I74c6a2c7224bce1dd3465012fa84880fae21349b
Diffstat (limited to 'androidmk')
-rw-r--r--androidmk/parser/parser.go15
1 files changed, 14 insertions, 1 deletions
diff --git a/androidmk/parser/parser.go b/androidmk/parser/parser.go
index 86dabf975..e61241b2d 100644
--- a/androidmk/parser/parser.go
+++ b/androidmk/parser/parser.go
@@ -212,8 +212,21 @@ func (p *parser) parseDirective() bool {
expression := SimpleMakeString("", pos)
switch d {
- case "endif", "endef", "else":
+ case "endif", "endef":
// Nothing
+ case "else":
+ p.ignoreSpaces()
+ if p.tok != '\n' {
+ d = p.scanner.TokenText()
+ p.accept(scanner.Ident)
+ if d == "ifdef" || d == "ifndef" || d == "ifeq" || d == "ifneq" {
+ d = "el" + d
+ p.ignoreSpaces()
+ expression = p.parseExpression()
+ } else {
+ p.errorf("expected ifdef/ifndef/ifeq/ifneq, found %s", d)
+ }
+ }
case "define":
expression, endPos = p.parseDefine()
default: