@@ -8,29 +8,37 @@ STACK_WORK ?= .stack-work
8VERBOSITY ?= warn
8VERBOSITY ?= warn
10CABAL_FILE := $(PROJECT_NAME).cabal
10CABAL_FILE := $(PROJECT_NAME).cabal
11+DOC_TEST := $(DIST)/build/doc-test/doc-test
11GHCID := $(BIN)/ghcid
12GHCID := $(BIN)/ghcid
12STACK_FLAGS := --verbosity $(VERBOSITY)
13STACK_FLAGS := --verbosity $(VERBOSITY)
14−.DEFAULT_GOAL := build
15+.DEFAULT_GOAL := $(EMPTY)/build
16$(BIN) $(DIST) $(EMPTY):
17$(BIN) $(DIST) $(EMPTY):
17 mkdir -p $@
18 mkdir -p $@
19−$(EMPTY)/stack-setup: | $(EMPTY)
20− $(STACK) $(STACK_FLAGS) setup
23−$(GHCID): $(EMPTY)/stack-setup | $(BIN)
24− $(STACK) $(STACK_FLAGS) install ghcid --local-bin-path $(BIN)
26$(CABAL_FILE): package.yaml
20$(CABAL_FILE): package.yaml
27 # `stack` has no way to run `hpack` directly.
21 # `stack` has no way to run `hpack` directly.
28 # We can run `hpack` indirectly with little overhead.
22 # We can run `hpack` indirectly with little overhead.
29 $(STACK) $(STACK_FLAGS) build --dry-run
23 $(STACK) $(STACK_FLAGS) build --dry-run
31−.PHONY: build
25+$(DOC_TEST): $(EMPTY)/build golden/**/*.json
32−build: $(EMPTY)/stack-setup
28+$(EMPTY)/build: $(EMPTY)/stack-setup README.md Setup.hs package.yaml stack.yaml src/**/*.hs test/**/*.hs | $(DIST)
33 $(STACK) $(STACK_FLAGS) build --no-run-tests --test
29 $(STACK) $(STACK_FLAGS) build --no-run-tests --test
30+ cp -R $$($(STACK) $(STACK_FLAGS) path --dist-dir)/build $(DIST)/build
33+$(EMPTY)/doc-test: $(EMPTY)/build
36+$(EMPTY)/stack-setup: | $(EMPTY)
37+ $(STACK) $(STACK_FLAGS) setup
40+$(GHCID): $(EMPTY)/stack-setup | $(BIN)
41+ $(STACK) $(STACK_FLAGS) install ghcid --local-bin-path $(BIN)
35.PHONY: cabal-check
43.PHONY: cabal-check
36cabal-check: $(CABAL_FILE)
44cabal-check: $(CABAL_FILE)
@@ -49,8 +57,7 @@ sdist: cabal-check | $(DIST)
49 $(CABAL) sdist
57 $(CABAL) sdist
51.PHONY: test
59.PHONY: test
52−test: build
60+test: $(DOC_TEST)
53− $(STACK) $(STACK_FLAGS) test
55.PHONY: upload-hackage
62.PHONY: upload-hackage
56upload-hackage: sdist
63upload-hackage: sdist