;just: cleanups

This commit is contained in:
Simon Michael 2023-12-24 09:43:54 -10:00
parent 8b45d4ba8c
commit bf54f84b2c

248
Justfile
View File

@ -81,47 +81,36 @@ set export := true
# ** Constants ------------------------------------------------------------ # ** Constants ------------------------------------------------------------
BROWSE := 'open'
# VIEWHTML := BROWSE
# VIEWPDF := BROWSE
# PRINT := 'lpr'
#GHC := 'ghc'
GHCI := 'ghci'
# GHCPKG := 'ghc-pkg'
# HADDOCK := 'haddock'
# CABAL := 'cabal'
# CABALINSTALL := 'cabal install -w {{ GHC }}'
# GHC-compiled executables require a locale (and not just C) or they # GHC-compiled executables require a locale (and not just C) or they
# will die on encountering non-ascii data. Set LANG to something if not already set. # will die on encountering non-ascii data. Set LANG to something if not already set.
# export LANG? := 'en_US.UTF-8' # export LANG? := 'en_US.UTF-8'
# command to run during profiling (time and heap) # command to run during profiling (time and heap)
# command to run when profiling
PROFCMD := 'stack exec --profile -- hledger balance -f examples/10000x1000x10.journal >/dev/null' PROFCMD := 'stack exec --profile -- hledger balance -f examples/10000x1000x10.journal >/dev/null'
#PROFRTSFLAGS := '-p'
PROFRTSFLAGS := '-P' PROFRTSFLAGS := '-P'
# # command to run during "make coverage" # # command to run when checking test coverage
# COVCMD := 'test' # COVCMD := 'test'
# COVCMD := '-f test-wf.csv print' # COVCMD := '-f test-wf.csv print'
# misc. system tools
BROWSE := 'open'
# VIEWHTML := '{{ BROWSE }}'
# VIEWPDF := '{{ BROWSE }}'
# PRINT := 'lpr'
#GHC := 'ghc'
GHCI := 'ghci'
# GHCPKG := 'ghc-pkg'
# HADDOCK := 'haddock'
# CABAL := 'cabal'
# CABALINSTALL := 'cabal install -w {{ GHC }}'
# Which stack command (and in particular, stack yaml/GHC version) to use for building etc. ? # Which stack command (and in particular, stack yaml/GHC version) to use for building etc. ?
STACK := 'stack' STACK := 'stack'
#STACK := 'stack --stack-yaml=stack8.10.yaml' #STACK := 'stack --stack-yaml=stack8.10.yaml'
# Or override temporarily with an env var: # Or override temporarily with an env var:
# STACK := '"stack --stack-yaml=stack8.10.yaml" make functest' # STACK := '"stack --stack-yaml=stack8.10.yaml" make functest'
# Which stack command (stack yaml, GHC version) to use for ghci[d] operations ?
STACKGHCI := STACK
#STACKGHCI := 'stack --stack-yaml=stack9.2.yaml'
# if using an unreleased stack with a newer hpack than the one mentioned in */*.cabal, # if using an unreleased stack with a newer hpack than the one mentioned in */*.cabal,
# it will give warnings. To silence these, put the old hpack-X.Y in $PATH and uncomment: # it will give warnings. To silence these, put the old hpack-X.Y in $PATH and uncomment:
#STACK := 'stack --with-hpack=hpack-0.20' #STACK := 'stack --with-hpack=hpack-0.20'
@ -129,48 +118,38 @@ STACKGHCI := STACK
# --timeout := 'N is not much use here - can be defeated by multiple threads, unoptimised builds, ' # --timeout := 'N is not much use here - can be defeated by multiple threads, unoptimised builds, '
# slow hackage index or compiler setup on first build, etc. # slow hackage index or compiler setup on first build, etc.
# Which stack command (stack yaml, GHC version) to use for ghci[d] operations ?
STACKGHCI := STACK
#STACKGHCI := 'stack --stack-yaml=stack9.2.yaml'
# WATCHEXEC := 'watchexec -q' # WATCHEXEC := 'watchexec -q'
PACKAGES := '\ # PACKAGES := '
hledger-lib \ # hledger-lib
hledger \ # hledger
hledger-ui \ # hledger-ui
hledger-web \ # hledger-web
' # '
BINARIES := '\
hledger \ # BINARIES := '
hledger-ui \ # hledger
hledger-web # hledger-ui
' # hledger-web
INCLUDEPATHS := '\ # '
-ihledger-lib \
-ihledger \ INCLUDEPATHS := '
-ihledger-ui \ -ihledger-lib
-ihledger-web \ -ihledger
-ihledger-web/app \ -ihledger-ui
-ihledger-web
-ihledger-web/app
' '
MAIN := 'hledger/app/hledger-cli.hs' MAIN := 'hledger/app/hledger-cli.hs'
# All source files in the project (plus a few strays like Setup.hs & hlint.hs). # All source files in the project (plus a few strays like Setup.hs & hlint.hs).
# Used eg for building tags. Doesn't reliably catch all source files. # Used eg for building tags. Doesn't reliably catch all source files.
SOURCEFILES := '\ SOURCEFILES := '
dev.hs \
hledger/*hs \
hledger/app/*hs \
hledger/bench/*hs \
hledger/test/*hs \
hledger/Hledger/*hs \
hledger/Hledger/*/*hs \
hledger/Hledger/*/*/*hs \
hledger-*/*hs \
hledger-*/app/*hs \
hledger-*/test/*hs \
hledger-*/Hledger/*hs \
hledger-*/Hledger/*/*hs \
hledger-*/Hledger/*/*/*hs \
hledger-lib/Text/*/*hs \
'
SOURCEFILES2 := '''
dev.hs dev.hs
hledger/*hs hledger/*hs
hledger/app/*hs hledger/app/*hs
@ -186,44 +165,47 @@ SOURCEFILES2 := '''
hledger-*/Hledger/*/*hs hledger-*/Hledger/*/*hs
hledger-*/Hledger/*/*/*hs hledger-*/Hledger/*/*/*hs
hledger-lib/Text/*/*hs hledger-lib/Text/*/*hs
''' '
# hledger-*/src/*hs \ HPACKFILES := '
hledger/*package.yaml
hledger-*/*package.yaml
'
HPACKFILES := '\ CABALFILES := '
hledger/*package.yaml \ hledger/hledger.cabal
hledger-*/*package.yaml \ hledger-*/*.cabal
' '
CABALFILES := '\
hledger/hledger.cabal \ MANUALSOURCEFILES := '
hledger-*/*.cabal \ doc/common.m4
*/*.m4.md
' '
MANUALSOURCEFILES := '\
doc/common.m4 \ # MANUALGENFILES := '
*/*.m4.md \ # hledger*/hledger*.{1,5,info,txt}
# '
COMMANDHELPFILES := '
hledger/Hledger/Cli/Commands/*.md
' '
MANUALGENFILES := '\
hledger*/hledger*.{1,5,info,txt} \ WEBTEMPLATEFILES := '
hledger-web/templates/*
' '
COMMANDHELPFILES := '\
hledger/Hledger/Cli/Commands/*.md \ WEBCODEFILES := '
' hledger-web/static/*.js
WEBTEMPLATEFILES := '\ hledger-web/static/*.css
hledger-web/templates/* \
'
WEBCODEFILES := '\
hledger-web/static/*.js \
hledger-web/static/*.css \
'
DOCSOURCEFILES := '\
README.md \
CONTRIBUTING.md' + MANUALSOURCEFILES + COMMANDHELPFILES
TESTFILES := '\
hledger/test/*.test \
hledger/test/*/*.test \
hledger/test/*/*/*.test \
' '
DOCSOURCEFILES := '
README.md
CONTRIBUTING.md
' + MANUALSOURCEFILES + COMMANDHELPFILES
TESTFILES := `fd '\.test$' --exclude ledger-compat`
# # file(s) which require recompilation for a build to have an up-to-date version string # # file(s) which require recompilation for a build to have an up-to-date version string
# VERSIONSOURCEFILE := 'hledger/Hledger/Cli/Version.hs' # VERSIONSOURCEFILE := 'hledger/Hledger/Cli/Version.hs'
# Two or three-part version string, set as program version in builds made by this makefile. # Two or three-part version string, set as program version in builds made by this makefile.
@ -235,13 +217,13 @@ export VERSION := `cat hledger/.version`
# Warnings to see during dev tasks like make ghci*. See also the warnings in package.yamls. # Warnings to see during dev tasks like make ghci*. See also the warnings in package.yamls.
# XXX redundant with package.yamls ? # XXX redundant with package.yamls ?
WARNINGS := '\ WARNINGS := '
-Wall \ -Wall
-Wno-incomplete-uni-patterns \ -Wno-incomplete-uni-patterns
-Wno-missing-signatures \ -Wno-missing-signatures
-Wno-orphans \ -Wno-orphans
-Wno-type-defaults \ -Wno-type-defaults
-Wno-unused-do-bind \ -Wno-unused-do-bind
' '
# if you have need to try building in less memory # if you have need to try building in less memory
@ -255,7 +237,7 @@ GHCLOWMEMFLAGS := ''
#CABALMACROSFLAGS := '-optP-include -optP hledger/.stack-work/dist/*/*/build/autogen/cabal_macros.h' #CABALMACROSFLAGS := '-optP-include -optP hledger/.stack-work/dist/*/*/build/autogen/cabal_macros.h'
CABALMACROSFLAGS := '' CABALMACROSFLAGS := ''
BUILDFLAGS := '-rtsopts ' + WARNINGS + GHCLOWMEMFLAGS + CABALMACROSFLAGS + ' -DDEVELOPMENT' + ' -DVERSION=\"' + VERSION + '\"' + INCLUDEPATHS BUILDFLAGS := '-rtsopts ' + WARNINGS + GHCLOWMEMFLAGS + CABALMACROSFLAGS + ' -DDEVELOPMENT' + ' -DVERSION="' + VERSION + '"' + INCLUDEPATHS
# -fplugin Debug.Breakpoint \ # -fplugin Debug.Breakpoint \
# -fhide-source-paths \ # -fhide-source-paths \
@ -269,47 +251,47 @@ GHCI:
# run ghci on hledger-lib + hledger # run ghci on hledger-lib + hledger
@ghci: @ghci:
{{ STACKGHCI }} exec -- {{ GHCI }} {{ BUILDFLAGS }} hledger/Hledger/Cli.hs $STACKGHCI exec -- $GHCI $BUILDFLAGS hledger/Hledger/Cli.hs
# run ghci on hledger-lib + hledger with profiling/call stack information # run ghci on hledger-lib + hledger with profiling/call stack information
@ghci-prof: @ghci-prof:
stack build --profile hledger --only-dependencies stack build --profile hledger --only-dependencies
{{ STACKGHCI }} exec -- {{ GHCI }} {{ BUILDFLAGS }} -fexternal-interpreter -prof -fprof-auto hledger/Hledger/Cli.hs $STACKGHCI exec -- $GHCI $BUILDFLAGS -fexternal-interpreter -prof -fprof-auto hledger/Hledger/Cli.hs
# # run ghci on hledger-lib + hledger + dev.hs script # # run ghci on hledger-lib + hledger + dev.hs script
# @ghci-dev: # @ghci-dev:
# {{ STACKGHCI }} exec -- {{ GHCI }} {{ BUILDFLAGS }} -fno-warn-unused-imports -fno-warn-unused-binds dev.hs # $STACKGHCI exec -- $GHCI $BUILDFLAGS -fno-warn-unused-imports -fno-warn-unused-binds dev.hs
# run ghci on hledger-lib + hledger + hledger-ui # run ghci on hledger-lib + hledger + hledger-ui
@ghci-ui: @ghci-ui:
{{ STACKGHCI }} exec -- {{ GHCI }} {{ BUILDFLAGS }} hledger-ui/Hledger/UI/Main.hs $STACKGHCI exec -- $GHCI $BUILDFLAGS hledger-ui/Hledger/UI/Main.hs
# run ghci on hledger-lib + hledger + hledger-web # run ghci on hledger-lib + hledger + hledger-web
@ghci-web: @ghci-web:
{{ STACKGHCI }} exec -- {{ GHCI }} {{ BUILDFLAGS }} hledger-web/app/main.hs $STACKGHCI exec -- $GHCI $BUILDFLAGS hledger-web/app/main.hs
# run ghci on hledger-lib + hledger + hledger-web + hledger-web test suite # run ghci on hledger-lib + hledger + hledger-web + hledger-web test suite
@ghci-web-test: @ghci-web-test:
{{ STACKGHCI }} exec -- {{ GHCI }} {{ BUILDFLAGS }} hledger-web/test/test.hs $STACKGHCI exec -- $GHCI $BUILDFLAGS hledger-web/test/test.hs
# # better than stack exec ? # # better than stack exec ?
# # XXX does not see changes to files # # XXX does not see changes to files
# # run ghci on hledger-lib + test runner # # run ghci on hledger-lib + test runner
# ghci-lib-test: # ghci-lib-test:
# {{ STACKGHCI }} ghci --ghc-options="\'-rtsopts {{ WARNINGS }} -ihledger-lib -DDEVELOPMENT -DVERSION=\"1.26.99\"\'" hledger-lib/test/unittest.hs # $STACKGHCI ghci --ghc-options="\'-rtsopts {{ WARNINGS }} -ihledger-lib -DDEVELOPMENT -DVERSION=\"1.26.99\"\'" hledger-lib/test/unittest.hs
# run ghci on all the hledger # run ghci on all the hledger
# ghci-all: # ghci-all:
# {{ STACK }} exec -- {{ GHCI }} {{ BUILDFLAGS }} \ # $STACK exec -- $GHCI $BUILDFLAGS \
# hledger-ui/Hledger/UI/Main.hs \ # hledger-ui/Hledger/UI/Main.hs \
# hledger-web/app/main.hs \ # hledger-web/app/main.hs \
# run ghci on hledger-lib doctests # run ghci on hledger-lib doctests
@ghci-doctest: @ghci-doctest:
cd hledger-lib; {{ STACKGHCI }} ghci hledger-lib:test:doctest cd hledger-lib; $STACKGHCI ghci hledger-lib:test:doctest
# run ghci on Shake.hs # run ghci on Shake.hs
@ghci-shake: @ghci-shake:
{{ STACK }} exec {{ SHAKEDEPS }} -- ghci Shake.hs $STACK exec {{ SHAKEDEPS }} -- ghci Shake.hs
# ** ghcid ------------------------------------------------------------ # ** ghcid ------------------------------------------------------------
GHCID: GHCID:
@ -339,7 +321,7 @@ GHCID:
# run ghcid autobuilding and running hledger-lib doctests # run ghcid autobuilding and running hledger-lib doctests
@ghcid-doctest: @ghcid-doctest:
ghcid -c 'cd hledger-lib; {{ STACK }} ghci hledger-lib:test:doctest' --test ':main' --reload hledger-lib ghcid -c 'cd hledger-lib; $STACK ghci hledger-lib:test:doctest' --test ':main' --reload hledger-lib
GHCIDRESTART := '--restart Makefile --restart Makefile.local' GHCIDRESTART := '--restart Makefile --restart Makefile.local'
GHCIDRELOAD := '--reload t.j --reload t.timedot' GHCIDRELOAD := '--reload t.j --reload t.timedot'
@ -371,12 +353,12 @@ ghcid-shake:
# # hledger-lib/Hledger/Read/TimeclockReaderPP.hs # # hledger-lib/Hledger/Read/TimeclockReaderPP.hs
# # build the dev.hs script for quick experiments (with ghc) # # build the dev.hs script for quick experiments (with ghc)
# dev: # dev:
# {{ STACK }} ghc -- {{ CABALMACROSFLAGS }} -ihledger-lib dev.hs \ # $STACK ghc -- {{ CABALMACROSFLAGS }} -ihledger-lib dev.hs \
# # to get profiling deps installed, first do something like: # # to get profiling deps installed, first do something like:
# # stack build --library-profiling hledger-lib timeit criterion # # stack build --library-profiling hledger-lib timeit criterion
# # build the dev.hs script with profiling support # # build the dev.hs script with profiling support
# devprof: # devprof:
# {{ STACK }} ghc -- {{ CABALMACROSFLAGS }} -ihledger-lib dev.hs -rtsopts -prof -fprof-auto -osuf p_o -o devprof # $STACK ghc -- {{ CABALMACROSFLAGS }} -ihledger-lib dev.hs -rtsopts -prof -fprof-auto -osuf p_o -o devprof
# # get a time & space profile of the dev.hs script # # get a time & space profile of the dev.hs script
# dev-profile: # dev-profile:
# time ./devprof +RTS -P \ # time ./devprof +RTS -P \
@ -394,25 +376,25 @@ BUILDING:
# build the hledger package showing ghc codegen times/allocations # build the hledger package showing ghc codegen times/allocations
@buildtimes: @buildtimes:
time ({{ STACK }} build hledger --force-dirty --ghc-options='-fforce-recomp -ddump-timings' 2>&1 | grep -E '\bCodeGen \[.*time=') time ($STACK build hledger --force-dirty --ghc-options='-fforce-recomp -ddump-timings' 2>&1 | grep -E '\bCodeGen \[.*time=')
# # build an unoptimised hledger at bin/hledger.EXT.unopt (default: git describe) # # build an unoptimised hledger at bin/hledger.EXT.unopt (default: git describe)
# build-unopt *EXT: # build-unopt *EXT:
# #!/usr/bin/env bash # #!/usr/bin/env bash
# ext={{ if EXT == '' { `git describe --tags` } else { EXT } }} # ext={{ if EXT == '' { `git describe --tags` } else { EXT } }}
# exe="bin/hledger.$ext.unopt" # exe="bin/hledger.$ext.unopt"
# {{ STACK }} --verbosity=error install --ghc-options=-O0 hledger --local-bin-path=bin # $STACK --verbosity=error install --ghc-options=-O0 hledger --local-bin-path=bin
# mv bin/hledger "$exe" # mv bin/hledger "$exe"
# echo "$exe" # echo "$exe"
# # build hledger with profiling enabled at bin/hledgerprof # # build hledger with profiling enabled at bin/hledgerprof
# hledgerprof: # hledgerprof:
# # {{ STACK }} --verbosity=error install --local-bin-path=bin hledger # # $STACK --verbosity=error install --local-bin-path=bin hledger
# {{ STACK }} build --profile hledger # $STACK build --profile hledger
# # hledger-lib --ghc-options=-fprof-auto # # hledger-lib --ghc-options=-fprof-auto
# # @echo "to profile, use {{ STACK }} exec --profile -- hledger ..." # # @echo "to profile, use $STACK exec --profile -- hledger ..."
# # build "bin/hledgercov" for coverage reports (with ghc) # # build "bin/hledgercov" for coverage reports (with ghc)
# hledgercov: # hledgercov:
# {{ STACK }} ghc {{ MAIN }} -fhpc -o bin/hledgercov -outputdir .hledgercovobjs {{ BUILDFLAGS }} # $STACK ghc {{ MAIN }} -fhpc -o bin/hledgercov -outputdir .hledgercovobjs $BUILDFLAGS
# ** Testing ------------------------------------------------------------ # ** Testing ------------------------------------------------------------
TESTING: TESTING:
@ -440,7 +422,7 @@ STACKTEST := STACK + ' test --fast'
# for F in stack*.yaml; do make --no-print-directory buildplantest-$F; done # for F in stack*.yaml; do make --no-print-directory buildplantest-$F; done
# # stack build --dry-run all hledger packages ensuring an install plan with the given stack yaml file; eg make buildplantest-stack8.2.yaml # # stack build --dry-run all hledger packages ensuring an install plan with the given stack yaml file; eg make buildplantest-stack8.2.yaml
# buildplantest-%: # buildplantest-%:
# {{ STACK }} build --dry-run --test --bench --stack-yaml=$* # $STACK build --dry-run --test --bench --stack-yaml=$*
# # force-rebuild all hledger packages/modules quickly ensuring no warnings with default snapshot) # # force-rebuild all hledger packages/modules quickly ensuring no warnings with default snapshot)
# buildtest: # buildtest:
# buildtest-stack.yaml # buildtest-stack.yaml
@ -449,7 +431,7 @@ STACKTEST := STACK + ' test --fast'
# for F in stack*.yaml; do make --no-print-directory buildtest-$F; done # for F in stack*.yaml; do make --no-print-directory buildtest-$F; done
# # force-rebuild all hledger packages/modules quickly ensuring no warnings with the given stack yaml file; eg make buildtest-stack8.2.yaml # # force-rebuild all hledger packages/modules quickly ensuring no warnings with the given stack yaml file; eg make buildtest-stack8.2.yaml
# buildtest-%: # buildtest-%:
# {{ STACK }} build --test --bench {{ SKIPTESTSBENCHS }} --fast --force-dirty --ghc-options=-fforce-recomp --ghc-options=-Werror --stack-yaml=$* # $STACK build --test --bench {{ SKIPTESTSBENCHS }} --fast --force-dirty --ghc-options=-fforce-recomp --ghc-options=-Werror --stack-yaml=$*
# # build any outdated hledger packages/modules quickly ensuring no warnings with default snapshot. Wont detect warnings in up-to-date modules.) # # build any outdated hledger packages/modules quickly ensuring no warnings with default snapshot. Wont detect warnings in up-to-date modules.)
# incr-buildtest: # incr-buildtest:
# incr-buildtest-stack.yaml # incr-buildtest-stack.yaml
@ -458,30 +440,30 @@ STACKTEST := STACK + ' test --fast'
# for F in stack*.yaml; do make --no-print-directory incr-buildtest-$F; done # for F in stack*.yaml; do make --no-print-directory incr-buildtest-$F; done
# # build any outdated hledger packages/modules quickly ensuring no warnings with the stack yaml file; eg make buildtest-stack8.2.yaml. Wont detect warnings in up-to-date modules. # # build any outdated hledger packages/modules quickly ensuring no warnings with the stack yaml file; eg make buildtest-stack8.2.yaml. Wont detect warnings in up-to-date modules.
# incr-buildtest-%: # incr-buildtest-%:
# {{ STACK }} build --test --bench {{ SKIPTESTSBENCHS }} --fast --ghc-options=-Werror --stack-yaml=$* # $STACK build --test --bench {{ SKIPTESTSBENCHS }} --fast --ghc-options=-Werror --stack-yaml=$*
# # do a stack clean --full with all ghc versions for paranoia/troubleshooting # # do a stack clean --full with all ghc versions for paranoia/troubleshooting
# stack-clean-all: # stack-clean-all:
# for F in stack*.yaml; do {{ STACK }} clean --full --stack-yaml=$F; done # for F in stack*.yaml; do $STACK clean --full --stack-yaml=$F; done
# run all test suites in the hledger packages # run all test suites in the hledger packages
@pkgtest: @pkgtest:
({{ STACKTEST }} && echo $@ PASSED) || (echo $@ FAILED; false) ($STACKTEST && echo $@ PASSED) || (echo $@ FAILED; false)
# doctest with ghc 8.4 on mac requires a workaround, see hledger-lib/package.yaml. # doctest with ghc 8.4 on mac requires a workaround, see hledger-lib/package.yaml.
# Or, could run it with ghc 8.2: # Or, could run it with ghc 8.2:
# @({{ STACKTEST }} --stack-yaml stack8.2.yaml hledger-lib:test:doctest && echo $@ PASSED) || (echo $@ FAILED; false) # @($STACKTEST --stack-yaml stack8.2.yaml hledger-lib:test:doctest && echo $@ PASSED) || (echo $@ FAILED; false)
# run the doctests in hledger-lib module/function docs # run the doctests in hledger-lib module/function docs
@doctest: @doctest:
({{ STACKTEST }} hledger-lib:test:doctest && echo $@ PASSED) || (echo $@ FAILED; false) ($STACKTEST hledger-lib:test:doctest && echo $@ PASSED) || (echo $@ FAILED; false)
# # run the unit tests in hledger-lib # # run the unit tests in hledger-lib
# unittest: # unittest:
# @({{ STACKTEST }} hledger-lib:test:unittest && echo $@ PASSED) || (echo $@ FAILED; false) # @($STACKTEST hledger-lib:test:unittest && echo $@ PASSED) || (echo $@ FAILED; false)
# run hledger & hledger-lib unit tests (do a stack build hledger first). # run hledger & hledger-lib unit tests (do a stack build hledger first).
@unittest: @unittest:
({{ STACK }} exec hledger test && echo $@ PASSED) || (echo $@ FAILED; false) ($STACK exec hledger test && echo $@ PASSED) || (echo $@ FAILED; false)
SHELLTEST := 'COLUMNS=80 ' + STACK + ' exec -- shelltest --execdir --threads=64 --exclude=/_' SHELLTEST := 'COLUMNS=80 ' + STACK + ' exec -- shelltest --execdir --threads=64 --exclude=/_'
@ -489,7 +471,7 @@ SHELLTEST := 'COLUMNS=80 ' + STACK + ' exec -- shelltest --execdir --threads=64
# build hledger quickly and run functional tests, with any shelltest OPTS (requires mktestaddons) # build hledger quickly and run functional tests, with any shelltest OPTS (requires mktestaddons)
@functest *OPTS: @functest *OPTS:
{{ STACK }} build --fast hledger $STACK build --fast hledger
({{ SHELLTEST }} {{ if OPTS == '' { '' } else { OPTS } }} \ ({{ SHELLTEST }} {{ if OPTS == '' { '' } else { OPTS } }} \
hledger/test/ bin/ \ hledger/test/ bin/ \
-x ledger-compat/ledger-baseline -x ledger-compat/ledger-regress -x ledger-compat/ledger-extra \ -x ledger-compat/ledger-baseline -x ledger-compat/ledger-regress -x ledger-compat/ledger-extra \
@ -518,8 +500,8 @@ ADDONEXTS := 'pl py rb sh hs lhs rkt exe com bat'
# cabalfiletest: # cabalfiletest:
# @(make --no-print-directory cabalcheck && echo $@ PASSED) || (echo $@ FAILED; false) # @(make --no-print-directory cabalcheck && echo $@ PASSED) || (echo $@ FAILED; false)
# test-stack%yaml: # test-stack%yaml:
# {{ STACK }} --stack-yaml stack$*yaml clean # $STACK --stack-yaml stack$*yaml clean
# {{ STACK }} --stack-yaml stack$*yaml build --ghc-options="{{ WARNINGS }} -Werror" --test --bench --haddock --no-haddock-deps # $STACK --stack-yaml stack$*yaml build --ghc-options="{{ WARNINGS }} -Werror" --test --bench --haddock --no-haddock-deps
# committest: hlinttest unittest doctest functest haddocktest buildtest quickcabaltest \ # committest: hlinttest unittest doctest functest haddocktest buildtest quickcabaltest \
# #
# releasetest: Clean unittest functest fullcabaltest haddocktest #buildtest doctest \ # releasetest: Clean unittest functest fullcabaltest haddocktest #buildtest doctest \
@ -704,7 +686,7 @@ haddock:
# open the haddock packages contents page in a browser # open the haddock packages contents page in a browser
haddock-open: haddock-open:
{{ BROWSE }} `{{ STACK }} path --local-install-root`/doc/index.html {{ BROWSE }} `$STACK path --local-install-root`/doc/index.html
# hoogle-setup: $(call def-help,hoogle-setup, install hoogle then build haddocks and a hoogle db for the project and all deps ) # hoogle-setup: $(call def-help,hoogle-setup, install hoogle then build haddocks and a hoogle db for the project and all deps )
# stack hoogle --rebuild # stack hoogle --rebuild
@ -763,7 +745,7 @@ INSTALLING:
# stack install, then copy the hledger executables to bin/old/hledger*-VER # stack install, then copy the hledger executables to bin/old/hledger*-VER
@installas VER: @installas VER:
{{ STACK }} install --local-bin-path bin/old $STACK install --local-bin-path bin/old
for e in hledger hledger-ui hledger-web ; do cp bin/old/$e bin/old/$e-{{ VER }}; echo "bin/$e-{{ VER }}"; done for e in hledger hledger-ui hledger-web ; do cp bin/old/$e bin/old/$e-{{ VER }}; echo "bin/$e-{{ VER }}"; done
# # make must be GNU Make 4.3+ # # make must be GNU Make 4.3+
@ -1102,7 +1084,7 @@ mkwebdirs:
# show the sorted, unique files matched by SOURCEFILES # show the sorted, unique files matched by SOURCEFILES
@_listsourcefiles: @_listsourcefiles:
for f in {{ SOURCEFILES }}; do echo $f; done | sort | uniq for f in $SOURCEFILES; do echo $f; done | sort | uniq
# show the sorted, unique subdirectories containing hs files # show the sorted, unique subdirectories containing hs files
@_listsourcedirs: @_listsourcedirs:
@ -1110,7 +1092,7 @@ mkwebdirs:
# show the ghc versions used by all stack files # show the ghc versions used by all stack files
@_listghcversions: @_listghcversions:
for F in stack*.yaml; do {{ STACK }} --stack-yaml=$F --no-install-ghc exec -- ghc --version; done 2>&1 | grep -v 'To install the correct GHC' for F in stack*.yaml; do $STACK --stack-yaml=$F --no-install-ghc exec -- ghc --version; done 2>&1 | grep -v 'To install the correct GHC'
# Show a bunch of debug messages. # Show a bunch of debug messages.
@_dbgmsgs: @_dbgmsgs: