@@ -0,0 +1,73 @@
1+BIN ?= bin
2+CABAL ?= cabal
3+DIST ?= dist
4+EMPTY ?= .make
5+PROJECT_NAME ?= rollbar-hs
6+STACK ?= stack
7+STACK_WORK ?= .stack-work
8+VERBOSITY ?= warn
9+
10+CABAL_FILE := $(PROJECT_NAME).cabal
11+DOC_TEST := $(DIST)/build/doc-test/doc-test
12+GHCID := $(BIN)/ghcid
13+STACK_FLAGS := --verbosity $(VERBOSITY)
14+
15+.DEFAULT_GOAL := build
16+
17+$(BIN) $(DIST) $(EMPTY):
18+ mkdir -p $@
19+
20+$(CABAL_FILE): package.yaml
21+ # `stack` has no way to run `hpack` directly.
22+ # We can run `hpack` indirectly with little overhead.
23+ $(STACK) $(STACK_FLAGS) build --dry-run
24+
25+$(DOC_TEST):
26+ rm -f $(EMPTY)/build
27+ $(MAKE) $(EMPTY)/build
28+
29+$(EMPTY)/build: $(EMPTY)/stack-setup README.md Setup.hs package.yaml stack.yaml src/**/*.hs test/**/*.hs | $(DIST)
30+ $(STACK) $(STACK_FLAGS) build --no-run-tests --test
31+ cp -R $$($(STACK) $(STACK_FLAGS) path --dist-dir)/build $(DIST)
32+ touch $@
33+
34+$(EMPTY)/stack-setup: | $(EMPTY)
35+ $(STACK) $(STACK_FLAGS) setup
36+ touch $@
37+
38+$(GHCID): $(EMPTY)/stack-setup | $(BIN)
39+ $(STACK) $(STACK_FLAGS) install ghcid --local-bin-path $(BIN)
40+
41+.PHONT: build
42+build: $(EMPTY)/build
43+
44+.PHONY: cabal-check
45+cabal-check: $(CABAL_FILE)
46+ $(CABAL) check
47+
48+.PHONY: clean
49+clean:
50+ rm -f $(CABAL_FILE)
51+ rm -fr $(BIN)
52+ rm -fr $(DIST)
53+ rm -fr $(EMPTY)
54+ rm -fr $(STACK_WORK)
55+
56+.PHONY: sdist
57+sdist: cabal-check | $(DIST)
58+ $(CABAL) sdist
59+
60+.PHONY: test
61+test: $(EMPTY)/build test-doc-test
62+
63+.PHONY: test-doc-test
64+test-doc-test: $(DOC_TEST)
65+ $<
66+
67+.PHONY: upload-hackage
68+upload-hackage: sdist
69+ @ $(CABAL) upload $(DIST)/$(PROJECT_NAME)-*.tar.gz
70+
71+.PHONY: watch
72+watch: $(GHCID)
73+ $(GHCID)