{
  "information_for_contributors": [
    "This file has been converted from https://github.com/fadeevab/make.tmbundle/blob/master/Syntaxes/Makefile.plist",
    "If you want to provide a fix or improvement, please create a pull request against the original repository.",
    "Once accepted there, we are happy to receive an update request."
  ],
  "version": "https://github.com/fadeevab/make.tmbundle/commit/1d4c0b541959995db098df751ffc129da39a294b",
  "name": "make",
  "scopeName": "source.makefile",
  "patterns": [
    {
      "include": "#comment"
    },
    {
      "include": "#variables"
    },
    {
      "include": "#variable-assignment"
    },
    {
      "include": "#directives"
    },
    {
      "include": "#recipe"
    },
    {
      "include": "#target"
    }
  ],
  "repository": {
    "comma": {
      "match": ",",
      "name": "punctuation.separator.delimeter.comma.makefile"
    },
    "comment": {
      "begin": "(^[ ]+)?((?<!\\\\)(\\\\\\\\)*)(?=#)",
      "beginCaptures": {
        "1": {
          "name": "punctuation.whitespace.comment.leading.makefile"
        }
      },
      "end": "(?!\\G)",
      "patterns": [
        {
          "begin": "#",
          "beginCaptures": {
            "0": {
              "name": "punctuation.definition.comment.makefile"
            }
          },
          "end": "(?=[^\\\\])$",
          "name": "comment.line.number-sign.makefile",
          "patterns": [
            {
              "match": "\\\\\\n",
              "name": "constant.character.escape.continuation.makefile"
            }
          ]
        }
      ]
    },
    "directives": {
      "patterns": [
        {
          "begin": "^[ ]*([s\\-]?include)\\b",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.include.makefile"
            }
          },
          "end": "^",
          "patterns": [
            {
              "include": "#comment"
            },
            {
              "include": "#variables"
            },
            {
              "match": "%",
              "name": "constant.other.placeholder.makefile"
            }
          ]
        },
        {
          "begin": "^[ ]*(vpath)\\b",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.vpath.makefile"
            }
          },
          "end": "^",
          "patterns": [
            {
              "include": "#comment"
            },
            {
              "include": "#variables"
            },
            {
              "match": "%",
              "name": "constant.other.placeholder.makefile"
            }
          ]
        },
        {
          "begin": "^\\s*(?:(override)\\s*)?(define)\\s*([^\\s]+)\\s*(=|\\?=|:=|\\+=)?(?=\\s)",
          "captures": {
            "1": {
              "name": "keyword.control.override.makefile"
            },
            "2": {
              "name": "keyword.control.define.makefile"
            },
            "3": {
              "name": "variable.other.makefile"
            },
            "4": {
              "name": "punctuation.separator.key-value.makefile"
            }
          },
          "end": "^\\s*(endef)\\b",
          "name": "meta.scope.conditional.makefile",
          "patterns": [
            {
              "begin": "\\G(?!\\n)",
              "end": "^",
              "patterns": [
                {
                  "include": "#comment"
                }
              ]
            },
            {
              "include": "#variables"
            },
            {
              "include": "#directives"
            }
          ]
        },
        {
          "begin": "^[ ]*(export)\\b",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.$1.makefile"
            }
          },
          "end": "^",
          "patterns": [
            {
              "include": "#comment"
            },
            {
              "include": "#variable-assignment"
            },
            {
              "match": "[^\\s]+",
              "name": "variable.other.makefile"
            }
          ]
        },
        {
          "begin": "^[ ]*(override|private)\\b",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.$1.makefile"
            }
          },
          "end": "^",
          "patterns": [
            {
              "include": "#comment"
            },
            {
              "include": "#variable-assignment"
            }
          ]
        },
        {
          "begin": "^[ ]*(unexport|undefine)\\b",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.$1.makefile"
            }
          },
          "end": "^",
          "patterns": [
            {
              "include": "#comment"
            },
            {
              "match": "[^\\s]+",
              "name": "variable.other.makefile"
            }
          ]
        },
        {
          "begin": "^\\s*(ifeq|ifneq|ifdef|ifndef)(?=\\s)",
          "captures": {
            "1": {
              "name": "keyword.control.$1.makefile"
            }
          },
          "end": "^\\s*(endif)\\b",
          "name": "meta.scope.conditional.makefile",
          "patterns": [
            {
              "begin": "\\G",
              "end": "^",
              "name": "meta.scope.condition.makefile",
              "patterns": [
                {
                  "include": "#comma"
                },
                {
                  "include": "#variables"
                },
                {
                  "include": "#comment"
                }
              ]
            },
            {
              "begin": "^\\s*else(?=\\s)\\s*(ifeq|ifneq|ifdef|ifndef)*(?=\\s)",
              "beginCaptures": {
                "0": {
                  "name": "keyword.control.else.makefile"
                }
              },
              "end": "^",
              "patterns": [
                {
                  "include": "#comma"
                },
                {
                  "include": "#variables"
                },
                {
                  "include": "#comment"
                }
              ]
            },
            {
              "include": "$self"
            }
          ]
        }
      ]
    },
    "target": {
      "begin": "^(?!\\t)([^:]*)(:)(?!\\=)",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "captures": {
                "1": {
                  "name": "support.function.target.$1.makefile"
                }
              },
              "match": "^\\s*(\\.(PHONY|SUFFIXES|DEFAULT|PRECIOUS|INTERMEDIATE|SECONDARY|SECONDEXPANSION|DELETE_ON_ERROR|IGNORE|LOW_RESOLUTION_TIME|SILENT|EXPORT_ALL_VARIABLES|NOTPARALLEL|ONESHELL|POSIX))\\s*$"
            },
            {
              "begin": "(?=\\S)",
              "end": "(?=\\s|$)",
              "name": "entity.name.function.target.makefile",
              "patterns": [
                {
                  "include": "#variables"
                },
                {
                  "match": "%",
                  "name": "constant.other.placeholder.makefile"
                }
              ]
            }
          ]
        },
        "2": {
          "name": "punctuation.separator.key-value.makefile"
        }
      },
      "end": "[^\\\\]$",
      "name": "meta.scope.target.makefile",
      "patterns": [
        {
          "begin": "\\G",
          "end": "(?=[^\\\\])$",
          "name": "meta.scope.prerequisites.makefile",
          "patterns": [
            {
              "match": "\\\\\\n",
              "name": "constant.character.escape.continuation.makefile"
            },
            {
              "match": "%|\\*",
              "name": "constant.other.placeholder.makefile"
            },
            {
              "include": "#comment"
            },
            {
              "include": "#variables"
            }
          ]
        }
      ]
    },
    "recipe": {
      "begin": "^\\t([+\\-@]*)",
      "beginCaptures": {
        "1": {
          "name": "keyword.control.$1.makefile"
        }
      },
      "end": "[^\\\\]$",
      "name": "meta.scope.recipe.makefile",
      "patterns": [
        {
          "match": "\\\\\\n",
          "name": "constant.character.escape.continuation.makefile"
        },
        {
          "include": "#variables"
        }
      ]
    },
    "variable-assignment": {
      "begin": "(^[ ]*|\\G\\s*)([^\\s:#=]+)\\s*((?<![?:+!])=|\\?=|:=|\\+=|!=)",
      "beginCaptures": {
        "2": {
          "name": "variable.other.makefile",
          "patterns": [
            {
              "include": "#variables"
            }
          ]
        },
        "3": {
          "name": "punctuation.separator.key-value.makefile"
        }
      },
      "end": "\\n",
      "patterns": [
        {
          "match": "\\\\\\n",
          "name": "constant.character.escape.continuation.makefile"
        },
        {
          "include": "#comment"
        },
        {
          "include": "#variables"
        }
      ]
    },
    "interpolation": {
      "patterns": [
        {
          "include": "#parentheses-interpolation"
        },
        {
          "include": "#braces-interpolation"
        }
      ]
    },
    "parentheses-interpolation": {
      "begin": "\\(",
      "end": "\\)",
      "patterns": [
        {
          "include": "#variables"
        },
        {
          "include": "#interpolation"
        }
      ]
    },
    "braces-interpolation": {
      "begin": "{",
      "end": "}",
      "patterns": [
        {
          "include": "#variables"
        },
        {
          "include": "#interpolation"
        }
      ]
    },
    "variables": {
      "patterns": [
        {
          "include": "#simple-variable"
        },
        {
          "include": "#variable-parentheses"
        },
        {
          "include": "#variable-braces"
        }
      ]
    },
    "simple-variable": {
      "patterns": [
        {
          "match": "\\$[^(){}]",
          "name": "variable.language.makefile"
        }
      ]
    },
    "variable-parentheses": {
      "patterns": [
        {
          "begin": "\\$\\(",
          "captures": {
            "0": {
              "name": "punctuation.definition.variable.makefile"
            }
          },
          "end": "\\)|((?<!\\\\)\\n)",
          "name": "string.interpolated.makefile",
          "patterns": [
            {
              "include": "#variables"
            },
            {
              "include": "#builtin-variable-parentheses"
            },
            {
              "include": "#function-variable-parentheses"
            },
            {
              "include": "#flavor-variable-parentheses"
            },
            {
              "include": "#another-variable-parentheses"
            }
          ]
        }
      ]
    },
    "variable-braces": {
      "patterns": [
        {
          "begin": "\\${",
          "captures": {
            "0": {
              "name": "punctuation.definition.variable.makefile"
            }
          },
          "end": "}|((?<!\\\\)\\n)",
          "name": "string.interpolated.makefile",
          "patterns": [
            {
              "include": "#variables"
            },
            {
              "include": "#builtin-variable-braces"
            },
            {
              "include": "#function-variable-braces"
            },
            {
              "include": "#flavor-variable-braces"
            },
            {
              "include": "#another-variable-braces"
            }
          ]
        }
      ]
    },
    "builtin-variable-parentheses": {
      "patterns": [
        {
          "match": "(?<=\\()(MAKEFILES|VPATH|SHELL|MAKESHELL|MAKE|MAKELEVEL|MAKEFLAGS|MAKECMDGOALS|CURDIR|SUFFIXES|\\.LIBPATTERNS)(?=\\s*\\))",
          "name": "variable.language.makefile"
        }
      ]
    },
    "builtin-variable-braces": {
      "patterns": [
        {
          "match": "(?<={)(MAKEFILES|VPATH|SHELL|MAKESHELL|MAKE|MAKELEVEL|MAKEFLAGS|MAKECMDGOALS|CURDIR|SUFFIXES|\\.LIBPATTERNS)(?=\\s*})",
          "name": "variable.language.makefile"
        }
      ]
    },
    "function-variable-parentheses": {
      "patterns": [
        {
          "begin": "(?<=\\()(subst|patsubst|strip|findstring|filter(-out)?|sort|word(list)?|firstword|lastword|dir|notdir|suffix|basename|addsuffix|addprefix|join|wildcard|realpath|abspath|info|error|warning|shell|foreach|if|or|and|call|eval|value|file|guile)\\s",
          "beginCaptures": {
            "1": {
              "name": "support.function.$1.makefile"
            }
          },
          "end": "(?=\\)|((?<!\\\\)\\n))",
          "name": "meta.scope.function-call.makefile",
          "patterns": [
            {
              "include": "#comma"
            },
            {
              "include": "#variables"
            },
            {
              "include": "#interpolation"
            },
            {
              "match": "%|\\*",
              "name": "constant.other.placeholder.makefile"
            },
            {
              "match": "\\\\\\n",
              "name": "constant.character.escape.continuation.makefile"
            }
          ]
        }
      ]
    },
    "function-variable-braces": {
      "patterns": [
        {
          "begin": "(?<={)(subst|patsubst|strip|findstring|filter(-out)?|sort|word(list)?|firstword|lastword|dir|notdir|suffix|basename|addsuffix|addprefix|join|wildcard|realpath|abspath|info|error|warning|shell|foreach|if|or|and|call|eval|value|file|guile)\\s",
          "beginCaptures": {
            "1": {
              "name": "support.function.$1.makefile"
            }
          },
          "end": "(?=}|((?<!\\\\)\\n))",
          "name": "meta.scope.function-call.makefile",
          "patterns": [
            {
              "include": "#comma"
            },
            {
              "include": "#variables"
            },
            {
              "include": "#interpolation"
            },
            {
              "match": "%|\\*",
              "name": "constant.other.placeholder.makefile"
            },
            {
              "match": "\\\\\\n",
              "name": "constant.character.escape.continuation.makefile"
            }
          ]
        }
      ]
    },
    "flavor-variable-parentheses": {
      "patterns": [
        {
          "begin": "(?<=\\()(origin|flavor)\\s(?=[^\\s)]+\\s*\\))",
          "contentName": "variable.other.makefile",
          "beginCaptures": {
            "1": {
              "name": "support.function.$1.makefile"
            }
          },
          "end": "(?=\\))",
          "name": "meta.scope.function-call.makefile",
          "patterns": [
            {
              "include": "#variables"
            }
          ]
        }
      ]
    },
    "flavor-variable-braces": {
      "patterns": [
        {
          "begin": "(?<={)(origin|flavor)\\s(?=[^\\s}]+\\s*})",
          "contentName": "variable.other.makefile",
          "beginCaptures": {
            "1": {
              "name": "support.function.$1.makefile"
            }
          },
          "end": "(?=})",
          "name": "meta.scope.function-call.makefile",
          "patterns": [
            {
              "include": "#variables"
            }
          ]
        }
      ]
    },
    "another-variable-parentheses": {
      "patterns": [
        {
          "begin": "(?<=\\()(?!\\))",
          "end": "(?=\\)|((?<!\\\\)\\n))",
          "name": "variable.other.makefile",
          "patterns": [
            {
              "include": "#variables"
            },
            {
              "match": "\\\\\\n",
              "name": "constant.character.escape.continuation.makefile"
            }
          ]
        }
      ]
    },
    "another-variable-braces": {
      "patterns": [
        {
          "begin": "(?<={)(?!})",
          "end": "(?=}|((?<!\\\\)\\n))",
          "name": "variable.other.makefile",
          "patterns": [
            {
              "include": "#variables"
            },
            {
              "match": "\\\\\\n",
              "name": "constant.character.escape.continuation.makefile"
            }
          ]
        }
      ]
    }
  }
}
