Haskell Makefile Shell
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
docs
script
src
test-data
.gitignore
.travis-setup.sh
.travis.yml
LICENSE
README.md
Setup.hs
makefile.cabal
stack.yaml

README.md

Build Status

Haskell Makefile Parser and Generator

Simple Haskell Makefile parser and generator. The project is available on hackage (latest) and documentation for master can be found here.

Example

Parsing

# Define compiler
CC:=gcc

# Define lazy compiler
LC=ghc

all: hello

hello: foo bar
	$(CC) baz.o

Running parseMakefile :: IO (Either String Makefile) (pretty-printed for convenience):

Right
    ( Makefile
        { entries =
            [ Assignment SimpleAssign "CC" "gcc"
            , Assignment RecursiveAssign "LC" "ghc"
            , Rule
                (Target "all")
                [Dependency "hello"]
                []
            , Rule
                (Target "hello")
                [ Dependency "foo"
                , Dependency "bar"
                ]
                [Command "$(CC) baz.o"]
            ]
        }
    )

Generating

myMakefile :: Makefile
myMakefile =
    Makefile
        { entries =
            [ Assignment SimpleAssign "foo" "bar"
            , Rule (Target "baz") [Dependency "qux"] [Command "rm -rf /"]
            ]
        }

Running encodeMakefile :: Makefile -> Text:

foo:=bar
baz: qux
	rm -rf /

Release checklist

  1. Make sure you're on (latest) master.

  2. Bump the version in makefile.cabal: 0.MAJOR.MINOR.PATCH.

Given a version number MAJOR.MINOR.PATCH, increment the:

MAJOR version when you make incompatible API changes, MINOR version when you add functionality in a backwards-compatible manner, and PATCH version when you make backwards-compatible bug fixes.

  1. Run the script script/make-doc.
  2. Commit the updated makefile.cabal file with commit name Release v1.MAJOR.MINOR.PATCH, as well as the updated documentation.
  3. Tag the commit with git tag v1.MAJOR.MINOR.PATCH.
  4. Run stack upload --pvp-bounds both . to upload makefile to hackage.
  5. Push with git push --follow-tags.