@@ -1,64 +1,52 @@
1−BIN ?= bin
21CABAL ?= cabal
2+CABAL_FLAGS ?=
3+CABAL_BUILD_FLAGS ?=
34DIST ?= dist
4−EMPTY ?= .make
5−PROJECT_NAME ?= rollbar-hs
6−STACK ?= stack
7−STACK_WORK ?= .stack-work
8−VERBOSITY ?= warn
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
911
1012CABAL_FILE := $(PROJECT_NAME).cabal
13+CONFIGURE := $(DIST)/setup-config
1114DOC_TEST := $(DIST)/build/doc-test/doc-test
12−GHCID := $(BIN)/ghcid
13−STACK_FLAGS := --verbosity $(VERBOSITY)
1415
1516.DEFAULT_GOAL := build
1617
17−$(BIN) $(DIST) $(EMPTY):
18− mkdir -p $@
19−
2018$(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 $@
19+ $(HPACK)
3320
34−$(EMPTY)/stack-setup: | $(EMPTY)
35− $(STACK) $(STACK_FLAGS) setup
36− touch $@
21+$(CONFIGURE): $(CABAL_FILE)
22+ $(CABAL) $(CABAL_FLAGS) configure --enable-tests
3723
38−$(GHCID): $(EMPTY)/stack-setup | $(BIN)
39− $(STACK) $(STACK_FLAGS) install ghcid --local-bin-path $(BIN)
24+.PHONY: build
25+build $(DOC_TEST): $(CONFIGURE) default.nix
26+ $(CABAL) $(CABAL_FLAGS) build $(CABAL_BUILD_FLAGS)
4027
41−.PHONT: build
42−build: $(EMPTY)/build
43−
44−.PHONY: cabal-check
45−cabal-check: $(CABAL_FILE)
46− $(CABAL) check
28+.PHONY: check
29+check: $(CABAL_FILE)
30+ $(CABAL) $(CABAL_FLAGS) check
4731
4832.PHONY: clean
4933clean:
5034 rm -f $(CABAL_FILE)
51− rm -fr $(BIN)
5235 rm -fr $(DIST)
53− rm -fr $(EMPTY)
54− rm -fr $(STACK_WORK)
36+
37+default.nix: $(CABAL_FILE)
38+ cabal2nix . > $@
5539
5640.PHONY: sdist
57−sdist: cabal-check | $(DIST)
58− $(CABAL) sdist
41+sdist: check
42+ $(CABAL) $(CABAL_FLAGS) sdist
43+
44+.PHONY: shell
45+shell:
46+ $(NIX_SHELL) --pure $(NIX_SHELL_FLAGS)
5947
6048.PHONY: test
61−test: $(EMPTY)/build test-doc-test
49+test: test-doc-test
6250
6351.PHONY: test-doc-test
6452test-doc-test: $(DOC_TEST)
@@ -66,8 +54,8 @@ test-doc-test: $(DOC_TEST)
6654
6755.PHONY: upload-hackage
6856upload-hackage: sdist
69− @ $(CABAL) upload $(DIST)/$(PROJECT_NAME)-*.tar.gz
57+ @ $(CABAL) $(CABAL_FLAGS) upload $(DIST)/$(PROJECT_NAME)-*.tar.gz
7058
7159.PHONY: watch
72−watch: $(GHCID)
73− $(GHCID)
60+watch: $(CONFIGURE)
61+ $(GHCID) --command "cabal repl lib:$(PROJECT_NAME) $(GHCID_FLAGS)"