Useful new rules for 1. thorough build checking with all supported ghc
versions, and 2. re-running any make rule when a committed file
changes.
[ci skip]
Building with same GHC as stackage nightly is a good idea for noticing
problems keeping us out of stackage. make test-stackage is a start at
checking for stackage problems with the last three GHC versions.
Draft change notes are now kept in CHANGENOTES.org in the top
directory for easiest access.
The changenotes-* rules for maintaining this have been renamed and
improved.
"make SECTION-help" has been added, as it's sometimes easier to type
than "make help-SECTION". Eg if you append "-help" to any "make RULE"
command you will likely see its help (and neighbouring RULEs' help.
Specifically, it shows the "make help" output from the first match
of the SECTION regexp to the next section end.)
Makefile variables are now all of the dynamic/recursive type. This
might mean shell commands are run redundantly when a variable is used
multiple times, but it avoids running those shell commands at all when
the variable is not used, which means most make rules should now feel
more snappy.
showreleaseauthors looks bitrotted and has been commented out.
[ci skip]
Goal:
Generate man pages and web docs from one source.
Current plan:
The master docs for each package are now the pandoc-style
manpage-markdown files in the package directories -
hledger/hledger.1.md, hledger-lib/hledger_journal.5.md, etc.
Parts of these will be marked as web-only, and parts as man-only, using
divs recognisable by custom pandoc filters.
When generating man pages we strip the web-only parts, and all html
blocks, inline html and hyperlinks.
When generating web docs we strip the man-only parts and apply any other
tweaks needed for easy presentation, perhaps combining them into a
single web page similar to the old user manual.
Shake:
This was hard to do with GNU Make, and so I've introduced Shake, which
is working very well. Both coexist for now but it's probably time to
switch.
Timedot is a plain text format for logging dated, categorised
quantities (eg time), supported by hledger. It is convenient for
approximate and retroactive time logging, eg when the real-time
clock-in/out required with a timeclock file is too precise or too
interruptive. It can be formatted like a bar chart, making clear at a
glance where time was spent.
There are now six man pages, one for each main executable and file
format, generated from markdown by the mighty pandoc. They are basically
the content of the user manual, split up and moved into the appropriate
package directory. I've also committed the generated man files.
The man pages' markdown source (hledger/hledger.1.md,
hledger-lib/hledger_journal.5.md etc.) are now the master documentation
files. The plan is to concatenate them (with a little munging) to form
the all-in-one user manual for the website, at release time. This also
separates the hledger.org user manual from the latest doc commits, which
should simplify website management.
"make quickheap-CMD" generates a heap profile for CMD, in
hledgerprof.ps, and tries to open it in a viewer (currently the
mac-friendly "open" executable, so you may need to adjust this in the
makefile).
As with quickprof, CMD must be one word and runs against one of the
sample journals.
A bunch of cleanups to make profiling possible again, and easier.
"make quickprof-CMD" generates a profile for CMD, which must be one
word and runs against one of the sample journals (the usual
quickprof-"SOME WORDS" quoting trick isn't working here for some
reason)
Also,
"make hledgerprof" builds the hledgerprof executable (in stack's bin dir) for profiling.
"make hledgercov" builds the hledgercov executable (in ./bin) for coverage reports
(renamed from hledgerhpc to remind me that HPC is nothing to do with heap coverage)
Here are hpack package.yaml files for the other hledger cabal files.
These remove a lot of human-error-prone duplication.
They are not used yet as hpack isn't quite mature enough -
when it supports flags and benchmarks we will probably switch.
hakyll-std's cabal file is now generated by hpack from an easier yaml
config file, which looks like a valuable timesaver. "make gencabalfiles"
will regenerate this cabal file (and soon the others) when needed.
The makefile now uses stack primarily.
The following updated rules are available:
$ make
Makefile:35: -------------------- hledger make rules --------------------
Makefile:37: make [help] -- list documented rules in this makefile. make -n RULE shows more detail.
Makefile:202: (INSTALLING:)
Makefile:204: make install -- download dependencies and install hledger executables to ~/.local/bin or equivalent (with stack)
Makefile:229: (BUILDING:)
Makefile:233: make build -- download dependencies and build hledger executables (with stack)
Makefile:302: make hledgerdev -- quickly build the hledger executable (with ghc and -DDEVELOPMENT)
Makefile:487: (TESTING:)
Makefile:495: make test -- run default tests
Makefile:541: make pkgtest -- run the test suites for each package
Makefile:548: make builtintest -- run tests built in to the hledger executable (subset of pkg tests)
Makefile:572: make functest -- run hledger functional tests with the stack build
Makefile:606: make haddocktest -- run haddock and make sure it succeeds
Makefile:787: (DOCUMENTATION:)
Makefile:895: make haddock -- generate haddock docs for the hledger packages
Makefile:974: (RELEASING:)
Makefile:1053: make setversion -- update all version strings to match .version
Makefile:1056: make setversionforce -- update all version strings even if .version seems unchanged
Makefile:1080: make tagrelease -- commit a release tag based on .version for each package
Makefile:1253: (MISCELLANEOUS:)
Makefile:1255: make usage -- show size of various dirs
Makefile:1260: make stackusage -- show size of stack working dirs
Makefile:1264: make cabalusage -- show size of cabal working dirs if any
Makefile:1268: make tag -- generate tag files for source code navigation (for emacs)
Makefile:1294: make clean -- default cleanup (ghc build leftovers)
Makefile:1297: make Clean -- thorough cleanup (stack/cabal/ghc builds and tags)
Makefile:1302: make cabalCMD -- run cabal CMD inside each hledger package directory
Makefile:1306: make all"CMD" -- run CMD inside each hledger package directory