diff --git a/Makefile b/Makefile index d710ba713..b869490c6 100644 --- a/Makefile +++ b/Makefile @@ -209,17 +209,19 @@ check: \ @($(SHELLTESTV) checks \ && echo $@ PASSED) || echo $@ FAILED -sandbox: .cabal-sandbox sandbox-links \ - $(call def-help,sandbox,\ - set up a cabal sandbox and some symlinks\ - ) +include sandbox.mk -.cabal-sandbox: \ - $(call def-help,.cabal-sandbox,\ - initialise ./.cabal sandbox and add hledger packages as sources \ - ) - cabal sandbox init - cabal sandbox add-source ./hledger-lib ./hledger ./hledger-web +# sandbox: .cabal-sandbox sandbox-links \ +# $(call def-help,sandbox,\ +# set up a cabal sandbox and some symlinks\ +# ) + +# .cabal-sandbox: \ +# $(call def-help,.cabal-sandbox,\ +# initialise ./.cabal sandbox and add hledger packages as sources \ +# ) +# cabal sandbox init +# cabal sandbox add-source ./hledger-lib ./hledger ./hledger-web sandbox-links: \ $(call def-help,sandbox-links,\ @@ -228,7 +230,7 @@ sandbox-links: \ -for p in hledger{-lib,,-web}; do (cd $$p/dist; ln -s dist-*/build); done install: \ - $(call def-help,sandbox-links,\ + $(call def-help,install,\ cabal install the main hledger packages and all their dependencies\ in the sandbox if any; otherwise in the users package db\ ) @@ -817,34 +819,25 @@ viewcoverage: \ ) $(VIEWHTML) doc/profs/coverage/index.html -repl-lib: \ - $(call def-help,repl-lib,\ - single-package debug prompts, using all cabal settings\ - ) +# XXX with a sandbox, use sandbox-repl-* instead +repl-lib:\ + $(call def-help,repl-lib, start a cabal REPL and load the hledger-lib package) (cd hledger-lib; cabal repl) -repl-cli repl: \ - $(call def-help,repl-cli repl,\ - \ - ) +repl-cli:\ + $(call def-help,repl-cli, start a cabal REPL and load the hledger package) (cd hledger; cabal repl exe:hledger) -repl-web: \ - $(call def-help,repl-web,\ - \ - ) +repl-web:\ + $(call def-help,repl-web, start a cabal REPL and load the hledger-web package) (cd hledger-web; cabal repl exe:hledger-web) ghci: \ - $(call def-help,ghci,\ - multi-package debug prompts, mimicking most cabal settings\ - ) - cabal exec $(GHCI) -- $(WARNINGS) $(INCLUDEPATHS) $(MAIN) + $(call def-help,ghci, start a sandbox-aware GHCI REPL and load the hledger-lib and hledger packages) + cabal exec $(GHCI) -- -XCPP $(CABALMACROSFLAGS) $(WARNINGS) $(INCLUDEPATHS) hledger/Hledger/Cli/Main.hs ghci-web: \ - $(call def-help,ghci-web,\ - \ - ) + $(call def-help,ghci-web, start a sandbox-aware GHCI REPL and load the hledger-lib, hledger and hledger-web packages) cabal exec $(GHCI) -- $(BUILDFLAGS) $(WEBLANGEXTS) hledger-web/app/main.hs samplejournals: data/sample.journal data/100x100x10.journal data/1000x1000x10.journal data/1000x10000x10.journal data/10000x1000x10.journal data/10000x10000x10.journal data/100000x1000x10.journal \ diff --git a/help-system.mk b/help-system.mk index 6059624db..b88d7acb3 100644 --- a/help-system.mk +++ b/help-system.mk @@ -19,6 +19,10 @@ define def-help-section $(if $(need-help),$(warning --------------------$1--------------------$2)) endef +define def-help-subsection + $(if $(need-help),$(warning $1$2)) +endef + define last-element $(word $(words $1),$1) endef diff --git a/sandbox.mk b/sandbox.mk new file mode 100644 index 000000000..28e5da5e7 --- /dev/null +++ b/sandbox.mk @@ -0,0 +1,163 @@ +# some standard operations in a cabal sandbox, optionally with specified GHC version + +#include help-system.mks + +sandbox.mk-default: help + + +$(call def-help-subsection,-- Default sandbox) + +sandbox-setup:\ + $(call def-help,sandbox-setup, set up a cabal sandbox for hledger using the default GHC version) + @make sandbox-init sandbox-add-sources + +sandbox-init: + cabal sandbox init + +sandbox-add-sources: + cabal sandbox add-source hledger-lib hledger hledger-web + +sandbox-list-sources:\ + $(call def-help,sandbox-list-sources,) + cabal sandbox list-sources + +sandbox-pkg-list:\ + $(call def-help,sandbox-pkg-list,\ + ) + cabal sandbox hc-pkg list + +sandbox-pkg-check:\ + $(call def-help,sandbox-pkg-check,) + cabal sandbox hc-pkg check + +sandbox-install-dry-lib:\ + $(call def-help,sandbox-install-dry-lib,) + cabal install --dry ./hledger-lib + +sandbox-install-dry-cli:\ + $(call def-help,sandbox-install-dry-cli,) + cabal install --dry ./hledger + +sandbox-install-dry-web:\ + $(call def-help,sandbox-install-dry-web,) + cabal install --dry ./hledger-web + +sandbox-install-dep-lib:\ + $(call def-help,sandbox-install-dep-lib,) + cabal install --only-dep ./hledger-lib + +sandbox-install-dep-cli:\ + $(call def-help,sandbox-install-dep-cli,) + cabal install --only-dep ./hledger + +sandbox-install-dep-web:\ + $(call def-help,sandbox-install-dep-web,) + cabal install --only-dep ./hledger-web + +sandbox-install-lib:\ + $(call def-help,sandbox-install-lib, install hledger-lib) + cabal install ./hledger-lib + +sandbox-install-cli:\ + $(call def-help,sandbox-install-cli, install hledger-lib and hledger) + cabal install ./hledger + +sandbox-install-web:\ + $(call def-help,sandbox-install-web, install hledger-lib and hledger and hledger-web) + cabal install ./hledger-web + +sandbox-repl-lib:\ + $(call def-help,sandbox-repl-lib, start a cabal REPL for the hledger-lib package) + (cd hledger-lib; cabal --sandbox-config-file=../cabal.sandbox.config repl) + +sandbox-repl-cli:\ + $(call def-help,sandbox-repl-cli, start a cabal REPL for the hledger package) + (cd hledger; cabal --sandbox-config-file=../cabal.sandbox.config repl exe:hledger) + +sandbox-repl-web:\ + $(call def-help,sandbox-repl-web, start a cabal REPL for the hledger-web package) + (cd hledger-web; cabal --sandbox-config-file=../cabal.sandbox.config repl exe:hledger-web) + + + +$(call def-help-subsection,-- Sandbox for specified GHC version (eg: make sandbox-7.8.4-setup)) + + # .cabal-sandbox.ghc%: +sandbox-%-setup: \ + $(call def-help,sandbox-%-setup, set up a cabal sandbox for hledger using the specified GHC version) + @make sandbox-$*-init sandbox-$*-add-sources + +sandbox-%-init: + cabal --sandbox-config-file=cabal.sandbox.$*.config sandbox init --sandbox .cabal-sandbox.$* + @echo "now manually fix the ghc version in package-db: in cabal.sandbox.$*.config" + +sandbox-%-add-sources: + cabal --sandbox-config-file=cabal.sandbox.$*.config sandbox add-source --sandbox .cabal-sandbox.$* hledger-lib hledger hledger-web + +sandbox-%-list-sources:\ + $(call def-help,sandbox-%-list-sources,) + cabal --sandbox-config-file=cabal.sandbox.$*.config sandbox list-sources --sandbox .cabal-sandbox.$* + +sandbox-%-pkg-list: \ + $(call def-help,sandbox-%-pkg-list,\ + ) + ghc-pkg-$* --package-db .cabal-sandbox.$*/*$*-packages.conf.d list +# ghc-pkg-$* --global-package-db /usr/local/lib/ghc-$*/package.conf.d --package-db .cabal-sandbox.$*/*$*-packages.conf.d list + +sandbox-%-pkg-check:\ + $(call def-help,sandbox-%-pkg-check,) + ghc-pkg-$* --package-db .cabal-sandbox.$*/*$*-packages.conf.d check +# ghc-pkg-$* --global-package-db /usr/local/lib/ghc-$*/package.conf.d --package-db .cabal-sandbox.$*/*$*-packages.conf.d check + +sandbox-%-install-dry-lib:\ + $(call def-help,sandbox-%-install-dry-lib,) + cabal --sandbox-config-file=cabal.sandbox.$*.config install -w ghc-$* --dry ./hledger-lib + +sandbox-%-install-dry-cli:\ + $(call def-help,sandbox-%-install-dry-cli,) + cabal --sandbox-config-file=cabal.sandbox.$*.config install -w ghc-$* --dry ./hledger + +sandbox-%-install-dry-web:\ + $(call def-help,sandbox-%-install-dry-web,) + cabal --sandbox-config-file=cabal.sandbox.$*.config install -w ghc-$* --dry ./hledger-web + +sandbox-%-install-dep-lib:\ + $(call def-help,sandbox-%-install-dep-lib,) + cabal --sandbox-config-file=cabal.sandbox.$*.config install -w ghc-$* --only-dep ./hledger-lib + +sandbox-%-install-dep-cli:\ + $(call def-help,sandbox-%-install-dep-cli,) + cabal --sandbox-config-file=cabal.sandbox.$*.config install -w ghc-$* --only-dep ./hledger + +sandbox-%-install-dep-web:\ + $(call def-help,sandbox-%-install-dep-web,) + cabal --sandbox-config-file=cabal.sandbox.$*.config install -w ghc-$* --only-dep ./hledger-web + +sandbox-%-install-lib:\ + $(call def-help,sandbox-%-install-lib,) + cabal --sandbox-config-file=cabal.sandbox.$*.config install -w ghc-$* ./hledger-lib + +sandbox-%-install-cli:\ + $(call def-help,sandbox-%-install-cli,) + cabal --sandbox-config-file=cabal.sandbox.$*.config install -w ghc-$* ./hledger + +sandbox-%-install-web:\ + $(call def-help,sandbox-%-install-web,) + cabal --sandbox-config-file=cabal.sandbox.$*.config install -w ghc-$* ./hledger-web + +sandbox-%-repl-lib:\ + $(call def-help,sandbox-%-repl-lib,) + (cd hledger-lib; cabal --sandbox-config-file=../cabal.sandbox.$*.config repl) + +sandbox-%-repl-cli:\ + $(call def-help,sandbox-%-repl-cli,) + (cd hledger; cabal --sandbox-config-file=../cabal.sandbox.$*.config repl exe:hledger) + +sandbox-%-repl-web:\ + $(call def-help,sandbox-%-repl-web,) + (cd hledger-web; cabal --sandbox-config-file=../cabal.sandbox.$*.config repl exe:hledger-web) + + +Clean-sandboxes:\ + $(call def-help,Clean-sandboxes, delete all sandboxes in this directory) + rm -rf .cabal-sandbox* cabal.sandbox*