tools: adapt makefile for cabal-file-th, builds now happen from package dirs

This commit is contained in:
Simon Michael 2011-10-19 19:55:01 +00:00
parent 959d8a4591
commit df7fc8877f

232
Makefile
View File

@ -33,12 +33,12 @@ PACKAGES=\
hledger-vty \
hledger-chart
INCLUDEPATHS=\
-ihledger-lib \
-ihledger \
-ihledger-web \
-ihledger-vty \
-ihledger-chart
MAIN=hledger/hledger-cli.hs
-i../hledger-lib \
-i../hledger \
-i../hledger-web \
-i../hledger-vty \
-i../hledger-chart
MAIN=hledger-cli.hs
# all source files in the project (plus a few strays like Setup.hs & hlint.hs)
SOURCEFILES:= \
@ -130,6 +130,12 @@ build: allcabalbuild
# set version numbers and cabal test all hledger packages
cabaltest: allcabaltest
installdepsdry:
for p in $(PACKAGES); do (echo "$$p: cabal install --only-dependencies --dry"; cd $$p; cabal install --only-dependencies --dry); done
installdeps:
for p in $(PACKAGES); do (echo "$$p: cabal install --only-dependencies"; cd $$p; cabal install --only-dependencies); done
# run a cabal command in all hledger package dirs
allcabal%:
for p in $(PACKAGES); do (echo doing cabal $* in $$p; cd $$p; cabal $*; echo); done
@ -138,34 +144,118 @@ allcabal%:
all%:
for p in $(PACKAGES); do (echo doing $* in $$p; cd $$p; $*); done
# auto-recompile and run (something, eg unit tests) whenever a module changes.
autotest: sp
rm -f bin/hledger
$(AUTOBUILD) $(MAIN) -o bin/hledger -ihledger $(BUILDFLAGS) --run test
# auto-recompile and run (something, eg --help or unit tests) whenever a module changes
# as above for add-on programs
autoweb: sp linkhledgerwebdir
auto: sp
rm -f bin/hledger
cd hledger; $(AUTOBUILD) $(MAIN) -o ../bin/hledger $(BUILDFLAGS) --run test
autoweb: sp
rm -f bin/hledger-web
$(AUTOBUILD) hledger-web/hledger-web.hs -o bin/hledger-web -ihledger-web -ihledger $(BUILDFLAGS) --run #-f test.journal
cd hledger-web; $(AUTOBUILD) hledger-web.hs -o ../bin/hledger-web $(BUILDFLAGS) -DPRODUCTION=1 --run -B #-f test.journal
autovty: sp
rm -f bin/hledger-vty
$(AUTOBUILD) hledger-vty/hledger-vty.hs -o bin/hledger-vty -ihledger-vty -ihledger $(BUILDFLAGS) --run --help
cd hledger-vty; $(AUTOBUILD) hledger-vty.hs -o ../bin/hledger-vty $(BUILDFLAGS) --run --help
autochart: sp
rm -f bin/hledger-chart
$(AUTOBUILD) hledger-chart/hledger-chart.hs -o bin/hledger-chart -ihledger-chart -ihledger $(BUILDFLAGS) --run --help
cd hledger-chart; $(AUTOBUILD) hledger-chart.hs -o ../bin/hledger-chart $(BUILDFLAGS) --run --help
# check for sp and explain how to get it if not found.
sp:
@/usr/bin/env which sp >/dev/null || \
(echo '"sp" is required for auto-compilation. darcs get http://joyful.com/repos/searchpath, make it and add it to your PATH'; exit 1)
# make symlinks so that running hledger-web from the top directory will
# use the in-development hledger-web support files. Cf Hledger.Web.Settings:
HLEDGERDATADIR:=.hledger
linkhledgerwebdir:
mkdir -p $(HLEDGERDATADIR); ln -sf ../hledger-web/$(HLEDGERDATADIR)/web $(HLEDGERDATADIR)/web
hledgerall: bin/hledger hledger-web hledger-vty hledger-chart
# force a compile even if binary exists, since we don't specify dependencies
.PHONY: bin/hledger hledger-web hledger-vty hledger-chart
# build hledger binary as quickly as possible
bin/hledger:
cd hledger; ghc --make $(MAIN) -o ../bin/hledger $(BUILDFLAGS)
# build the fastest binary we can
hledgeropt:
cd hledger; ghc --make $(MAIN) -o bin/hledgeropt $(BUILDFLAGS) -O2 # -fvia-C # -fexcess-precision -optc-O3 -optc-ffast-math
# build the time profiling binary. cabal install --reinstall -p some libs may be required.
hledgerp:
cd hledger; ghc --make $(MAIN) -prof -auto-all -o ../bin/hledgerp $(BUILDFLAGS)
# build the heap profiling binary for coverage reports and heap profiles.
# Keep these .o files separate from the regular ones.
hledgerhpc:
cd hledger; ghc --make $(MAIN) -fhpc -o ../bin/hledgerhpc -outputdir .hledgerhpcobjs $(BUILDFLAGS)
# build other executables quickly
bin/hledger-web:
cd hledger-web; ghc --make hledger-web.hs -o ../bin/hledger-web $(BUILDFLAGS)
bin/hledger-web-production:
cd hledger-web; ghc --make hledger-web.hs -o ../$@ $(BUILDFLAGS) -DPRODUCTION
bin/hledger-vty:
cd hledger-vty; ghc --make hledger-vty.hs -o ../bin/hledger-vty $(BUILDFLAGS)
bin/hledger-chart:
cd hledger-chart; ghc --make hledger-chart.hs -o ../bin/hledger-chart $(BUILDFLAGS)
# build portable releaseable binaries for gnu/linux
linuxbinaries: linuxbinary-hledger \
linuxbinary-hledger-web \
linuxbinary-hledger-vty \
linuxbinary-hledger-chart
@echo 'Please check the binaries look portable, then make compressbinaries:'
-file bin/*`arch`
linuxbinary-%:
ghc --make $*/$*.hs -o bin/$*$(RELEASEBINARYSUFFIX) $(LINUXRELEASEBUILDFLAGS)
# XXX link errors
linuxbinary-hledger-chart:
ghc --make hledger-chart/hledger-chart.hs -o bin/hledger-chart$(RELEASEBINARYSUFFIX) $(LINUXRELEASEBUILDFLAGS) -lpixman-1 -v
macbinaries: macbinary-hledger \
macbinary-hledger-vty \
macbinary-hledger-web \
macbinary-hledger-chart
@echo 'Please check the binaries are portable, then make compressbinaries'
otool -L bin/*`arch`
# build a deployable mac binary for the specified hledger package, munging
# the link command to use only standard osx libs. Specifically we link
# without the non-standard GMP framework, which causes no apparent harm.
# Clunky, does the link twice.
macbinary-%:
BINARY=`echo $(BINARYFILENAME) | sed -e 's/hledger/$*/'` ; \
LINKCMD=`cd $* && ghc -v --make $*.hs $(MACRELEASEBUILDFLAGS) -o ../bin/$$BINARY 2>&1 | egrep "bin/gcc.*bin/$$BINARY"` ; \
PORTABLELINKCMD=`echo $$LINKCMD | sed -e 's/ -framework GMP//'` ; \
echo $$PORTABLELINKCMD; $$PORTABLELINKCMD
# Run this on a windows machine or in a wine session, and probably in a
# separate copy of the repo (hledger-win).
# Builds and gather deployable binaries for windows, if cygwin tools are
# present and all packages are buildable. Otherwise, cabal install each
# package and gather the binaries by hand.
windowsbinaries: install
cp ~/.cabal/bin/hledger.exe bin/`echo $(BINARYFILENAME) | dos2unix`
-cp ~/.cabal/bin/hledger-web.exe bin/`echo $(BINARYFILENAME) | sed -e 's/hledger/hledger-web/' | dos2unix`
-cp ~/.cabal/bin/hledger-vty.exe bin/`echo $(BINARYFILENAME) | sed -e 's/hledger/hledger-vty/' | dos2unix`
-cp ~/.cabal/bin/hledger-chart.exe bin/`echo $(BINARYFILENAME) | sed -e 's/hledger/hledger-chart/' | dos2unix`
@echo 'Please check the binaries are portable, then make compressbinaries'
ls -l bin/*`arch`
# One way to get a wine command prompt
wine:
wineconsole cmd.exe &
compressbinaries:
cd bin; for f in *-windows-*.exe ; do echo zipping $$f; rm -f $$f.zip; zip $$f.zip $$f; done
# for f in bin/*-{linux,mac-}* ; do echo gzipping $$f; gzip -q $$f >$$f.gz; done
# gzip bin/*`arch`
# build the standalone unit test runner. Requires test-framework, which
# may not work on windows.
@ -217,108 +307,6 @@ set-up-rc-repo:
# OLD PRE PKG SPLIT
######################################################################
######################################################################
# BUILDING
hledgerall: bin/hledger hledger-web hledger-vty hledger-chart
# force a compile even if binary exists, since we don't specify dependencies
.PHONY: bin/hledger hledger-web hledger-vty hledger-chart
# build developer binaries, as quickly as possible
# this one is named bin/ to avoid case clash on mac
bin/hledger:
ghc --make $(MAIN) -o bin/hledger $(BUILDFLAGS)
bin/hledger-web:
ghc --make hledger-web/hledger-web.hs -o bin/hledger-web -ihledger-web -ihledger $(BUILDFLAGS)
bin/hledger-web-production:
ghc --make hledger-web/hledger-web.hs -o $@ -ihledger-web -ihledger $(BUILDFLAGS) -DPRODUCTION
bin/hledger-vty:
ghc --make hledger-vty/hledger-vty.hs -o bin/hledger-vty -ihledger-vty -ihledger $(BUILDFLAGS)
bin/hledger-chart:
ghc --make hledger-chart/hledger-chart.hs -o bin/hledger-chart -ihledger-chart -ihledger $(BUILDFLAGS)
hledgernowarnings:
ghc --make $(MAIN) -o bin/hledger $(BUILDFLAGS) -Werror -v0
# build the profiling-enabled binary. You may need to cabal install
# --reinstall -p some libs.
hledgerp:
ghc --make $(MAIN) -prof -auto-all -o bin/hledgerp $(BUILDFLAGS)
# build the -fhpc hledger binary used for coverage reports and heap profiles.
# The associated .o files are kept separate from the regular ones.
hledgerhpc:
ghc --make $(MAIN) -fhpc -o bin/hledgerhpc -outputdir .hledgerhpcobjs $(BUILDFLAGS)
# build the fastest binary we can
hledgeropt:
ghc --make $(MAIN) -o bin/hledgeropt $(BUILDFLAGS) -O2 # -fvia-C # -fexcess-precision -optc-O3 -optc-ffast-math
# build portable releaseable binaries for gnu/linux
linuxbinaries: linuxbinary-hledger \
linuxbinary-hledger-web \
linuxbinary-hledger-vty \
linuxbinary-hledger-chart
@echo 'Please check the binaries look portable, then make compressbinaries:'
-file bin/*`arch`
linuxbinary-%:
ghc --make $*/$*.hs -o bin/$*$(RELEASEBINARYSUFFIX) $(LINUXRELEASEBUILDFLAGS)
# XXX link errors
linuxbinary-hledger-chart:
ghc --make hledger-chart/hledger-chart.hs -o bin/hledger-chart$(RELEASEBINARYSUFFIX) $(LINUXRELEASEBUILDFLAGS) -lpixman-1 -v
macbinaries: macbinary-hledger \
macbinary-hledger-vty \
macbinary-hledger-web \
macbinary-hledger-chart
@echo 'Please check the binaries are portable, then make compressbinaries'
otool -L bin/*`arch`
# build a deployable mac binary for the specified hledger package, munging
# the link command to use only standard osx libs. Specifically we link
# without the non-standard GMP framework, which causes no apparent harm.
# Clunky, does the link twice.
macbinary-%:
BINARY=`echo $(BINARYFILENAME) | sed -e 's/hledger/$*/'` ; \
LINKCMD=`ghc -v --make $*/$*.hs $(MACRELEASEBUILDFLAGS) -o bin/$$BINARY 2>&1 | egrep "bin/gcc.*bin/$$BINARY"` ; \
PORTABLELINKCMD=`echo $$LINKCMD | sed -e 's/ -framework GMP//'` ; \
echo $$PORTABLELINKCMD; $$PORTABLELINKCMD
# Run this on a windows machine or in a wine session, and probably in a
# separate copy of the repo (hledger-win).
# Builds and gather deployable binaries for windows, if cygwin tools are
# present and all packages are buildable. Otherwise, cabal install each
# package and gather the binaries by hand.
windowsbinaries: install
cp ~/.cabal/bin/hledger.exe bin/`echo $(BINARYFILENAME) | dos2unix`
-cp ~/.cabal/bin/hledger-web.exe bin/`echo $(BINARYFILENAME) | sed -e 's/hledger/hledger-web/' | dos2unix`
-cp ~/.cabal/bin/hledger-vty.exe bin/`echo $(BINARYFILENAME) | sed -e 's/hledger/hledger-vty/' | dos2unix`
-cp ~/.cabal/bin/hledger-chart.exe bin/`echo $(BINARYFILENAME) | sed -e 's/hledger/hledger-chart/' | dos2unix`
@echo 'Please check the binaries are portable, then make compressbinaries'
ls -l bin/*`arch`
# One way to get a wine command prompt
wine:
wineconsole cmd.exe &
compressbinaries:
cd bin; for f in *-windows-*.exe ; do echo zipping $$f; rm -f $$f.zip; zip $$f.zip $$f; done
# for f in bin/*-{linux,mac-}* ; do echo gzipping $$f; gzip -q $$f >$$f.gz; done
# gzip bin/*`arch`
# gzip-%:
# gzip $* >$*.gz
# zip-%:
# zip $*.zip $*
######################################################################
# TESTING