mirror of
https://github.com/simonmichael/hledger.git
synced 2024-09-19 10:17:35 +03:00
tools: makefile updates & cleanups
This commit is contained in:
parent
e701c2b1cb
commit
97a8ed23df
99
Makefile
99
Makefile
@ -3,8 +3,8 @@
|
|||||||
# ghc 6.12 executables need a locale
|
# ghc 6.12 executables need a locale
|
||||||
export LANG=en_US.UTF-8
|
export LANG=en_US.UTF-8
|
||||||
|
|
||||||
# command line to run during "make prof" and "make heap"
|
# command to run during "make prof" and "make heap"
|
||||||
PROFCMD=bin/hledgerp balance -f data/100x100x10.journal >/dev/null
|
PROFCMD=bin/hledgerp balance -f data/1000x1000x10.journal >/dev/null
|
||||||
#PROFCMD=bin/hledgerp balance >/dev/null
|
#PROFCMD=bin/hledgerp balance >/dev/null
|
||||||
|
|
||||||
#PROFRTSFLAGS=-p
|
#PROFRTSFLAGS=-p
|
||||||
@ -17,7 +17,7 @@ COVCMD=test
|
|||||||
# or in the current directory. hledger executables for benchmarking should
|
# or in the current directory. hledger executables for benchmarking should
|
||||||
# generally be the standard optimised cabal build, constrained to parsec 2.
|
# generally be the standard optimised cabal build, constrained to parsec 2.
|
||||||
BENCHEXES=hledger-0.12.1 hledger-0.13 hledger-0.14 hledger-0.15 hledger-0.16 hledger-0.17 hledger-0.18 hledgeropt ledger
|
BENCHEXES=hledger-0.12.1 hledger-0.13 hledger-0.14 hledger-0.15 hledger-0.16 hledger-0.17 hledger-0.18 hledgeropt ledger
|
||||||
BENCHEXES=hledger-0.18 hledger ledger
|
BENCHEXES=hledger-0.18 hledgeropt ledger
|
||||||
|
|
||||||
# misc. tools
|
# misc. tools
|
||||||
BROWSE=google-chrome
|
BROWSE=google-chrome
|
||||||
@ -69,49 +69,51 @@ WEBFILES:= \
|
|||||||
DOCFILES:= \
|
DOCFILES:= \
|
||||||
*.md
|
*.md
|
||||||
|
|
||||||
LASTTAG:=$(shell darcs show tags | head -1)
|
|
||||||
PATCHLEVEL:=$(shell expr `darcs changes --count --from-tag=\\\\\.` - 1)
|
|
||||||
WARNINGS:=-W -fwarn-tabs -fno-warn-name-shadowing #-fwarn-orphans -fwarn-simple-patterns -fwarn-monomorphism-restriction
|
|
||||||
PREFERMACUSRLIBFLAGS=-L/usr/lib
|
|
||||||
GHCMEMFLAGS= #+RTS -M200m -RTS
|
|
||||||
BUILDFLAGS1:=-rtsopts -DMAKE -DPATCHLEVEL=$(PATCHLEVEL) $(WARNINGS) $(INCLUDEPATHS) $(PREFERMACUSRLIBFLAGS) $(GHCMEMFLAGS) $(HCFLAGS)
|
|
||||||
BUILDFLAGS:=$(BUILDFLAGS1) -DVERSION='"$(LASTTAG)"'
|
|
||||||
AUTOBUILDFLAGS:=$(BUILDFLAGS1) -DVERSION='\"$(LASTTAG)\"' # different quoting for sp
|
|
||||||
PROFBUILDFLAGS:=-prof -osuf hs_p #-prof-auto
|
|
||||||
LINUXRELEASEBUILDFLAGS:=-DMAKE $(WARNINGS) $(INCLUDEPATHS) -O2 -static -optl-static -optl-pthread
|
|
||||||
MACRELEASEBUILDFLAGS:=-DMAKE $(WARNINGS) $(INCLUDEPATHS) $(PREFERMACUSRLIBFLAGS) -O2 # -optl-L/usr/lib
|
|
||||||
#WINDOWSRELEASEBUILDFLAGS:=-DMAKE $(WARNINGS) $(INCLUDEPATHS)
|
|
||||||
TIME:=$(shell date +"%Y%m%d%H%M")
|
|
||||||
|
|
||||||
# searchpath executable used for automatic recompilation, http://joyful.com/repos/searchpath
|
|
||||||
GHC=ghc
|
|
||||||
AUTOBUILD=sp --no-exts --no-default-map $(GHC) --make -O0 $(GHCMEMFLAGS)
|
|
||||||
|
|
||||||
# file defining the current release version
|
|
||||||
VERSIONFILE=VERSION
|
|
||||||
# two or three-part version string, whatever's in VERSION
|
|
||||||
VERSION:=$(shell grep -v '^--' $(VERSIONFILE))
|
|
||||||
# three-part version string, 0-padded if necessary
|
|
||||||
ifeq ($(shell ghc -e "length (filter (=='.') \"$(VERSION)\")"), 1)
|
|
||||||
VERSION3:=$(VERSION).0
|
|
||||||
else
|
|
||||||
VERSION3:=$(VERSION)
|
|
||||||
endif
|
|
||||||
# files which should be updated when the version changes
|
# files which should be updated when the version changes
|
||||||
VERSIONSENSITIVEFILES=\
|
VERSIONSENSITIVEFILES=\
|
||||||
$(CABALFILES) \
|
$(CABALFILES) \
|
||||||
MANUAL.md \
|
MANUAL.md \
|
||||||
# DOWNLOAD.md \
|
# DOWNLOAD.md \
|
||||||
# source file which should be touched to ensure up to date version string
|
|
||||||
VERSIONHS=hledger/Hledger/Cli/Version.hs
|
|
||||||
|
|
||||||
# get an accurate binary filename from the current source on the current platform
|
# file(s) which require recompilation for a build to have an up-to-date version string
|
||||||
# nb not := as that would break the makefile when hledger is not compiling.
|
VERSIONSOURCEFILE=hledger/Hledger/Cli/Version.hs
|
||||||
BINARYFILENAME=$(shell touch $(VERSIONHS); runhaskell -ihledger -ihledger-lib $(MAIN) --binary-filename)
|
|
||||||
|
|
||||||
RELEASEBINARYSUFFIX:=$(shell echo "-$(VERSION)-`uname`-`arch`" | tr '[:upper:]' '[:lower:]')
|
# master file defining the current release/build version
|
||||||
|
VERSIONFILE=VERSION
|
||||||
|
|
||||||
default: bin/hledgerdev
|
# two or three-part version string, whatever's in VERSION
|
||||||
|
VERSION:=$(shell cat $(VERSIONFILE))
|
||||||
|
|
||||||
|
# the number of changes recorded since last tag in this repo
|
||||||
|
PATCHLEVEL:=$(shell expr `darcs changes --count --from-tag=\\\\\.` - 1)
|
||||||
|
|
||||||
|
# build flags
|
||||||
|
WARNINGS:=-W -fwarn-tabs -fno-warn-name-shadowing #-fwarn-orphans -fwarn-simple-patterns -fwarn-monomorphism-restriction
|
||||||
|
PREFERMACUSRLIBFLAGS=-L/usr/lib
|
||||||
|
GHCMEMFLAGS= #+RTS -M200m -RTS
|
||||||
|
BUILDFLAGS1:=-rtsopts $(WARNINGS) $(INCLUDEPATHS) $(PREFERMACUSRLIBFLAGS) $(GHCMEMFLAGS) -DPATCHLEVEL=$(PATCHLEVEL)
|
||||||
|
BUILDFLAGS:=$(BUILDFLAGS1) -DVERSION='"$(VERSION)"'
|
||||||
|
AUTOBUILDFLAGS:=$(BUILDFLAGS1) -DVERSION='\"$(VERSION)\"' # different quoting for sp
|
||||||
|
PROFBUILDFLAGS:=-prof -fprof-auto -osuf hs_p
|
||||||
|
LINUXRELEASEBUILDFLAGS:=-DMAKE $(WARNINGS) $(INCLUDEPATHS) -O2 -static -optl-static -optl-pthread
|
||||||
|
MACRELEASEBUILDFLAGS:=-DMAKE $(WARNINGS) $(INCLUDEPATHS) $(PREFERMACUSRLIBFLAGS) -O2 # -optl-L/usr/lib
|
||||||
|
#WINDOWSRELEASEBUILDFLAGS:=-DMAKE $(WARNINGS) $(INCLUDEPATHS)
|
||||||
|
|
||||||
|
# searchpath executable used for automatic recompilation, http://joyful.com/repos/searchpath
|
||||||
|
AUTOBUILD=sp --no-exts --no-default-map $(GHC) --make -O0 $(GHCMEMFLAGS)
|
||||||
|
GHC=ghc
|
||||||
|
|
||||||
|
# get an accurate binary filename for the current source and platform, slow but reliable. Avoid := here.
|
||||||
|
BINARYFILENAME=$(shell touch $(VERSIONSOURCEFILE); runhaskell -ihledger -ihledger-lib $(MAIN) --binary-filename)
|
||||||
|
|
||||||
|
# some other thing for linux binary filenames
|
||||||
|
RELEASEBINARYSUFFIX=$(shell echo "-$(VERSION)-`uname`-`arch`" | tr '[:upper:]' '[:lower:]')
|
||||||
|
|
||||||
|
TIME:=$(shell date +"%Y%m%d%H%M")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
defaulttarget: bin/hledgerdev
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# BUILDING
|
# BUILDING
|
||||||
@ -174,7 +176,7 @@ bin/hledgeropt:
|
|||||||
|
|
||||||
# build the time profiling binary. cabal install --reinstall -p some libs may be required.
|
# build the time profiling binary. cabal install --reinstall -p some libs may be required.
|
||||||
bin/hledgerp:
|
bin/hledgerp:
|
||||||
ghc --make $(MAIN) -o $@ $(BUILDFLAGS) $(PROFBUILDFLAGS)
|
ghc --make $(BUILDFLAGS) $(PROFBUILDFLAGS) $(MAIN) -o $@
|
||||||
|
|
||||||
# build the heap profiling binary for coverage reports and heap profiles.
|
# build the heap profiling binary for coverage reports and heap profiles.
|
||||||
# Keep these .o files separate from the regular ones.
|
# Keep these .o files separate from the regular ones.
|
||||||
@ -195,6 +197,10 @@ linuxbinaries: linuxbinary-hledger \
|
|||||||
@echo 'Please check the binaries look portable, then make compressbinaries:'
|
@echo 'Please check the binaries look portable, then make compressbinaries:'
|
||||||
-file bin/*`arch`
|
-file bin/*`arch`
|
||||||
|
|
||||||
|
# work around for inconsistently-named (why ?) hledger/hledger-cli.hs
|
||||||
|
linuxbinary-hledger:
|
||||||
|
ghc --make hledger/hledger-cli.hs -o bin/$*$(RELEASEBINARYSUFFIX) $(LINUXRELEASEBUILDFLAGS)
|
||||||
|
|
||||||
linuxbinary-%:
|
linuxbinary-%:
|
||||||
ghc --make $*/$*.hs -o bin/$*$(RELEASEBINARYSUFFIX) $(LINUXRELEASEBUILDFLAGS)
|
ghc --make $*/$*.hs -o bin/$*$(RELEASEBINARYSUFFIX) $(LINUXRELEASEBUILDFLAGS)
|
||||||
|
|
||||||
@ -385,7 +391,7 @@ quickbench: samplejournals bench.tests tools/simplebench
|
|||||||
|
|
||||||
# run simple performance benchmarks and archive results
|
# run simple performance benchmarks and archive results
|
||||||
# Requires some commands defined in bench.tests and some BENCHEXES defined above.
|
# Requires some commands defined in bench.tests and some BENCHEXES defined above.
|
||||||
simplebench: samplejournals bench.tests tools/simplebench
|
bench: samplejournals bench.tests tools/simplebench
|
||||||
tools/simplebench -fbench.tests $(BENCHEXES) | tee profs/$(TIME).bench
|
tools/simplebench -fbench.tests $(BENCHEXES) | tee profs/$(TIME).bench
|
||||||
@rm -f benchresults.*
|
@rm -f benchresults.*
|
||||||
@(cd profs; rm -f latest.bench; ln -s $(TIME).bench latest.bench)
|
@(cd profs; rm -f latest.bench; ln -s $(TIME).bench latest.bench)
|
||||||
@ -718,11 +724,13 @@ hledger-lib/hledger-lib.cabal: $(VERSIONFILE)
|
|||||||
hledger/hledger.cabal: $(VERSIONFILE)
|
hledger/hledger.cabal: $(VERSIONFILE)
|
||||||
perl -p -e "s/(^ *version:) *.*/\1 $(VERSION)/" -i $@
|
perl -p -e "s/(^ *version:) *.*/\1 $(VERSION)/" -i $@
|
||||||
perl -p -e "s/(^[ ,]*hledger-lib *[>=]=) *.*/\1 $(VERSION)/" -i $@
|
perl -p -e "s/(^[ ,]*hledger-lib *[>=]=) *.*/\1 $(VERSION)/" -i $@
|
||||||
|
perl -p -e "s/(-DVERSION=\")[^\"]+/\$${1}$(VERSION)/" -i $@
|
||||||
|
|
||||||
hledger-web/hledger-web.cabal: $(VERSIONFILE)
|
hledger-web/hledger-web.cabal: $(VERSIONFILE)
|
||||||
perl -p -e "s/(^ *version:) *.*/\1 $(VERSION)/" -i $@
|
perl -p -e "s/(^ *version:) *.*/\1 $(VERSION)/" -i $@
|
||||||
perl -p -e "s/(^[ ,]*hledger *[>=]=) *.*/\1 $(VERSION)/" -i $@
|
perl -p -e "s/(^[ ,]*hledger *[>=]=) *.*/\1 $(VERSION)/" -i $@
|
||||||
perl -p -e "s/(^[ ,]*hledger-lib *[>=]=) *.*/\1 $(VERSION)/" -i $@
|
perl -p -e "s/(^[ ,]*hledger-lib *[>=]=) *.*/\1 $(VERSION)/" -i $@
|
||||||
|
perl -p -e "s/(-DVERSION=\")[^\"]+/\$${1}$(VERSION)/" -i $@
|
||||||
|
|
||||||
MANUAL.md: $(VERSIONFILE)
|
MANUAL.md: $(VERSIONFILE)
|
||||||
perl -p -e "s/(^This is the.*?manual.*? for hledger.*?) +[0-9.]+/\1 $(VERSION)./" -i $@
|
perl -p -e "s/(^This is the.*?manual.*? for hledger.*?) +[0-9.]+/\1 $(VERSION)./" -i $@
|
||||||
@ -749,14 +757,16 @@ push: pushprofs # pushlatestbinary
|
|||||||
pull: pullprofs
|
pull: pullprofs
|
||||||
darcs pull -a simon@joyful.com:/repos/hledger
|
darcs pull -a simon@joyful.com:/repos/hledger
|
||||||
|
|
||||||
|
RSYNC=rsync
|
||||||
|
|
||||||
# push any new profiles and benchmark results to the public site
|
# push any new profiles and benchmark results to the public site
|
||||||
# beware, results will vary depending on which machine generated them
|
# beware, results will vary depending on which machine generated them
|
||||||
pushprofs:
|
pushprofs:
|
||||||
rsync -azP profs/ simon@joyful.com:/repos/hledger/profs/
|
$(RSYNC) -azP profs/ simon@joyful.com:/repos/hledger/profs/
|
||||||
|
|
||||||
# fetch any new profiles and benchmark results from the public site
|
# fetch any new profiles and benchmark results from the public site
|
||||||
pullprofs:
|
pullprofs:
|
||||||
rsync -azP simon@joyful.com:/repos/hledger/profs/ profs/
|
$(RSYNC) -azP simon@joyful.com:/repos/hledger/profs/ profs/
|
||||||
|
|
||||||
# compress the just-built platform binary. make hledgerPLATFORM first. Use
|
# compress the just-built platform binary. make hledgerPLATFORM first. Use
|
||||||
# the win variant on windows.
|
# the win variant on windows.
|
||||||
@ -765,7 +775,6 @@ compressbinary:
|
|||||||
compressbinarywin:
|
compressbinarywin:
|
||||||
cd bin; zip -9 $(BINARYFILENAME).zip $(BINARYFILENAME)
|
cd bin; zip -9 $(BINARYFILENAME).zip $(BINARYFILENAME)
|
||||||
|
|
||||||
RSYNC=rsync -e 'ssh -p 5022'
|
|
||||||
# push the last-updated platform binary to the public download directory
|
# push the last-updated platform binary to the public download directory
|
||||||
pushlatestbinary:
|
pushlatestbinary:
|
||||||
cd bin; $(RSYNC) -aP `ls -t | head -2` simon@joyful.com:/repos/hledger/site/download/
|
cd bin; $(RSYNC) -aP `ls -t | head -2` simon@joyful.com:/repos/hledger/site/download/
|
||||||
@ -823,12 +832,12 @@ showunittestcoverage:
|
|||||||
# @awk '/^** errors/, /^** / && !/^** errors/' NOTES.org | grep '^\*\*\* ' | tail +1
|
# @awk '/^** errors/, /^** / && !/^** errors/' NOTES.org | grep '^\*\*\* ' | tail +1
|
||||||
# @echo
|
# @echo
|
||||||
|
|
||||||
showunpushedchanges unpushed:
|
showunpushedchanges showunpushed:
|
||||||
@echo "Changes not yet pushed upstream (to `darcs show repo | grep 'Default Remote' | cut -c 17-`):"
|
@echo "Changes not yet pushed upstream (to `darcs show repo | grep 'Default Remote' | cut -c 17-`):"
|
||||||
@-darcs push simon@joyful.com:/repos/hledger --dry-run | grep '*' | tac
|
@-darcs push simon@joyful.com:/repos/hledger --dry-run | grep '*' | tac
|
||||||
@echo
|
@echo
|
||||||
|
|
||||||
showunreleasedcodechanges unreleased:
|
showunreleasedcodechanges showunreleased showchanges:
|
||||||
@echo "hledger code changes since last release:"
|
@echo "hledger code changes since last release:"
|
||||||
@darcs changes --from-tag $(FROMTAG) --matches "not (name docs: or name doc: or name site: or name tools:)" | grep '*'
|
@darcs changes --from-tag $(FROMTAG) --matches "not (name docs: or name doc: or name site: or name tools:)" | grep '*'
|
||||||
@echo
|
@echo
|
||||||
|
Loading…
Reference in New Issue
Block a user