@@ -1,4 +1,9 @@
1+PROJECT_NAME := rollbar-hs
2+
13BIN := bin
4+CABAL := cabal
5+CABAL_FILE := $(PROJECT_NAME).cabal
6+DIST := dist
27EMPTY := .make
38GHCID := $(BIN)/ghcid
49STACK := stack
@@ -6,30 +11,55 @@ STACK_WORK := .stack-work
611
712.DEFAULT_GOAL := build
813
14+$(BIN):
15+ mkdir -p $@
16+
17+$(DIST):
18+ mkdir -p $@
19+
920$(EMPTY):
10− mkdir $@
21+ mkdir -p $@
1122
1223$(EMPTY)/stack-setup: | $(EMPTY)
1324 $(STACK) setup
1425 touch $@
1526
16−$(GHCID): $(EMPTY)/stack-setup
27+$(GHCID): $(EMPTY)/stack-setup | $(BIN)
1728 $(STACK) install ghcid --local-bin-path $(BIN)
1829
30+$(CABAL_FILE):
31+ # `stack` has no way to run `hpack` directly.
32+ # We can run `hpack` indirectly with little overhead.
33+ $(STACK) build --dry-run
34+
1935.PHONY: build
2036build: $(EMPTY)/stack-setup
2137 $(STACK) build --no-run-tests --test
2238
39+.PHONY: cabal-check
40+cabal-check: $(CABAL_FILE)
41+ $(CABAL) check
42+
2343.PHONY: clean
2444clean:
25− rm -f $(BIN)/*
26− rm -f $(EMPTY)/*
45+ rm -f $(CABAL_FILE)
46+ rm -fr $(BIN)
47+ rm -fr $(DIST)
48+ rm -fr $(EMPTY)
2749 rm -fr $(STACK_WORK)
2850
51+.PHONY: sdist
52+sdist: cabal-check | $(DIST)
53+ $(CABAL) sdist
54+
2955.PHONY: test
3056test: build
3157 $(STACK) test
3258
59+.PHONY: upload-hackage
60+upload-hackage: sdist
61+ @ $(CABAL) upload $(DIST)/$(PROJECT_NAME)-*.tar.gz
62+
3363.PHONY: watch
3464watch: $(GHCID)
3565 $(GHCID)