makefile-1.0.0.0: Simple Makefile parser and generator

Safe HaskellNone
LanguageHaskell2010

Data.Makefile.Parse

Synopsis

Documentation

parseMakefile :: IO (Either String Makefile) Source #

Parse makefile.

Tries to open and parse a file name Makefile in the current directory.

parseAsMakefile :: FilePath -> IO (Either String Makefile) Source #

Parse the specified file as a makefile.

makefile :: Parser Makefile Source #

Parser for a makefile

entry :: Parser Entry Source #

Parser for a makefile entry (either a rule or a variable assignment)

assignment :: Parser Entry Source #

Parser of variable assignment (see Assignment). Note that leading and trailing whitespaces will be stripped both from the variable name and assigned value.

Note that this tries to follow GNU make's (crazy) behavior when it comes to variable names and assignment operators.

>>> Atto.parseOnly assignment "foo = bar "
Right (Assignment RecursiveAssign "foo" "bar")
>>> Atto.parseOnly assignment "foo := bar "
Right (Assignment SimpleAssign "foo" "bar")
>>> Atto.parseOnly assignment "foo ::= bar "
Right (Assignment SimplePosixAssign "foo" "bar")
>>> Atto.parseOnly assignment "foo?= bar "
Right (Assignment ConditionalAssign "foo" "bar")
>>> Atto.parseOnly assignment "foo??= bar "
Right (Assignment ConditionalAssign "foo?" "bar")
>>> Atto.parseOnly assignment "foo!?!= bar "
Right (Assignment ShellAssign "foo!?" "bar")

rule :: Parser Entry Source #

Parser for an entire rule

command :: Parser Command Source #

Parser for a command

target :: Parser Target Source #

Parser for a (rule) target

dependency :: Parser Dependency Source #

Parser for a (rule) dependency

lazyVar :: Parser Text Source #

Parser for variable name in declaration (lazy set, var = x)

>>> Atto.parseOnly lazyVar "CFLAGS=-c -Wall"
Right "CFLAGS"

immVar :: Parser Text Source #

Parser for variable name in declaration (immediate set, var := x)

>>> Atto.parseOnly immVar "CFLAGS:=-c -Wall"
Right "CFLAGS"

comment :: Parser Text Source #

Parser for a comment (the comment starts with the hashtag)

>>> Atto.parseOnly comment "# I AM A COMMENT"
Right " I AM A COMMENT"