@@ -1,52 +1,64 @@
1+BIN ?= bin
12CABAL ?= cabal
2−CABAL_FLAGS ?=
3−CABAL_BUILD_FLAGS ?=
43DIST ?= dist
5−GHCID ?= ghcid
6−GHCID_FLAGS ?= --ghc-options=-fno-code
7−HPACK ?= hpack
8−NIX_SHELL ?= nix-shell
9−NIX_SHELL_FLAGS ?=
10−PROJECT_NAME := rollbar-hs
4+EMPTY ?= .make
5+PROJECT_NAME ?= rollbar-hs
6+STACK ?= stack
7+STACK_WORK ?= .stack-work
8+VERBOSITY ?= warn
119
1210CABAL_FILE := $(PROJECT_NAME).cabal
13−CONFIGURE := $(DIST)/setup-config
1411DOC_TEST := $(DIST)/build/doc-test/doc-test
12+GHCID := $(BIN)/ghcid
13+STACK_FLAGS := --verbosity $(VERBOSITY)
1514
1615.DEFAULT_GOAL := build
1716
17+$(BIN) $(DIST) $(EMPTY):
18+ mkdir -p $@
19+
1820$(CABAL_FILE): package.yaml
19− $(HPACK)
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 $@
2033
21−$(CONFIGURE): $(CABAL_FILE)
22− $(CABAL) $(CABAL_FLAGS) configure --enable-tests
34+$(EMPTY)/stack-setup: | $(EMPTY)
35+ $(STACK) $(STACK_FLAGS) setup
36+ touch $@
2337
24−.PHONY: build
25−build $(DOC_TEST): $(CONFIGURE) default.nix
26− $(CABAL) $(CABAL_FLAGS) build $(CABAL_BUILD_FLAGS)
38+$(GHCID): $(EMPTY)/stack-setup | $(BIN)
39+ $(STACK) $(STACK_FLAGS) install ghcid --local-bin-path $(BIN)
2740
28−.PHONY: check
29−check: $(CABAL_FILE)
30− $(CABAL) $(CABAL_FLAGS) check
41+.PHONT: build
42+build: $(EMPTY)/build
43+
44+.PHONY: cabal-check
45+cabal-check: $(CABAL_FILE)
46+ $(CABAL) check
3147
3248.PHONY: clean
3349clean:
3450 rm -f $(CABAL_FILE)
51+ rm -fr $(BIN)
3552 rm -fr $(DIST)
36−
37−default.nix: $(CABAL_FILE)
38− cabal2nix . > $@
53+ rm -fr $(EMPTY)
54+ rm -fr $(STACK_WORK)
3955
4056.PHONY: sdist
41−sdist: check
42− $(CABAL) $(CABAL_FLAGS) sdist
43−
44−.PHONY: shell
45−shell:
46− $(NIX_SHELL) --pure $(NIX_SHELL_FLAGS)
57+sdist: cabal-check | $(DIST)
58+ $(CABAL) sdist
4759
4860.PHONY: test
49−test: test-doc-test
61+test: $(EMPTY)/build test-doc-test
5062
5163.PHONY: test-doc-test
5264test-doc-test: $(DOC_TEST)
@@ -54,8 +66,8 @@ test-doc-test: $(DOC_TEST)
5466
5567.PHONY: upload-hackage
5668upload-hackage: sdist
57− @ $(CABAL) $(CABAL_FLAGS) upload $(DIST)/$(PROJECT_NAME)-*.tar.gz
69+ @ $(CABAL) upload $(DIST)/$(PROJECT_NAME)-*.tar.gz
5870
5971.PHONY: watch
60−watch: $(CONFIGURE)
61− $(GHCID) --command "cabal repl lib:$(PROJECT_NAME) $(GHCID_FLAGS)"
72+watch: $(GHCID)
73+ $(GHCID)