tools: adapt makefile for cabal-file-th, builds now happen from package dirs
This commit is contained in:
parent
959d8a4591
commit
df7fc8877f
232
Makefile
232
Makefile
@ -33,12 +33,12 @@ PACKAGES=\
|
|||||||
hledger-vty \
|
hledger-vty \
|
||||||
hledger-chart
|
hledger-chart
|
||||||
INCLUDEPATHS=\
|
INCLUDEPATHS=\
|
||||||
-ihledger-lib \
|
-i../hledger-lib \
|
||||||
-ihledger \
|
-i../hledger \
|
||||||
-ihledger-web \
|
-i../hledger-web \
|
||||||
-ihledger-vty \
|
-i../hledger-vty \
|
||||||
-ihledger-chart
|
-i../hledger-chart
|
||||||
MAIN=hledger/hledger-cli.hs
|
MAIN=hledger-cli.hs
|
||||||
|
|
||||||
# all source files in the project (plus a few strays like Setup.hs & hlint.hs)
|
# all source files in the project (plus a few strays like Setup.hs & hlint.hs)
|
||||||
SOURCEFILES:= \
|
SOURCEFILES:= \
|
||||||
@ -130,6 +130,12 @@ build: allcabalbuild
|
|||||||
# set version numbers and cabal test all hledger packages
|
# set version numbers and cabal test all hledger packages
|
||||||
cabaltest: allcabaltest
|
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
|
# run a cabal command in all hledger package dirs
|
||||||
allcabal%:
|
allcabal%:
|
||||||
for p in $(PACKAGES); do (echo doing cabal $* in $$p; cd $$p; cabal $*; echo); done
|
for p in $(PACKAGES); do (echo doing cabal $* in $$p; cd $$p; cabal $*; echo); done
|
||||||
@ -138,34 +144,118 @@ allcabal%:
|
|||||||
all%:
|
all%:
|
||||||
for p in $(PACKAGES); do (echo doing $* in $$p; cd $$p; $*); done
|
for p in $(PACKAGES); do (echo doing $* in $$p; cd $$p; $*); done
|
||||||
|
|
||||||
# auto-recompile and run (something, eg unit tests) whenever a module changes.
|
# auto-recompile and run (something, eg --help or unit tests) whenever a module changes
|
||||||
autotest: sp
|
|
||||||
rm -f bin/hledger
|
|
||||||
$(AUTOBUILD) $(MAIN) -o bin/hledger -ihledger $(BUILDFLAGS) --run test
|
|
||||||
|
|
||||||
# as above for add-on programs
|
auto: sp
|
||||||
autoweb: sp linkhledgerwebdir
|
rm -f bin/hledger
|
||||||
|
cd hledger; $(AUTOBUILD) $(MAIN) -o ../bin/hledger $(BUILDFLAGS) --run test
|
||||||
|
|
||||||
|
autoweb: sp
|
||||||
rm -f bin/hledger-web
|
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
|
autovty: sp
|
||||||
rm -f bin/hledger-vty
|
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
|
autochart: sp
|
||||||
rm -f bin/hledger-chart
|
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.
|
# check for sp and explain how to get it if not found.
|
||||||
sp:
|
sp:
|
||||||
@/usr/bin/env which sp >/dev/null || \
|
@/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)
|
(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
|
hledgerall: bin/hledger hledger-web hledger-vty hledger-chart
|
||||||
# use the in-development hledger-web support files. Cf Hledger.Web.Settings:
|
|
||||||
HLEDGERDATADIR:=.hledger
|
# force a compile even if binary exists, since we don't specify dependencies
|
||||||
linkhledgerwebdir:
|
.PHONY: bin/hledger hledger-web hledger-vty hledger-chart
|
||||||
mkdir -p $(HLEDGERDATADIR); ln -sf ../hledger-web/$(HLEDGERDATADIR)/web $(HLEDGERDATADIR)/web
|
|
||||||
|
# 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
|
# build the standalone unit test runner. Requires test-framework, which
|
||||||
# may not work on windows.
|
# may not work on windows.
|
||||||
@ -217,108 +307,6 @@ set-up-rc-repo:
|
|||||||
# OLD PRE PKG SPLIT
|
# 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
|
# TESTING
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user