Skip to content
Haskell Makefile parser
Haskell Makefile Nix Shell
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
nix
script
src
test-data
.gitignore
LICENSE
README.md
Setup.hs
default.nix
makefile.cabal
shell.nix

README.md

CircleCI

Haskell Makefile Parser and Generator

Parse and generate Makefiles. The project is available on hackage (latest).

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. Commit the updated makefile.cabal file with commit name Release v1.MAJOR.MINOR.PATCH, as well as the updated documentation.
  2. Tag the commit with git tag v1.MAJOR.MINOR.PATCH.
  3. Run stack upload --pvp-bounds both . to upload makefile to hackage.
  4. Push with git push --follow-tags.
You can’t perform that action at this time.