This actually runs faster than building the man pages from the makefile
did. But the main purpose is to let Setup.hs import Build.Mans and so not
need the makefile.
The tarball on hackage will include only the files needed for cabal install;
it is NOT the full git-annex source tree. While it's totally obnoxious that
cabal files need every file listed out when basic wildcard support could
avoid hundreds of lines, and have to be maintained when files are added,
this does get the tarball size back down to 1 mb.
This also stops stack from complaining that it found modules not listed in
the cabal file.
debian/changelog, debian/NEWS, debian/copyright: Converted to symlinks
to CHANGELOG, NEWS, and COPYRIGHT, which used to symlink to these instead.
This avoids needing to include debian/ in the hackage tarball.
Setup.hs: Build man pages at install time using make and mdwn2man.
If it fails, which it probably will on windows, just skip installing
them.
It started exporting a isSymbolicLink which supports windows. But,
git-annex does no use symlinks on windows yet and this conflicts with the
function by the same name from unix-compat, so hide it.
See https://github.com/haskell/cabal/issues/1805
Apparently, old versions of cabal don't run copyHook, but at the moment
I don't know who would be using a cabal as old as 1.18, and it seems a lot
of complication to run both hooks. Although I think my code is idempotent,
so they could both be used if necessary.
Remove post-copy hook 'myPostCopy': it's easy to write one based on
'myPostInst', so just wait until someone complains that it's missing.
Remove most comments.
Put long type sigs on one line like in the other source files.
The creation of the 'git-annex-shell' symlink was in 'postInst' hook.
I combined it with the man-page installation in a 'postInst' hook and
a 'postCopy' hook. I don't understand how to use the `cabal copy`
command, but the examples I looked at defined both hooks.
Relevant comments from the source:
* man-page installation:
See http://www.haskell.org/haskellwiki/Cabal/Developer-FAQ#Installing_manpages.
Based on pandoc's and lhs2tex's 'Setup.installManpages' and
'postInst' hooks.
My understanding: 'postCopy' is run for `cabal copy`, 'postInst' is
run for `cabal inst`, and copy is not a generalized install, so you
have to write two nearly identical hooks.
Summary of hooks:
http://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Distribution-Simple-UserHooks.htm--
Other people are also confused:
* Bug: 'postCopy' and 'postInst' are confusing:
http://hackage.haskell.org/trac/hackage/ticket/718
* A cabal maintainer suggests using 'postCopy' instead of
'postInst', because `cabal install` is `cabal copy` followed by
`cabal register`:
http://www.haskell.org/pipermail/libraries/2008-March/009416.html
Although that sounds desirable, it's not true, as the reply and
experiments indicate.
* the `cabal copy` command:
???: Not sure how you're supposed to use this. E.g., when I do
cabal install --prefix=/tmp/git-annex-install
cabal copy --deistdir=/tmp/git-annex-copy
I get the copy under
/tmp/git-annex-copy/tmp/git-annex-install
Also, `cabal install` fails when given a relative --prefix.
This works with `cabal-dev install .`, but `cabal sdist` does not yet
include the man pages (tried adding a `make $(mans)` before `cabal
sdist` in `make sdist`, but no luck).
XXX: Need to go back and replace spaces with tabs.
Don't check if configure indicated checks won't work. This should fix a
FTBFS on mipsel, where configure correctly detects the checks won't work,
while garbage is returned for disk space info at git-annex runtime. It also
means that, when built via cabal, disk space checks are not enabled,
unfortunatly.
Rather than running make, which runs configure, let Setup.hs just include
the configure code. The standalone configure is retained for use by the
Makefile.
This may work better with cabal-dev, since it avoids the Makefile running
ghc, and lets cabal handle all the compiler running, with whatever
flags it uses to expose dependencies.
This is substantially slower than using make, does not build or install
documentation, does not run the test suite, and is not particularly
recommended, but could be useful to some.