refactor makefile
This commit is contained in:
parent
ed98172d04
commit
14aacf206f
1 changed files with 59 additions and 26 deletions
85
Makefile
85
Makefile
|
|
@ -1,12 +1,31 @@
|
||||||
# This really ought to be `/usr/bin/env bash`, but nix flakes don't like that.
|
# This really ought to be `/usr/bin/env bash`, but nix flakes don't like that.
|
||||||
SHELL := /bin/sh
|
SHELL := /bin/sh
|
||||||
|
|
||||||
.PHONY: hoogle format haddock usage tag format_nix format_haskell format_check lint ps_bridge bench bench_check scripts
|
.PHONY: hoogle format haddock usage tag format_nix format_haskell format_check \
|
||||||
|
lint refactor ps_bridge bench bench_check scripts test build ci
|
||||||
|
|
||||||
AGORA_TARGETS := agora agora-bench agora-purescript-bridge agora-scripts agora-specs agora-test agora-testlib
|
SOURCE_FILES := $(shell git ls-tree -r HEAD --full-tree --name-only)
|
||||||
|
SOURCE_FILES := $(wildcard $(SOURCE_FILES))
|
||||||
|
HASKELL_SOURCES := $(filter %.hs,$(SOURCE_FILES))
|
||||||
|
CABAL_SOURCES := $(filter %.cabal,$(SOURCE_FILES))
|
||||||
|
NIX_SOURCES := $(filter %.nix,$(SOURCE_FILES))
|
||||||
|
FORMAT_EXTENSIONS := -o -XQuasiQuotes -o -XTemplateHaskell -o -XTypeApplications \
|
||||||
|
-o -XImportQualifiedPost -o -XPatternSynonyms -o -XOverloadedRecordDot
|
||||||
|
HLINT_EXTS := -XQuasiQuotes
|
||||||
|
|
||||||
|
THREADS ?= 8
|
||||||
|
PS_BRIDGE_OUTPUT_DIR ?= agora-purescript-bridge/
|
||||||
|
BENCH_OUTPUT ?= bench.csv
|
||||||
|
TEST_CASE_TIMEOUT ?= 100
|
||||||
|
|
||||||
usage:
|
usage:
|
||||||
@echo "usage: make <command> [OPTIONS]"
|
@echo "usage: [env [<variable>=<value> ...]] make <command> [OPTIONS]"
|
||||||
|
@echo
|
||||||
|
@echo "Available variables:"
|
||||||
|
@echo " THREADS -- The number of threads for building the project"
|
||||||
|
@echo " PS_BRIDGE_OUTPUT_DIR -- The output directory of the purescript bridge"
|
||||||
|
@echo " BENCH_OUTPUT -- The output file of the benchmark report"
|
||||||
|
@echo " TEST_CASE_TIMEOUT -- Timeout for individual tests. Default unit: s"
|
||||||
@echo
|
@echo
|
||||||
@echo "Available commands:"
|
@echo "Available commands:"
|
||||||
@echo " hoogle -- Start local hoogle"
|
@echo " hoogle -- Start local hoogle"
|
||||||
|
|
@ -21,8 +40,13 @@ usage:
|
||||||
@echo " bench -- Generate bench report bench.csv"
|
@echo " bench -- Generate bench report bench.csv"
|
||||||
@echo " bench_check -- Check if bench report is up-to-date"
|
@echo " bench_check -- Check if bench report is up-to-date"
|
||||||
@echo " scripts -- Run the agora script server (dev mode)"
|
@echo " scripts -- Run the agora script server (dev mode)"
|
||||||
|
@echo " ci -- Run all the CI checks"
|
||||||
|
|
||||||
hoogle:
|
requires_nix_shell:
|
||||||
|
@ [ "$(IN_NIX_SHELL)" ] || echo "The $(MAKECMDGOALS) target must be run from inside a nix shell"
|
||||||
|
@ [ "$(IN_NIX_SHELL)" ] || (echo " run 'nix develop' first" && false)
|
||||||
|
|
||||||
|
hoogle: requires_nix_shell
|
||||||
pkill hoogle || true
|
pkill hoogle || true
|
||||||
hoogle generate --local=haddock --database=hoo/local.hoo
|
hoogle generate --local=haddock --database=hoo/local.hoo
|
||||||
hoogle server --local -p 8081 >> /dev/null &
|
hoogle server --local -p 8081 >> /dev/null &
|
||||||
|
|
@ -30,39 +54,48 @@ hoogle:
|
||||||
|
|
||||||
format: format_haskell format_nix
|
format: format_haskell format_nix
|
||||||
|
|
||||||
format_nix:
|
format_nix: requires_nix_shell
|
||||||
git ls-tree -r HEAD --full-tree --name-only | grep -E '.*\.nix' | xargs nixpkgs-fmt
|
nixpkgs-fmt $(NIX_SOURCES)
|
||||||
|
|
||||||
FORMAT_EXTENSIONS := -o -XQuasiQuotes -o -XTemplateHaskell -o -XTypeApplications -o -XImportQualifiedPost -o -XPatternSynonyms -o -XOverloadedRecordDot
|
format_haskell: requires_nix_shell
|
||||||
format_haskell:
|
fourmolu $(FORMAT_EXTENSIONS) -m inplace $(HASKELL_SOURCES)
|
||||||
find -name '*.hs' -not -path './dist-*/*' | xargs fourmolu $(FORMAT_EXTENSIONS) -m inplace
|
cabal-fmt -i $(CABAL_SOURCES)
|
||||||
git ls-tree -r HEAD --full-tree --name-only | grep -E '.*\.cabal' | xargs cabal-fmt -i
|
|
||||||
|
|
||||||
format_check:
|
format_check: requires_nix_shell
|
||||||
find -name '*.hs' \
|
fourmolu $(FORMAT_EXTENSIONS) -m check $(HASKELL_SOURCES)
|
||||||
-not -path './dist*/*' \
|
nixpkgs-fmt --check $(NIX_SOURCES)
|
||||||
-not -path './haddock/*' \
|
cabal-fmt --check $(CABAL_SOURCES)
|
||||||
| xargs fourmolu $(FORMAT_EXTENSIONS) -m check
|
|
||||||
|
|
||||||
haddock:
|
haddock: requires_nix_shell
|
||||||
cabal haddock --haddock-html --haddock-hoogle --builddir=haddock
|
cabal haddock --haddock-html --haddock-hoogle --builddir=haddock
|
||||||
|
|
||||||
tag:
|
tag: requires_nix_shell
|
||||||
hasktags -x $(AGORA_TARGETS)
|
hasktags -x $(HASKELL_SOURCES)
|
||||||
|
|
||||||
lint:
|
lint: requires_nix_shell
|
||||||
hlint $(AGORA_TARGETS)
|
hlint $(HLINT_EXTS) $(HASKELL_SOURCES)
|
||||||
|
|
||||||
PS_BRIDGE_OUTPUT_DIR := agora-purescript-bridge/
|
refactor: requires_nix_shell
|
||||||
ps_bridge:
|
for src in $(HASKELL_SOURCES) ; do \
|
||||||
|
hlint $(HLINT_EXTS) --refactor --refactor-options='-i -s' $$src ;\
|
||||||
|
done
|
||||||
|
|
||||||
|
ps_bridge: requires_nix_shell
|
||||||
cabal run exe:agora-purescript-bridge -- -o $(PS_BRIDGE_OUTPUT_DIR)
|
cabal run exe:agora-purescript-bridge -- -o $(PS_BRIDGE_OUTPUT_DIR)
|
||||||
|
|
||||||
BENCH_OUTPUT = "bench.csv"
|
bench: requires_nix_shell
|
||||||
bench:
|
|
||||||
cabal run agora-bench -- -o $(BENCH_OUTPUT)
|
cabal run agora-bench -- -o $(BENCH_OUTPUT)
|
||||||
|
|
||||||
bench_check:
|
bench_check: requires_nix_shell
|
||||||
cabal -v0 new-run agora-bench | diff bench.csv -
|
cabal -v0 new-run agora-bench | diff bench.csv -
|
||||||
|
|
||||||
scripts:
|
scripts: requires_nix_shell
|
||||||
cabal run agora-scripts -- -c
|
cabal run agora-scripts -- -c
|
||||||
|
|
||||||
|
test: requires_nix_shell
|
||||||
|
cabal test --test-options="--hide-successes -t $(TEST_CASE_TIMEOUT) -j$(THREADS)"
|
||||||
|
|
||||||
|
build: requires_nix_shell
|
||||||
|
cabal build -j$(THREADS)
|
||||||
|
|
||||||
|
ci: format_check lint build bench_check test haddock
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue