HaskellPackages := \ hjugement \ hjugement-protocol \ hjugement-cli PureScriptPackages := \ hjugement-web Packages := $(HaskellPackages) $(PureScriptPackages) hjugement-protocol/test: TEST_FLAGS:= HS = $(shell find $(HaskellPackages) -name '*.hs' -not -name 'HLint.hs') cabal := $(shell find . -name '*.cabal' -print -quit) QUICKCHECK_TESTS = 1000 QUICKCHECK_MAXSIZE = 100 TEST_FLAGS = --quickcheck-tests $(QUICKCHECK_TESTS) --quickcheck-max-size $(QUICKCHECK_MAXSIZE) BENCH_HTML_FLAGS = --output benchmarks/html/$(shell sed -ne 's/^version: *\(.*\)/\1/p' $*/$(notdir $*).cabal).html all: build build: $(HaskellPackages:=/build) %/build: %/stack.yaml cd $* && stack $(STACK_FLAGS) build $(STACK_BUILD_FLAGS) %/build: %/spago.dhall cd $* && yarn $(YARN_FLAGS) spago $(SPAGO_FLAGS) build $(SPAGO_BUILD_FLAGS) .PHONY: $(Packages) $(foreach p,$(Packages),$(eval $p: $p/build)) test: $(Packages:=/test) %/test: %/stack.yaml ! grep -iq '^Test-Suite\>' $*/$(notdir $*).cabal || \ { cd $* && stack $(STACK_FLAGS) test --test-arguments "$(TEST_FLAGS)" $(STACK_TEST_FLAGS); } %/test: %/spago.dhall ! grep -iq '\&1 stack ide targets | grep -v :test:) \ --ghci-options=-fobject-code" \ --test $(GHCID_TEST) \ $(GHCID_FLAGS) bench: $(HaskellPackages:=/bench) %/bench: %/stack.yaml mkdir -p $*/benchmarks/html ! grep -iq '^Benchmark\>' $*/$(notdir $*).cabal || \ { cd $* && stack $(STACK_FLAGS) bench \ --benchmark-arguments "$(BENCH_HTML_FLAGS) $(BENCH_FLAGS)" \ $(STACK_BENCH_FLAGS); } clean: $(Packages:=/clean) cleaner: $(Packages:=/cleaner) %/clean: cd $* && stack $(STACK_FLAGS) clean $(STACK_CLEAN_FLAGS) %/cleaner: cd $* && stack $(STACK_FLAGS) clean --full $(STACK_CLEAN_FLAGS) %/quickcheck: override QUICKCHECK_TESTS=10000 %/quickcheck: override QUICKCHECK_MAXSIZE=1000 %/quickcheck: % %/fast: override STACK_BUILD_FLAGS+=--fast %/fast: override STACK_HADDOCK_FLAGS+=--fast %/fast: override STACK_TEST_FLAGS+=--fast %/fast: override QUICKCHECK_TESTS=100 %/fast: override QUICKCHECK_MAXSIZE=100 %/fast: % %/debug: override STACK_BUILD_FLAGS+=--flag $(cabal:.cabal=):debug %/debug: override STACK_TEST_FLAGS+=--flag $(cabal:.cabal=):debug %/debug: % %/accept: override STACK_TEST_ARGS+=--accept %/accept: % doc: $(HaskellPackages:=/doc) %/doc: %/stack.yaml cd $* && stack $(STACK_FLAGS) haddock $(STACK_HADDOCK_FLAGS) %/doc: %/spago.yaml cd $* && yarn $(YARN_FLAGS) spago $(SPAGO_FLAGS) docs $(SPAGO_DOCS_FLAGS) %.html: %.md markdown $*.md >$*.html %.html/view: %.html sensible-browser $*.html HLint.hs: $(HS) sed -i -e '/^-- BEGIN: generated hints/,/^-- END: Generated by hlint/d' HLint.hs echo '-- BEGIN: generated hints' >> HLint.hs hlint $(foreach p,$(HaskellPackages),--find $p) | sed -ne 's/^- infix: \(.*\)/\1/p' | sort -u >>HLint.hs echo '-- END: generated hints' >> HLint.hs lint: $(HaskellPackages:=/lint) $(HS) %/lint: HLint.hs cd $* && if hlint --quiet --report=hlint.html -XNoCPP \ $(shell cabal-cargs --format=ghc --only=default_extensions --sourcefile=$*) $(HLINT_FLAGS) .; \ then rm -f hlint.html; \ else sensible-browser ./hlint.html & fi tag: $(Packages:=/tag) %/tag: %/stack.yaml cabal=$*/$*.cabal; \ name=$$(sed -ne 's/^name: *\(.*\)/\1/p' "$$cabal"); \ version=$$(sed -ne 's/^version: *\(.*\)/\1/p' "$$cabal"); \ git tag --merged | grep -Fqx "$$name-$$version" || \ git tag -f -s -m "$$name v$$version" $$name-$$version tar: $(Packages:=/tar) %/tar: %/stack.yaml cd $* && stack $(STACK_FLAGS) sdist $(STACK_SDIST_FLAGS) upload: $(Packages:=/upload) %/upload: %/stack.yaml cd $* && LANG=C stack $(STACK_FLAGS) upload $(STACK_UPLOAD_FLAGS) . .PHONY: stats stats: gitstats . $@ stats/view: stats sensible-browser stats/index.html