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
Refactored and enhanced the --width option used by register (and other
commands in future). register now uses the full terminal width by
default except on windows. Specifically, the output width is set from:
1. a --width option
2. or a COLUMNS environment variable (NB: not the same as a bash shell var)
3. or on POSIX (non-windows) systems, the current terminal width
4. or the default, 80 characters.
Also, register now accepts a description column width as part of
--width's argument, comma-separated (--width W,D). This adjusts the
relative widths of register's description and account columns, which are
normally about half of (W-40):
<--------------------------------- width (W) ---------------------------------->
date (10) description (D) account (W-41-D) amount (12) balance (12)
DDDDDDDDDD dddddddddddddddddddd aaaaaaaaaaaaaaaaaaa AAAAAAAAAAAA AAAAAAAAAAAA
Examples:
$ hledger reg # use terminal width on posix
$ hledger reg -w 100 # width 100, equal description/account widths
$ hledger reg -w 100,40 # width 100, wider description
$ hledger reg -w $COLUMNS,100 # terminal width and set description width
Fed up with GHC/cabal constantly assaulting me like Cato in a Pink
Panther movie, here are some shell tests to give me some
warning/reassurance about the dev setup on various machines.
Thou Shalt Not Reimplement Autoconf, but perhaps a little cross-platform
test suite focussed on my needs is a reasonable idea.
I've moved the installation and developer guides, FAQ and how-tos from
hledger.org (yst & git) to hledger.org/wiki (dokuwiki) and tried to
integrate their navigation bars two as best I can. Using just one
or the other would be nice, but I don't think I can quite do that;
it seems the manual at least should be revision controlled along with the code.
hledger and hledger-web were reading their version number (and program
name) from their cabal files at compile time using cabal-file-th,
which allowed the version number be maintained in one place (per
package).
This meant you had to be in same directory as the cabal file when
building, which made life more complicated, eg emacs compilation mode
could not jump to errors. Also, it slowed down building slightly, and
is a factor in hledger Debian packages being unavailable on a number
of platforms (we also use TH for report templates).
Now, the build version is set with a CPP VERSION flag, which seems
simpler overall. For cabal builds, this needs to be configured
manually in a few more places in each cabal file. For makefile builds,
it is set it to the name of the most recent darcs tag (which should be
more useful than the old behaviour). If not set, it defaults to the
blank string, useful eg for haddock. And, all makefile builds now run
from the top directory.
It is handly to check things inplace:
hledger $ make
cd hledger; ghc --make hledger-cli.hs -o ../bin/hledger -DMAKE -W -fwarn-tabs -fno-warn-name-shadowing -i../hledger-lib -i../hledger -i../hledger-web -L/usr/lib -DPATCHLEVEL=0 +RTS -M200m -RTS
../hledger-lib/Hledger/Utils.hs:30:8:
Ambiguous module name `Control.Monad.Error':
it was found in multiple packages: mtl-2.1.2 monads-fd-0.1.0.4
make: *** [bin/hledger] Error 1
hledger $ make HCFLAGS="-hide-package monads-fd"
<all ok>